From 76a276c472cb99032e2407d8e4bc2f2d693e8e67 Mon Sep 17 00:00:00 2001 From: Alexander von Renteln Date: Thu, 20 Mar 2008 00:28:30 +0000 Subject: [PATCH] -added tray icon notification -nick widget is hidden in non channels --- src/client/client.cpp | 2 + src/client/client.h | 1 + src/client/networkmodel.cpp | 1 - src/icons/icons.qrc | 1 + src/icons/quassel-icon-active.png | Bin 0 -> 5616 bytes src/qtui/mainwin.cpp | 74 +++++++++++++++++++++++++++--- src/qtui/mainwin.h | 13 ++++++ src/qtui/nicklistwidget.cpp | 59 +++++++++++++++++++++++- src/qtui/nicklistwidget.h | 10 ++++ version.inc | 2 +- 10 files changed, 153 insertions(+), 10 deletions(-) create mode 100644 src/icons/quassel-icon-active.png diff --git a/src/client/client.cpp b/src/client/client.cpp index e276cd80..1c4b446e 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -475,6 +475,8 @@ void Client::recvMessage(const Message &message) { Message mmsg = Message(msg.timestamp(), msg.bufferInfo(), msg.type(), msg.text(), sender, msg.flags()); monitorBuffer()->appendMsg(mmsg); } + + emit messageReceived(msg); } void Client::recvStatusMsg(QString /*net*/, QString /*msg*/) { diff --git a/src/client/client.h b/src/client/client.h index f7e0dc01..fad53acf 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -119,6 +119,7 @@ signals: void backlogReceived(Buffer *, QList); void requestBacklog(BufferInfo, QVariant, QVariant); void requestNetworkStates(); + void messageReceived(const Message &msg); void showConfigWizard(const QVariantMap &coredata); diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 6b1a785f..e40c5055 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -33,7 +33,6 @@ #include "util.h" // get rid of this (needed for isChannelName) -// #define PHONDEV /***************************************** * Fancy Buffer Items diff --git a/src/icons/icons.qrc b/src/icons/icons.qrc index 187c37d8..4ece047f 100644 --- a/src/icons/icons.qrc +++ b/src/icons/icons.qrc @@ -596,5 +596,6 @@ quassel-icon.png + quassel-icon-active.png diff --git a/src/icons/quassel-icon-active.png b/src/icons/quassel-icon-active.png new file mode 100644 index 0000000000000000000000000000000000000000..e834f95c218028486ba5619742a53a117e348d5a GIT binary patch literal 5616 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

Z##4Avrj&-Zq4#O^bu-Y2y7x^V^Ke>ia_fu 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 KMNUMnLSTZ6(73n& literal 0 HcmV?d00001 diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 1d1372da..e81eb889 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -56,12 +56,16 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent) : QMainWindow(parent), gui(_gui), + activeTrayIcon(":/icons/quassel-icon-active.png"), + inactiveTrayIcon(":/icons/quassel-icon.png"), + trayIconActive(false), + timer(new QTimer(this)), settingsDlg(new SettingsDlg(this)), debugConsole(new DebugConsole(this)) { ui.setupUi(this); setWindowTitle("Quassel IRC"); - setWindowIcon(QIcon(":icons/quassel-icon.png")); + setWindowIcon(inactiveTrayIcon); setWindowIconText("Quassel IRC"); statusBar()->showMessage(tr("Waiting for core...")); @@ -81,7 +85,7 @@ void MainWin::init() { connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), this, SLOT(clientNetworkCreated(NetworkId))); connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), this, SLOT(clientNetworkRemoved(NetworkId))); ui.bufferWidget->init(); - + show(); statusBar()->showMessage(tr("Not connected to core.")); @@ -103,7 +107,6 @@ void MainWin::init() { setupInputWidget(); setupSystray(); - setupSettingsDlg(); // restore mainwin state @@ -200,9 +203,11 @@ void MainWin::setupNickWidget() { nickListWidget = new NickListWidget(nickDock); nickDock->setWidget(nickListWidget); + nickListWidget->setShowDockAction(nickDock->toggleViewAction()); + connect(nickDock->toggleViewAction(), SIGNAL(toggled(bool)), nickListWidget, SLOT(changedVisibility(bool))); addDockWidget(Qt::RightDockWidgetArea, nickDock); - ui.menuViews->addAction(nickDock->toggleViewAction()); + ui.menuViews->addAction(nickListWidget->showNickListAction()); // attach the NickListWidget to the BufferModel and the default selection nickListWidget->setModel(Client::bufferModel()); @@ -270,8 +275,11 @@ void MainWin::setupTopicWidget() { } void MainWin::setupSystray() { + connect(timer, SIGNAL(timeout()), this, SLOT(makeTrayIconBlink())); + connect(Client::instance(), SIGNAL(messageReceived(const Message &)), this, SLOT(receiveMessage(const Message &))); + systray = new QSystemTrayIcon(this); - systray->setIcon(QIcon(":/icons/quassel-icon.png")); + systray->setIcon(inactiveTrayIcon); // systray->setToolTip("left click to minimize the quassel client to tray"); // systray->setToolTip(toolTip); @@ -398,8 +406,9 @@ void MainWin::toggleVisibility() { showNormal(); raise(); - setFocus(Qt::ActiveWindowFocusReason); - // activateWindow(); + activateWindow(); + // setFocus(); //Qt::ActiveWindowFocusReason + } else { if(systray->isSystemTrayAvailable ()) { clearFocus(); @@ -413,6 +422,57 @@ void MainWin::toggleVisibility() { } } +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); + } + QString text = QtUi::style()->styleString(Message::mircToInternal(msg.text())).text; + displayTrayIconMessage(title, text); + 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(inactiveTrayIcon); + } +} + +void MainWin::makeTrayIconBlink() { + if(trayIconActive) { + systray->setIcon(inactiveTrayIcon); + trayIconActive = false; + } else { + systray->setIcon(activeTrayIcon); + trayIconActive = true; + } +} + + void MainWin::showNetworkDlg() { SettingsPageDlg dlg(new NetworksSettingsPage(this), this); dlg.exec(); diff --git a/src/qtui/mainwin.h b/src/qtui/mainwin.h index 57c8bb3d..32bf286e 100644 --- a/src/qtui/mainwin.h +++ b/src/qtui/mainwin.h @@ -27,6 +27,7 @@ #include "bufferviewfilter.h" #include +#include class ServerListDlg; class CoreConnectDlg; @@ -49,6 +50,12 @@ class MainWin : public QMainWindow { QDockWidget *addBufferView(const QString &, QAbstractItemModel *, const BufferViewFilter::Modes &, const QList &); AbstractUiMsg *layoutMsg(const Message &); + void displayTrayIconMessage(const QString &title, const QString &message); + + virtual bool event(QEvent *event); + + public slots: + void setTrayIconActivity(bool active = false); protected: void closeEvent(QCloseEvent *event); @@ -60,6 +67,7 @@ class MainWin : public QMainWindow { void systrayActivated( QSystemTrayIcon::ActivationReason ); private slots: + void receiveMessage(const Message &msg); void showSettingsDlg(); void showNetworkDlg(); void showAboutDlg(); @@ -74,6 +82,7 @@ class MainWin : public QMainWindow { void connectOrDisconnectFromNet(); void changeTopic(const QString &topic); + void makeTrayIconBlink(); signals: void connectToCore(const QVariantMap &connInfo); @@ -101,6 +110,10 @@ class MainWin : public QMainWindow { void enableMenus(); QSystemTrayIcon *systray; + QIcon activeTrayIcon; + QIcon inactiveTrayIcon; + bool trayIconActive; + QTimer *timer; CoreConnectDlg *coreConnectDlg; SettingsDlg *settingsDlg; diff --git a/src/qtui/nicklistwidget.cpp b/src/qtui/nicklistwidget.cpp index 714731a9..68a6757c 100644 --- a/src/qtui/nicklistwidget.cpp +++ b/src/qtui/nicklistwidget.cpp @@ -26,11 +26,58 @@ #include "networkmodel.h" #include "buffermodel.h" #include "nickviewfilter.h" +#include "qtuisettings.h" NickListWidget::NickListWidget(QWidget *parent) - : AbstractItemView(parent) + : AbstractItemView(parent), + _showNickListAction(new QAction(tr("Nicks"), this)), + _showDockAction(0) { + _showNickListAction->setCheckable(true); + QtUiSettings s; + _showNickListAction->setChecked(s.value("ShowNickListAction", QVariant(true)).toBool()); ui.setupUi(this); + connect(_showNickListAction, SIGNAL(toggled(bool)), this, SLOT(showWidget(bool))); +} + +NickListWidget::~NickListWidget() { + QtUiSettings s; + s.setValue("ShowNickListAction", showNickListAction()->isChecked()); +} + +void NickListWidget::setShowDockAction(QAction *action) { + _showDockAction = action; +} + +QAction *NickListWidget::showDockAction() const { + return _showDockAction; +} + +QAction *NickListWidget::showNickListAction() const { + return _showNickListAction; +} + +void NickListWidget::showWidget(bool visible) { + if(!selectionModel()) + return; + + QModelIndex currentIndex = selectionModel()->currentIndex(); + if(currentIndex.data(NetworkModel::BufferTypeRole) == BufferInfo::ChannelBuffer && showDockAction()) { + if(visible != showDockAction()->isChecked()) { + // show or hide + showDockAction()->trigger(); + } + } +} + +void NickListWidget::changedVisibility(bool visible) { + if(!selectionModel()) + return; + + QModelIndex currentIndex = selectionModel()->currentIndex(); + if(currentIndex.data(NetworkModel::BufferTypeRole) == BufferInfo::ChannelBuffer && !visible) { + showNickListAction()->setChecked(false); + } } void NickListWidget::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) { @@ -40,7 +87,17 @@ void NickListWidget::currentChanged(const QModelIndex ¤t, const QModelInde if(bufferType != BufferInfo::ChannelBuffer) { ui.stackedWidget->setCurrentWidget(ui.emptyPage); + if(showDockAction() && showDockAction()->isChecked()) { + // hide + showDockAction()->trigger(); + } return; + } else { + if(showNickListAction()->isChecked()) + if(showDockAction()&& !showDockAction()->isChecked()) { + // show + showDockAction()->trigger(); + } } if(newBufferId == oldBufferId) diff --git a/src/qtui/nicklistwidget.h b/src/qtui/nicklistwidget.h index 8c266052..3a6dfe6a 100644 --- a/src/qtui/nicklistwidget.h +++ b/src/qtui/nicklistwidget.h @@ -38,6 +38,14 @@ class NickListWidget : public AbstractItemView { public: NickListWidget(QWidget *parent = 0); + ~NickListWidget(); + void setShowDockAction(QAction *action); + QAction *showDockAction() const; + QAction *showNickListAction() const; + +public slots: + void changedVisibility(bool visible); + void showWidget(bool visible); protected: virtual QSize sizeHint() const; @@ -52,6 +60,8 @@ private slots: private: Ui::NickListWidget ui; QHash nickViews; + QAction *_showNickListAction; + QPointer _showDockAction; }; #endif diff --git a/version.inc b/version.inc index a20f51f6..14b4ad24 100644 --- a/version.inc +++ b/version.inc @@ -5,7 +5,7 @@ quasselVersion = "0.2.0-alpha4-pre"; quasselDate = "2008-03-18"; - quasselBuild = 647; + quasselBuild = 649; //! Minimum client build number the core needs clientBuildNeeded = 642; -- 2.20.1