X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fchatviewsearchbar.cpp;h=a992b434422a08c2e24938803dee8d86c09e3adb;hb=518cd2bc478ab3675a60ec46d3ef183cace0cae7;hp=121070d3d2f501bbd5e8028de6edaa86fc091986;hpb=a117d3bd1592bae3b14630c953790a005b3c3a3d;p=quassel.git diff --git a/src/qtui/chatviewsearchbar.cpp b/src/qtui/chatviewsearchbar.cpp index 121070d3..a992b434 100644 --- a/src/qtui/chatviewsearchbar.cpp +++ b/src/qtui/chatviewsearchbar.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-2020 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,34 +15,63 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include "chatviewsearchbar.h" -#include +#include "action.h" +#include "actioncollection.h" +#include "icon.h" +#include "qtui.h" -ChatViewSearchBar::ChatViewSearchBar(QWidget *parent) - : QWidget(parent) +ChatViewSearchBar::ChatViewSearchBar(QWidget* parent) + : QWidget(parent) { - ui.setupUi(this); - layout()->setContentsMargins(0, 0, 0, 0); + ui.setupUi(this); + ui.hideButton->setIcon(icon::get("dialog-close")); + ui.searchUpButton->setIcon(icon::get("go-up")); + ui.searchDownButton->setIcon(icon::get("go-down")); + _searchDelayTimer.setSingleShot(true); - ui.searchUpButton->setEnabled(false); - ui.searchDownButton->setEnabled(false); + layout()->setContentsMargins(0, 0, 0, 0); - _toggleViewAction = new QAction(tr("Show search bar"), this); - _toggleViewAction->setCheckable(true); - _toggleViewAction->setChecked(false); - connect(_toggleViewAction, SIGNAL(toggled(bool)), - this, SLOT(setVisible(bool))); - setVisible(false); + hide(); - connect(ui.hideButton, SIGNAL(clicked()), - _toggleViewAction, SLOT(toggle())); + ActionCollection* coll = QtUi::actionCollection("General"); + + QAction* toggleSearchBar = coll->action("ToggleSearchBar"); + connect(toggleSearchBar, &QAction::toggled, this, &QWidget::setVisible); + + auto* hideSearchBar = new Action{{}, this, toggleSearchBar, &QAction::setChecked}; + hideSearchBar->setShortcut(Qt::Key_Escape); + hideSearchBar->setShortcutConfigurable(false); + coll->addAction("HideSearchBar", hideSearchBar); + + connect(ui.hideButton, &QAbstractButton::clicked, toggleSearchBar, &QAction::toggle); + connect(ui.searchEditLine, &QLineEdit::textChanged, this, &ChatViewSearchBar::delaySearch); + connect(&_searchDelayTimer, &QTimer::timeout, this, &ChatViewSearchBar::search); +} + +void ChatViewSearchBar::setVisible(bool visible) +{ + // clearing the search field also removes the highlight items from the scene + // this should be done before the SearchBar is hidden, as the hiding triggers + // a resize event which can lead to strange side effects. + ui.searchEditLine->clear(); + QWidget::setVisible(visible); + if (visible) + ui.searchEditLine->setFocus(); + else + emit hidden(); } -void ChatViewSearchBar::setVisible(bool visible) { - QWidget::setVisible(visible); - ui.searchEditLine->clear(); +void ChatViewSearchBar::delaySearch() +{ + _searchDelayTimer.start(300); +} + +void ChatViewSearchBar::search() +{ + emit searchChanged(ui.searchEditLine->text()); }