diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-04-29 15:56:34 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-04-29 15:56:34 +0000 |
| commit | 538f8bb01b872a1c555e3127bc8791579d854290 (patch) | |
| tree | 71c5f1236f01b2d7d3b1c9e375bd78861e6f81b6 /src | |
| parent | 2e6fa0a1453066f1560270466797b2161d7851c4 (diff) | |
| download | qmmp-538f8bb01b872a1c555e3127bc8791579d854290.tar.gz qmmp-538f8bb01b872a1c555e3127bc8791579d854290.tar.bz2 qmmp-538f8bb01b872a1c555e3127bc8791579d854290.zip | |
system tray: refactoring
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7135 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/General/statusicon/qmmptrayicon.cpp | 34 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/qmmptrayicon.h | 9 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/settingsdialog.cpp | 52 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/settingsdialog.h | 6 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/statusicon.cpp | 44 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/statusicon.h | 13 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/statusiconpopupwidget.cpp | 35 | ||||
| -rw-r--r-- | src/plugins/General/statusicon/statusiconpopupwidget.h | 14 |
8 files changed, 104 insertions, 103 deletions
diff --git a/src/plugins/General/statusicon/qmmptrayicon.cpp b/src/plugins/General/statusicon/qmmptrayicon.cpp index 89e13ce8d..4479323e6 100644 --- a/src/plugins/General/statusicon/qmmptrayicon.cpp +++ b/src/plugins/General/statusicon/qmmptrayicon.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2016 by Ilya Kotov * + * Copyright (C) 2008-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -21,7 +21,7 @@ #include <QEvent> #include <QWheelEvent> #include <QMouseEvent> - +#include <QApplication> #include <qmmp/soundcore.h> #include "qmmptrayicon.h" @@ -32,25 +32,28 @@ QmmpTrayIcon::QmmpTrayIcon(QObject *parent) : QSystemTrayIcon(parent) -{ -#ifdef Q_WS_X11 - m_showNiceToolTip = false; -#endif -} +{} QmmpTrayIcon::~QmmpTrayIcon() { } -#ifdef Q_WS_X11 -void QmmpTrayIcon::showNiceToolTip(bool value) + +void QmmpTrayIcon::setToolTip(const QString &tip) { - m_showNiceToolTip = value; +#ifdef Q_WS_X11 + m_message = tip; + if(m_popupWidget) + showToolTip(); +#else + QSystemTrayIcon::setToolTip(tip); +#endif } +#ifdef Q_WS_X11 bool QmmpTrayIcon::event(QEvent *e) { - if (e->type() == QEvent::Wheel ) + if (e->type() == QEvent::Wheel) { wheelEvent((QWheelEvent *) e); e->accept(); @@ -72,13 +75,10 @@ void QmmpTrayIcon::wheelEvent(QWheelEvent *e) void QmmpTrayIcon::showToolTip() { - if(m_showNiceToolTip) + if(m_popupWidget.isNull()) { - if(m_PopupWidget.isNull()) - { - m_PopupWidget = new StatusIconPopupWidget(); - } - m_PopupWidget->showInfo(geometry().x(),geometry().y()); + m_popupWidget = new StatusIconPopupWidget(); } + m_popupWidget->showInfo(geometry().x(),geometry().y(), m_message); } #endif diff --git a/src/plugins/General/statusicon/qmmptrayicon.h b/src/plugins/General/statusicon/qmmptrayicon.h index 37cabd967..4c0eb1415 100644 --- a/src/plugins/General/statusicon/qmmptrayicon.h +++ b/src/plugins/General/statusicon/qmmptrayicon.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2013 by Ilya Kotov * + * Copyright (C) 2008-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -39,15 +39,16 @@ public: QmmpTrayIcon(QObject *parent = 0); ~QmmpTrayIcon(); -#ifdef Q_WS_X11 - void showNiceToolTip(bool value); + void setToolTip(const QString &tip); +#ifdef Q_WS_X11 private: bool event(QEvent *e); void wheelEvent(QWheelEvent *e); void showToolTip(); bool m_showNiceToolTip; - QPointer<StatusIconPopupWidget> m_PopupWidget; + QPointer<StatusIconPopupWidget> m_popupWidget; + QString m_message; #endif }; diff --git a/src/plugins/General/statusicon/settingsdialog.cpp b/src/plugins/General/statusicon/settingsdialog.cpp index 73bec4e00..8bc8ac2e3 100644 --- a/src/plugins/General/statusicon/settingsdialog.cpp +++ b/src/plugins/General/statusicon/settingsdialog.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2013 by Ilya Kotov * + * Copyright (C) 2009-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -22,32 +22,32 @@ #include <qmmpui/templateeditor.h> #include <qmmp/qmmp.h> #include "statusiconpopupwidget.h" +#include "statusicon.h" #include "settingsdialog.h" SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent) { - ui.setupUi(this); + m_ui.setupUi(this); QSettings settings(Qmmp::configFile(), QSettings::IniFormat); settings.beginGroup("Tray"); - ui.messageGroupBox->setChecked(settings.value("show_message",true).toBool()); - ui.messageDelaySpinBox->setValue(settings.value("message_delay", 2000).toInt()); - ui.niceTooltipGroupBox->setChecked(settings.value("show_tooltip", true).toBool()); + m_ui.messageGroupBox->setChecked(settings.value("show_message",true).toBool()); + m_ui.messageDelaySpinBox->setValue(settings.value("message_delay", 2000).toInt()); + m_ui.niceTooltipGroupBox->setChecked(settings.value("show_tooltip", true).toBool()); #ifdef Q_WS_X11 - ui.niceTooltipDelaySpinBox->setValue(settings.value("tooltip_delay",2000).toInt()); - ui.transparencySlider->setValue(settings.value("tooltip_transparency",0).toInt()); - ui.coverSizeSlider->setValue(settings.value("tooltip_cover_size", 100).toInt()); - ui.progressCheckBox->setChecked(settings.value("tooltip_progress",true).toBool()); - ui.niceTooltipSplitCheckBox->setChecked(settings.value("split_file_name",true).toBool()); + m_ui.niceTooltipDelaySpinBox->setValue(settings.value("tooltip_delay",2000).toInt()); + m_ui.transparencySlider->setValue(settings.value("tooltip_transparency",0).toInt()); + m_ui.coverSizeSlider->setValue(settings.value("tooltip_cover_size", 100).toInt()); + m_ui.progressCheckBox->setChecked(settings.value("tooltip_progress",true).toBool()); + m_ui.niceTooltipSplitCheckBox->setChecked(settings.value("split_file_name",true).toBool()); #else - ui.niceTooltipDelaySpinBox->setEnabled(false); - ui.transparencySlider->setEnabled(false); - ui.coverSizeSlider->setEnabled(false); - ui.progressCheckBox->setEnabled(false); - ui.niceTooltipSplitCheckBox->setEnabled(false); - ui.templateButton->setEnabled(false); + m_ui.niceTooltipDelaySpinBox->setEnabled(false); + m_ui.transparencySlider->setEnabled(false); + m_ui.coverSizeSlider->setEnabled(false); + m_ui.progressCheckBox->setEnabled(false); + m_ui.templateButton->setEnabled(false); #endif - ui.standardIconsCheckBox->setChecked(settings.value("use_standard_icons",false).toBool()); + m_ui.standardIconsCheckBox->setChecked(settings.value("use_standard_icons",false).toBool()); m_template = settings.value("tooltip_template", DEFAULT_TEMPLATE).toString(); settings.endGroup(); } @@ -59,16 +59,16 @@ void SettingsDialog::accept() { QSettings settings(Qmmp::configFile(), QSettings::IniFormat); settings.beginGroup("Tray"); - settings.setValue("show_message", ui.messageGroupBox->isChecked()); - settings.setValue("message_delay", ui.messageDelaySpinBox->value()); - settings.setValue("use_standard_icons", ui.standardIconsCheckBox->isChecked()); - settings.setValue("show_tooltip", ui.niceTooltipGroupBox->isChecked()); + settings.setValue("show_message", m_ui.messageGroupBox->isChecked()); + settings.setValue("message_delay", m_ui.messageDelaySpinBox->value()); + settings.setValue("use_standard_icons", m_ui.standardIconsCheckBox->isChecked()); + settings.setValue("show_tooltip", m_ui.niceTooltipGroupBox->isChecked()); + settings.setValue("split_file_name", m_ui.niceTooltipSplitCheckBox->isChecked()); #ifdef Q_WS_X11 - settings.setValue("split_file_name", ui.niceTooltipSplitCheckBox->isChecked()); - settings.setValue("tooltip_delay", ui.niceTooltipDelaySpinBox->value()); - settings.setValue("tooltip_transparency", ui.transparencySlider->value()); - settings.setValue("tooltip_cover_size", ui.coverSizeSlider->value()); - settings.setValue("tooltip_progress", ui.progressCheckBox->isChecked()); + settings.setValue("tooltip_delay", m_ui.niceTooltipDelaySpinBox->value()); + settings.setValue("tooltip_transparency", m_ui.transparencySlider->value()); + settings.setValue("tooltip_cover_size", m_ui.coverSizeSlider->value()); + settings.setValue("tooltip_progress", m_ui.progressCheckBox->isChecked()); #endif settings.setValue("tooltip_template", m_template); settings.endGroup(); diff --git a/src/plugins/General/statusicon/settingsdialog.h b/src/plugins/General/statusicon/settingsdialog.h index 4ba6271f2..f2cdecb16 100644 --- a/src/plugins/General/statusicon/settingsdialog.h +++ b/src/plugins/General/statusicon/settingsdialog.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2013 by Ilya Kotov * + * Copyright (C) 2008-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -21,8 +21,6 @@ #define SETTINGSDIALOG_H #include <QDialog> - - #include "ui_settingsdialog.h" /** @@ -43,7 +41,7 @@ private slots: void on_templateButton_clicked(); private: - Ui::SettingsDialog ui; + Ui::SettingsDialog m_ui; QString m_template; }; diff --git a/src/plugins/General/statusicon/statusicon.cpp b/src/plugins/General/statusicon/statusicon.cpp index 2ce580bd9..bd075bd8e 100644 --- a/src/plugins/General/statusicon/statusicon.cpp +++ b/src/plugins/General/statusicon/statusicon.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2015 by Ilya Kotov * + * Copyright (C) 2008-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -46,16 +46,19 @@ StatusIcon::StatusIcon(QObject *parent) : QObject(parent) m_messageDelay = settings.value("message_delay", 2000).toInt(); m_hideToTray = settings.value("hide_on_close", false).toBool(); m_useStandardIcons = settings.value("use_standard_icons",false).toBool(); - m_tooltip = settings.value("show_tooltip",true).toBool(); - m_formatter.setPattern("%p%if(%p&%t, - ,)%t"); + m_showToolTip = settings.value("show_tooltip",true).toBool(); + m_splitFileName = settings.value("split_file_name",true).toBool(); #ifdef Q_WS_X11 - m_tray->showNiceToolTip(m_tooltip); + m_toolTipTemplate = settings.value("tooltip_template", DEFAULT_TEMPLATE).toString(); +#else + m_toolTipTemplate = "%p%if(%p&%t, - ,)%t"; #endif + m_toolTipFormatter.setPattern(m_toolTipTemplate); + m_messageFormatter.setPattern("%p%if(%p&%t, - ,)%t"); if(m_useStandardIcons) m_tray->setIcon(QApplication::style ()->standardIcon(QStyle::SP_MediaStop)); else m_tray->setIcon(QIcon(":/tray_stop.png")); - m_tray->show(); settings.endGroup(); //actions m_menu = new QMenu(); @@ -73,6 +76,7 @@ StatusIcon::StatusIcon(QObject *parent) : QObject(parent) m_menu->addSeparator(); m_menu->addAction(tr("Exit"), UiHelper::instance(), SLOT(exit())); m_tray->setContextMenu(m_menu); + m_tray->show(); connect (m_core, SIGNAL(metaDataChanged ()), SLOT(showMetaData())); connect (m_core, SIGNAL(stateChanged (Qmmp::State)), SLOT(setState(Qmmp::State))); setState(m_core->state()); //update state @@ -111,9 +115,8 @@ void StatusIcon::setState(Qmmp::State state) m_tray->setIcon(QApplication::style ()->standardIcon(QStyle::SP_MediaStop)); else m_tray->setIcon (QIcon(":/tray_stop.png")); -#ifndef Q_WS_X11 - m_tray->setToolTip(""); -#endif + if(m_showToolTip) + m_tray->setToolTip(tr("Stopped")); break; } } @@ -121,22 +124,33 @@ void StatusIcon::setState(Qmmp::State state) void StatusIcon::showMetaData() { - QString message = m_formatter.format(m_core->metaData()); + QMap<Qmmp::MetaData, QString> meta = m_core->metaData(); + if(m_splitFileName && meta[Qmmp::TITLE].isEmpty() && !meta[Qmmp::URL].contains("://")) + { + QString name = QFileInfo(meta[Qmmp::URL]).completeBaseName(); + if(name.contains("-")) + { + meta[Qmmp::TITLE] = name.section('-',1,1).trimmed(); + if(meta[Qmmp::ARTIST].isEmpty()) + meta[Qmmp::ARTIST] = name.section('-',0,0).trimmed(); + } + } + + QString message = m_messageFormatter.format(meta, m_core->totalTime() / 1000); if (message.isEmpty()) - message = m_core->metaData(Qmmp::URL).section('/',-1); + message = meta[Qmmp::URL].section('/',-1); if (m_showMessage) m_tray->showMessage (tr("Now Playing"), message, QSystemTrayIcon::Information, m_messageDelay); -#ifndef Q_WS_X11 - if(m_tooltip) + + if(m_showToolTip) { - QString message = m_formatter.format(m_core->metaData()); + message = m_toolTipFormatter.format(meta, m_core->totalTime() / 1000); if(message.isEmpty()) - message = m_core->metaData(Qmmp::URL).section('/',-1); + message = meta[Qmmp::URL].section('/',-1); m_tray->setToolTip(message); } -#endif } void StatusIcon::trayActivated(QSystemTrayIcon::ActivationReason reason) diff --git a/src/plugins/General/statusicon/statusicon.h b/src/plugins/General/statusicon/statusicon.h index 36281cdef..1edac5d82 100644 --- a/src/plugins/General/statusicon/statusicon.h +++ b/src/plugins/General/statusicon/statusicon.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2015 by Ilya Kotov * + * Copyright (C) 2008-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -26,16 +26,16 @@ #include <qmmpui/metadataformatter.h> #include "qmmptrayicon.h" +#define DEFAULT_TEMPLATE "<b>%if(%t,%t,%f)</b>\n%if(%p,<br>%p,)\n%if(%a,<br>%a,)\n%if(%l,<br><b>%l</b>,)" + class SoundCore; class MediaPlayer; class QEvent; class QMenu; - /** @author Ilya Kotov <forkotov02@hotmail.ru> */ - class StatusIcon : public QObject { Q_OBJECT @@ -54,12 +54,15 @@ private: bool m_showMessage; bool m_hideToTray; bool m_useStandardIcons; - bool m_tooltip; + bool m_showToolTip; + QString m_toolTipTemplate; int m_messageDelay; SoundCore *m_core; MediaPlayer *m_player; QMenu *m_menu; - MetaDataFormatter m_formatter; + MetaDataFormatter m_messageFormatter; + MetaDataFormatter m_toolTipFormatter; + bool m_splitFileName; }; #endif diff --git a/src/plugins/General/statusicon/statusiconpopupwidget.cpp b/src/plugins/General/statusicon/statusiconpopupwidget.cpp index 1b057c817..2f7b80ac0 100644 --- a/src/plugins/General/statusicon/statusiconpopupwidget.cpp +++ b/src/plugins/General/statusicon/statusiconpopupwidget.cpp @@ -21,6 +21,9 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ +#include <QtGlobal> +#ifdef Q_WS_X11 + #include <QHBoxLayout> #include <QVBoxLayout> #include <QLabel> @@ -70,9 +73,7 @@ StatusIconPopupWidget::StatusIconPopupWidget(QWidget * parent) m_bar->setMinimumWidth(110); connect(m_timer,SIGNAL(timeout()),SLOT(deleteLater())); - connect(SoundCore::instance(),SIGNAL(metaDataChanged()),this,SLOT(updateMetaData())); connect(SoundCore::instance(),SIGNAL(elapsedChanged(qint64)),this,SLOT(updateTime(qint64))); - connect(SoundCore::instance(),SIGNAL(stateChanged(Qmmp::State)),this,SLOT(updateMetaData())); QSettings settings(Qmmp::configFile(), QSettings::IniFormat); settings.beginGroup("Tray"); @@ -80,9 +81,7 @@ StatusIconPopupWidget::StatusIconPopupWidget(QWidget * parent) setWindowOpacity(1.0 - settings.value("tooltip_transparency",0).toInt()/100.0); int size = settings.value("tooltip_cover_size",100).toInt(); m_cover->setFixedSize(size,size); - m_splitFileName = settings.value("split_file_name",true).toBool(); m_showProgress = settings.value("tooltip_progress",true).toBool(); - m_template = settings.value("tooltip_template", DEFAULT_TEMPLATE).toString(); settings.endGroup(); } @@ -95,29 +94,13 @@ void StatusIconPopupWidget::mousePressEvent(QMouseEvent *) deleteLater(); } -void StatusIconPopupWidget::updateMetaData() +void StatusIconPopupWidget::updateMetaData(const QString &message) { m_timer->stop(); SoundCore *core = SoundCore::instance(); + m_textLabel->setText(message); if(core->state() == Qmmp::Playing || core->state() == Qmmp::Paused) { - QString title = m_template; - SoundCore *core = SoundCore::instance(); - QMap<Qmmp::MetaData, QString> meta = core->metaData(); - if(m_splitFileName && meta[Qmmp::TITLE].isEmpty() && !meta[Qmmp::URL].contains("://")) - { - QString name = QFileInfo(meta[Qmmp::URL]).completeBaseName(); - if(name.contains("-")) - { - meta[Qmmp::TITLE] = name.section('-',1,1).trimmed(); - if(meta[Qmmp::ARTIST].isEmpty()) - meta[Qmmp::ARTIST] = name.section('-',0,0).trimmed(); - } - } - - MetaDataFormatter f(title); - title = f.format(core->metaData(), core->totalTime()/1000); - m_textLabel->setText(title); QPixmap cover = MetaDataManager::instance()->getCover(core->metaData(Qmmp::URL)); m_cover->show(); m_bar->show(); @@ -132,8 +115,8 @@ void StatusIconPopupWidget::updateMetaData() { m_cover->hide(); m_bar->hide(); - m_textLabel->setText(tr("Stopped")); } + m_textLabel->setText(message); qApp->processEvents(); resize(sizeHint()); qApp->processEvents(); @@ -172,12 +155,12 @@ void StatusIconPopupWidget::updatePosition(int trayx, int trayy) return; } -void StatusIconPopupWidget::showInfo(int x, int y) +void StatusIconPopupWidget::showInfo(int x, int y, const QString &message) { m_timer->stop(); m_lastTrayX = x; m_lastTrayY = y; - updateMetaData(); + updateMetaData(message); qApp->processEvents(); updatePosition(x,y); qApp->processEvents(); @@ -192,3 +175,5 @@ QString TimeBar::text() const { return QString("%1:%2").arg(value()/60,2,10,QChar('0')).arg(value()%60,2,10,QChar('0')); } + +#endif diff --git a/src/plugins/General/statusicon/statusiconpopupwidget.h b/src/plugins/General/statusicon/statusiconpopupwidget.h index 766904f4a..aef0d470f 100644 --- a/src/plugins/General/statusicon/statusiconpopupwidget.h +++ b/src/plugins/General/statusicon/statusiconpopupwidget.h @@ -2,7 +2,7 @@ * Copyright (C) 2009 by Artur Guzik * * a.guzik88@gmail.com * * * - * Copyright (C) 2009-2012 by Ilya Kotov * + * Copyright (C) 2009-2017 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -24,8 +24,8 @@ #ifndef STATUSICONPOPUPWIDGET_H #define STATUSICONPOPUPWIDGET_H -#define DEFAULT_TEMPLATE "<b>%if(%t,%t,%f)</b>\n%if(%p,<br>%p,)\n%if(%a,<br>%a,)\n%if(%l,<br><b>%l</b>,)" - +#include <QtGlobal> +#ifdef Q_WS_X11 #include <QFrame> #include <QWidget> #include <QProgressBar> @@ -46,28 +46,27 @@ public: StatusIconPopupWidget(QWidget * parent = 0); ~StatusIconPopupWidget(); - void showInfo(int x, int y); //x,y are tray icon position + void showInfo(int x, int y, const QString &message); //x,y are tray icon position protected: virtual void mousePressEvent(QMouseEvent *); private slots: void updatePosition(int trayx, int trayy); - void updateMetaData(); void updateTime(qint64 elapsed); private: + void updateMetaData(const QString &message); QLabel *m_textLabel; QHBoxLayout *m_hLayout; QVBoxLayout *m_vLayout; QTimer *m_timer; - CoverWidget * m_cover; + CoverWidget *m_cover; QString m_totalTime; QSpacerItem *m_spacer; QProgressBar *m_bar; int m_lastTrayX; int m_lastTrayY; - int m_splitFileName; QString m_template; bool m_showProgress; }; @@ -80,5 +79,6 @@ public: virtual QString text() const; }; +#endif #endif // STATUSICONPOPUPWIDGET_H |
