From: Manuel Nickschas Date: Sat, 31 Jan 2009 21:51:07 +0000 (+0100) Subject: Introduce GraphicalUi (between QtUi and AbstractUi), rename NetworkModelActionProvider X-Git-Tag: 0.4.0~129 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=a540a0285feef171e16fd6225b0e045fc5fc52e4 Introduce GraphicalUi (between QtUi and AbstractUi), rename NetworkModelActionProvider Since we need to access the UI from uisupport in various places, we introduce GraphicalUi. This avoids the need to go via Client::mainUi() and abstract classes. Also, getting rid of AbstractActionProvider and renaming NetworkModelActionProvider to ContextMenuActionProvider to prepare for ToolbarActionProvider. --- diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index 0a9f1f58..2622cd13 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -8,6 +8,7 @@ include(${QT_USE_FILE}) set(SOURCES abstractmessageprocessor.cpp + abstractui.cpp backlogrequester.cpp buffermodel.cpp buffersettings.cpp @@ -21,12 +22,12 @@ set(SOURCES messagefilter.cpp messagemodel.cpp networkmodel.cpp - quasselui.cpp selectionmodelsynchronizer.cpp treemodel.cpp) set(MOC_HDRS abstractmessageprocessor.h + abstractui.h buffermodel.h client.h clientbacklogmanager.h @@ -38,7 +39,6 @@ set(MOC_HDRS messagefilter.h messagemodel.h networkmodel.h - quasselui.h selectionmodelsynchronizer.h treemodel.h) diff --git a/src/client/quasselui.cpp b/src/client/abstractui.cpp similarity index 91% rename from src/client/quasselui.cpp rename to src/client/abstractui.cpp index 1b070e48..6a887655 100644 --- a/src/client/quasselui.cpp +++ b/src/client/abstractui.cpp @@ -18,12 +18,10 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "quasselui.h" +#include "abstractui.h" -AbstractUi * AbstractUi::_instance = 0; bool AbstractUi::_visible = false; -AbstractUi::AbstractUi() { - Q_ASSERT(!_instance); - _instance = this; +AbstractUi::AbstractUi(QObject *parent) : QObject(parent) { + } diff --git a/src/client/quasselui.h b/src/client/abstractui.h similarity index 66% rename from src/client/quasselui.h rename to src/client/abstractui.h index a1b45c74..1c96dea3 100644 --- a/src/client/quasselui.h +++ b/src/client/abstractui.h @@ -36,12 +36,11 @@ class AbstractUi : public QObject { Q_OBJECT public: - AbstractUi(); + AbstractUi(QObject *parent = 0); virtual ~AbstractUi() {}; - virtual void init() {}; // called after the client is initialized + virtual void init() = 0; // called after the client is initialized virtual MessageModel *createMessageModel(QObject *parent) = 0; virtual AbstractMessageProcessor *createMessageProcessor(QObject *parent) = 0; - virtual AbstractActionProvider *actionProvider() const = 0; inline static bool isVisible() { return _visible; } inline static void setVisible(bool visible) { _visible = visible; } @@ -55,27 +54,7 @@ class AbstractUi : public QObject { void disconnectFromCore(); private: - static AbstractUi *_instance; static bool _visible; }; -class AbstractActionProvider : public QObject { - Q_OBJECT - - public: - AbstractActionProvider(QObject *parent = 0) : QObject(parent) {} - virtual ~AbstractActionProvider() {} - - virtual void addActions(QMenu *, const QModelIndex &index, QObject *receiver = 0, const char *slot = 0, bool allowBufferHide = false) = 0; - virtual void addActions(QMenu *, const QList &indexList, QObject *receiver = 0, const char *slot = 0, bool allowBufferHide = false) = 0; - virtual void addActions(QMenu *, BufferId id, QObject *receiver = 0, const char *slot = 0) = 0; - virtual void addActions(QMenu *, MessageFilter *filter, BufferId msgBuffer, QObject *receiver = 0, const char *slot = 0) = 0; - virtual void addActions(QMenu *, MessageFilter *filter, BufferId msgBuffer, const QString &chanOrNick, QObject *receiver = 0, const char *slot = 0) = 0; - - signals: - void showChannelList(NetworkId); - void showIgnoreList(NetworkId); - -}; - #endif diff --git a/src/client/client.cpp b/src/client/client.cpp index 92be56ef..de3b5d1b 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -21,6 +21,7 @@ #include "client.h" #include "abstractmessageprocessor.h" +#include "abstractui.h" #include "bufferinfo.h" #include "buffermodel.h" #include "buffersettings.h" @@ -37,7 +38,6 @@ #include "network.h" #include "networkmodel.h" #include "quassel.h" -#include "quasselui.h" #include "signalproxy.h" #include "util.h" diff --git a/src/qtui/chatitem.cpp b/src/qtui/chatitem.cpp index 098c78eb..de96b2df 100644 --- a/src/qtui/chatitem.cpp +++ b/src/qtui/chatitem.cpp @@ -32,6 +32,7 @@ #include "bufferview.h" #include "chatitem.h" #include "chatlinemodel.h" +#include "contextmenuactionprovider.h" #include "iconloader.h" #include "mainwin.h" #include "qtui.h" @@ -288,7 +289,7 @@ void ChatItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { void ChatItem::addActionsToMenu(QMenu *menu, const QPointF &pos) { Q_UNUSED(pos); - Client::mainUi()->actionProvider()->addActions(menu, chatScene()->filter(), data(MessageModel::BufferIdRole).value()); + GraphicalUi::contextMenuActionProvider()->addActions(menu, chatScene()->filter(), data(MessageModel::BufferIdRole).value()); } // ************************************************************ @@ -615,7 +616,7 @@ void ContentsChatItem::addActionsToMenu(QMenu *menu, const QPointF &pos) { foreach(QAction *action, menu->actions()) action->setVisible(false); QString name = data(ChatLineModel::DisplayRole).toString().mid(click.start, click.length); - Client::mainUi()->actionProvider()->addActions(menu, chatScene()->filter(), data(MessageModel::BufferIdRole).value(), name); + GraphicalUi::contextMenuActionProvider()->addActions(menu, chatScene()->filter(), data(MessageModel::BufferIdRole).value(), name); break; } default: diff --git a/src/qtui/chatscene.cpp b/src/qtui/chatscene.cpp index 89548155..4fdf92a0 100644 --- a/src/qtui/chatscene.cpp +++ b/src/qtui/chatscene.cpp @@ -34,6 +34,7 @@ #include "client.h" #include "clientbacklogmanager.h" #include "columnhandleitem.h" +#include "contextmenuactionprovider.h" #include "iconloader.h" #include "messagefilter.h" #include "qtui.h" @@ -586,7 +587,7 @@ void ChatScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { item->addActionsToMenu(&menu, item->mapFromScene(pos)); else // no item -> default scene actions - Client::mainUi()->actionProvider()->addActions(&menu, filter(), BufferId()); + GraphicalUi::contextMenuActionProvider()->addActions(&menu, filter(), BufferId()); menu.exec(event->screenPos()); diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index 2a999ea1..c8d6699b 100644 --- a/src/qtui/chatview.cpp +++ b/src/qtui/chatview.cpp @@ -28,7 +28,6 @@ #include "chatview.h" #include "client.h" #include "messagefilter.h" -#include "quasselui.h" ChatView::ChatView(BufferId bufferId, QWidget *parent) : QGraphicsView(parent), diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index b6a21ead..7c75310d 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -47,6 +47,7 @@ #include "clientbacklogmanager.h" #include "coreinfodlg.h" #include "coreconnectdlg.h" +#include "contextmenuactionprovider.h" #include "debuglogwidget.h" #include "debugmessagemodelfilter.h" #include "iconloader.h" @@ -134,7 +135,7 @@ void MainWin::init() { 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))); - connect(Client::mainUi()->actionProvider(), SIGNAL(showChannelList(NetworkId)), SLOT(showChannelList(NetworkId))); + connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showChannelList(NetworkId)), SLOT(showChannelList(NetworkId))); // Setup Dock Areas setDockNestingEnabled(true); diff --git a/src/qtui/qtui.cpp b/src/qtui/qtui.cpp index 979ebe4c..d8d808f9 100644 --- a/src/qtui/qtui.cpp +++ b/src/qtui/qtui.cpp @@ -23,8 +23,8 @@ #include "abstractnotificationbackend.h" #include "actioncollection.h" #include "chatlinemodel.h" +#include "contextmenuactionprovider.h" #include "mainwin.h" -#include "networkmodelactionprovider.h" #include "qtuimessageprocessor.h" #include "qtuisettings.h" #include "qtuistyle.h" @@ -38,14 +38,14 @@ QList QtUi::_notificationBackends; QList QtUi::_notifications; QtUiStyle *QtUi::_style = 0; -QtUi::QtUi() : AbstractUi() { +QtUi::QtUi() : GraphicalUi() { if(_instance != 0) { qWarning() << "QtUi has been instantiated again!"; return; } _instance = this; - _actionProvider = new NetworkModelActionProvider(this); + setContextMenuActionProvider(new ContextMenuActionProvider(this)); QtUiSettings uiSettings; Quassel::loadTranslation(uiSettings.value("Locale", QLocale::system()).value()); diff --git a/src/qtui/qtui.h b/src/qtui/qtui.h index 35593ca6..77916ce2 100644 --- a/src/qtui/qtui.h +++ b/src/qtui/qtui.h @@ -21,7 +21,7 @@ #ifndef QTUI_H #define QTUI_H -#include "quasselui.h" +#include "graphicalui.h" #include "abstractnotificationbackend.h" #include "mainwin.h" @@ -36,7 +36,7 @@ class QtUiStyle; /** This is basically a wrapper around MainWin, which is necessary because we cannot derive MainWin * from both QMainWindow and AbstractUi (because of multiple inheritance of QObject). */ -class QtUi : public AbstractUi { +class QtUi : public GraphicalUi { Q_OBJECT public: @@ -57,7 +57,6 @@ public: * @param category The category (default: "General") */ static ActionCollection *actionCollection(const QString &category = "General"); - inline AbstractActionProvider *actionProvider() const; /* Notifications */ @@ -71,7 +70,7 @@ public: static const QList &activeNotifications(); public slots: - void init(); + virtual void init(); protected slots: void connectedToCore(); @@ -79,8 +78,6 @@ protected slots: void notificationActivated(); private: - AbstractActionProvider *_actionProvider; - static QPointer _instance; static QPointer _mainWin; static QHash _actionCollections; @@ -92,6 +89,5 @@ private: QtUi *QtUi::instance() { return _instance ? _instance.data() : new QtUi(); } QtUiStyle *QtUi::style() { return _style; } MainWin *QtUi::mainWindow() { return _mainWin; } -AbstractActionProvider *QtUi::actionProvider() const { return _actionProvider; } #endif diff --git a/src/uisupport/CMakeLists.txt b/src/uisupport/CMakeLists.txt index e3172aac..d1c82b27 100644 --- a/src/uisupport/CMakeLists.txt +++ b/src/uisupport/CMakeLists.txt @@ -14,16 +14,19 @@ set(SOURCES clearablelineedit.cpp clickablelabel.cpp colorbutton.cpp + contextmenuactionprovider.cpp + graphicalui.cpp icon.cpp iconloader.cpp inputline.cpp - networkmodelactionprovider.cpp nickview.cpp nickviewfilter.cpp settingspage.cpp tabcompleter.cpp + #toolbaractionprovider.cpp uisettings.cpp - uistyle.cpp) + uistyle.cpp + ) set(MOC_HDRS abstractbuffercontainer.h @@ -36,13 +39,16 @@ set(MOC_HDRS clearablelineedit.h clickablelabel.h colorbutton.h + contextmenuactionprovider.h + graphicalui.h iconloader.h inputline.h - networkmodelactionprovider.h nickview.h nickviewfilter.h settingspage.h - tabcompleter.h) + tabcompleter.h + #toolbaractionprovider.h + ) set(HEADERS icon.h diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index 345fd7bb..8fbbdd34 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -35,11 +35,12 @@ #include "buffersettings.h" #include "buffersyncer.h" #include "client.h" +#include "contextmenuactionprovider.h" +#include "graphicalui.h" #include "iconloader.h" #include "network.h" #include "networkmodel.h" -#include "networkmodelactionprovider.h" -#include "quasselui.h" +#include "contextmenuactionprovider.h" #include "uisettings.h" /***************************************** @@ -386,7 +387,7 @@ void BufferView::addActionsToMenu(QMenu *contextMenu, const QModelIndex &index) indexList.removeAll(index); indexList.prepend(index); - Client::mainUi()->actionProvider()->addActions(contextMenu, indexList, this, "menuActionTriggered", (bool)config()); + GraphicalUi::contextMenuActionProvider()->addActions(contextMenu, indexList, this, "menuActionTriggered", (bool)config()); } void BufferView::addFilterActions(QMenu *contextMenu, const QModelIndex &index) { @@ -403,12 +404,12 @@ void BufferView::addFilterActions(QMenu *contextMenu, const QModelIndex &index) } void BufferView::menuActionTriggered(QAction *result) { - NetworkModelActionProvider::ActionType type = (NetworkModelActionProvider::ActionType)result->data().toInt(); + ContextMenuActionProvider::ActionType type = (ContextMenuActionProvider::ActionType)result->data().toInt(); switch(type) { - case NetworkModelActionProvider::HideBufferTemporarily: + case ContextMenuActionProvider::HideBufferTemporarily: removeSelectedBuffers(); break; - case NetworkModelActionProvider::HideBufferPermanently: + case ContextMenuActionProvider::HideBufferPermanently: removeSelectedBuffers(true); break; default: diff --git a/src/uisupport/networkmodelactionprovider.cpp b/src/uisupport/contextmenuactionprovider.cpp similarity index 86% rename from src/uisupport/networkmodelactionprovider.cpp rename to src/uisupport/contextmenuactionprovider.cpp index 9c817bfa..8ab622e8 100644 --- a/src/uisupport/networkmodelactionprovider.cpp +++ b/src/uisupport/contextmenuactionprovider.cpp @@ -22,7 +22,7 @@ #include #include -#include "networkmodelactionprovider.h" +#include "contextmenuactionprovider.h" #include "buffermodel.h" #include "buffersettings.h" @@ -31,8 +31,8 @@ #include "network.h" #include "util.h" -NetworkModelActionProvider::NetworkModelActionProvider(QObject *parent) -: AbstractActionProvider(parent), +ContextMenuActionProvider::ContextMenuActionProvider(QObject *parent) +: QObject(parent), _actionCollection(new ActionCollection(this)), _messageFilter(0), _receiver(0) @@ -114,7 +114,7 @@ NetworkModelActionProvider::NetworkModelActionProvider(QObject *parent) _nickModeMenuAction->setMenu(nickModeMenu); } -NetworkModelActionProvider::~NetworkModelActionProvider() { +ContextMenuActionProvider::~ContextMenuActionProvider() { _hideEventsMenuAction->menu()->deleteLater(); _hideEventsMenuAction->deleteLater(); _nickCtcpMenuAction->menu()->deleteLater(); @@ -123,11 +123,11 @@ NetworkModelActionProvider::~NetworkModelActionProvider() { _nickModeMenuAction->deleteLater(); } -void NetworkModelActionProvider::registerAction(ActionType type, const QString &text, bool checkable) { +void ContextMenuActionProvider::registerAction(ActionType type, const QString &text, bool checkable) { registerAction(type, QPixmap(), text, checkable); } -void NetworkModelActionProvider::registerAction(ActionType type, const QPixmap &icon, const QString &text, bool checkable) { +void ContextMenuActionProvider::registerAction(ActionType type, const QPixmap &icon, const QString &text, bool checkable) { Action *act; if(icon.isNull()) act = new Action(text, this); @@ -141,34 +141,34 @@ void NetworkModelActionProvider::registerAction(ActionType type, const QPixmap & _actionByType[type] = act; } -void NetworkModelActionProvider::addActions(QMenu *menu, BufferId bufId, QObject *receiver, const char *method) { +void ContextMenuActionProvider::addActions(QMenu *menu, BufferId bufId, QObject *receiver, const char *method) { if(!bufId.isValid()) return; addActions(menu, Client::networkModel()->bufferIndex(bufId), receiver, method); } -void NetworkModelActionProvider::addActions(QMenu *menu, const QModelIndex &index, QObject *receiver, const char *method, bool isCustomBufferView) { +void ContextMenuActionProvider::addActions(QMenu *menu, const QModelIndex &index, QObject *receiver, const char *method, bool isCustomBufferView) { if(!index.isValid()) return; addActions(menu, QList() << index, 0, QString(), receiver, method, isCustomBufferView); } -void NetworkModelActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, QObject *receiver, const char *slot) { +void ContextMenuActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, QObject *receiver, const char *slot) { addActions(menu, filter, msgBuffer, QString(), receiver, slot); } -void NetworkModelActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, const QString &chanOrNick, QObject *receiver, const char *method) { +void ContextMenuActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, const QString &chanOrNick, QObject *receiver, const char *method) { if(!filter) return; addActions(menu, QList() << Client::networkModel()->bufferIndex(msgBuffer), filter, chanOrNick, receiver, method, false); } -void NetworkModelActionProvider::addActions(QMenu *menu, const QList &indexList, QObject *receiver, const char *method, bool isCustomBufferView) { +void ContextMenuActionProvider::addActions(QMenu *menu, const QList &indexList, QObject *receiver, const char *method, bool isCustomBufferView) { addActions(menu, indexList, 0, QString(), receiver, method, isCustomBufferView); } // add a list of actions sensible for the current item(s) -void NetworkModelActionProvider::addActions(QMenu *menu, +void ContextMenuActionProvider::addActions(QMenu *menu, const QList &indexList, MessageFilter *filter, const QString &contextItem, @@ -244,7 +244,7 @@ void NetworkModelActionProvider::addActions(QMenu *menu, } } -void NetworkModelActionProvider::addNetworkItemActions(QMenu *menu, const QModelIndex &index) { +void ContextMenuActionProvider::addNetworkItemActions(QMenu *menu, const QModelIndex &index) { NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value(); if(!networkId.isValid()) return; @@ -261,7 +261,7 @@ void NetworkModelActionProvider::addNetworkItemActions(QMenu *menu, const QModel } -void NetworkModelActionProvider::addBufferItemActions(QMenu *menu, const QModelIndex &index, bool isCustomBufferView) { +void ContextMenuActionProvider::addBufferItemActions(QMenu *menu, const QModelIndex &index, bool isCustomBufferView) { BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); menu->addSeparator(); @@ -298,7 +298,7 @@ void NetworkModelActionProvider::addBufferItemActions(QMenu *menu, const QModelI } } -void NetworkModelActionProvider::addIrcUserActions(QMenu *menu, const QModelIndex &index) { +void ContextMenuActionProvider::addIrcUserActions(QMenu *menu, const QModelIndex &index) { // this can be called: a) as a nicklist context menu (index has IrcUserItemType) // b) as a query buffer context menu (index has BufferItemType and is a QueryBufferItem) // c) right-click in a query chatview (same as b), index will be the corresponding QueryBufferItem) @@ -325,7 +325,7 @@ void NetworkModelActionProvider::addIrcUserActions(QMenu *menu, const QModelInde /******** Helper Functions ***********************************************************************/ -bool NetworkModelActionProvider::checkRequirements(const QModelIndex &index, ItemActiveStates requiredActiveState) { +bool ContextMenuActionProvider::checkRequirements(const QModelIndex &index, ItemActiveStates requiredActiveState) { if(!index.isValid()) return false; @@ -339,19 +339,19 @@ bool NetworkModelActionProvider::checkRequirements(const QModelIndex &index, Ite return true; } -Action * NetworkModelActionProvider::addAction(ActionType type , QMenu *menu, const QModelIndex &index, ItemActiveStates requiredActiveState) { +Action * ContextMenuActionProvider::addAction(ActionType type , QMenu *menu, const QModelIndex &index, ItemActiveStates requiredActiveState) { return addAction(action(type), menu, checkRequirements(index, requiredActiveState)); } -Action * NetworkModelActionProvider::addAction(Action *action , QMenu *menu, const QModelIndex &index, ItemActiveStates requiredActiveState) { +Action * ContextMenuActionProvider::addAction(Action *action , QMenu *menu, const QModelIndex &index, ItemActiveStates requiredActiveState) { return addAction(action, menu, checkRequirements(index, requiredActiveState)); } -Action * NetworkModelActionProvider::addAction(ActionType type , QMenu *menu, bool condition) { +Action * ContextMenuActionProvider::addAction(ActionType type , QMenu *menu, bool condition) { return addAction(action(type), menu, condition); } -Action * NetworkModelActionProvider::addAction(Action *action , QMenu *menu, bool condition) { +Action * ContextMenuActionProvider::addAction(Action *action , QMenu *menu, bool condition) { if(condition) { menu->addAction(action); action->setVisible(true); @@ -361,21 +361,21 @@ Action * NetworkModelActionProvider::addAction(Action *action , QMenu *menu, boo return action; } -void NetworkModelActionProvider::addHideEventsMenu(QMenu *menu, BufferId bufferId) { +void ContextMenuActionProvider::addHideEventsMenu(QMenu *menu, BufferId bufferId) { if(BufferSettings(bufferId).hasFilter()) addHideEventsMenu(menu, BufferSettings(bufferId).messageFilter()); else addHideEventsMenu(menu); } -void NetworkModelActionProvider::addHideEventsMenu(QMenu *menu, MessageFilter *msgFilter) { +void ContextMenuActionProvider::addHideEventsMenu(QMenu *menu, MessageFilter *msgFilter) { if(BufferSettings(msgFilter->idString()).hasFilter()) addHideEventsMenu(menu, BufferSettings(msgFilter->idString()).messageFilter()); else addHideEventsMenu(menu); } -void NetworkModelActionProvider::addHideEventsMenu(QMenu *menu, int filter) { +void ContextMenuActionProvider::addHideEventsMenu(QMenu *menu, int filter) { action(HideApplyToAll)->setEnabled(filter != -1); action(HideUseDefaults)->setEnabled(filter != -1); if(filter == -1) @@ -391,7 +391,7 @@ void NetworkModelActionProvider::addHideEventsMenu(QMenu *menu, int filter) { menu->addAction(_hideEventsMenuAction); } -QString NetworkModelActionProvider::nickName(const QModelIndex &index) const { +QString ContextMenuActionProvider::nickName(const QModelIndex &index) const { IrcUser *ircUser = qobject_cast(index.data(NetworkModel::IrcUserRole).value()); if(ircUser) return ircUser->nick(); @@ -405,7 +405,7 @@ QString NetworkModelActionProvider::nickName(const QModelIndex &index) const { return bufferInfo.bufferName(); // FIXME this might break with merged queries maybe } -BufferId NetworkModelActionProvider::findQueryBuffer(const QModelIndex &index, const QString &predefinedNick) const { +BufferId ContextMenuActionProvider::findQueryBuffer(const QModelIndex &index, const QString &predefinedNick) const { NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value(); if(!networkId.isValid()) return BufferId(); @@ -417,11 +417,11 @@ BufferId NetworkModelActionProvider::findQueryBuffer(const QModelIndex &index, c return findQueryBuffer(networkId, nick); } -BufferId NetworkModelActionProvider::findQueryBuffer(NetworkId networkId, const QString &nick) const { +BufferId ContextMenuActionProvider::findQueryBuffer(NetworkId networkId, const QString &nick) const { return Client::networkModel()->bufferId(networkId, nick); } -void NetworkModelActionProvider::handleExternalAction(ActionType type, QAction *action) { +void ContextMenuActionProvider::handleExternalAction(ActionType type, QAction *action) { Q_UNUSED(type); if(_receiver && _method) { if(!QMetaObject::invokeMethod(_receiver, _method, Q_ARG(QAction *, action))) @@ -431,7 +431,7 @@ void NetworkModelActionProvider::handleExternalAction(ActionType type, QAction * /******** Handle Actions *************************************************************************/ -void NetworkModelActionProvider::actionTriggered(QAction *action) { +void ContextMenuActionProvider::actionTriggered(QAction *action) { ActionType type = (ActionType)action->data().toInt(); if(type > 0) { if(type & NetworkMask) @@ -454,7 +454,7 @@ void NetworkModelActionProvider::actionTriggered(QAction *action) { _receiver = 0; } -void NetworkModelActionProvider::handleNetworkAction(ActionType type, QAction *) { +void ContextMenuActionProvider::handleNetworkAction(ActionType type, QAction *) { if(!_indexList.count()) return; const Network *network = Client::network(_indexList.at(0).data(NetworkModel::NetworkIdRole).value()); @@ -474,7 +474,7 @@ void NetworkModelActionProvider::handleNetworkAction(ActionType type, QAction *) } } -void NetworkModelActionProvider::handleBufferAction(ActionType type, QAction *) { +void ContextMenuActionProvider::handleBufferAction(ActionType type, QAction *) { if(type == BufferRemove) { removeBuffers(_indexList); } else { @@ -504,7 +504,7 @@ void NetworkModelActionProvider::handleBufferAction(ActionType type, QAction *) } } -void NetworkModelActionProvider::removeBuffers(const QModelIndexList &indexList) { +void ContextMenuActionProvider::removeBuffers(const QModelIndexList &indexList) { QList inactive; foreach(QModelIndex index, indexList) { BufferInfo info = index.data(NetworkModel::BufferInfoRole).value(); @@ -532,21 +532,21 @@ void NetworkModelActionProvider::removeBuffers(const QModelIndexList &indexList) } } -void NetworkModelActionProvider::handleHideAction(ActionType type, QAction *action) { +void ContextMenuActionProvider::handleHideAction(ActionType type, QAction *action) { Q_UNUSED(action) int filter = 0; - if(NetworkModelActionProvider::action(HideJoin)->isChecked()) + if(ContextMenuActionProvider::action(HideJoin)->isChecked()) filter |= Message::Join; - if(NetworkModelActionProvider::action(HidePart)->isChecked()) + if(ContextMenuActionProvider::action(HidePart)->isChecked()) filter |= Message::Part; - if(NetworkModelActionProvider::action(HideQuit)->isChecked()) + if(ContextMenuActionProvider::action(HideQuit)->isChecked()) filter |= Message::Quit; - if(NetworkModelActionProvider::action(HideNick)->isChecked()) + if(ContextMenuActionProvider::action(HideNick)->isChecked()) filter |= Message::Nick; - if(NetworkModelActionProvider::action(HideMode)->isChecked()) + if(ContextMenuActionProvider::action(HideMode)->isChecked()) filter |= Message::Mode; - if(NetworkModelActionProvider::action(HideDayChange)->isChecked()) + if(ContextMenuActionProvider::action(HideDayChange)->isChecked()) filter |= Message::DayChange; switch(type) { @@ -586,7 +586,7 @@ void NetworkModelActionProvider::handleHideAction(ActionType type, QAction *acti }; } -void NetworkModelActionProvider::handleGeneralAction(ActionType type, QAction *action) { +void ContextMenuActionProvider::handleGeneralAction(ActionType type, QAction *action) { Q_UNUSED(action) if(!_indexList.count()) @@ -620,7 +620,7 @@ void NetworkModelActionProvider::handleGeneralAction(ActionType type, QAction *a } } -void NetworkModelActionProvider::handleNickAction(ActionType type, QAction *) { +void ContextMenuActionProvider::handleNickAction(ActionType type, QAction *) { foreach(QModelIndex index, _indexList) { NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value(); if(!networkId.isValid()) diff --git a/src/uisupport/networkmodelactionprovider.h b/src/uisupport/contextmenuactionprovider.h similarity index 94% rename from src/uisupport/networkmodelactionprovider.h rename to src/uisupport/contextmenuactionprovider.h index 688a8fc7..8cd519f1 100644 --- a/src/uisupport/networkmodelactionprovider.h +++ b/src/uisupport/contextmenuactionprovider.h @@ -24,14 +24,13 @@ #include "action.h" #include "actioncollection.h" #include "messagefilter.h" -#include "quasselui.h" -class NetworkModelActionProvider : public AbstractActionProvider { +class ContextMenuActionProvider : public QObject { Q_OBJECT public: - NetworkModelActionProvider(QObject *parent = 0); - ~NetworkModelActionProvider(); + ContextMenuActionProvider(QObject *parent = 0); + ~ContextMenuActionProvider(); // don't change enums without doublechecking masks etc. in code enum ActionType { @@ -177,6 +176,6 @@ private: }; // inlines -ActionCollection *NetworkModelActionProvider::actionCollection() const { return _actionCollection; } -Action *NetworkModelActionProvider::action(ActionType type) const { return _actionByType.value(type, 0); } +ActionCollection *ContextMenuActionProvider::actionCollection() const { return _actionCollection; } +Action *ContextMenuActionProvider::action(ActionType type) const { return _actionByType.value(type, 0); } #endif diff --git a/src/uisupport/graphicalui.cpp b/src/uisupport/graphicalui.cpp new file mode 100644 index 00000000..db526869 --- /dev/null +++ b/src/uisupport/graphicalui.cpp @@ -0,0 +1,33 @@ +/*************************************************************************** + * Copyright (C) 2005-09 by the Quassel Project * + * devel@quassel-irc.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) version 3. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "graphicalui.h" + +#include "contextmenuactionprovider.h" + +ContextMenuActionProvider *GraphicalUi::_contextMenuActionProvider = 0; + +GraphicalUi::GraphicalUi(QObject *parent) : AbstractUi(parent) { + +} + +void GraphicalUi::setContextMenuActionProvider(ContextMenuActionProvider *provider) { + _contextMenuActionProvider = provider; +} diff --git a/src/uisupport/graphicalui.h b/src/uisupport/graphicalui.h new file mode 100644 index 00000000..55dfd069 --- /dev/null +++ b/src/uisupport/graphicalui.h @@ -0,0 +1,48 @@ +/*************************************************************************** + * Copyright (C) 2005-09 by the Quassel Project * + * devel@quassel-irc.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) version 3. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef GRAPHICALUI_H_ +#define GRAPHICALUI_H_ + +#include "abstractui.h" + +class ContextMenuActionProvider; + +class GraphicalUi : public AbstractUi { + Q_OBJECT + +public: + GraphicalUi(QObject *parent = 0); + + inline static ContextMenuActionProvider *contextMenuActionProvider(); + +protected: + void setContextMenuActionProvider(ContextMenuActionProvider *); + +private: + static ContextMenuActionProvider *_contextMenuActionProvider; + +}; + +ContextMenuActionProvider *GraphicalUi::contextMenuActionProvider() { + return _contextMenuActionProvider; +} + +#endif diff --git a/src/uisupport/nickview.cpp b/src/uisupport/nickview.cpp index d6ced9b4..98fbee3b 100644 --- a/src/uisupport/nickview.cpp +++ b/src/uisupport/nickview.cpp @@ -27,9 +27,11 @@ #include "buffermodel.h" #include "client.h" +#include "contextmenuactionprovider.h" +#include "graphicalui.h" +#include "nickview.h" #include "nickviewfilter.h" #include "networkmodel.h" -#include "quasselui.h" #include "types.h" #include "uisettings.h" @@ -104,7 +106,7 @@ void NickView::showContextMenu(const QPoint & pos ) { indexList.prepend(index); QMenu contextMenu(this); - Client::mainUi()->actionProvider()->addActions(&contextMenu, indexList); + GraphicalUi::contextMenuActionProvider()->addActions(&contextMenu, indexList); contextMenu.exec(QCursor::pos()); }