- }
-
- QMenu contextMenu(this);
- NetworkModel::itemType itemType = static_cast<NetworkModel::itemType>(index.data(NetworkModel::ItemTypeRole).toInt());
-
- switch(itemType) {
- case NetworkModel::NetworkItemType:
- showChannelList.setData(index.data(NetworkModel::NetworkIdRole));
- _disconnectNetAction.setIcon(connectionStateIcon);
- _connectNetAction.setIcon(connectionStateIcon);
- addItemToMenu(showChannelList, contextMenu, index, ActiveState);
- addItemToMenu(_disconnectNetAction, contextMenu, index, ActiveState);
- addItemToMenu(_connectNetAction, contextMenu, index, InactiveState);
- addSeparatorToMenu(contextMenu, index, ActiveState);
- addItemToMenu(_joinChannelAction, contextMenu, index, ActiveState);
- break;
- case NetworkModel::BufferItemType:
- {
- BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
- switch(bufferInfo.type()) {
- case BufferInfo::ChannelBuffer:
- addItemToMenu(_joinBufferAction, contextMenu, index, InactiveState);
- addItemToMenu(_partBufferAction, contextMenu, index, ActiveState);
- addItemToMenu(_hideBufferTemporarilyAction, contextMenu, (bool)config());
- addItemToMenu(_hideBufferPermanentlyAction, contextMenu, (bool)config());
- addItemToMenu(_removeBufferAction, contextMenu, index, InactiveState);
- createHideEventsSubMenu(contextMenu);
- addItemToMenu(_ignoreListAction, contextMenu);
- break;
- case BufferInfo::QueryBuffer:
- addItemToMenu(_hideBufferTemporarilyAction, contextMenu, (bool)config());
- addItemToMenu(_hideBufferPermanentlyAction, contextMenu, (bool)config());
- addItemToMenu(_removeBufferAction, contextMenu);
- createHideEventsSubMenu(contextMenu);
- break;
- default:
- addItemToMenu(_hideBufferTemporarilyAction, contextMenu, (bool)config());
- addItemToMenu(_hideBufferPermanentlyAction, contextMenu, (bool)config());
- break;
- }
+
+ addFilterActions(&contextMenu, index);
+
+ if (!contextMenu.actions().isEmpty())
+ contextMenu.exec(QCursor::pos());
+}
+
+
+void BufferView::addActionsToMenu(QMenu *contextMenu, const QModelIndex &index)
+{
+ QModelIndexList indexList = selectedIndexes();
+ // make sure the item we clicked on is first
+ indexList.removeAll(index);
+ indexList.prepend(index);
+
+ GraphicalUi::contextMenuActionProvider()->addActions(contextMenu, indexList, this, "menuActionTriggered", (bool)config());
+}
+
+
+void BufferView::addFilterActions(QMenu *contextMenu, const QModelIndex &index)
+{
+ BufferViewFilter *filter = qobject_cast<BufferViewFilter *>(model());
+ if (filter) {
+ QList<QAction *> filterActions = filter->actions(index);
+ if (!filterActions.isEmpty()) {
+ contextMenu->addSeparator();
+ foreach(QAction *action, filterActions) {
+ contextMenu->addAction(action);
+ }
+ }