From 34cbd014160c25232e6f407ba6dcd0fe92ae7c17 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Sat, 14 Mar 2009 23:29:18 +0100 Subject: [PATCH] Move ActionCollection handling from QtUi to GraphicalUi Needed to allow stuff in uisupport to access action collections. --- src/qtui/qtui.cpp | 13 ++----------- src/qtui/qtui.h | 9 --------- src/uisupport/graphicalui.cpp | 20 +++++++++++++++++++- src/uisupport/graphicalui.h | 14 ++++++++++++++ 4 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/qtui/qtui.cpp b/src/qtui/qtui.cpp index c1ed4aa0..2efdf72e 100644 --- a/src/qtui/qtui.cpp +++ b/src/qtui/qtui.cpp @@ -21,7 +21,6 @@ #include "qtui.h" #include "abstractnotificationbackend.h" -#include "actioncollection.h" #include "chatlinemodel.h" #include "contextmenuactionprovider.h" #include "mainwin.h" @@ -32,7 +31,6 @@ #include "types.h" #include "util.h" -QHash QtUi::_actionCollections; QPointer QtUi::_instance = 0; QPointer QtUi::_mainWin = 0; QList QtUi::_notificationBackends; @@ -55,6 +53,8 @@ QtUi::QtUi() : GraphicalUi() { _mainWin = new MainWin(); _style = new QtUiStyle; + setMainWidget(_mainWin); + connect(_mainWin, SIGNAL(connectToCore(const QVariantMap &)), this, SIGNAL(connectToCore(const QVariantMap &))); connect(_mainWin, SIGNAL(disconnectFromCore()), this, SIGNAL(disconnectFromCore())); } @@ -69,15 +69,6 @@ void QtUi::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); } diff --git a/src/qtui/qtui.h b/src/qtui/qtui.h index 77916ce2..1e2144c2 100644 --- a/src/qtui/qtui.h +++ b/src/qtui/qtui.h @@ -26,7 +26,6 @@ #include "abstractnotificationbackend.h" #include "mainwin.h" -class ActionCollection; class MainWin; class MessageModel; class QtUiMessageProcessor; @@ -50,13 +49,6 @@ public: inline static QtUiStyle *style(); inline static MainWin *mainWindow(); - //! 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 - * create appropriate Action objects using QtUi::actionCollection(cat)->add\(). - * @param category The category (default: "General") - */ - static ActionCollection *actionCollection(const QString &category = "General"); /* Notifications */ @@ -80,7 +72,6 @@ protected slots: private: static QPointer _instance; static QPointer _mainWin; - static QHash _actionCollections; static QtUiStyle *_style; static QList _notificationBackends; static QList _notifications; diff --git a/src/uisupport/graphicalui.cpp b/src/uisupport/graphicalui.cpp index 796eb214..abd8cd17 100644 --- a/src/uisupport/graphicalui.cpp +++ b/src/uisupport/graphicalui.cpp @@ -20,15 +20,33 @@ #include "graphicalui.h" +#include "actioncollection.h" #include "contextmenuactionprovider.h" +QWidget *GraphicalUi::_mainWidget = 0; +QHash GraphicalUi::_actionCollections; ContextMenuActionProvider *GraphicalUi::_contextMenuActionProvider = 0; ToolBarActionProvider *GraphicalUi::_toolBarActionProvider = 0; -GraphicalUi::GraphicalUi(QObject *parent) : AbstractUi(parent) { +GraphicalUi::GraphicalUi(QObject *parent) : AbstractUi(parent) +{ } +ActionCollection *GraphicalUi::actionCollection(const QString &category) { + if(_actionCollections.contains(category)) + return _actionCollections.value(category); + ActionCollection *coll = new ActionCollection(_mainWidget); + if(_mainWidget) + coll->addAssociatedWidget(_mainWidget); + _actionCollections.insert(category, coll); + return coll; +} + +void GraphicalUi::setMainWidget(QWidget *widget) { + _mainWidget = widget; +} + void GraphicalUi::setContextMenuActionProvider(ContextMenuActionProvider *provider) { _contextMenuActionProvider = provider; } diff --git a/src/uisupport/graphicalui.h b/src/uisupport/graphicalui.h index b4f8669f..392075eb 100644 --- a/src/uisupport/graphicalui.h +++ b/src/uisupport/graphicalui.h @@ -23,6 +23,7 @@ #include "abstractui.h" +class ActionCollection; class ContextMenuActionProvider; class ToolBarActionProvider; @@ -32,14 +33,27 @@ class GraphicalUi : public AbstractUi { public: GraphicalUi(QObject *parent = 0); + //! 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 + * create appropriate Action objects using GraphicalUi::actionCollection(cat)->add\(). + * @param category The category (default: "General") + */ + static ActionCollection *actionCollection(const QString &category = "General"); + inline static ContextMenuActionProvider *contextMenuActionProvider(); inline static ToolBarActionProvider *toolBarActionProvider(); protected: + //! This is the widget we associate global actions with, typically the main window + void setMainWidget(QWidget *); + void setContextMenuActionProvider(ContextMenuActionProvider *); void setToolBarActionProvider(ToolBarActionProvider *); private: + static QWidget *_mainWidget; + static QHash _actionCollections; static ContextMenuActionProvider *_contextMenuActionProvider; static ToolBarActionProvider *_toolBarActionProvider; -- 2.20.1