+ if(!systray->isVisible()) {
+ systray->show();
+ }
+ } else {
+ lower();
+ }
+ }
+}
+
+void MainWin::receiveMessage(const Message &msg) {
+ if(QApplication::activeWindow() != 0)
+ return;
+
+ if(msg.flags() & Message::Highlight || msg.bufferInfo().type() == BufferInfo::QueryBuffer) {
+ QString title = msg.bufferInfo().bufferName();;
+ if(msg.bufferInfo().type() != BufferInfo::QueryBuffer) {
+ QString sender = msg.sender();
+ int i = sender.indexOf("!");
+ if(i != -1)
+ sender = sender.left(i);
+ title += QString(" - %1").arg(sender);
+ }
+
+ UiSettings uiSettings;
+
+ if(uiSettings.value("DisplayPopupMessages", QVariant(true)).toBool()) {
+ // FIXME don't invoke style engine for this!
+ QString text = QtUi::style()->styleString(Message::mircToInternal(msg.text())).text;
+ displayTrayIconMessage(title, text);
+ }
+
+ if(uiSettings.value("AnimateTrayIcon", QVariant(true)).toBool()) {
+ QApplication::alert(this);
+ setTrayIconActivity(true);
+ }
+ }
+}
+
+bool MainWin::event(QEvent *event) {
+ if(event->type() == QEvent::WindowActivate)
+ setTrayIconActivity(false);
+ return QMainWindow::event(event);
+}
+
+void MainWin::displayTrayIconMessage(const QString &title, const QString &message) {
+ systray->showMessage(title, message);
+}
+
+void MainWin::setTrayIconActivity(bool active) {
+ if(active) {
+ if(!timer->isActive())
+ timer->start(500);
+ } else {
+ timer->stop();
+ systray->setIcon(onlineTrayIcon);
+ }
+}
+
+void MainWin::makeTrayIconBlink() {
+ if(trayIconActive) {
+ systray->setIcon(onlineTrayIcon);
+ trayIconActive = false;
+ } else {
+ systray->setIcon(activeTrayIcon);
+ trayIconActive = true;
+ }
+}
+
+
+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++;