+ addActionsToMenu(&contextMenu, _menuIndex);
+ if(!contextMenu.actions().isEmpty())
+ contextMenu.exec(QCursor::pos());
+
+ _menuIndex = QModelIndex();
+}
+
+void BufferView::addActionsToMenu(QMenu *contextMenu, const QModelIndex &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;
+ }
+ }
+ break;
+ default:
+ return;
+ }
+}
+
+void BufferView::actionTriggered(QAction *result) {
+ const Network *network = Client::network(_menuIndex.data(NetworkModel::NetworkIdRole).value<NetworkId>());
+ Q_CHECK_PTR(network);
+
+ if(network && result == _menuActions.action("ConnectNet")) {
+ network->requestConnect();
+ return;
+ }
+
+ if(network && result == _menuActions.action("DisconnectNet")) {
+ network->requestDisconnect();
+ return;
+ }
+
+if(result == _menuActions.action("JoinChannel")) {
+ // FIXME no QInputDialog in Qtopia
+#ifndef Q_WS_QWS
+ bool ok;
+ QString channelName = QInputDialog::getText(this, tr("Join Channel"), tr("Input channel name:"), QLineEdit::Normal, QString(), &ok);
+ if(ok && !channelName.isEmpty()) {
+ Client::instance()->userInput(BufferInfo::fakeStatusBuffer(_menuIndex.data(NetworkModel::NetworkIdRole).value<NetworkId>()),
+ QString("/J %1").arg(channelName));
+ }
+#endif
+ return;
+ }
+
+ if(result == _menuActions.action("JoinBuffer")) {
+ BufferInfo bufferInfo = _menuIndex.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
+ Client::instance()->userInput(bufferInfo, QString("/JOIN %1").arg(bufferInfo.bufferName()));
+ return;
+ }