| 8 | #include <QToolButton> |
| 9 | |
| 10 | SearchEngineLineEdit::SearchEngineLineEdit(QWidget *parent) : |
| 11 | QLineEdit(parent) |
| 12 | { |
| 13 | // Set minimum width and size policy |
| 14 | setMinimumWidth(parent->width() / 5); |
| 15 | |
| 16 | QSizePolicy policy = sizePolicy(); |
| 17 | setSizePolicy(QSizePolicy::Preferred, policy.verticalPolicy()); |
| 18 | |
| 19 | // Setup search button |
| 20 | m_searchButton = new QToolButton(this); |
| 21 | m_searchButton->setPopupMode(QToolButton::InstantPopup); |
| 22 | m_searchButton->setCursor(Qt::ArrowCursor); |
| 23 | m_searchButton->setToolTip(tr("Choose Search Engine")); |
| 24 | m_searchButton->setStyleSheet("QToolButton { border: none; padding: 0px; background-position: left center; " |
| 25 | "background-repeat: no-repeat; background-origin: content; background-image: url(\":/search_icon.png\"); }" |
| 26 | "QToolButton::menu-indicator { subcontrol-position: bottom right; subcontrol-origin: content; top: 3px; } "); |
| 27 | m_searchButton->setFixedWidth(28); |
| 28 | |
| 29 | // Set appearance |
| 30 | setStyleSheet(QString("QLineEdit { border: 1px solid #919191; border-radius: 2px; padding-left: %1px; margin-right: 3px; }" |
| 31 | "QLineEdit:focus { border: 1px solid #6c91ff; }").arg(m_searchButton->sizeHint().width() + 6)); |
| 32 | setPlaceholderText(tr("Search")); |
| 33 | |
| 34 | // Load search engines |
| 35 | loadSearchEngines(); |
| 36 | |
| 37 | // Set behavior of line edit |
| 38 | connect(this, &SearchEngineLineEdit::returnPressed, [=](){ |
| 39 | QString term = text(); |
| 40 | if (term.isNull() || term.isEmpty()) |
| 41 | return; |
| 42 | |
| 43 | HttpRequest request = SearchEngineManager::instance().getSearchRequest(term, m_currentEngineName); |
| 44 | emit requestPageLoad(request); |
| 45 | }); |
| 46 | |
| 47 | // Connect search engine manager's signals for search engines being added or removed to appropriate slots |
| 48 | SearchEngineManager *manager = &SearchEngineManager::instance(); |
| 49 | connect(manager, &SearchEngineManager::defaultEngineChanged, this, &SearchEngineLineEdit::setSearchEngine); |
| 50 | connect(manager, &SearchEngineManager::engineAdded, this, &SearchEngineLineEdit::addSearchEngine); |
| 51 | connect(manager, &SearchEngineManager::engineRemoved, this, &SearchEngineLineEdit::removeSearchEngine); |
| 52 | } |
| 53 | |
| 54 | void SearchEngineLineEdit::loadSearchEngines() |
| 55 | { |
nothing calls this directly
no test coverage detected