From 16386458ff461edfdfd498fe737436ce9297babf Mon Sep 17 00:00:00 2001 From: Kevin Smith Date: Sun, 24 Oct 2010 16:50:14 +0100 Subject: Blind attempt at animated system tray diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index 614e2d2..f6fe40c 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -427,6 +427,7 @@ void MainController::performLoginFromCachedCredentials() { /* In case we're in the middle of another login, make sure they don't overlap */ client_->disconnect(); } + systemTrayController_->setConnecting(); if (rosterController_) { rosterController_->getWindow()->setConnecting(); } diff --git a/Swift/Controllers/SystemTray.h b/Swift/Controllers/SystemTray.h index 2821785..736b1fa 100644 --- a/Swift/Controllers/SystemTray.h +++ b/Swift/Controllers/SystemTray.h @@ -14,5 +14,6 @@ namespace Swift { virtual ~SystemTray(){}; virtual void setUnreadMessages(bool some) = 0; virtual void setStatusType(StatusShow::Type type) = 0; + virtual void setConnecting() = 0; }; } diff --git a/Swift/Controllers/SystemTrayController.cpp b/Swift/Controllers/SystemTrayController.cpp index d3824c9..598771c 100644 --- a/Swift/Controllers/SystemTrayController.cpp +++ b/Swift/Controllers/SystemTrayController.cpp @@ -35,4 +35,8 @@ void SystemTrayController::setMyStatusType(StatusShow::Type type) { systemTray_->setStatusType(type); } +void SystemTrayController::setConnecting() { + systemTray_->setConnecting(); +} + } diff --git a/Swift/Controllers/SystemTrayController.h b/Swift/Controllers/SystemTrayController.h index 8fd514f..3624ea2 100644 --- a/Swift/Controllers/SystemTrayController.h +++ b/Swift/Controllers/SystemTrayController.h @@ -16,6 +16,7 @@ namespace Swift { public: SystemTrayController(EventController* eventController, SystemTray* systemTray); void setMyStatusType(StatusShow::Type type); + void setConnecting(); private: void handleEventQueueLengthChange(int length); diff --git a/Swift/QtUI/QtSystemTray.cpp b/Swift/QtUI/QtSystemTray.cpp index 57bf20c..90d07dd 100644 --- a/Swift/QtUI/QtSystemTray.cpp +++ b/Swift/QtUI/QtSystemTray.cpp @@ -11,7 +11,7 @@ #include namespace Swift { -QtSystemTray::QtSystemTray() : QObject(), onlineIcon_(":icons/online.png"), awayIcon_(":icons/away.png"), dndIcon_(":icons/dnd.png"), offlineIcon_(":icons/offline.png"), newMessageIcon_(":icons/new-chat.png"), unreadMessages_(false) { +QtSystemTray::QtSystemTray() : QObject(), onlineIcon_(":icons/online.png"), awayIcon_(":icons/away.png"), dndIcon_(":icons/dnd.png"), offlineIcon_(":icons/offline.png"), newMessageIcon_(":icons/new-chat.png"), throbberIcon_(":/icons/throbber.gif"), unreadMessages_(false), connecting_(false) { trayIcon_ = new QSystemTrayIcon(offlineIcon_); connect(trayIcon_, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(handleIconActivated(QSystemTrayIcon::ActivationReason))); trayIcon_->show(); @@ -26,12 +26,17 @@ void QtSystemTray::setUnreadMessages(bool some) { updateStatusIcon(); } +void QtSystemTray::setConnecting() { + connecting_ = true; +} + void QtSystemTray::handleIconActivated(QSystemTrayIcon::ActivationReason reason) { if (reason == QSystemTrayIcon::Trigger) { emit clicked(); } } void QtSystemTray::setStatusType(StatusShow::Type type) { + connecting_ = false; statusType_ = type; updateStatusIcon(); } @@ -39,7 +44,9 @@ void QtSystemTray::setStatusType(StatusShow::Type type) { void QtSystemTray::updateStatusIcon() { if (unreadMessages_) { trayIcon_->setIcon(newMessageIcon_); - } else { + } else if (connecting_) { + trayIcon_->setIcon(throbberIcon_); + } else { switch (statusType_) { case StatusShow::Online : trayIcon_->setIcon(onlineIcon_);break; case StatusShow::FFC : trayIcon_->setIcon(onlineIcon_);break; diff --git a/Swift/QtUI/QtSystemTray.h b/Swift/QtUI/QtSystemTray.h index c889ecf..30fc860 100644 --- a/Swift/QtUI/QtSystemTray.h +++ b/Swift/QtUI/QtSystemTray.h @@ -20,6 +20,7 @@ namespace Swift { ~QtSystemTray(); void setUnreadMessages(bool some); void setStatusType(StatusShow::Type type); + void setConnecting(); signals: void clicked(); private slots: @@ -33,6 +34,8 @@ namespace Swift { QIcon dndIcon_; QIcon offlineIcon_; QIcon newMessageIcon_; + QIcon throbberIcon_; bool unreadMessages_; + bool connecting_; }; } -- cgit v0.10.2-6-g49f6