QString BufferInfo::bufferName() const { if (isChannelName(_bufferName)) return _bufferName; else return nickFromMask(_bufferName); // FIXME get rid of global functions and use the Network stuff instead! }
// add a list of actions sensible for the current item(s) void ContextMenuActionProvider::addActions(QMenu *menu, const QList<QModelIndex> &indexList_, MessageFilter *filter_, const QString &contextItem_, QObject *receiver_, const char *method_, bool isCustomBufferView) { if (!indexList_.count()) return; setIndexList(indexList_); setMessageFilter(filter_); setContextItem(contextItem_); setSlot(receiver_, method_); if (!messageFilter()) { // this means we are in a BufferView (or NickView) rather than a ChatView // first index in list determines the menu type (just in case we have both buffers and networks selected, for example) QModelIndex index = indexList().at(0); NetworkModel::ItemType itemType = static_cast<NetworkModel::ItemType>(index.data(NetworkModel::ItemTypeRole).toInt()); switch (itemType) { case NetworkModel::NetworkItemType: addNetworkItemActions(menu, index); break; case NetworkModel::BufferItemType: addBufferItemActions(menu, index, isCustomBufferView); break; case NetworkModel::IrcUserItemType: addIrcUserActions(menu, index); break; default: return; } } else { // ChatView actions if (contextItem().isEmpty()) { // a) query buffer: handle like ircuser // b) general chatview: handle like channel iff it displays a single buffer // NOTE stuff breaks probably with merged buffers, need to rework a lot around here then if (messageFilter()->containedBuffers().count() == 1) { // we can handle this like a single bufferItem QModelIndex index = Client::networkModel()->bufferIndex(messageFilter()->containedBuffers().values().at(0)); setIndexList(index); addBufferItemActions(menu, index); return; } else { // TODO: actions for merged buffers... _indexList contains the index of the message we clicked on } } else { // context item = chan or nick, _indexList = buf where the msg clicked on originated if (isChannelName(contextItem())) { QModelIndex msgIdx = indexList().at(0); if (!msgIdx.isValid()) return; NetworkId networkId = msgIdx.data(NetworkModel::NetworkIdRole).value<NetworkId>(); BufferId bufId = Client::networkModel()->bufferId(networkId, contextItem()); if (bufId.isValid()) { QModelIndex targetIdx = Client::networkModel()->bufferIndex(bufId); setIndexList(targetIdx); addAction(BufferJoin, menu, targetIdx, InactiveState); addAction(BufferSwitchTo, menu, targetIdx, ActiveState); } else addAction(JoinChannel, menu); } else { // TODO: actions for a nick } } } }