-void BufferView::toggleHeader(bool checked) {
- QAction *action = qobject_cast<QAction *>(sender());
- header()->setSectionHidden((action->property("column")).toInt(), !checked);
-}
-
-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) {
- // QMenu *hideEventsMenu = new QMenu(tr("Hide Events"), &menu);
- QMenu *hideEventsMenu = menu.addMenu(tr("Hide Events"));
- hideEventsMenu->addAction(&_hideJoinAction);
- hideEventsMenu->addAction(&_hidePartAction);
- hideEventsMenu->addAction(&_hideKillAction);
- 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
- }
- }
-
- QMenu contextMenu(this);
- NetworkModel::itemType itemType = static_cast<NetworkModel::itemType>(index.data(NetworkModel::ItemTypeRole).toInt());
-
- switch(itemType) {
- case NetworkModel::NetworkItemType:
- showChannelList.setData(index.data(NetworkModel::NetworkIdRole));
- _disconnectNetAction.setIcon(connectionStateIcon);
- _connectNetAction.setIcon(connectionStateIcon);
- addItemToMenu(showChannelList, contextMenu, index, ActiveState);
- addItemToMenu(_disconnectNetAction, contextMenu, network->connectionState() != Network::Disconnected);
- addItemToMenu(_connectNetAction, contextMenu, network->connectionState() == Network::Disconnected);
- addSeparatorToMenu(contextMenu, index, ActiveState);
- addItemToMenu(_joinChannelAction, contextMenu, index, ActiveState);
- break;
- case NetworkModel::BufferItemType:
- {
- BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
- switch(bufferInfo.type()) {
- case BufferInfo::ChannelBuffer:
- addItemToMenu(_joinBufferAction, contextMenu, index, InactiveState);
- addItemToMenu(_partBufferAction, contextMenu, index, ActiveState);
- addItemToMenu(_hideBufferTemporarilyAction, contextMenu, (bool)config());
- addItemToMenu(_hideBufferPermanentlyAction, contextMenu, (bool)config());
- addItemToMenu(_removeBufferAction, contextMenu, index, InactiveState);
- createHideEventsSubMenu(contextMenu);
- addItemToMenu(_ignoreListAction, contextMenu);
- break;
- case BufferInfo::QueryBuffer:
- addItemToMenu(_hideBufferTemporarilyAction, contextMenu, (bool)config());
- addItemToMenu(_hideBufferPermanentlyAction, contextMenu, (bool)config());
- addItemToMenu(_removeBufferAction, contextMenu);
- createHideEventsSubMenu(contextMenu);
- break;
- default:
- addItemToMenu(_hideBufferTemporarilyAction, contextMenu, (bool)config());
- addItemToMenu(_hideBufferPermanentlyAction, contextMenu, (bool)config());
- break;
- }
- }
- break;
- default:
- return;
- }
-
- if(contextMenu.actions().isEmpty())
- return;
- QAction *result = contextMenu.exec(QCursor::pos());
-
- // Handle Result
- if(network && result == &_connectNetAction) {
- network->requestConnect();
- return;
- }
-
- if(network && result == &_disconnectNetAction) {
- network->requestDisconnect();
- return;
- }
-
- if(result == &_joinChannelAction) {
- // 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(index.data(NetworkModel::NetworkIdRole).value<NetworkId>()), QString("/J %1").arg(channelName));