summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI')
-rw-r--r--Swift/QtUI/QtMainWindow.cpp29
-rw-r--r--Swift/QtUI/QtMainWindow.h3
2 files changed, 26 insertions, 6 deletions
diff --git a/Swift/QtUI/QtMainWindow.cpp b/Swift/QtUI/QtMainWindow.cpp
index f737e30..710ef61 100644
--- a/Swift/QtUI/QtMainWindow.cpp
+++ b/Swift/QtUI/QtMainWindow.cpp
@@ -7,6 +7,7 @@
#include "QtMainWindow.h"
#include <boost/optional.hpp>
+#include <boost/bind.hpp>
#include <QBoxLayout>
#include <QComboBox>
@@ -26,6 +27,7 @@
#include "Swift/Controllers/UIEvents/AddContactUIEvent.h"
#include "Swift/Controllers/UIEvents/RequestMUCSearchUIEvent.h"
#include "Swift/Controllers/UIEvents/JoinMUCUIEvent.h"
+#include "Swift/Controllers/UIEvents/ToggleShowOfflineUIEvent.h"
namespace Swift {
@@ -71,11 +73,11 @@ QtMainWindow::QtMainWindow(UIEventStream* uiEventStream) : QWidget(), MainWindow
QMenu* viewMenu = new QMenu(tr("View"), this);
menus_.push_back(viewMenu);
- QAction* showOfflineAction = new QAction("Show offline contacts", this);
- showOfflineAction->setCheckable(true);
- showOfflineAction->setChecked(false);
- connect(showOfflineAction, SIGNAL(toggled(bool)), SLOT(handleShowOfflineToggled(bool)));
- viewMenu->addAction(showOfflineAction);
+ showOfflineAction_ = new QAction("Show offline contacts", this);
+ showOfflineAction_->setCheckable(true);
+ showOfflineAction_->setChecked(false);
+ connect(showOfflineAction_, SIGNAL(toggled(bool)), SLOT(handleShowOfflineToggled(bool)));
+ viewMenu->addAction(showOfflineAction_);
QMenu* actionsMenu = new QMenu(tr("Actions"), this);
menus_.push_back(actionsMenu);
@@ -88,9 +90,13 @@ QtMainWindow::QtMainWindow(UIEventStream* uiEventStream) : QWidget(), MainWindow
QAction* signOutAction = new QAction("Sign Out", this);
connect(signOutAction, SIGNAL(triggered()), SLOT(handleSignOutAction()));
actionsMenu->addAction(signOutAction);
+
+ lastOfflineState_ = false;
+ uiEventStream_->onUIEvent.connect(boost::bind(&QtMainWindow::handleUIEvent, this, _1));
}
QtMainWindow::~QtMainWindow() {
+ uiEventStream_->onUIEvent.disconnect(boost::bind(&QtMainWindow::handleUIEvent, this, _1));
delete contextMenu_;
}
@@ -141,8 +147,19 @@ void QtMainWindow::handleStatusChanged(StatusShow::Type showType, const QString
onChangeStatusRequest(showType, Q2PSTRING(statusMessage));
}
+void QtMainWindow::handleUIEvent(boost::shared_ptr<UIEvent> event) {
+ boost::shared_ptr<ToggleShowOfflineUIEvent> toggleEvent = boost::dynamic_pointer_cast<ToggleShowOfflineUIEvent>(event);
+ if (toggleEvent) {
+ handleShowOfflineToggled(toggleEvent->getShow());
+ }
+}
+
void QtMainWindow::handleShowOfflineToggled(bool state) {
- onShowOfflineToggled(state);
+ if (state != lastOfflineState_) {
+ lastOfflineState_ = state;
+ showOfflineAction_->setChecked(state);
+ uiEventStream_->onUIEvent(boost::shared_ptr<UIEvent>(new ToggleShowOfflineUIEvent(state)));
+ }
}
void QtMainWindow::setMyName(const String& name) {
diff --git a/Swift/QtUI/QtMainWindow.h b/Swift/QtUI/QtMainWindow.h
index c92c62a..9e200b1 100644
--- a/Swift/QtUI/QtMainWindow.h
+++ b/Swift/QtUI/QtMainWindow.h
@@ -48,6 +48,7 @@ namespace Swift {
void setRosterModel(Roster* roster);
private slots:
void handleStatusChanged(StatusShow::Type showType, const QString &statusMessage);
+ void handleUIEvent(boost::shared_ptr<UIEvent> event);
void handleShowOfflineToggled(bool);
void handleJoinMUCAction();
void handleSignOutAction();
@@ -59,6 +60,7 @@ namespace Swift {
QtTreeWidget* treeWidget_;
QtRosterHeader* meView_;
QAction* addAction_;
+ QAction* showOfflineAction_;
QtTabWidget* tabs_;
QWidget* contactsTabWidget_;
QWidget* eventsTabWidget_;
@@ -66,6 +68,7 @@ namespace Swift {
QtChatListWindow* chatListWindow_;
UIEventStream* uiEventStream_;
QtRosterContextMenu* contextMenu_;
+ bool lastOfflineState_;
};
}