Respect item selections, make Join/Part work
[quassel.git] / src / uisupport / toolbaractionprovider.cpp
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);