Action pimping, MainWin cleansing, deuification
authorManuel Nickschas <sputnick@quassel-irc.org>
Fri, 17 Oct 2008 17:05:20 +0000 (19:05 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Fri, 17 Oct 2008 18:36:47 +0000 (20:36 +0200)
* Action got a slightly extended interface, QtUi::actionCollection() now supports categories
* MainWin lost its .ui, gained proper Action support, and saw some moar cleanups

src/qtui/chatviewsearchbar.cpp
src/qtui/mainwin.cpp
src/qtui/mainwin.h
src/qtui/qtui.cpp
src/qtui/qtui.h
src/uisupport/action.cpp
src/uisupport/action.h

index bfa79e1..0ea119e 100644 (file)
@@ -37,15 +37,12 @@ ChatViewSearchBar::ChatViewSearchBar(QWidget *parent)
 
   hide();
 
 
   hide();
 
-  ActionCollection *coll = QtUi::actionCollection();
+  ActionCollection *coll = QtUi::actionCollection("General");
 
 
-  Action *toggleSearchBar = coll->add<Action>("toggleSearchBar");
+  QAction *toggleSearchBar = coll->action("ToggleSearchBar");
   connect(toggleSearchBar, SIGNAL(toggled(bool)), SLOT(setVisible(bool)));
   connect(toggleSearchBar, SIGNAL(toggled(bool)), SLOT(setVisible(bool)));
-  toggleSearchBar->setText(tr("Show Search Bar"));
-  toggleSearchBar->setShortcut(Qt::CTRL + Qt::Key_F);
-  toggleSearchBar->setCheckable(true);
 
 
-  Action *hideSearchBar = coll->add<Action>("hideSearchBar", toggleSearchBar, SLOT(setChecked(bool))); // always false
+  Action *hideSearchBar = coll->add<Action>("HideSearchBar", toggleSearchBar, SLOT(setChecked(bool))); // always false
   hideSearchBar->setShortcut(Qt::Key_Escape);
 
   connect(ui.hideButton, SIGNAL(clicked()), toggleSearchBar, SLOT(toggle()));
   hideSearchBar->setShortcut(Qt::Key_Escape);
 
   connect(ui.hideButton, SIGNAL(clicked()), toggleSearchBar, SLOT(toggle()));
index 3bf5d81..6d74c01 100644 (file)
@@ -24,6 +24,7 @@
 #include "actioncollection.h"
 #include "buffermodel.h"
 #include "bufferviewmanager.h"
 #include "actioncollection.h"
 #include "buffermodel.h"
 #include "bufferviewmanager.h"
+#include "bufferwidget.h"
 #include "channellistdlg.h"
 #include "chatlinemodel.h"
 #include "chatmonitorfilter.h"
 #include "channellistdlg.h"
 #include "chatlinemodel.h"
 #include "chatmonitorfilter.h"
@@ -71,23 +72,18 @@ MainWin::MainWin(QWidget *parent)
     sslLabel(new QLabel()),
     msgProcessorStatusWidget(new MsgProcessorStatusWidget()),
     _titleSetter(this),
     sslLabel(new QLabel()),
     msgProcessorStatusWidget(new MsgProcessorStatusWidget()),
     _titleSetter(this),
-    _trayIcon(new QSystemTrayIcon(this)),
-    _actionCollection(new ActionCollection(this))
+    _trayIcon(new QSystemTrayIcon(this))
 {
   QtUiSettings uiSettings;
   QString style = uiSettings.value("Style", QString("")).toString();
   if(style != "") {
     QApplication::setStyle(style);
   }
 {
   QtUiSettings uiSettings;
   QString style = uiSettings.value("Style", QString("")).toString();
   if(style != "") {
     QApplication::setStyle(style);
   }
-  ui.setupUi(this);
+
   setWindowTitle("Quassel IRC");
   setWindowIconText("Quassel IRC");
   updateIcon();
 
   setWindowTitle("Quassel IRC");
   setWindowIconText("Quassel IRC");
   updateIcon();
 
-  QtUi::actionCollection()->addAssociatedWidget(this);
-
-  statusBar()->showMessage(tr("Waiting for core..."));
-
   installEventFilter(new JumpKeyHandler(this));
 
   QtUi::registerNotificationBackend(new TaskbarNotificationBackend(this));
   installEventFilter(new JumpKeyHandler(this));
 
   QtUi::registerNotificationBackend(new TaskbarNotificationBackend(this));
@@ -97,8 +93,8 @@ MainWin::MainWin(QWidget *parent)
 #endif
 
   QtUiApplication* app = qobject_cast<QtUiApplication*> qApp;
 #endif
 
   QtUiApplication* app = qobject_cast<QtUiApplication*> qApp;
-  connect(app, SIGNAL(saveStateToSession(const QString&)), this, SLOT(saveStateToSession(const QString&)));
-  connect(app, SIGNAL(saveStateToSessionSettings(SessionSettings&)), this, SLOT(saveStateToSessionSettings(SessionSettings&)));
+  connect(app, SIGNAL(saveStateToSession(const QString&)), SLOT(saveStateToSession(const QString&)));
+  connect(app, SIGNAL(saveStateToSessionSettings(SessionSettings&)), SLOT(saveStateToSessionSettings(SessionSettings&)));
 }
 
 void MainWin::init() {
 }
 
 void MainWin::init() {
@@ -108,50 +104,41 @@ void MainWin::init() {
   else
     resize(QSize(800, 500));
 
   else
     resize(QSize(800, 500));
 
-  connect(QApplication::instance(), SIGNAL(aboutToQuit()), this, SLOT(saveLayout()));
-
-  connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), this, SLOT(clientNetworkCreated(NetworkId)));
-  connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), this, SLOT(clientNetworkRemoved(NetworkId)));
-
-  show();
-
-  statusBar()->showMessage(tr("Not connected to core."));
-
-  // DOCK OPTIONS
-  setDockNestingEnabled(true);
+  connect(QApplication::instance(), SIGNAL(aboutToQuit()), SLOT(saveLayout()));
+  connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), SLOT(clientNetworkCreated(NetworkId)));
+  connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), SLOT(clientNetworkRemoved(NetworkId)));
 
 
-  setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
-  setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
-  setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
-  setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
-
-  // setup stuff...
+  // Order is sometimes important
   setupActions();
   setupActions();
+  setupBufferWidget();
   setupMenus();
   setupViews();
   setupMenus();
   setupViews();
+  setupChatMonitor();
   setupNickWidget();
   setupTopicWidget();
   setupNickWidget();
   setupTopicWidget();
-  setupChatMonitor();
   setupInputWidget();
   setupStatusBar();
   setupSystray();
   setupInputWidget();
   setupStatusBar();
   setupSystray();
+  setupTitleSetter();
+
+  // Setup Dock Areas
+  setDockNestingEnabled(true);
+  setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
+  setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
+  setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
+  setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
 
   // restore mainwin state
   restoreState(s.value("MainWinState").toByteArray());
 
   // restore locked state of docks
 
   // restore mainwin state
   restoreState(s.value("MainWinState").toByteArray());
 
   // restore locked state of docks
-  ui.actionLockDockPositions->setChecked(s.value("LockDocks", false).toBool());
+  QtUi::actionCollection("General")->action("LockDockPositions")->setChecked(s.value("LockDocks", false).toBool());
 
   setDisconnectedState();  // Disable menus and stuff
 
   setDisconnectedState();  // Disable menus and stuff
-  showCoreConnectionDlg(true); // autoconnect if appropriate
 
 
-  // attach the BufferWidget to the BufferModel and the default selection
-  ui.bufferWidget->setModel(Client::bufferModel());
-  ui.bufferWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel());
-  ui.menuViews->addAction(QtUi::actionCollection()->action("toggleSearchBar"));
+  show();
 
 
-  _titleSetter.setModel(Client::bufferModel());
-  _titleSetter.setSelectionModel(Client::bufferModel()->standardSelectionModel());
+  showCoreConnectionDlg(true); // autoconnect if appropriate
 }
 
 MainWin::~MainWin() {
 }
 
 MainWin::~MainWin() {
@@ -173,26 +160,80 @@ void MainWin::updateIcon() {
 }
 
 void MainWin::setupActions() {
 }
 
 void MainWin::setupActions() {
-  // TODO don't get these from *.ui anymore... we shouldn't need one
-  ui.actionQuit->setIcon(SmallIcon("application-exit"));
-  ui.actionSettingsDlg->setIcon(SmallIcon("configure"));
-  ui.actionManageViews->setIcon(SmallIcon("view-tree"));
-  ui.actionManageViews2->setIcon(SmallIcon("view-tree"));
-  ui.actionAboutQt->setIcon(SmallIcon("qt"));
-  ui.actionAboutQuassel->setIcon(SmallIcon("quassel"));
-  ui.actionConnectCore->setIcon(SmallIcon("network-connect"));
-  ui.actionDisconnectCore->setIcon(SmallIcon("network-disconnect"));
-  ui.actionCoreInfo->setIcon(SmallIcon("help-about"));
+  ActionCollection *coll = QtUi::actionCollection("General");
+  // File
+  coll->addAction("ConnectCore", new Action(SmallIcon("network-connect"), tr("&Connect to Core..."), coll,
+                                             this, SLOT(showCoreConnectionDlg())));
+  coll->addAction("DisconnectCore", new Action(SmallIcon("network-disconnect"), tr("&Disconnect from Core"), coll,
+                                                Client::instance(), SLOT(disconnectFromCore())));
+  coll->addAction("CoreInfo", new Action(SmallIcon("help-about"), tr("Core &Info..."), coll,
+                                          this, SLOT(showCoreInfoDlg())));
+  coll->addAction("EditNetworks", new Action(SmallIcon("configure"), tr("Edit &Networks..."), coll,
+                                              this, SLOT(on_actionEditNetworks_triggered())));
+  coll->addAction("Quit", new Action(SmallIcon("application-exit"), tr("&Quit"), coll,
+                                      qApp, SLOT(quit()), tr("Ctrl+Q")));
+
+  // View
+  coll->addAction("ManageBufferViews", new Action(SmallIcon("view-tree"), tr("&Manage Buffer Views..."), coll,
+                                             this, SLOT(on_actionManageViews_triggered())));
+  connect(coll->addAction("LockDockPositions", new Action(tr("&Lock Dock Positions"), coll)), SIGNAL(toggled(bool)),
+           this, SLOT(on_actionLockDockPositions_toggled(bool)));
+  coll->addAction("ToggleSearchBar", new Action(SmallIcon("edit-find"), tr("Show &Search Bar"), coll,
+                                                 0, 0, tr("Ctrl+F")))->setCheckable(true);
+  coll->addAction("ToggleStatusBar", new Action(tr("Show Status &Bar"), coll,
+                                                 0, 0))->setCheckable(true);
+
+  // Settings
+  coll->addAction("ConfigureQuassel", new Action(SmallIcon("configure"), tr("&Configure Quassel..."), coll,
+                                                  this, SLOT(showSettingsDlg()), tr("F7")));
+
+  // Help
+  coll->addAction("AboutQuassel", new Action(SmallIcon("quassel"), tr("&About Quassel..."), coll,
+                                              this, SLOT(showAboutDlg())));
+  coll->addAction("AboutQt", new Action(tr("About &Qt..."), coll,
+                                         qApp, SLOT(aboutQt())));
+  coll->addAction("DebugNetworkModel", new Action(SmallIcon("tools-report-bug"), tr("Debug &NetworkModel"), coll,
+                                       this, SLOT(on_actionDebugNetworkModel_triggered())));
 }
 
 void MainWin::setupMenus() {
 }
 
 void MainWin::setupMenus() {
-  connect(ui.actionConnectCore, SIGNAL(triggered()), this, SLOT(showCoreConnectionDlg()));
-  connect(ui.actionDisconnectCore, SIGNAL(triggered()), Client::instance(), SLOT(disconnectFromCore()));
-  connect(ui.actionCoreInfo, SIGNAL(triggered()), this, SLOT(showCoreInfoDlg()));
-  connect(ui.actionQuit, SIGNAL(triggered()), QCoreApplication::instance(), SLOT(quit()));
-  connect(ui.actionSettingsDlg, SIGNAL(triggered()), this, SLOT(showSettingsDlg()));
-  connect(ui.actionAboutQuassel, SIGNAL(triggered()), this, SLOT(showAboutDlg()));
-  connect(ui.actionAboutQt, SIGNAL(triggered()), QApplication::instance(), SLOT(aboutQt()));
+  ActionCollection *coll = QtUi::actionCollection("General");
+
+  _fileMenu = menuBar()->addMenu(tr("&File"));
+  _fileMenu->addAction(coll->action("ConnectCore"));
+  _fileMenu->addAction(coll->action("DisconnectCore"));
+  _fileMenu->addAction(coll->action("CoreInfo"));
+  _fileMenu->addSeparator();
+  _networksMenu = _fileMenu->addMenu(tr("&Networks"));
+  _networksMenu->addAction(coll->action("EditNetworks"));
+  _networksMenu->addSeparator();
+  _fileMenu->addSeparator();
+  _fileMenu->addAction(coll->action("Quit"));
+
+  _viewMenu = menuBar()->addMenu(tr("&View"));
+  _bufferViewsMenu = _viewMenu->addMenu(tr("&Buffer Views"));
+  _bufferViewsMenu->addAction(coll->action("ManageBufferViews"));
+  _viewMenu->addSeparator();
+  _viewMenu->addAction(coll->action("ToggleSearchBar"));
+  _viewMenu->addAction(coll->action("ToggleStatusBar"));
+  _viewMenu->addSeparator();
+
+  _settingsMenu = menuBar()->addMenu(tr("&Settings"));
+  _settingsMenu->addAction(coll->action("ConfigureQuassel"));
+
+  _helpMenu = menuBar()->addMenu(tr("&Help"));
+  _helpMenu->addAction(coll->action("AboutQuassel"));
+  _helpMenu->addAction(coll->action("AboutQt"));
+  _helpMenu->addSeparator();
+  _helpDebugMenu = _helpMenu->addMenu(SmallIcon("tools-report-bug"), tr("Debug"));
+  _helpDebugMenu->addAction(coll->action("DebugNetworkModel"));
+}
+
+void MainWin::setupBufferWidget() {
+  _bufferWidget = new BufferWidget(this);
+  _bufferWidget->setModel(Client::bufferModel());
+  _bufferWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel());
+  setCentralWidget(_bufferWidget);
 }
 
 void MainWin::setupViews() {
 }
 
 void MainWin::setupViews() {
@@ -223,7 +264,7 @@ void MainWin::addBufferView(BufferViewConfig *config) {
   dock->show();
 
   addDockWidget(Qt::LeftDockWidgetArea, dock);
   dock->show();
 
   addDockWidget(Qt::LeftDockWidgetArea, dock);
-  ui.menuBufferViews->addAction(dock->toggleViewAction());
+  _bufferViewsMenu->addAction(dock->toggleViewAction());
 
   _netViews.append(dock);
 }
 
   _netViews.append(dock);
 }
@@ -231,7 +272,7 @@ void MainWin::addBufferView(BufferViewConfig *config) {
 void MainWin::removeBufferView(int bufferViewConfigId) {
   QVariant actionData;
   BufferViewDock *dock;
 void MainWin::removeBufferView(int bufferViewConfigId) {
   QVariant actionData;
   BufferViewDock *dock;
-  foreach(QAction *action, ui.menuBufferViews->actions()) {
+  foreach(QAction *action, _bufferViewsMenu->actions()) {
     actionData = action->data();
     if(!actionData.isValid())
       continue;
     actionData = action->data();
     if(!actionData.isValid())
       continue;
@@ -268,17 +309,19 @@ void MainWin::setupNickWidget() {
   nickDock->setObjectName("NickDock");
   nickDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
 
   nickDock->setObjectName("NickDock");
   nickDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
 
-  nickListWidget = new NickListWidget(nickDock);
-  nickDock->setWidget(nickListWidget);
+  _nickListWidget = new NickListWidget(nickDock);
+  nickDock->setWidget(_nickListWidget);
 
   addDockWidget(Qt::RightDockWidgetArea, nickDock);
 
   addDockWidget(Qt::RightDockWidgetArea, nickDock);
-  ui.menuViews->addAction(nickDock->toggleViewAction());
+  _viewMenu->addAction(nickDock->toggleViewAction());
+  nickDock->toggleViewAction()->setText(tr("Show Nick List"));
+  nickDock->toggleViewAction()->setIcon(SmallIcon("view-sidetree"));
   // See NickListDock::NickListDock();
   // connect(nickDock->toggleViewAction(), SIGNAL(triggered(bool)), nickListWidget, SLOT(showWidget(bool)));
 
   // attach the NickListWidget to the BufferModel and the default selection
   // See NickListDock::NickListDock();
   // connect(nickDock->toggleViewAction(), SIGNAL(triggered(bool)), nickListWidget, SLOT(showWidget(bool)));
 
   // attach the NickListWidget to the BufferModel and the default selection
-  nickListWidget->setModel(Client::bufferModel());
-  nickListWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel());
+  _nickListWidget->setModel(Client::bufferModel());
+  _nickListWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel());
 }
 
 void MainWin::setupChatMonitor() {
 }
 
 void MainWin::setupChatMonitor() {
@@ -292,7 +335,8 @@ void MainWin::setupChatMonitor() {
   dock->show();
 
   addDockWidget(Qt::TopDockWidgetArea, dock, Qt::Vertical);
   dock->show();
 
   addDockWidget(Qt::TopDockWidgetArea, dock, Qt::Vertical);
-  ui.menuViews->addAction(dock->toggleViewAction());
+  _viewMenu->addAction(dock->toggleViewAction());
+  dock->toggleViewAction()->setText(tr("Show Chat Monitor"));
 }
 
 void MainWin::setupInputWidget() {
 }
 
 void MainWin::setupInputWidget() {
@@ -304,12 +348,13 @@ void MainWin::setupInputWidget() {
 
   addDockWidget(Qt::BottomDockWidgetArea, dock);
 
 
   addDockWidget(Qt::BottomDockWidgetArea, dock);
 
-  ui.menuViews->addAction(dock->toggleViewAction());
+  _viewMenu->addAction(dock->toggleViewAction());
+  dock->toggleViewAction()->setText(tr("Show Input Line"));
 
   inputWidget->setModel(Client::bufferModel());
   inputWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel());
 
 
   inputWidget->setModel(Client::bufferModel());
   inputWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel());
 
-  ui.bufferWidget->setFocusProxy(inputWidget);
+  _bufferWidget->setFocusProxy(inputWidget);
 }
 
 void MainWin::setupTopicWidget() {
 }
 
 void MainWin::setupTopicWidget() {
@@ -324,7 +369,13 @@ void MainWin::setupTopicWidget() {
 
   addDockWidget(Qt::TopDockWidgetArea, dock);
 
 
   addDockWidget(Qt::TopDockWidgetArea, dock);
 
-  ui.menuViews->addAction(dock->toggleViewAction());
+  _viewMenu->addAction(dock->toggleViewAction());
+  dock->toggleViewAction()->setText(tr("Show Topic Line"));
+}
+
+void MainWin::setupTitleSetter() {
+  _titleSetter.setModel(Client::bufferModel());
+  _titleSetter.setSelectionModel(Client::bufferModel()->standardSelectionModel());
 }
 
 void MainWin::setupStatusBar() {
 }
 
 void MainWin::setupStatusBar() {
@@ -342,9 +393,8 @@ void MainWin::setupStatusBar() {
   sslLabel->setPixmap(QPixmap());
   statusBar()->addPermanentWidget(sslLabel);
 
   sslLabel->setPixmap(QPixmap());
   statusBar()->addPermanentWidget(sslLabel);
 
-  ui.menuViews->addSeparator();
-  QAction *showStatusbar = ui.menuViews->addAction(tr("Statusbar"));
-  showStatusbar->setCheckable(true);
+  _viewMenu->addSeparator();
+  QAction *showStatusbar = QtUi::actionCollection("General")->action("ToggleStatusBar");
 
   UiSettings uiSettings;
 
 
   UiSettings uiSettings;
 
@@ -365,13 +415,14 @@ void MainWin::setupSystray() {
   connect(Client::messageModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
                                   SLOT(messagesInserted(const QModelIndex &, int, int)));
 
   connect(Client::messageModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
                                   SLOT(messagesInserted(const QModelIndex &, int, int)));
 
+  ActionCollection *coll = QtUi::actionCollection("General");
   systrayMenu = new QMenu(this);
   systrayMenu = new QMenu(this);
-  systrayMenu->addAction(ui.actionAboutQuassel);
+  systrayMenu->addAction(coll->action("AboutQuassel"));
   systrayMenu->addSeparator();
   systrayMenu->addSeparator();
-  systrayMenu->addAction(ui.actionConnectCore);
-  systrayMenu->addAction(ui.actionDisconnectCore);
+  systrayMenu->addAction(coll->action("ConnectCore"));
+  systrayMenu->addAction(coll->action("DisconnectCore"));
   systrayMenu->addSeparator();
   systrayMenu->addSeparator();
-  systrayMenu->addAction(ui.actionQuit);
+  systrayMenu->addAction(coll->action("Quit"));
 
   systemTrayIcon()->setContextMenu(systrayMenu);
 
 
   systemTrayIcon()->setContextMenu(systrayMenu);
 
@@ -410,12 +461,13 @@ void MainWin::connectedToCore() {
 }
 
 void MainWin::setConnectedState() {
 }
 
 void MainWin::setConnectedState() {
+  ActionCollection *coll = QtUi::actionCollection("General");
   //ui.menuCore->setEnabled(true);
   //ui.menuCore->setEnabled(true);
-  ui.actionConnectCore->setEnabled(false);
-  ui.actionDisconnectCore->setEnabled(true);
-  ui.actionCoreInfo->setEnabled(true);
-  ui.menuViews->setEnabled(true);
-  ui.bufferWidget->show();
+  coll->action("ConnectCore")->setEnabled(false);
+  coll->action("DisconnectCore")->setEnabled(true);
+  coll->action("CoreInfo")->setEnabled(true);
+  _viewMenu->setEnabled(true);
+  _bufferWidget->show();
   statusBar()->showMessage(tr("Connected to core."));
   if(sslLabel->width() == 0)
     sslLabel->setPixmap(SmallIcon("security-low"));
   statusBar()->showMessage(tr("Connected to core."));
   if(sslLabel->width() == 0)
     sslLabel->setPixmap(SmallIcon("security-low"));
@@ -449,7 +501,7 @@ void MainWin::disconnectedFromCore() {
   saveLayout();
   QVariant actionData;
   BufferViewDock *dock;
   saveLayout();
   QVariant actionData;
   BufferViewDock *dock;
-  foreach(QAction *action, ui.menuBufferViews->actions()) {
+  foreach(QAction *action, _bufferViewsMenu->actions()) {
     actionData = action->data();
     if(!actionData.isValid())
       continue;
     actionData = action->data();
     if(!actionData.isValid())
       continue;
@@ -466,12 +518,13 @@ void MainWin::disconnectedFromCore() {
 }
 
 void MainWin::setDisconnectedState() {
 }
 
 void MainWin::setDisconnectedState() {
+  ActionCollection *coll = QtUi::actionCollection("General");
   //ui.menuCore->setEnabled(false);
   //ui.menuCore->setEnabled(false);
-  ui.actionConnectCore->setEnabled(true);
-  ui.actionDisconnectCore->setEnabled(false);
-  ui.actionCoreInfo->setEnabled(false);
-  ui.menuViews->setEnabled(false);
-  ui.bufferWidget->hide();
+  coll->action("ConnectCore")->setEnabled(true);
+  coll->action("DisconnectCore")->setEnabled(false);
+  coll->action("CoreInfo")->setEnabled(false);
+  _viewMenu->setEnabled(false);
+  _bufferWidget->hide();
   statusBar()->showMessage(tr("Not connected to core."));
   sslLabel->setPixmap(QPixmap());
   updateIcon();
   statusBar()->showMessage(tr("Not connected to core."));
   sslLabel->setPixmap(QPixmap());
   updateIcon();
@@ -610,18 +663,15 @@ void MainWin::clientNetworkCreated(NetworkId id) {
   connect(act, SIGNAL(triggered()), this, SLOT(connectOrDisconnectFromNet()));
 
   QAction *beforeAction = 0;
   connect(act, SIGNAL(triggered()), this, SLOT(connectOrDisconnectFromNet()));
 
   QAction *beforeAction = 0;
-  foreach(QAction *action, ui.menuNetworks->actions()) {
-    if(action->isSeparator()) {
-      beforeAction = action;
-      break;
-    }
+  foreach(QAction *action, _networksMenu->actions()) {
+    if(!action->data().isValid())  // ignore stock actions
+      continue;
     if(net->networkName().localeAwareCompare(action->text()) < 0) {
       beforeAction = action;
       break;
     }
   }
     if(net->networkName().localeAwareCompare(action->text()) < 0) {
       beforeAction = action;
       break;
     }
   }
-  Q_CHECK_PTR(beforeAction);
-  ui.menuNetworks->insertAction(beforeAction, act);
+  _networksMenu->insertAction(beforeAction, act);
 }
 
 void MainWin::clientNetworkUpdated() {
 }
 
 void MainWin::clientNetworkUpdated() {
@@ -664,7 +714,7 @@ void MainWin::connectOrDisconnectFromNet() {
   else net->requestDisconnect();
 }
 
   else net->requestDisconnect();
 }
 
-void MainWin::on_actionDebugNetworkModel_triggered(bool) {
+void MainWin::on_actionDebugNetworkModel_triggered() {
   QTreeView *view = new QTreeView;
   view->setAttribute(Qt::WA_DeleteOnClose);
   view->setWindowTitle("Debug NetworkModel View");
   QTreeView *view = new QTreeView;
   view->setAttribute(Qt::WA_DeleteOnClose);
   view->setWindowTitle("Debug NetworkModel View");
index 29b705f..1bff138 100644 (file)
 #ifndef MAINWIN_H_
 #define MAINWIN_H_
 
 #ifndef MAINWIN_H_
 #define MAINWIN_H_
 
+#include <QMainWindow>
 #include <QSystemTrayIcon>
 
 #include <QSystemTrayIcon>
 
-#include "ui_mainwin.h"
-
 #include "qtui.h"
 #include "sessionsettings.h"
 #include "titlesetter.h"
 
 class ActionCollection;
 class BufferViewConfig;
 #include "qtui.h"
 #include "sessionsettings.h"
 #include "titlesetter.h"
 
 class ActionCollection;
 class BufferViewConfig;
+class BufferWidget;
 class MsgProcessorStatusWidget;
 class NickListWidget;
 class SystemTrayIcon;
 
 class MsgProcessorStatusWidget;
 class NickListWidget;
 class SystemTrayIcon;
 
+class QMenu;
+class QLabel;
+
 //!\brief The main window of Quassel's QtUi.
 class MainWin : public QMainWindow {
   Q_OBJECT
 //!\brief The main window of Quassel's QtUi.
 class MainWin : public QMainWindow {
   Q_OBJECT
@@ -79,7 +82,7 @@ class MainWin : public QMainWindow {
     void on_actionEditNetworks_triggered();
     void on_actionManageViews_triggered();
     void on_actionLockDockPositions_toggled(bool lock);
     void on_actionEditNetworks_triggered();
     void on_actionManageViews_triggered();
     void on_actionLockDockPositions_toggled(bool lock);
-    void on_actionDebugNetworkModel_triggered(bool);
+    void on_actionDebugNetworkModel_triggered();
 
     void clientNetworkCreated(NetworkId);
     void clientNetworkRemoved(NetworkId);
 
     void clientNetworkCreated(NetworkId);
     void clientNetworkRemoved(NetworkId);
@@ -96,7 +99,6 @@ class MainWin : public QMainWindow {
     void disconnectFromCore();
 
   private:
     void disconnectFromCore();
 
   private:
-    Ui::MainWin ui;
 
     QMenu *systrayMenu;
     QLabel *coreLagLabel;
 
     QMenu *systrayMenu;
     QLabel *coreLagLabel;
@@ -106,6 +108,7 @@ class MainWin : public QMainWindow {
     TitleSetter _titleSetter;
 
     void setupActions();
     TitleSetter _titleSetter;
 
     void setupActions();
+    void setupBufferWidget();
     void setupMenus();
     void setupViews();
     void setupNickWidget();
     void setupMenus();
     void setupViews();
     void setupNickWidget();
@@ -114,6 +117,7 @@ class MainWin : public QMainWindow {
     void setupTopicWidget();
     void setupStatusBar();
     void setupSystray();
     void setupTopicWidget();
     void setupStatusBar();
     void setupSystray();
+    void setupTitleSetter();
 
     void updateIcon();
     void toggleVisibility();
 
     void updateIcon();
     void toggleVisibility();
@@ -122,9 +126,10 @@ class MainWin : public QMainWindow {
     QSystemTrayIcon *_trayIcon;
 
     QList<QDockWidget *> _netViews;
     QSystemTrayIcon *_trayIcon;
 
     QList<QDockWidget *> _netViews;
-    NickListWidget *nickListWidget;
+    BufferWidget *_bufferWidget;
+    NickListWidget *_nickListWidget;
 
 
-    ActionCollection *_actionCollection;
+    QMenu *_fileMenu, *_networksMenu, *_viewMenu, *_bufferViewsMenu, *_settingsMenu, *_helpMenu, *_helpDebugMenu;
 
     friend class QtUi;
 };
 
     friend class QtUi;
 };
index 8cb8347..8ec12ef 100644 (file)
@@ -30,7 +30,7 @@
 #include "uisettings.h"
 #include "util.h"
 
 #include "uisettings.h"
 #include "util.h"
 
-ActionCollection *QtUi::_actionCollection = 0;
+QHash<QString, ActionCollection *> QtUi::_actionCollections;
 MainWin *QtUi::_mainWin = 0;
 QList<AbstractNotificationBackend *> QtUi::_notificationBackends;
 QList<AbstractNotificationBackend::Notification> QtUi::_notifications;
 MainWin *QtUi::_mainWin = 0;
 QList<AbstractNotificationBackend *> QtUi::_notificationBackends;
 QList<AbstractNotificationBackend::Notification> QtUi::_notifications;
@@ -41,7 +41,6 @@ QtUi::QtUi() : AbstractUi() {
     qWarning() << "QtUi has been instantiated again!";
     return;
   }
     qWarning() << "QtUi has been instantiated again!";
     return;
   }
-  _actionCollection = new ActionCollection(this);
 
   UiSettings uiSettings;
   loadTranslation(uiSettings.value("Locale", QLocale::system()).value<QLocale>());
 
   UiSettings uiSettings;
   loadTranslation(uiSettings.value("Locale", QLocale::system()).value<QLocale>());
@@ -63,6 +62,15 @@ void QtUi::init() {
   _mainWin->init();
 }
 
   _mainWin->init();
 }
 
+ActionCollection *QtUi::actionCollection(const QString &category) {
+  if(_actionCollections.contains(category))
+    return _actionCollections.value(category);
+  ActionCollection *coll = new ActionCollection(mainWindow());
+  coll->addAssociatedWidget(mainWindow());
+  _actionCollections.insert(category, coll);
+  return coll;
+}
+
 MessageModel *QtUi::createMessageModel(QObject *parent) {
   return new ChatLineModel(parent);
 }
 MessageModel *QtUi::createMessageModel(QObject *parent) {
   return new ChatLineModel(parent);
 }
index 1fe1114..4baded8 100644 (file)
@@ -48,12 +48,13 @@ public:
   inline static QtUiStyle *style();
   inline static MainWin *mainWindow();
 
   inline static QtUiStyle *style();
   inline static MainWin *mainWindow();
 
-  //! Access the global ActionCollection.
-  /** This ActionCollection is associated with the main window, i.e. it contains global
+  //! Access global ActionCollections.
+  /** These ActionCollections are associated with the main window, i.e. they contain global
    *  actions (and thus, shortcuts). Widgets providing application-wide shortcuts should
    *  actions (and thus, shortcuts). Widgets providing application-wide shortcuts should
-   *  create appropriate Action objects using QtUi::actionCollection()->add\<Action\>().
+   *  create appropriate Action objects using QtUi::actionCollection(cat)->add\<Action\>().
+   *  @param category The category (default: "General")
    */
    */
-  inline static ActionCollection *actionCollection();
+  static ActionCollection *actionCollection(const QString &category = "General");
 
   /* Notifications */
 
 
   /* Notifications */
 
@@ -75,13 +76,12 @@ protected slots:
 
 private:
   static MainWin *_mainWin;
 
 private:
   static MainWin *_mainWin;
-  static ActionCollection *_actionCollection;
+  static QHash<QString, ActionCollection *> _actionCollections;
   static QtUiStyle *_style;
   static QList<AbstractNotificationBackend *> _notificationBackends;
   static QList<AbstractNotificationBackend::Notification> _notifications;
 };
 
   static QtUiStyle *_style;
   static QList<AbstractNotificationBackend *> _notificationBackends;
   static QList<AbstractNotificationBackend::Notification> _notifications;
 };
 
-ActionCollection *QtUi::actionCollection() { return _actionCollection; }
 QtUiStyle *QtUi::style() { return _style; }
 MainWin *QtUi::mainWindow() { return _mainWin; }
 
 QtUiStyle *QtUi::style() { return _style; }
 MainWin *QtUi::mainWindow() { return _mainWin; }
 
index 700cce5..f160ac4 100644 (file)
@@ -28,15 +28,23 @@ Action::Action(QObject *parent) : QWidgetAction(parent) {
   init();
 }
 
   init();
 }
 
-Action::Action(const QString &text, QObject *parent) : QWidgetAction(parent) {
+Action::Action(const QString &text, QObject *parent, const QObject *receiver, const char *slot, const QKeySequence &shortcut)
+: QWidgetAction(parent) {
   init();
   setText(text);
   init();
   setText(text);
+  setShortcut(shortcut);
+  if(receiver && slot)
+    connect(this, SIGNAL(triggered()), receiver, slot);
 }
 
 }
 
-Action::Action(const QIcon &icon, const QString &text, QObject *parent) : QWidgetAction(parent) {
+Action::Action(const QIcon &icon, const QString &text, QObject *parent, const QObject *receiver, const char *slot, const QKeySequence &shortcut)
+: QWidgetAction(parent) {
   init();
   setIcon(icon);
   setText(text);
   init();
   setIcon(icon);
   setText(text);
+  setShortcut(shortcut);
+  if(receiver && slot)
+    connect(this, SIGNAL(triggered()), receiver, slot);
 }
 
 void Action::init() {
 }
 
 void Action::init() {
index 378d45d..325beda 100644 (file)
@@ -45,8 +45,8 @@ class Action : public QWidgetAction {
     Q_DECLARE_FLAGS(ShortcutTypes, ShortcutType)
 
     explicit Action(QObject *parent);
     Q_DECLARE_FLAGS(ShortcutTypes, ShortcutType)
 
     explicit Action(QObject *parent);
-    Action(const QString &text, QObject *parent);
-    Action(const QIcon &icon, const QString &text, QObject *parent);
+    Action(const QString &text, QObject *parent, const QObject *receiver = 0, const char *slot = 0, const QKeySequence &shortcut = 0);
+    Action(const QIcon &icon, const QString &text, QObject *parent, const QObject *receiver = 0, const char *slot = 0, const QKeySequence &shortcut = 0);
 
     QKeySequence shortcut(ShortcutTypes types = ActiveShortcut) const;
     void setShortcut(const QShortcut &shortcut, ShortcutTypes type = ShortcutTypes(ActiveShortcut | DefaultShortcut));
 
     QKeySequence shortcut(ShortcutTypes types = ActiveShortcut) const;
     void setShortcut(const QShortcut &shortcut, ShortcutTypes type = ShortcutTypes(ActiveShortcut | DefaultShortcut));