Also, don't add such actions outside of the actionProvider.
default:
break;
}
- }
+ } else {
- // Buffer-specific actions
- // We add these in ChatItem (rather than the scene), because they depend on the current clickable
- if(chatScene()->isSingleBufferScene()) {
- QModelIndex index = Client::networkModel()->bufferIndex(chatScene()->singleBufferId());
- if(index.isValid()) {
- menu->addSeparator();
- QtUi::mainWindow()->allBuffersView()->addActionsToMenu(menu, index);
- }
+ // Buffer-specific actions
+ Client::mainUi()->actionProvider()->addActions(menu, chatScene()->filter(), data(MessageModel::BufferIdRole).value<BufferId>());
}
-
}
void ContentsChatItem::copyLinkToClipboard() {
ChatItem *item = chatItemAt(pos);
if(item)
item->addActionsToMenu(&menu, item->mapFromScene(pos));
+ else
+ // no item -> default scene actions
+ Client::mainUi()->actionProvider()->addActions(&menu, filter(), BufferId());
menu.exec(event->screenPos());
virtual ~ChatScene();
inline QAbstractItemModel *model() const { return _model; }
+ inline MessageFilter *filter() const { return qobject_cast<MessageFilter*>(_model); }
inline QString idString() const { return _idString; }
int rowByScenePos(qreal y) const;
// ChatView actions
if(_contextItem.isEmpty()) {
// a) query buffer: handle like ircuser
- // b) general chatview: only react if _contextItem is set (i.e. we right-clicked on something)
+ // 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
- // for now, use the item type of a random buffer... assuming we never mix channel and query buffers
- //if(!_messageFilter->containedBuffers.count())
- // return;
- //BufferId randomBuf = _messageFilter->containedBuffers.values().at(0);
+ if(_messageFilter->containedBuffers().count() == 1) {
+ // we can handle this like a single bufferItem
+ QModelIndex index = Client::networkModel()->bufferIndex(_messageFilter->containedBuffers().values().at(0));
+ _indexList = QList<QModelIndex>() << index;
+ addBufferItemActions(menu, index);
+ return;
+ } else {
+ // TODO: actions for merged buffers... _indexList contains the index of the message we clicked on
+ }
}
}
}
}
void NetworkModelActionProvider::handleGeneralAction(ActionType type, QAction *action) {
+ Q_UNUSED(action)
+
if(!_indexList.count())
return;
NetworkId networkId = _indexList.at(0).data(NetworkModel::NetworkIdRole).value<NetworkId>();