+
+bool MainWin::event(QEvent *event) {
+ if(event->type() == QEvent::WindowActivate)
+ setTrayIconActivity(false);
+ return QMainWindow::event(event);
+}
+
+#ifdef HAVE_DBUS
+
+/*
+Using the notification-daemon from Freedesktop's Galago project
+http://www.galago-project.org/specs/notification/0.9/x408.html#command-notify
+*/
+void MainWin::sendDesktopNotification(const QString &title, const QString &message) {
+ QStringList actions;
+ QMap<QString, QVariant> hints;
+ UiSettings uiSettings;
+
+ hints["x"] = uiSettings.value("NotificationDesktopHintX", QVariant(0)).toInt(); // Standard hint: x location for the popup to show up
+ hints["y"] = uiSettings.value("NotificationDesktopHintY", QVariant(0)).toInt(); // Standard hint: y location for the popup to show up
+
+ actions << "click" << "Click Me!";
+
+ QDBusReply<uint> reply = desktopNotifications->Notify(
+ "Quassel", // Application name
+ notificationId, // ID of previous notification to replace
+ "", // Icon to display
+ title, // Summary / Header of the message to display
+ QString("%1: %2:\n%3").arg(QTime::currentTime().toString()).arg(title).arg(message), // Body of the message to display
+ actions, // Actions from which the user may choose
+ hints, // Hints to the server displaying the message
+ uiSettings.value("NotificationDesktopTimeout", QVariant(5000)).toInt() // Timeout in milliseconds
+ );
+
+ if(!reply.isValid()) {
+ /* ERROR */
+ // could also happen if no notification service runs, so... whatever :)
+ //qDebug() << "Error on sending notification..." << reply.error();
+ return;
+ }
+
+ notificationId = reply.value();
+
+ // qDebug() << "ID: " << notificationId << " Time: " << QTime::currentTime().toString();
+}
+
+
+void MainWin::desktopNotificationClosed(uint id, uint reason) {
+ Q_UNUSED(id); Q_UNUSED(reason);
+ // qDebug() << "OID: " << notificationId << " ID: " << id << " Reason: " << reason << " Time: " << QTime::currentTime().toString();
+ notificationId = 0;
+}
+
+
+void MainWin::desktopNotificationInvoked(uint id, const QString & action) {
+ Q_UNUSED(id); Q_UNUSED(action);
+ // qDebug() << "OID: " << notificationId << " ID: " << id << " Action: " << action << " Time: " << QTime::currentTime().toString();
+}
+
+#endif /* HAVE_DBUS */
+
+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->setObjectName(QString("NetworkAction-%1").arg(id.toInt()));
+ act->setData(QVariant::fromValue<NetworkId>(id));
+ connect(net, SIGNAL(updatedRemotely()), this, SLOT(clientNetworkUpdated()));
+ connect(act, SIGNAL(triggered()), this, SLOT(connectOrDisconnectFromNet()));
+
+ QAction *beforeAction = 0;
+ foreach(QAction *action, ui.menuNetworks->actions()) {
+ if(action->isSeparator()) {
+ beforeAction = action;
+ break;
+ }
+ if(net->networkName().localeAwareCompare(action->text()) < 0) {
+ beforeAction = action;
+ break;
+ }
+ }
+ Q_CHECK_PTR(beforeAction);
+ ui.menuNetworks->insertAction(beforeAction, act);
+}
+
+void MainWin::clientNetworkUpdated() {
+ const Network *net = qobject_cast<const Network *>(sender());
+ if(!net)
+ return;
+
+ QAction *action = findChild<QAction *>(QString("NetworkAction-%1").arg(net->networkId().toInt()));
+ if(!action)
+ return;
+
+ action->setText(net->networkName());
+
+ switch(net->connectionState()) {
+ case Network::Initialized:
+ action->setIcon(QIcon(":/16x16/actions/network-connect"));
+ break;
+ case Network::Disconnected:
+ action->setIcon(QIcon(":/16x16/actions/network-disconnect"));
+ break;
+ default:
+ action->setIcon(QIcon(":/16x16/actions/gear"));
+ }
+}
+
+void MainWin::clientNetworkRemoved(NetworkId id) {
+ QAction *action = findChild<QAction *>(QString("NetworkAction-%1").arg(id.toInt()));
+ if(!action)
+ return;
+
+ action->deleteLater();
+}
+
+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::on_actionDebugNetworkModel_triggered(bool) {
+ QTreeView *view = new QTreeView;
+ view->setAttribute(Qt::WA_DeleteOnClose);
+ view->setWindowTitle("Debug NetworkModel View");
+ view->setModel(Client::networkModel());
+ view->setColumnWidth(0, 250);
+ view->setColumnWidth(1, 250);
+ view->setColumnWidth(2, 80);
+ view->resize(610, 300);
+ view->show();
+}
+
+void MainWin::saveStateToSession(const QString &sessionId) {
+ return;
+ SessionSettings s(sessionId);
+
+ s.setValue("MainWinSize", size());
+ s.setValue("MainWinPos", pos());
+ s.setValue("MainWinState", saveState());
+}
+
+void MainWin::saveStateToSessionSettings(SessionSettings & s)
+{
+ s.setValue("MainWinSize", size());
+ s.setValue("MainWinPos", pos());
+ s.setValue("MainWinState", saveState());
+}