diff options
-rw-r--r-- | Swift/QtUI/QtMainWindow.cpp | 2 | ||||
-rw-r--r-- | Swift/QtUI/Roster/QtFilterWidget.cpp | 55 | ||||
-rw-r--r-- | Swift/QtUI/Roster/QtFilterWidget.h | 6 | ||||
-rw-r--r-- | Swift/QtUI/Roster/QtTreeWidget.cpp | 29 | ||||
-rw-r--r-- | Swift/QtUI/Roster/QtTreeWidget.h | 2 |
5 files changed, 60 insertions, 34 deletions
diff --git a/Swift/QtUI/QtMainWindow.cpp b/Swift/QtUI/QtMainWindow.cpp index 7af9728..1acc519 100644 --- a/Swift/QtUI/QtMainWindow.cpp +++ b/Swift/QtUI/QtMainWindow.cpp @@ -80,5 +80,5 @@ QtMainWindow::QtMainWindow(SettingsProvider* settings, UIEventStream* uiEventStr contactTabLayout->addWidget(treeWidget_); - new QtFilterWidget(this, treeWidget_, contactTabLayout); + new QtFilterWidget(this, treeWidget_, uiEventStream_, contactTabLayout); tabs_->addTab(contactsTabWidget_, tr("&Contacts")); diff --git a/Swift/QtUI/Roster/QtFilterWidget.cpp b/Swift/QtUI/Roster/QtFilterWidget.cpp index 5bd4669..2f08981 100644 --- a/Swift/QtUI/Roster/QtFilterWidget.cpp +++ b/Swift/QtUI/Roster/QtFilterWidget.cpp @@ -5,6 +5,4 @@ */ -#include <Swift/QtUI/Roster/QtFilterWidget.h> - #include <QLayout> #include <QVBoxLayout> @@ -13,10 +11,12 @@ #include <QString> #include <QEvent> - +#include <Swift/Controllers/UIEvents/RequestChatUIEvent.h> +#include <Swift/Controllers/UIEvents/UIEventStream.h> #include <Swift/QtUI/QtSwiftUtil.h> +#include <Swift/QtUI/Roster/QtFilterWidget.h> namespace Swift { -QtFilterWidget::QtFilterWidget(QWidget* parent, QtTreeWidget* treeView, QBoxLayout* layout) : QWidget(parent), treeView_(treeView), fuzzyRosterFilter_(0), isModifierSinglePressed_(false) { +QtFilterWidget::QtFilterWidget(QWidget* parent, QtTreeWidget* treeView, UIEventStream* eventStream, QBoxLayout* layout) : QWidget(parent), treeView_(treeView), eventStream_(eventStream), fuzzyRosterFilter_(0), isModifierSinglePressed_(false) { int targetIndex = layout->indexOf(treeView); @@ -66,6 +66,10 @@ bool QtFilterWidget::eventFilter(QObject*, QEvent* event) { return true; } else if (keyEvent->key() == Qt::Key_Return) { + JID target = treeView_->selectedJID(); + if (target.isValid()) { + eventStream_->send(boost::shared_ptr<UIEvent>(new RequestChatUIEvent(target))); + } filterLineEdit_->setText(""); - return false; + updateRosterFilters(); } else if (keyEvent->key() == Qt::Key_Escape) { filterLineEdit_->setText(""); @@ -78,24 +82,6 @@ bool QtFilterWidget::eventFilter(QObject*, QEvent* event) { filterLineEdit_->setVisible(!filterLineEdit_->text().isEmpty()); - // update roster filters if (event->type() == QEvent::KeyRelease) { - if (fuzzyRosterFilter_) { - if (filterLineEdit_->text().isEmpty()) { - // remove currently installed search filter and put old filters back - treeView_->getRoster()->removeFilter(fuzzyRosterFilter_); - delete fuzzyRosterFilter_; - fuzzyRosterFilter_ = NULL; - pushAllFilters(); - } else { - // remove currently intsalled search filter and put new search filter in place - updateSearchFilter(); - } - } else { - if (!filterLineEdit_->text().isEmpty()) { - // remove currently installed filters and put a search filter in place - popAllFilters(); - updateSearchFilter(); - } - } + updateRosterFilters(); } return true; @@ -119,4 +105,25 @@ void QtFilterWidget::pushAllFilters() { } +void QtFilterWidget::updateRosterFilters() { + if (fuzzyRosterFilter_) { + if (filterLineEdit_->text().isEmpty()) { + // remove currently installed search filter and put old filters back + treeView_->getRoster()->removeFilter(fuzzyRosterFilter_); + delete fuzzyRosterFilter_; + fuzzyRosterFilter_ = NULL; + pushAllFilters(); + } else { + // remove currently intsalled search filter and put new search filter in place + updateSearchFilter(); + } + } else { + if (!filterLineEdit_->text().isEmpty()) { + // remove currently installed filters and put a search filter in place + popAllFilters(); + updateSearchFilter(); + } + } +} + void QtFilterWidget::updateSearchFilter() { if (fuzzyRosterFilter_) { diff --git a/Swift/QtUI/Roster/QtFilterWidget.h b/Swift/QtUI/Roster/QtFilterWidget.h index e33616b..94ebc2a 100644 --- a/Swift/QtUI/Roster/QtFilterWidget.h +++ b/Swift/QtUI/Roster/QtFilterWidget.h @@ -20,8 +20,10 @@ namespace Swift { +class UIEventStream; + class QtFilterWidget : public QWidget { Q_OBJECT public: - QtFilterWidget(QWidget* parent, QtTreeWidget* treeView, QBoxLayout* layout = 0); + QtFilterWidget(QWidget* parent, QtTreeWidget* treeView, UIEventStream* eventStream, QBoxLayout* layout = 0); virtual ~QtFilterWidget(); @@ -33,4 +35,5 @@ class QtFilterWidget : public QWidget { void pushAllFilters(); + void updateRosterFilters(); void updateSearchFilter(); @@ -38,4 +41,5 @@ class QtFilterWidget : public QWidget { QLineEdit* filterLineEdit_; QtTreeWidget* treeView_; + UIEventStream* eventStream_; std::vector<RosterFilter*> filters_; QAbstractItemModel* sourceModel_; diff --git a/Swift/QtUI/Roster/QtTreeWidget.cpp b/Swift/QtUI/Roster/QtTreeWidget.cpp index fbe85de..5333260 100644 --- a/Swift/QtUI/Roster/QtTreeWidget.cpp +++ b/Swift/QtUI/Roster/QtTreeWidget.cpp @@ -139,12 +139,5 @@ void QtTreeWidget::currentChanged(const QModelIndex& current, const QModelIndex& void QtTreeWidget::handleItemActivated(const QModelIndex& index) { - JID target; - if (messageTarget_ == MessageDisplayJID) { - target = JID(Q2PSTRING(index.data(DisplayJIDRole).toString())); - target = target.toBare(); - } - if (!target.isValid()) { - target = JID(Q2PSTRING(index.data(JIDRole).toString())); - } + JID target = jidFromIndex(index); if (target.isValid()) { eventStream_->send(boost::shared_ptr<UIEvent>(new RequestChatUIEvent(target))); @@ -240,3 +233,23 @@ void QtTreeWidget::setMessageTarget(MessageTarget messageTarget) { } +JID QtTreeWidget::jidFromIndex(const QModelIndex& index) const { + JID target; + if (messageTarget_ == MessageDisplayJID) { + target = JID(Q2PSTRING(index.data(DisplayJIDRole).toString())); + target = target.toBare(); + } + if (!target.isValid()) { + target = JID(Q2PSTRING(index.data(JIDRole).toString())); + } + return target; +} + +JID QtTreeWidget::selectedJID() const { + QModelIndexList list = selectedIndexes(); + if (list.size() != 1) { + return JID(); + } + return jidFromIndex(list[0]); +} + } diff --git a/Swift/QtUI/Roster/QtTreeWidget.h b/Swift/QtUI/Roster/QtTreeWidget.h index 29e985d..cf2f73e 100644 --- a/Swift/QtUI/Roster/QtTreeWidget.h +++ b/Swift/QtUI/Roster/QtTreeWidget.h @@ -35,4 +35,6 @@ class QtTreeWidget : public QTreeView { void refreshTooltip(); void setMessageTarget(MessageTarget messageTarget); + JID jidFromIndex(const QModelIndex& index) const; + JID selectedJID() const; public: boost::signal<void (RosterItem*)> onSomethingSelectedChanged; |