summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI')
-rw-r--r--Swift/QtUI/Roster/QtFilterWidget.cpp22
-rw-r--r--Swift/QtUI/Roster/QtFilterWidget.h3
2 files changed, 24 insertions, 1 deletions
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_;