diff options
-rw-r--r-- | Swift/Controllers/Roster/Roster.cpp | 7 | ||||
-rw-r--r-- | Swift/Controllers/Roster/Roster.h | 4 | ||||
-rw-r--r-- | Swift/QtUI/Roster/QtFilterWidget.cpp | 22 | ||||
-rw-r--r-- | Swift/QtUI/Roster/QtFilterWidget.h | 3 |
4 files changed, 34 insertions, 2 deletions
diff --git a/Swift/Controllers/Roster/Roster.cpp b/Swift/Controllers/Roster/Roster.cpp index 44cf03d..4dbc453 100644 --- a/Swift/Controllers/Roster/Roster.cpp +++ b/Swift/Controllers/Roster/Roster.cpp @@ -198,4 +198,10 @@ void Roster::applyOnAllItems(const RosterItemOperation& operation) { } +void Roster::addFilter(RosterFilter* filter) { + filters_.push_back(filter); + filterAll(); + onFilterAdded(filter); +} + void Roster::removeFilter(RosterFilter* filter) { for (unsigned int i = 0; i < filters_.size(); i++) { @@ -206,4 +212,5 @@ void Roster::removeFilter(RosterFilter *filter) { } filterAll(); + onFilterRemoved(filter); } diff --git a/Swift/Controllers/Roster/Roster.h b/Swift/Controllers/Roster/Roster.h index b60eafa..9956cb9 100644 --- a/Swift/Controllers/Roster/Roster.h +++ b/Swift/Controllers/Roster/Roster.h @@ -39,5 +39,5 @@ class Roster { void applyOnAllItems(const RosterItemOperation& operation); void applyOnItem(const RosterItemOperation& operation, const JID& jid); - void addFilter(RosterFilter *filter) {filters_.push_back(filter);filterAll();} + void addFilter(RosterFilter* filter); void removeFilter(RosterFilter* filter); GroupRosterItem* getRoot(); @@ -47,4 +47,6 @@ class Roster { boost::signal<void (RosterItem*)> onDataChanged; boost::signal<void (JID&)> onVCardUpdateRequested; + boost::signal<void (RosterFilter* filter)> onFilterAdded; + boost::signal<void (RosterFilter* filter)> onFilterRemoved; GroupRosterItem* getGroup(const std::string& groupName); void setBlockingSupported(bool isSupported); diff --git a/Swift/QtUI/Roster/QtFilterWidget.cpp b/Swift/QtUI/Roster/QtFilterWidget.cpp index a4c9449..64eb312 100644 --- a/Swift/QtUI/Roster/QtFilterWidget.cpp +++ b/Swift/QtUI/Roster/QtFilterWidget.cpp @@ -87,5 +87,4 @@ bool QtFilterWidget::eventFilter(QObject*, QEvent* event) { filterLineEdit_->event(event); - filterLineEdit_->setVisible(!filterLineEdit_->text().isEmpty()); if (event->type() == QEvent::KeyRelease) { @@ -103,7 +102,11 @@ void QtFilterWidget::popAllFilters() { treeView_->getRoster()->removeFilter(filter); } + treeView_->getRoster()->onFilterAdded.connect(boost::bind(&QtFilterWidget::handleFilterAdded, this, _1)); + treeView_->getRoster()->onFilterRemoved.connect(boost::bind(&QtFilterWidget::handleFilterRemoved, this, _1)); } void QtFilterWidget::pushAllFilters() { + treeView_->getRoster()->onFilterAdded.disconnect(boost::bind(&QtFilterWidget::handleFilterAdded, this, _1)); + treeView_->getRoster()->onFilterRemoved.disconnect(boost::bind(&QtFilterWidget::handleFilterRemoved, this, _1)); foreach(RosterFilter* filter, filters_) { treeView_->getRoster()->addFilter(filter); @@ -131,4 +134,5 @@ void QtFilterWidget::updateRosterFilters() { } } + filterLineEdit_->setVisible(!filterLineEdit_->text().isEmpty()); } @@ -144,3 +148,19 @@ void QtFilterWidget::updateSearchFilter() { } +void QtFilterWidget::handleFilterAdded(RosterFilter* filter) { + if (filter != fuzzyRosterFilter_) { + filterLineEdit_->setText(""); + updateRosterFilters(); + } +} + +void QtFilterWidget::handleFilterRemoved(RosterFilter* filter) { + /* make sure we don't end up adding this one back in later */ + filters_.erase(std::remove(filters_.begin(), filters_.end(), filter), filters_.end()); + if (filter != fuzzyRosterFilter_) { + filterLineEdit_->setText(""); + updateRosterFilters(); + } +} + } diff --git a/Swift/QtUI/Roster/QtFilterWidget.h b/Swift/QtUI/Roster/QtFilterWidget.h index 3e17566..d0307ea 100644 --- a/Swift/QtUI/Roster/QtFilterWidget.h +++ b/Swift/QtUI/Roster/QtFilterWidget.h @@ -36,4 +36,7 @@ class QtFilterWidget : public QWidget { void updateSearchFilter(); + void handleFilterAdded(RosterFilter* filter); + void handleFilterRemoved(RosterFilter* filter); + private: QtClosableLineEdit* filterLineEdit_; |