#include #include #include #include #include "core/defs.h" #include "core/settings.h" #include "gui/locationlineedit.h" LocationLineEdit::LocationLineEdit(QWidget *parent) : BaseLineEdit(parent), m_progress(0), m_defaultPalette(palette()), m_mouseSelectsAllText(true) { setPlaceholderText(tr("Website address goes here")); } LocationLineEdit::~LocationLineEdit() { } void LocationLineEdit::setProgress(int progress) { m_progress = progress; update(); } void LocationLineEdit::clearProgress() { setProgress(0); } void LocationLineEdit::focusOutEvent(QFocusEvent *event) { BaseLineEdit::focusOutEvent(event); // User now left text box, when he enters it again and clicks, // then all text should be selected. m_mouseSelectsAllText = true; } void LocationLineEdit::mousePressEvent(QMouseEvent *event) { if (m_mouseSelectsAllText) { event->ignore(); selectAll(); // User clicked and all text was selected. m_mouseSelectsAllText = false; } else { BaseLineEdit::mousePressEvent(event); } } void LocationLineEdit::paintEvent(QPaintEvent *event) { // Draw "progress bar" if needed. Settings *settings = Settings::getInstance(); if (m_progress > 0 && settings->value(APP_CFG_BROWSER, "browser_colored_progress_enabled", true).toBool()) { QPalette current_palette = palette(); QColor loadingColor = settings->value(APP_CFG_BROWSER, "browser_progress_color", QColor(0, 100, 0, 100)).value(); QLinearGradient gradient(0, 0, width(), 0); qreal percentage_border = m_progress / 100.0; // TODO: Use better gradient here, something fancy. gradient.setColorAt(0, loadingColor); gradient.setColorAt(percentage_border - 0.01, loadingColor); gradient.setColorAt(percentage_border - 0.008, loadingColor.lighter(130)); gradient.setColorAt(percentage_border, QApplication::palette().color(QPalette::Base)); current_palette.setBrush(QPalette::Base, gradient); setPalette(current_palette); } // No "progress bar" is needed or enabled, restore default palette. else { setPalette(m_defaultPalette); } BaseLineEdit::paintEvent(event); }