- QAction *connectNetAction = new QAction(tr("Connect"), this);
- QAction *disconnectNetAction = new QAction(tr("Disconnect"), this);
-
- QAction *joinBufferAction = new QAction(tr("Join"), this);
- QAction *partBufferAction = new QAction(tr("Part"), this);
- QAction *removeBufferAction = new QAction(tr("Delete buffer"), this);
-
- QMenu *hideEventsMenu = new QMenu(tr("Hide Events"), this);
- QAction *hideJoinAction = hideEventsMenu->addAction(tr("Join Events"));
- QAction *hidePartAction = hideEventsMenu->addAction(tr("Part Events"));
- QAction *hideKillAction = hideEventsMenu->addAction(tr("Kill Events"));
- QAction *hideQuitAction = hideEventsMenu->addAction(tr("Quit Events"));
- QAction *hideModeAction = hideEventsMenu->addAction(tr("Mode Events"));
- hideJoinAction->setCheckable(true);
- hidePartAction->setCheckable(true);
- hideKillAction->setCheckable(true);
- hideQuitAction->setCheckable(true);
- hideModeAction->setCheckable(true);
- hideJoinAction->setEnabled(false);
- hidePartAction->setEnabled(false);
- hideKillAction->setEnabled(false);
- hideQuitAction->setEnabled(false);
- hideModeAction->setEnabled(false);
-
- QAction *ignoreListAction = new QAction(tr("Ignore list"), this);
- ignoreListAction->setEnabled(false);
- QAction *whoBufferAction = new QAction(tr("WHO"), this);
-
- if(index.data(NetworkModel::ItemTypeRole) == NetworkModel::NetworkItemType) {
- if(index.data(NetworkModel::ItemActiveRole).toBool()) {
- contextMenu.addAction(disconnectNetAction);
- } else {
- contextMenu.addAction(connectNetAction);
+ addActionsToMenu(&contextMenu, index);
+ if(!contextMenu.actions().isEmpty())
+ contextMenu.exec(QCursor::pos());
+
+}
+
+void BufferView::addActionsToMenu(QMenu *contextMenu, const QModelIndex &index) {
+ _menuIndex = index;
+ const Network *network = Client::network(index.data(NetworkModel::NetworkIdRole).value<NetworkId>());
+ Q_CHECK_PTR(network);
+
+ NetworkModel::itemType itemType = static_cast<NetworkModel::itemType>(index.data(NetworkModel::ItemTypeRole).toInt());
+
+ switch(itemType) {
+ case NetworkModel::NetworkItemType:
+ showChannelList.setData(index.data(NetworkModel::NetworkIdRole));
+ addItemToMenu(&showChannelList, contextMenu, index, ActiveState);
+ addItemToMenu(_menuActions.action("DisconnectNet"), contextMenu, network->connectionState() != Network::Disconnected);
+ addItemToMenu(_menuActions.action("ConnectNet"), contextMenu, network->connectionState() == Network::Disconnected);
+ addSeparatorToMenu(contextMenu, index, ActiveState);
+ addItemToMenu(_menuActions.action("JoinChannel"), contextMenu, index, ActiveState);
+ break;
+ case NetworkModel::BufferItemType:
+ {
+ BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
+ switch(bufferInfo.type()) {
+ case BufferInfo::ChannelBuffer:
+ addItemToMenu(_menuActions.action("JoinBuffer"), contextMenu, index, InactiveState);
+ addItemToMenu(_menuActions.action("PartBuffer"), contextMenu, index, ActiveState);
+ addItemToMenu(_menuActions.action("HideBuffersTemporarily"), contextMenu, (bool)config());
+ addItemToMenu(_menuActions.action("HideBuffersPermanently"), contextMenu, (bool)config());
+ addItemToMenu(_menuActions.action("RemoveBuffer"), contextMenu, index, InactiveState);
+ createHideEventsSubMenu(contextMenu, bufferInfo.bufferId());
+ addItemToMenu(_menuActions.action("IgnoreList"), contextMenu);
+ break;
+ case BufferInfo::QueryBuffer:
+ addItemToMenu(_menuActions.action("HideBuffersTemporarily"), contextMenu, (bool)config());
+ addItemToMenu(_menuActions.action("HideBuffersPermanently"), contextMenu, (bool)config());
+ addItemToMenu(_menuActions.action("RemoveBuffer"), contextMenu);
+ createHideEventsSubMenu(contextMenu, bufferInfo.bufferId());
+ break;
+ default:
+ addItemToMenu(_menuActions.action("HideBuffersTemporarily"), contextMenu, (bool)config());
+ addItemToMenu(_menuActions.action("HideBuffersPermanently"), contextMenu, (bool)config());
+ break;
+ }