diff options
Diffstat (limited to 'Swift/QtUI/QtMainWindow.cpp')
| -rw-r--r-- | Swift/QtUI/QtMainWindow.cpp | 72 | 
1 files changed, 60 insertions, 12 deletions
| diff --git a/Swift/QtUI/QtMainWindow.cpp b/Swift/QtUI/QtMainWindow.cpp index 6391961..0c959d6 100644 --- a/Swift/QtUI/QtMainWindow.cpp +++ b/Swift/QtUI/QtMainWindow.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010 Kevin Smith + * Copyright (c) 2010-2011 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -21,20 +21,25 @@  #include <QAction>  #include <QTabWidget> -#include "QtSwiftUtil.h" -#include "QtTabWidget.h" -#include "Roster/QtTreeWidget.h" -#include "Swift/Controllers/UIEvents/RequestJoinMUCUIEvent.h" -#include "Swift/Controllers/UIEvents/RequestAddUserDialogUIEvent.h" -#include "Swift/Controllers/UIEvents/RequestChatWithUserDialogUIEvent.h" -#include "Swift/Controllers/UIEvents/RequestProfileEditorUIEvent.h" -#include "Swift/Controllers/UIEvents/JoinMUCUIEvent.h" -#include "Swift/Controllers/UIEvents/ToggleShowOfflineUIEvent.h" +#include <Swift/QtUI/QtSwiftUtil.h> +#include <Swift/QtUI/QtTabWidget.h> +#include <Swift/QtUI/QtSettingsProvider.h> +#include <Roster/QtTreeWidget.h> +#include <Swift/Controllers/UIEvents/RequestJoinMUCUIEvent.h> +#include <Swift/Controllers/UIEvents/RequestAddUserDialogUIEvent.h> +#include <Swift/Controllers/UIEvents/RequestChatWithUserDialogUIEvent.h> +#include <Swift/Controllers/UIEvents/RequestProfileEditorUIEvent.h> +#include <Swift/Controllers/UIEvents/JoinMUCUIEvent.h> +#include <Swift/Controllers/UIEvents/ToggleShowOfflineUIEvent.h> +#include <Swift/Controllers/UIEvents/RequestAdHocUIEvent.h>  namespace Swift { +#define CURRENT_ROSTER_TAB "current_roster_tab" +  QtMainWindow::QtMainWindow(QtSettingsProvider* settings, UIEventStream* uiEventStream) : QWidget(), MainWindow(false) {  	uiEventStream_ = uiEventStream; +	settings_ = settings;  	setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));  	QBoxLayout *mainLayout = new QBoxLayout(QBoxLayout::TopToBottom, this);  	mainLayout->setContentsMargins(0,0,0,0); @@ -68,8 +73,12 @@ QtMainWindow::QtMainWindow(QtSettingsProvider* settings, UIEventStream* uiEventS  	chatListWindow_ = new QtChatListWindow(uiEventStream_); -	tabs_->addTab(eventWindow_, tr("&Notices"));  	tabs_->addTab(chatListWindow_, tr("C&hats")); +	tabs_->addTab(eventWindow_, tr("&Notices")); + +	tabs_->setCurrentIndex(settings_->getIntSetting(CURRENT_ROSTER_TAB, 0)); + +	connect(tabs_, SIGNAL(currentChanged(int)), this, SLOT(handleTabChanged(int)));  	this->setLayout(mainLayout); @@ -99,6 +108,8 @@ QtMainWindow::QtMainWindow(QtSettingsProvider* settings, UIEventStream* uiEventS  	chatUserAction_ = new QAction(tr("Start &Chat"), this);  	connect(chatUserAction_, SIGNAL(triggered(bool)), this, SLOT(handleChatUserActionTriggered(bool)));  	actionsMenu->addAction(chatUserAction_); +	serverAdHocMenu_ = new QMenu(tr("Run Server Command"), this); +	actionsMenu->addMenu(serverAdHocMenu_);  	actionsMenu->addSeparator();  	QAction* signOutAction = new QAction(tr("&Sign Out"), this);  	connect(signOutAction, SIGNAL(triggered()), SLOT(handleSignOutAction())); @@ -106,6 +117,12 @@ QtMainWindow::QtMainWindow(QtSettingsProvider* settings, UIEventStream* uiEventS  	connect(treeWidget_, SIGNAL(onSomethingSelectedChanged(bool)), editUserAction_, SLOT(setEnabled(bool))); +	setAvailableAdHocCommands(std::vector<DiscoItems::Item>()); +	QAction* adHocAction = new QAction(tr("Collecting commands..."), this); +	adHocAction->setEnabled(false); +	serverAdHocMenu_->addAction(adHocAction); +	serverAdHocCommandActions_.append(adHocAction); +  	lastOfflineState_ = false;  	uiEventStream_->onUIEvent.connect(boost::bind(&QtMainWindow::handleUIEvent, this, _1));  } @@ -114,6 +131,10 @@ QtMainWindow::~QtMainWindow() {  	uiEventStream_->onUIEvent.disconnect(boost::bind(&QtMainWindow::handleUIEvent, this, _1));  } +void QtMainWindow::handleTabChanged(int index) { +	settings_->storeInt(CURRENT_ROSTER_TAB, index); +} +  QtEventWindow* QtMainWindow::getEventWindow() {  	return eventWindow_;  } @@ -132,7 +153,7 @@ void QtMainWindow::handleEditProfileRequest() {  void QtMainWindow::handleEventCountUpdated(int count) {  	QColor eventTabColor = (count == 0) ? QColor() : QColor(255, 0, 0); // invalid resets to default -	int eventIndex = 1; +	int eventIndex = 2;  	tabs_->tabBar()->setTabTextColor(eventIndex, eventTabColor);  	QString text = tr("&Notices");  	if (count > 0) { @@ -206,6 +227,33 @@ void QtMainWindow::setConnecting() {  	meView_->setConnecting();  } +void QtMainWindow::handleAdHocActionTriggered(bool /*checked*/) { +	QAction* action = qobject_cast<QAction*>(sender()); +	assert(action); +	DiscoItems::Item command = serverAdHocCommands_[serverAdHocCommandActions_.indexOf(action)]; +	uiEventStream_->send(boost::shared_ptr<UIEvent>(new RequestAdHocUIEvent(command))); +} + +void QtMainWindow::setAvailableAdHocCommands(const std::vector<DiscoItems::Item>& commands) { +	serverAdHocCommands_ = commands; +	foreach (QAction* action, serverAdHocCommandActions_) { +		delete action; +	} +	serverAdHocMenu_->clear(); +	serverAdHocCommandActions_.clear(); +	foreach (DiscoItems::Item command, commands) { +		QAction* action = new QAction(P2QSTRING(command.getName()), this); +		connect(action, SIGNAL(triggered(bool)), this, SLOT(handleAdHocActionTriggered(bool))); +		serverAdHocMenu_->addAction(action); +		serverAdHocCommandActions_.append(action); +	} +	if (serverAdHocCommandActions_.isEmpty()) { +		QAction* action = new QAction(tr("No Available Commands"), this); +		action->setEnabled(false); +		serverAdHocMenu_->addAction(action); +		serverAdHocCommandActions_.append(action); +	} +}  } | 
 Swift
 Swift