+bool BufferView::checkRequirements(const QModelIndex &index, ItemActiveStates requiredActiveState) {
+ if(!index.isValid())
+ return false;
+
+ ItemActiveStates isActive = index.data(NetworkModel::ItemActiveRole).toBool()
+ ? ActiveState
+ : InactiveState;
+
+ if(!(isActive & requiredActiveState))
+ return false;
+
+ return true;
+}
+
+void BufferView::addItemToMenu(QAction &action, QMenu &menu, const QModelIndex &index, ItemActiveStates requiredActiveState) {
+ if(checkRequirements(index, requiredActiveState)) {
+ menu.addAction(&action);
+ action.setVisible(true);
+ } else {
+ action.setVisible(false);
+ }
+}
+
+void BufferView::addItemToMenu(QAction &action, QMenu &menu, bool condition) {
+ if(condition) {
+ menu.addAction(&action);
+ action.setVisible(true);
+ } else {
+ action.setVisible(false);
+ }
+}
+
+
+void BufferView::addItemToMenu(QMenu &subMenu, QMenu &menu, const QModelIndex &index, ItemActiveStates requiredActiveState) {
+ if(checkRequirements(index, requiredActiveState)) {
+ menu.addMenu(&subMenu);
+ subMenu.setVisible(true);
+ } else {
+ subMenu.setVisible(false);
+ }
+}
+
+void BufferView::addSeparatorToMenu(QMenu &menu, const QModelIndex &index, ItemActiveStates requiredActiveState) {
+ if(checkRequirements(index, requiredActiveState)) {
+ menu.addSeparator();
+ }
+}
+
+QMenu *BufferView::createHideEventsSubMenu(QMenu &menu, BufferId bufferId) {
+ int filter = BufferSettings(bufferId).messageFilter();
+ _hideJoinAction.setChecked(filter & Message::Join);
+ _hidePartAction.setChecked(filter & Message::Part);
+ _hideQuitAction.setChecked(filter & Message::Quit);
+ _hideModeAction.setChecked(filter & Message::Mode);
+
+ QMenu *hideEventsMenu = menu.addMenu(tr("Hide Events"));
+ hideEventsMenu->addAction(&_hideJoinAction);
+ hideEventsMenu->addAction(&_hidePartAction);
+ hideEventsMenu->addAction(&_hideQuitAction);
+ hideEventsMenu->addAction(&_hideModeAction);
+ return hideEventsMenu;
+}
+
+void BufferView::contextMenuEvent(QContextMenuEvent *event) {
+ QModelIndex index = indexAt(event->pos());
+ if(!index.isValid())
+ index = rootIndex();
+ if(!index.isValid())
+ return;
+
+ const Network *network = Client::network(index.data(NetworkModel::NetworkIdRole).value<NetworkId>());
+ Q_CHECK_PTR(network);
+
+ QPixmap connectionStateIcon;
+ if(network) {
+ if(network->connectionState() == Network::Initialized) {
+ connectionStateIcon = SmallIcon("network-connect");
+ } else if(network->connectionState() == Network::Disconnected) {
+ connectionStateIcon = SmallIcon("network-disconnect");
+ } else {
+ connectionStateIcon = SmallIcon("network-wired"); // FIXME network-connecting
+ }
+ }
+