diff options
Diffstat (limited to 'src/plugins/General/statusicon')
| -rw-r--r-- | src/plugins/General/statusicon/images/images.qrc | 8 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/images/tray_pause.png | bin | 0 -> 569 bytes | |||
| -rw-r--r-- | src/plugins/General/statusicon/images/tray_play.png | bin | 0 -> 706 bytes | |||
| -rw-r--r-- | src/plugins/General/statusicon/images/tray_stop.png | bin | 0 -> 503 bytes | |||
| -rw-r--r-- | src/plugins/General/statusicon/settingsdialog.cpp | 55 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/settingsdialog.h | 48 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/settingsdialog.ui | 173 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/statusicon.cpp | 109 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/statusicon.h | 58 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/statusicon.pro | 36 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/statusiconfactory.cpp | 59 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/statusiconfactory.h | 45 |
12 files changed, 591 insertions, 0 deletions
diff --git a/src/plugins/General/statusicon/images/images.qrc b/src/plugins/General/statusicon/images/images.qrc new file mode 100644 index 000000000..b072b1d73 --- /dev/null +++ b/src/plugins/General/statusicon/images/images.qrc @@ -0,0 +1,8 @@ +<!DOCTYPE RCC> +<RCC version="1.0"> + <qresource> + <file>tray_play.png</file> + <file>tray_pause.png</file> + <file>tray_stop.png</file> + </qresource> +</RCC> diff --git a/src/plugins/General/statusicon/images/tray_pause.png b/src/plugins/General/statusicon/images/tray_pause.png Binary files differnew file mode 100644 index 000000000..dfed3deb1 --- /dev/null +++ b/src/plugins/General/statusicon/images/tray_pause.png diff --git a/src/plugins/General/statusicon/images/tray_play.png b/src/plugins/General/statusicon/images/tray_play.png Binary files differnew file mode 100644 index 000000000..4d0f9099c --- /dev/null +++ b/src/plugins/General/statusicon/images/tray_play.png diff --git a/src/plugins/General/statusicon/images/tray_stop.png b/src/plugins/General/statusicon/images/tray_stop.png Binary files differnew file mode 100644 index 000000000..9e894d9eb --- /dev/null +++ b/src/plugins/General/statusicon/images/tray_stop.png diff --git a/src/plugins/General/statusicon/settingsdialog.cpp b/src/plugins/General/statusicon/settingsdialog.cpp new file mode 100644 index 000000000..7cb6bb1e5 --- /dev/null +++ b/src/plugins/General/statusicon/settingsdialog.cpp @@ -0,0 +1,55 @@ +/*************************************************************************** + * Copyright (C) 2008 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include <QSettings> +#include <QDir> + +#include "settingsdialog.h" + +SettingsDialog::SettingsDialog(QWidget *parent) + : QDialog(parent) +{ + ui.setupUi(this); + setAttribute(Qt::WA_DeleteOnClose); + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + settings.beginGroup("Tray"); + ui.messageCheckBox->setChecked(settings.value("show_message",TRUE).toBool()); + ui.messageDelaySpinBox->setValue(settings.value("message_delay", 2000).toInt()); + ui.toolTipCheckBox->setChecked(settings.value("show_tooltip",FALSE).toBool()); + ui.hideToTrayRadioButton->setChecked(settings.value("hide_on_close", FALSE).toBool()); + settings.endGroup(); + connect(ui.okButton, SIGNAL(clicked()), SLOT(writeSettings())); +} + + +SettingsDialog::~SettingsDialog() +{} + +void SettingsDialog::writeSettings() +{ + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + settings.beginGroup("Tray"); + settings.setValue ("show_message", ui.messageCheckBox->isChecked()); + settings.setValue ("message_delay", ui.messageDelaySpinBox->value()); + settings.setValue ("show_tooltip", ui.toolTipCheckBox->isChecked()); + settings.setValue ("hide_on_close", ui.hideToTrayRadioButton->isChecked()); + settings.endGroup(); + accept(); +} diff --git a/src/plugins/General/statusicon/settingsdialog.h b/src/plugins/General/statusicon/settingsdialog.h new file mode 100644 index 000000000..0d5b21d52 --- /dev/null +++ b/src/plugins/General/statusicon/settingsdialog.h @@ -0,0 +1,48 @@ +/*************************************************************************** + * Copyright (C) 2008 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SETTINGSDIALOG_H +#define SETTINGSDIALOG_H + +#include <QDialog> + + +#include "ui_settingsdialog.h" + +/** + @author Ilya Kotov <forkotov02@hotmail.ru> +*/ +class SettingsDialog : public QDialog +{ +Q_OBJECT +public: + SettingsDialog(QWidget *parent = 0); + + ~SettingsDialog(); + + +private slots: + void writeSettings(); + +private: + Ui::SettingsDialog ui; + +}; + +#endif diff --git a/src/plugins/General/statusicon/settingsdialog.ui b/src/plugins/General/statusicon/settingsdialog.ui new file mode 100644 index 000000000..126fcce7a --- /dev/null +++ b/src/plugins/General/statusicon/settingsdialog.ui @@ -0,0 +1,173 @@ +<ui version="4.0" > + <class>SettingsDialog</class> + <widget class="QDialog" name="SettingsDialog" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>267</width> + <height>285</height> + </rect> + </property> + <property name="windowTitle" > + <string>Status Icon Plugin Settings</string> + </property> + <layout class="QVBoxLayout" > + <item> + <widget class="QGroupBox" name="groupBox_4" > + <property name="title" > + <string>Tray Icon</string> + </property> + <layout class="QGridLayout" > + <item row="0" column="0" > + <widget class="QCheckBox" name="messageCheckBox" > + <property name="text" > + <string>Show message</string> + </property> + </widget> + </item> + <item row="1" column="0" > + <widget class="QCheckBox" name="toolTipCheckBox" > + <property name="text" > + <string>Show tooltip</string> + </property> + </widget> + </item> + <item row="2" column="0" > + <widget class="QLabel" name="label_3" > + <property name="text" > + <string>Message delay, ms:</string> + </property> + <property name="alignment" > + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> + </property> + </widget> + </item> + <item row="2" column="1" > + <widget class="QSpinBox" name="messageDelaySpinBox" > + <property name="minimum" > + <number>100</number> + </property> + <property name="maximum" > + <number>10000</number> + </property> + <property name="singleStep" > + <number>100</number> + </property> + <property name="value" > + <number>1000</number> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="closeGroupBox" > + <property name="title" > + <string>Action On Close</string> + </property> + <layout class="QVBoxLayout" > + <property name="spacing" > + <number>6</number> + </property> + <property name="leftMargin" > + <number>9</number> + </property> + <property name="topMargin" > + <number>9</number> + </property> + <property name="rightMargin" > + <number>9</number> + </property> + <property name="bottomMargin" > + <number>9</number> + </property> + <item> + <widget class="QRadioButton" name="hideToTrayRadioButton" > + <property name="text" > + <string>Hide to tray</string> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="quitRadioButton" > + <property name="text" > + <string>Quit</string> + </property> + <property name="checked" > + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <layout class="QHBoxLayout" > + <property name="spacing" > + <number>6</number> + </property> + <property name="leftMargin" > + <number>0</number> + </property> + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> + <item> + <spacer> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" > + <size> + <width>131</width> + <height>31</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="okButton" > + <property name="text" > + <string>OK</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="cancelButton" > + <property name="text" > + <string>Cancel</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>cancelButton</sender> + <signal>clicked()</signal> + <receiver>SettingsDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel" > + <x>336</x> + <y>210</y> + </hint> + <hint type="destinationlabel" > + <x>179</x> + <y>224</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src/plugins/General/statusicon/statusicon.cpp b/src/plugins/General/statusicon/statusicon.cpp new file mode 100644 index 000000000..59225d028 --- /dev/null +++ b/src/plugins/General/statusicon/statusicon.cpp @@ -0,0 +1,109 @@ +/*************************************************************************** + * Copyright (C) 2008 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include <QMenu> +#include <QSettings> +#include <QDir> +#include <QTimer> +#include <QCoreApplication> + +#include "statusicon.h" + +StatusIcon::StatusIcon(QObject *parent) + : General(parent) +{ + m_tray = new QSystemTrayIcon(this); + connect(m_tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayActivated(QSystemTrayIcon::ActivationReason))); + m_tray->setIcon ( QIcon(":/tray_stop.png")); + m_tray->show(); + QMenu *menu = new QMenu(qobject_cast<QWidget *>(parent)); + menu->addAction(tr("Play"), this, SLOT(play())); + menu->addAction(tr("Pause"), this, SLOT(pause())); + menu->addAction(tr("Stop"), this, SLOT(stop())); + menu->addAction(tr("Next"), this, SLOT(next())); + menu->addAction(tr("Previous"), this, SLOT(previous())); + menu->addSeparator(); + menu->addAction(tr("Exit"), this, SLOT(exit())); + m_tray->setContextMenu(menu); + + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + settings.beginGroup("Tray"); + m_showMessage = settings.value("show_message",TRUE).toBool(); + m_messageDelay = settings.value("message_delay", 2000).toInt(); + m_showTooltip = settings.value("show_tooltip",FALSE).toBool(); + m_hideToTray = settings.value("hide_on_close", FALSE).toBool(); + settings.endGroup(); + m_enabled = FALSE; + QTimer::singleShot(200, this, SLOT(enable())); + +} + + +StatusIcon::~StatusIcon() +{} + +void StatusIcon::setState(const uint &state) +{ + switch ((uint) state) + { + case General::Playing: + { + m_tray->setIcon(QIcon(":/tray_play.png")); + break; + } + case General::Paused: + { + m_tray->setIcon(QIcon(":/tray_pause.png")); + break; + } + case General::Stopped: + { + m_tray->setIcon(QIcon(":/tray_stop.png")); + break; + } + } +} + +void StatusIcon::setSongInfo(const SongInfo &song) +{ + if(!m_enabled) + return; + QString message = song.artist() + " - " +song.title(); + if (song.artist().isEmpty()) + message = song.title(); + if (song.title().isEmpty()) + message = song.artist(); + if (m_showMessage) + m_tray->showMessage (tr("Now Playing"), message, + QSystemTrayIcon::Information, m_messageDelay); + if (m_showTooltip) + m_tray->setToolTip(message); +} + +void StatusIcon::trayActivated(QSystemTrayIcon::ActivationReason reason) +{ + if (reason == QSystemTrayIcon::Trigger) + toggleVisibility(); +} + +void StatusIcon::enable() +{ + m_enabled = TRUE; +} diff --git a/src/plugins/General/statusicon/statusicon.h b/src/plugins/General/statusicon/statusicon.h new file mode 100644 index 000000000..fae20422d --- /dev/null +++ b/src/plugins/General/statusicon/statusicon.h @@ -0,0 +1,58 @@ +/*************************************************************************** + * Copyright (C) 2008 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef STATUSICON_H +#define STATUSICON_H + +#include <QSystemTrayIcon> + +#include <qmmpui/general.h> + + + +/** + @author Ilya Kotov <forkotov02@hotmail.ru> +*/ + +class StatusIcon : public General +{ +Q_OBJECT +public: + StatusIcon(QObject *parent = 0); + + ~StatusIcon(); + + void setState(const uint& state); + void setSongInfo(const SongInfo &song); + +private slots: + void trayActivated(QSystemTrayIcon::ActivationReason); + void enable(); + +private: + QSystemTrayIcon *m_tray; + bool m_showMessage; + bool m_showTooltip; + bool m_hideToTray; + bool m_enabled; + int m_messageDelay; + +}; + +#endif diff --git a/src/plugins/General/statusicon/statusicon.pro b/src/plugins/General/statusicon/statusicon.pro new file mode 100644 index 000000000..01408d1c8 --- /dev/null +++ b/src/plugins/General/statusicon/statusicon.pro @@ -0,0 +1,36 @@ +include(../../plugins.pri) + +INCLUDEPATH += ../../../../src +CONFIG += release \ +warn_on \ +plugin + +TARGET=$$PLUGINS_PREFIX/General/statusicon +QMAKE_CLEAN =$$PLUGINS_PREFIX/General/libstatusicon.so + + +TEMPLATE = lib +QMAKE_LIBDIR += ../../../../lib +LIBS += -lqmmpui + +#TRANSLATIONS = translations/ffmpeg_plugin_ru.ts +#RESOURCES = translations/translations.qrc + +isEmpty(LIB_DIR){ + LIB_DIR = /lib +} +target.path = $$LIB_DIR/qmmp/General +INSTALLS += target +#FORMS += settingsdialog.ui + +RESOURCES += images/images.qrc + + +HEADERS += statusiconfactory.h \ +statusicon.h \ + settingsdialog.h +SOURCES += statusiconfactory.cpp \ +statusicon.cpp \ + settingsdialog.cpp +FORMS += settingsdialog.ui + diff --git a/src/plugins/General/statusicon/statusiconfactory.cpp b/src/plugins/General/statusicon/statusiconfactory.cpp new file mode 100644 index 000000000..1d3beaa0b --- /dev/null +++ b/src/plugins/General/statusicon/statusiconfactory.cpp @@ -0,0 +1,59 @@ +/*************************************************************************** + * Copyright (C) 2008 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include <QtGui> + +#include "statusicon.h" +#include "settingsdialog.h" +#include "statusiconfactory.h" + +const GeneralProperties StatusIconFactory::properties() const +{ + GeneralProperties properties; + properties.name = tr("Status Icon Plugin"); + properties.hasAbout = TRUE; + properties.hasSettings = TRUE; + return properties; +} + +General *StatusIconFactory::create(QObject *parent) +{ + return new StatusIcon(parent); +} + +void StatusIconFactory::showSettings(QWidget *parent) +{ + SettingsDialog *s = new SettingsDialog(parent); + s->show(); +} + +void StatusIconFactory::showAbout(QWidget *parent) +{ + QMessageBox::about (parent, tr("About Scrobbler Plugin"), + tr("Qmmp Status Icon Plugin")+"\n"+ + tr("Writen by: Ilya Kotov <forkotov02@hotmail.ru>")); +} + +QTranslator *StatusIconFactory::createTranslator(QObject *parent) +{ + return 0; +} + +Q_EXPORT_PLUGIN(StatusIconFactory) diff --git a/src/plugins/General/statusicon/statusiconfactory.h b/src/plugins/General/statusicon/statusiconfactory.h new file mode 100644 index 000000000..b09fb1ef1 --- /dev/null +++ b/src/plugins/General/statusicon/statusiconfactory.h @@ -0,0 +1,45 @@ +/*************************************************************************** + * Copyright (C) 2008 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef STATUSICONFACTORY_H +#define STATUSICONFACTORY_H + +/** + @author Ilya Kotov <forkotov02@hotmail.ru> +*/ +#include <QObject> +#include <QTranslator> + +#include <qmmpui/general.h> +#include <qmmpui/generalfactory.h> + +class StatusIconFactory : public QObject, public GeneralFactory +{ +Q_OBJECT +Q_INTERFACES(GeneralFactory); +public: + const GeneralProperties properties() const; + General *create(QObject *parent); + void showSettings(QWidget *parent); + void showAbout(QWidget *parent); + QTranslator *createTranslator(QObject *parent); + +}; + +#endif |
