From: Manuel Nickschas Date: Fri, 6 Feb 2009 00:24:04 +0000 (+0100) Subject: Respect item selections, make Join/Part work X-Git-Tag: 0.4.0~120 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=8221ad101ceadfdfbd2bfe9a441ff3d959122014 Respect item selections, make Join/Part work --- diff --git a/src/uisupport/toolbaractionprovider.cpp b/src/uisupport/toolbaractionprovider.cpp index 72d9e5e6..c3ea90a0 100644 --- a/src/uisupport/toolbaractionprovider.cpp +++ b/src/uisupport/toolbaractionprovider.cpp @@ -64,12 +64,21 @@ ToolBarActionProvider::ToolBarActionProvider(QObject *parent) connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), SLOT(networkCreated(NetworkId))); connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), SLOT(networkRemoved(NetworkId))); + + updateStates(); } ToolBarActionProvider::~ToolBarActionProvider() { } +void ToolBarActionProvider::updateStates() { + action(BufferPart)->setEnabled(_currentBuffer.isValid() + && _currentBuffer.data(NetworkModel::BufferTypeRole) == BufferInfo::ChannelBuffer + && _currentBuffer.data(NetworkModel::ItemActiveRole).toBool()); + +} + void ToolBarActionProvider::addActions(QToolBar *bar, ToolBarType type) { switch(type) { case NetworkToolBar: @@ -95,6 +104,37 @@ void ToolBarActionProvider::addActions(QToolBar *bar, ToolBarType type) { } } +void ToolBarActionProvider::currentBufferChanged(const QModelIndex &index) { + _currentBuffer = index; + updateStates(); +} + +void ToolBarActionProvider::nickSelectionChanged(const QModelIndexList &indexList) { + _selectedNicks = indexList; + updateStates(); +} + +// override those to set indexes right +void ToolBarActionProvider::handleNetworkAction(ActionType type, QAction *action) { + setIndexList(_currentBuffer); + NetworkModelController::handleNetworkAction(type, action); +} + +void ToolBarActionProvider::handleBufferAction(ActionType type, QAction *action) { + setIndexList(_currentBuffer); + NetworkModelController::handleBufferAction(type, action); +} + +void ToolBarActionProvider::handleNickAction(ActionType type, QAction *action) { + setIndexList(_selectedNicks); + NetworkModelController::handleNickAction(type, action); +} + +void ToolBarActionProvider::handleGeneralAction(ActionType type, QAction *action) { + setIndexList(_currentBuffer); + NetworkModelController::handleGeneralAction(type, action); +} + void ToolBarActionProvider::networkCreated(NetworkId id) { const Network *net = Client::network(id); Action *act = new Action(net->networkName(), this); diff --git a/src/uisupport/toolbaractionprovider.h b/src/uisupport/toolbaractionprovider.h index 59661d02..0fcc9919 100644 --- a/src/uisupport/toolbaractionprovider.h +++ b/src/uisupport/toolbaractionprovider.h @@ -40,18 +40,28 @@ public: void addActions(QToolBar *, ToolBarType type); +protected: + virtual void handleNetworkAction(ActionType, QAction *); + virtual void handleBufferAction(ActionType, QAction *); + virtual void handleNickAction(ActionType, QAction *); + virtual void handleGeneralAction(ActionType, QAction *); + private slots: void networkCreated(NetworkId id); void networkRemoved(NetworkId id); void networkUpdated(const Network *net = 0); void connectOrDisconnectNet(); - //void currentBufferChanged(BufferId id); + void currentBufferChanged(const QModelIndex &); + void nickSelectionChanged(const QModelIndexList &); + void updateStates(); private: QMenu *_networksConnectMenu, *_networksDisconnectMenu; QHash _networkActions; + QModelIndex _currentBuffer; + QModelIndexList _selectedNicks; }; #endif