Respect item selections, make Join/Part work
authorManuel Nickschas <sputnick@quassel-irc.org>
Fri, 6 Feb 2009 00:24:04 +0000 (01:24 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Fri, 6 Feb 2009 00:26:32 +0000 (01:26 +0100)
src/uisupport/toolbaractionprovider.cpp
src/uisupport/toolbaractionprovider.h

index 72d9e5e..c3ea90a 100644 (file)
@@ -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);
index 59661d0..0fcc991 100644 (file)
@@ -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<NetworkId, Action *> _networkActions;
+  QModelIndex _currentBuffer;
+  QModelIndexList _selectedNicks;
 };
 
 #endif