+void MainWin::showNetworkDlg() {
+ SettingsPageDlg dlg(new NetworksSettingsPage(this), this);
+ dlg.exec();
+}
+
+void MainWin::clientNetworkCreated(NetworkId id) {
+ const Network *net = Client::network(id);
+ QAction *act = new QAction(net->networkName(), this);
+ act->setData(QVariant::fromValue<NetworkId>(id));
+ connect(net, SIGNAL(updatedRemotely()), this, SLOT(clientNetworkUpdated()));
+ connect(act, SIGNAL(triggered()), this, SLOT(connectOrDisconnectFromNet()));
+ bool inserted = false;
+ for(int i = 0; i < networkActions.count(); i++) {
+ if(net->networkName().localeAwareCompare(networkActions[i]->text()) < 0) {
+ networkActions.insert(i, act);
+ inserted = true;
+ break;
+ }
+ }
+ if(!inserted) networkActions.append(act);
+ ui.menuNetworks->clear(); // why the f*** isn't there a QMenu::insertAction()???
+ foreach(QAction *a, networkActions) ui.menuNetworks->addAction(a);
+ ui.menuNetworks->addSeparator();
+ ui.menuNetworks->addAction(actionEditNetworks);
+}
+
+void MainWin::clientNetworkUpdated() {
+ const Network *net = qobject_cast<const Network *>(sender());
+ if(!net) return;
+ foreach(QAction *a, networkActions) {
+ if(a->data().value<NetworkId>() == net->networkId()) {
+ a->setText(net->networkName());
+ if(net->connectionState() == Network::Initialized) {
+ a->setIcon(QIcon(":/16x16/actions/network-connect"));
+ a->setEnabled(true);
+ } else if(net->connectionState() == Network::Disconnected) {
+ a->setIcon(QIcon(":/16x16/actions/network-disconnect"));
+ a->setEnabled(true);
+ } else {
+ a->setIcon(QIcon(":/16x16/actions/gear"));
+ a->setEnabled(false);
+ }
+ return;
+ }
+ }
+}
+
+void MainWin::clientNetworkRemoved(NetworkId id) {
+ QList<QAction *>::iterator actionIter = networkActions.begin();;
+ QAction *action;
+ while(actionIter != networkActions.end()) {
+ action = *actionIter;
+ if(action->data().value<NetworkId>() == id) {
+ action->deleteLater();
+ actionIter = networkActions.erase(actionIter);
+ } else
+ actionIter++;
+ }
+}
+
+void MainWin::connectOrDisconnectFromNet() {
+ QAction *act = qobject_cast<QAction *>(sender());
+ if(!act) return;
+ const Network *net = Client::network(act->data().value<NetworkId>());
+ if(!net) return;
+ if(net->connectionState() == Network::Disconnected) net->requestConnect();
+ else net->requestDisconnect();
+}
+
+void MainWin::keyPressEvent(QKeyEvent *event) {
+#ifdef Q_WS_MAC
+ int bindModifier = Qt::ControlModifier | Qt::AltModifier;
+ int jumpModifier = Qt::ControlModifier;
+#else
+ int bindModifier = Qt::ControlModifier;
+ int jumpModifier = Qt::AltModifier;
+#endif
+
+ if(Qt::Key_0 <= event->key() && event->key() <= Qt::Key_9) {
+ if(event->modifiers() == bindModifier) {
+ QModelIndex bufferIdx = Client::bufferModel()->standardSelectionModel()->currentIndex();
+ NetworkId netId = bufferIdx.data(NetworkModel::NetworkIdRole).value<NetworkId>();
+ const Network *net = Client::network(netId);
+ if(!net)
+ return;
+ QString bufferName = bufferIdx.sibling(bufferIdx.row(), 0).data().toString();
+
+ _keyboardJump[event->key()] = bufferIdx;
+ statusBar()->showMessage(tr("Bound Buffer %1::%2 to Key %3").arg(net->networkName()).arg(bufferName).arg(event->key() - Qt::Key_0), 10000);
+ event->accept();
+ }
+
+ else if(event->modifiers() == jumpModifier && _keyboardJump.contains(event->key())) {
+ Client::bufferModel()->standardSelectionModel()->setCurrentIndex(_keyboardJump[event->key()], QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
+ event->accept();
+ }
+
+ else {
+ event->ignore();
+ }
+ }
+ event->ignore();