Changeset 29


Ignore:
Timestamp:
01/06/08 11:59:56 (4 years ago)
Author:
roeland
Message:

Basic system tray icon works

Files:
4 added
6 edited

Legend:

Unmodified
Added
Removed
  • gui/main_window.cpp

    r28 r29  
    11#include <cmath> 
    22#include <QtGui> 
     3#include <QIcon> 
    34 
    45#include "main_window.h" 
     
    78MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) 
    89{ 
    9     QSettings settings; 
    10  
    1110    setupUi(this); 
    1211 
     
    6059    connect(&statusTimer, SIGNAL(timeout()), &mpd, SLOT(getStatus())); 
    6160 
     61    //Tray icon 
     62    setupTrayIcon(); 
     63    if (settings.value("systemtray").toBool()) { 
     64        trayIcon->show(); 
     65    } 
     66 
    6267    mpd.getStatus(); 
    6368    mpd.listAllInfo(); 
     
    7176}*/ 
    7277 
     78void MainWindow::closeEvent(QCloseEvent *event)  
     79{ 
     80    if (trayIcon->isVisible()) { 
     81        QMessageBox::information(this, tr("Systray"), 
     82            tr("The program will keep running in the " 
     83            "system tray. To terminate the program, " 
     84            "choose <b>Quit</b> in the context menu " 
     85            "of the system tray entry.")); 
     86        hide(); 
     87        event->ignore(); 
     88    } 
     89} 
     90 
     91void MainWindow::setupTrayIcon() 
     92{ 
     93    //Setup Actions 
     94    minimizeAction = new QAction(tr("Mi&nimize"), this); 
     95    connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide())); 
     96 
     97    maximizeAction = new QAction(tr("Ma&ximize"), this); 
     98    connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized())); 
     99 
     100    restoreAction = new QAction(tr("&Restore"), this); 
     101    connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal())); 
     102 
     103    quitAction = new QAction(tr("&Quit"), this); 
     104    connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); 
     105 
     106    //Setup Menu 
     107    trayIconMenu = new QMenu(this); 
     108    trayIconMenu->addAction(minimizeAction); 
     109    trayIconMenu->addAction(maximizeAction); 
     110    trayIconMenu->addAction(restoreAction); 
     111    trayIconMenu->addSeparator(); 
     112    trayIconMenu->addAction(quitAction); 
     113 
     114    //Setup Icon 
     115    QIcon icon("images/bad.svg");    
     116     
     117    //Mix it 
     118    trayIcon = new QSystemTrayIcon(this); 
     119    trayIcon->setContextMenu(trayIconMenu); 
     120    trayIcon->setIcon(icon); 
     121} 
     122 
    73123void MainWindow::showPreferencesDialog() 
    74124{ 
    75125    PreferencesDialog pref(this); 
     126    connect(&pref, SIGNAL(systemTraySet(bool)), trayIcon, SLOT(setVisible(bool))); 
    76127    pref.exec(); 
    77128} 
  • gui/main_window.h

    r28 r29  
    55#include <QSortFilterProxyModel> 
    66#include <QTimer> 
     7#include <QSettings> 
     8#include <QSystemTrayIcon> 
     9#include <QMenu> 
    710 
    811#include "ui_main_window.h" 
     
    2023        //~MainWindow(); 
    2124 
     25    protected: 
     26        void closeEvent(QCloseEvent *event); 
     27 
    2228    private: 
     29        QSettings settings; 
    2330        MPDConnection mpd; 
    2431        MPDStatus mpd_status; 
     
    2835        QSortFilterProxyModel libraryProxyModel; 
    2936        bool slidingVolume; 
     37 
     38        void setupTrayIcon(); 
     39        QAction *minimizeAction; 
     40        QAction *maximizeAction; 
     41        QAction *restoreAction; 
     42        QAction *quitAction; 
     43        QSystemTrayIcon *trayIcon; 
     44        QMenu *trayIconMenu; 
    3045 
    3146    private slots: 
  • gui/preferences_dialog.cpp

    r25 r29  
    11#include "preferences_dialog.h" 
     2#include "main_window.h" 
    23 
    34PreferencesDialog::PreferencesDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) 
     
    2930            settings.setValue("connection/port", portSpinBox->value()); 
    3031            settings.setValue("connection/password", passwordLineEdit->text()); 
     32            settings.setValue("systemtray", systemTrayCheckBox->isChecked()); 
     33            emit systemTraySet(systemTrayCheckBox->isChecked()); 
    3134            break; 
    3235        case QDialogButtonBox::RejectRole: 
  • gui/preferences_dialog.h

    r25 r29  
    2121        void writeSettings(); 
    2222        void buttonPressed(QAbstractButton *button); 
     23 
     24    signals: 
     25        void systemTraySet(bool visible); 
    2326}; 
    2427 
  • gui/preferences_dialog.ui

    r21 r29  
    111111      <widget class="QCheckBox" name="systemTrayCheckBox" > 
    112112       <property name="enabled" > 
    113         <bool>false</bool> 
     113        <bool>true</bool> 
    114114       </property> 
    115115       <property name="text" > 
  • main.cpp

    r25 r29  
    11#include <QApplication> 
     2#include <QSystemTrayIcon> 
     3#include <QMessageBox> 
    24 
    35#include "gui/main_window.h" 
     
    911    QApplication::setOrganizationName("lowblogprojects"); 
    1012 
     13    if (!QSystemTrayIcon::isSystemTrayAvailable()) { 
     14        QMessageBox::critical(0, QObject::tr("Systray"), 
     15            QObject::tr("I couldn't detect any system tray on this system.")); 
     16        return 1; 
     17    } 
     18 
    1119    MainWindow w; 
    1220    w.show(); 
Note: See TracChangeset for help on using the changeset viewer.