X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fsearchlineedit.cpp;h=5f3abd315c84be201d46ac277796c191e7f5563d;hb=434d88418722fd7717038e44bd74271ca1d92771;hp=bbd2fe59e67bcec474aebb2e83722498380e2fda;hpb=29f9a13b38a0547b70236d24300668385e1dbf6e;p=minitube diff --git a/src/searchlineedit.cpp b/src/searchlineedit.cpp index bbd2fe5..5f3abd3 100644 --- a/src/searchlineedit.cpp +++ b/src/searchlineedit.cpp @@ -2,129 +2,28 @@ #include "autocomplete.h" #include "iconutils.h" -class SearchButton : public QAbstractButton { +SearchLineEdit::SearchLineEdit(QWidget *parent) : QLineEdit(parent) { + setClearButtonEnabled(true); + setPlaceholderText(tr("Search")); -public: - SearchButton(QWidget *parent = 0); - QMenu *m_menu; - -protected: - void paintEvent(QPaintEvent *e); - void mousePressEvent(QMouseEvent *e); - -}; - -SearchButton::SearchButton(QWidget *parent) - : QAbstractButton(parent), - m_menu(0) { - setObjectName(QLatin1String("SearchButton")); - setCursor(Qt::ArrowCursor); - setFocusPolicy(Qt::NoFocus); -} - -void SearchButton::mousePressEvent(QMouseEvent *e) { - if (m_menu && e->button() == Qt::LeftButton) { - QWidget *p = parentWidget(); - if (p) { - QPoint r = p->mapToGlobal(QPoint(0, p->height())); - m_menu->exec(QPoint(r.x() + height() / 2, r.y())); - } - e->accept(); - } - QAbstractButton::mousePressEvent(e); -} - -void SearchButton::paintEvent(QPaintEvent *e) { - Q_UNUSED(e); - QPainter painter(this); - const int h = height(); - int iconSize = 16; - if (h > 30) iconSize = 22; - QPixmap p = IconUtils::icon("edit-find").pixmap(iconSize, iconSize); - int x = (width() - p.width()) / 2; - int y = (h - p.height()) / 2; - painter.drawPixmap(x, y, p); -} - -SearchLineEdit::SearchLineEdit(QWidget *parent) : ExLineEdit(parent), searchButton(new SearchButton(this)) { - connect(m_lineEdit, SIGNAL(textChanged(const QString &)), SIGNAL(textChanged(const QString &))); - connect(m_lineEdit, SIGNAL(textEdited(const QString &)), SIGNAL(textEdited(const QString &))); - connect(m_lineEdit, SIGNAL(returnPressed()), SLOT(returnPressed())); - - setLeftWidget(searchButton); - inactiveText = tr("Search"); - - QSizePolicy policy = sizePolicy(); - setSizePolicy(QSizePolicy::Preferred, policy.verticalPolicy()); + QAction *searchAction = new QAction(); + IconUtils::setIcon(searchAction, "edit-find"); + addAction(searchAction, QLineEdit::LeadingPosition); // completion - autoComplete = new AutoComplete(this, m_lineEdit); - connect(autoComplete, SIGNAL(suggestionAccepted(Suggestion*)), SIGNAL(suggestionAccepted(Suggestion*))); -} - -void SearchLineEdit::paintEvent(QPaintEvent *e) { - ExLineEdit::paintEvent(e); - if (m_lineEdit->text().isEmpty() && !hasFocus() && !inactiveText.isEmpty()) { - QStyleOptionFrameV2 panel; - initStyleOption(&panel); - QRect r = style()->subElementRect(QStyle::SE_LineEditContents, &panel, this); - QFontMetrics fm = fontMetrics(); - int horizontalMargin = m_lineEdit->x(); - QRect lineRect(horizontalMargin + r.x(), r.y() + (r.height() - fm.height() + 1) / 2, - r.width() - 2 * horizontalMargin, fm.height()); - QPainter painter(this); - painter.setPen(palette().brush(QPalette::Disabled, QPalette::Text).color()); - painter.drawText(lineRect, Qt::AlignLeft | Qt::AlignVCenter, inactiveText); - } -} + autoComplete = new AutoComplete(this, this); + connect(autoComplete, SIGNAL(suggestionAccepted(Suggestion *)), + SIGNAL(suggestionAccepted(Suggestion *))); -void SearchLineEdit::resizeEvent(QResizeEvent *e) { - updateGeometries(); - ExLineEdit::resizeEvent(e); -} - -void SearchLineEdit::updateGeometries() { - int menuHeight = height(); - int menuWidth = menuHeight + 1; - if (!searchButton->m_menu) - menuWidth = (menuHeight / 5) * 4; - searchButton->resize(QSize(menuWidth, menuHeight)); -} - -void SearchLineEdit::setInactiveText(const QString &text) { - inactiveText = text; -} - -void SearchLineEdit::setText(const QString &text) { - m_lineEdit->setText(text); -} - -AutoComplete *SearchLineEdit::getAutoComplete() { - return autoComplete; -} - -void SearchLineEdit::setMenu(QMenu *menu) { - if (searchButton->m_menu) - searchButton->m_menu->deleteLater(); - searchButton->m_menu = menu; - updateGeometries(); + connect(this, SIGNAL(returnPressed()), SLOT(returnPressed())); } QMenu *SearchLineEdit::menu() const { - if (!searchButton->m_menu) { - searchButton->m_menu = new QMenu(searchButton); - if (isVisible()) - (const_cast(this))->updateGeometries(); - } - return searchButton->m_menu; + return nullptr; } -void SearchLineEdit::returnPressed() { - QString text = m_lineEdit->text().simplified(); - if (!text.isEmpty()) { - autoComplete->preventSuggest(); - emit search(text); - } +void SearchLineEdit::setMenu(QMenu *menu) { + Q_UNUSED(menu); } void SearchLineEdit::enableSuggest() { @@ -135,33 +34,31 @@ void SearchLineEdit::preventSuggest() { autoComplete->preventSuggest(); } -void SearchLineEdit::selectAll() { - m_lineEdit->selectAll(); -} - void SearchLineEdit::setSuggester(Suggester *suggester) { autoComplete->setSuggester(suggester); } -void SearchLineEdit::focusInEvent(QFocusEvent *e) { - ExLineEdit::focusInEvent(e); - enableSuggest(); +AutoComplete *SearchLineEdit::getAutoComplete() { + return autoComplete; } void SearchLineEdit::emitTextChanged(const QString &text) { autoComplete->enableSuggest(); - emit textEdited(text); + emit QLineEdit::textEdited(text); } -QString SearchLineEdit::text() { - return m_lineEdit->text(); +void SearchLineEdit::returnPressed() { + QString s = text().simplified(); + if (!s.isEmpty()) { + autoComplete->preventSuggest(); + emit search(s); + } } QLineEdit *SearchLineEdit::getLineEdit() { - return m_lineEdit; + return this; } -void SearchLineEdit::setEnabled(bool enabled) { - ExLineEdit::setEnabled(enabled); - emit enabledChanged(enabled); +QWidget *SearchLineEdit::toWidget() { + return this; }