diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2020-10-21 21:06:43 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2020-10-21 21:06:43 +0000 |
| commit | e83e63bc9edb60980daa66bacf284297aa5a565f (patch) | |
| tree | cf21956abf2ef1da35a393656277509a5f0784b7 /src | |
| parent | e04df1641e0b5f83a12c13ed0b4994ffe07f58ea (diff) | |
| download | qmmp-e83e63bc9edb60980daa66bacf284297aa5a565f.tar.gz qmmp-e83e63bc9edb60980daa66bacf284297aa5a565f.tar.bz2 qmmp-e83e63bc9edb60980daa66bacf284297aa5a565f.zip | |
lyrics: added widget for qsui
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9515 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/General/lyrics/lyrics.cpp | 20 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyrics.h | 6 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyrics.pro | 13 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyricsfactory.cpp | 13 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyricsfactory.h | 12 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyricswidget.cpp (renamed from src/plugins/General/lyrics/lyricswindow.cpp) | 69 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyricswidget.h (renamed from src/plugins/General/lyrics/lyricswindow.h) | 12 | ||||
| -rw-r--r-- | src/plugins/General/lyrics/lyricswidget.ui (renamed from src/plugins/General/lyrics/lyricswindow.ui) | 0 |
8 files changed, 93 insertions, 52 deletions
diff --git a/src/plugins/General/lyrics/lyrics.cpp b/src/plugins/General/lyrics/lyrics.cpp index 24e0131fb..4ef1fe4e9 100644 --- a/src/plugins/General/lyrics/lyrics.cpp +++ b/src/plugins/General/lyrics/lyrics.cpp @@ -25,15 +25,16 @@ #include <qmmpui/playlistmanager.h> #include <qmmpui/playlistitem.h> #include <qmmpui/mediaplayer.h> -#include "lyricswindow.h" +#include "lyricswidget.h" #include "lyrics.h" -Lyrics::Lyrics(QObject *parent) : QObject(parent) +Lyrics::Lyrics(QPointer<LyricsWidget> *lyricsWidget, QObject *parent) : QObject(parent) { + m_lyricsWidget = lyricsWidget; m_action = new QAction(tr("View Lyrics"), this); m_action->setShortcut(tr("Ctrl+L")); UiHelper::instance()->addAction(m_action, UiHelper::PLAYLIST_MENU); - connect (m_action, SIGNAL(triggered ()), SLOT(showLyrics())); + connect(m_action, SIGNAL(triggered ()), SLOT(showLyrics())); } Lyrics::~Lyrics() @@ -46,8 +47,17 @@ void Lyrics::showLyrics() if (!tracks.isEmpty()) { if (tracks.at(0)->value(Qmmp::ARTIST).isEmpty() || tracks.at(0)->value(Qmmp::TITLE).isEmpty()) - return; - LyricsWindow *w = new LyricsWindow(tracks.first(), qApp->activeWindow ()); + return; + + if(!m_lyricsWidget->isNull() && m_lyricsWidget->data()->isVisible()) + { + m_lyricsWidget->data()->fetch(tracks.first()); + } + else + { + LyricsWidget *w = new LyricsWidget(true, qApp->activeWindow()); + w->fetch(tracks.first()); w->show(); + } } } diff --git a/src/plugins/General/lyrics/lyrics.h b/src/plugins/General/lyrics/lyrics.h index 1e4b8c2d7..e0a216a80 100644 --- a/src/plugins/General/lyrics/lyrics.h +++ b/src/plugins/General/lyrics/lyrics.h @@ -21,13 +21,12 @@ #define LYRICS_H #include <QPointer> - #include <qmmpui/general.h> #include <qmmp/qmmp.h> class QAction; - class SoundCore; +class LyricsWidget; /** @author Ilya Kotov <forkotov02@ya.ru> @@ -37,7 +36,7 @@ class Lyrics : public QObject { Q_OBJECT public: - Lyrics(QObject *parent = nullptr); + explicit Lyrics(QPointer<LyricsWidget> *lyricsWidget, QObject *parent = nullptr); ~Lyrics(); @@ -46,6 +45,7 @@ private slots: private: QAction *m_action; + QPointer<LyricsWidget> *m_lyricsWidget; }; diff --git a/src/plugins/General/lyrics/lyrics.pro b/src/plugins/General/lyrics/lyrics.pro index 46d0b5292..7091ae11d 100644 --- a/src/plugins/General/lyrics/lyrics.pro +++ b/src/plugins/General/lyrics/lyrics.pro @@ -6,20 +6,21 @@ QT += network HEADERS += lyricsfactory.h \ lyrics.h \ - lyricswindow.h \ lyricsprovider.h \ ultimatelyricsparser.h \ - settingsdialog.h + settingsdialog.h \ + lyricswidget.h SOURCES += lyricsfactory.cpp \ lyrics.cpp \ - lyricswindow.cpp \ lyricsprovider.cpp \ ultimatelyricsparser.cpp \ - settingsdialog.cpp + settingsdialog.cpp \ + lyricswidget.cpp -FORMS += lyricswindow.ui \ - settingsdialog.ui +FORMS += \ + settingsdialog.ui \ + lyricswidget.ui RESOURCES = translations/translations.qrc \ providers/providers.qrc diff --git a/src/plugins/General/lyrics/lyricsfactory.cpp b/src/plugins/General/lyrics/lyricsfactory.cpp index 7ef3a3df4..6a64689af 100644 --- a/src/plugins/General/lyrics/lyricsfactory.cpp +++ b/src/plugins/General/lyrics/lyricsfactory.cpp @@ -21,7 +21,7 @@ #include <QMessageBox> #include "settingsdialog.h" #include "lyrics.h" -#include "lyricswindow.h" +#include "lyricswidget.h" #include "lyricsfactory.h" GeneralProperties LyricsFactory::properties() const @@ -32,19 +32,22 @@ GeneralProperties LyricsFactory::properties() const properties.hasAbout = true; properties.hasSettings = true; properties.visibilityControl = false; - properties.widgets = { { 0, tr("Lyrics"), Qt::LeftDockWidgetArea, Qt::AllDockWidgetAreas } }; + properties.widgets = { { LYRICS_WIDGET, tr("Lyrics"), Qt::LeftDockWidgetArea, Qt::AllDockWidgetAreas } }; return properties; } QObject *LyricsFactory::create(QObject *parent) { - return new Lyrics(parent); + return new Lyrics(&m_lyricsWidget, parent); } QWidget *LyricsFactory::createWidget(int id, QWidget *parent) { - if(id == 0) - return new LyricsWindow(nullptr, parent); + if(id == LYRICS_WIDGET) + { + m_lyricsWidget = new LyricsWidget(false, parent); + return m_lyricsWidget; + } return nullptr; } diff --git a/src/plugins/General/lyrics/lyricsfactory.h b/src/plugins/General/lyrics/lyricsfactory.h index 4593dedf7..df518bee8 100644 --- a/src/plugins/General/lyrics/lyricsfactory.h +++ b/src/plugins/General/lyrics/lyricsfactory.h @@ -25,10 +25,12 @@ */ #include <QObject> #include <QDialog> - +#include <QPointer> #include <qmmpui/general.h> #include <qmmpui/generalfactory.h> +class LyricsWidget; + class LyricsFactory : public QObject, public GeneralFactory { Q_OBJECT @@ -41,6 +43,14 @@ public: QDialog *createConfigDialog(QWidget *parent) override; void showAbout(QWidget *parent) override; QString translation() const override; + +private: + enum WidgetType + { + LYRICS_WIDGET = 0 + }; + + QPointer<LyricsWidget> m_lyricsWidget; }; #endif diff --git a/src/plugins/General/lyrics/lyricswindow.cpp b/src/plugins/General/lyrics/lyricswidget.cpp index 4f75bf2ac..375a9034c 100644 --- a/src/plugins/General/lyrics/lyricswindow.cpp +++ b/src/plugins/General/lyrics/lyricswidget.cpp @@ -29,25 +29,25 @@ #include <QCryptographicHash> #include <qmmp/qmmpsettings.h> #include <qmmp/qmmp.h> -#include "lyricswindow.h" +#include "lyricswidget.h" -LyricsWindow::LyricsWindow(const TrackInfo *info, QWidget *parent) - : QWidget(parent) +LyricsWidget::LyricsWidget(bool dialog, QWidget *parent) : QWidget(parent) { m_ui.setupUi(this); - if(!info) - return; - //setWindowFlags(Qt::Dialog); - //setAttribute(Qt::WA_DeleteOnClose); - //setAttribute(Qt::WA_QuitOnClose, false); + if(dialog) + { + setWindowFlags(Qt::Dialog); + setAttribute(Qt::WA_DeleteOnClose); + setAttribute(Qt::WA_QuitOnClose, false); + } + else + { + m_ui.buttonBox->hide(); + } + m_cachePath = Qmmp::configDir() + "/lyrics/"; m_ui.editWidget->setVisible(false); - m_ui.titleLineEdit->setText(info->value(Qmmp::TITLE)); - m_ui.artistLineEdit->setText(info->value(Qmmp::ARTIST)); - m_ui.albumLineEdit->setText(info->value(Qmmp::ALBUM)); - m_ui.trackSpinBox->setValue(info->value(Qmmp::TRACK).toInt()); - m_ui.yearSpinBox->setValue(info->value(Qmmp::YEAR).toInt()); m_http = new QNetworkAccessManager(this); //load global proxy settings @@ -74,25 +74,37 @@ LyricsWindow::LyricsWindow(const TrackInfo *info, QWidget *parent) } QSettings settings(Qmmp::configFile(), QSettings::IniFormat); - restoreGeometry(settings.value("Lyrics/geometry").toByteArray()); m_enabledProviders = settings.value("Lyrics/enabled_providers", m_parser.defaultProviders()).toStringList(); + if(dialog) + restoreGeometry(settings.value("Lyrics/geometry").toByteArray()); + QDir cacheDir(m_cachePath); if(!cacheDir.exists()) { if(!cacheDir.mkpath(cacheDir.absolutePath())) qWarning("LyricsWindow: unable to create cache directory"); } - if(!loadFromCache()) - on_refreshButton_clicked(); } -LyricsWindow::~LyricsWindow() +LyricsWidget::~LyricsWidget() { qDebug("%s", Q_FUNC_INFO); } -void LyricsWindow::onRequestFinished(QNetworkReply *reply) +void LyricsWidget::fetch(const TrackInfo *info) +{ + m_ui.titleLineEdit->setText(info->value(Qmmp::TITLE)); + m_ui.artistLineEdit->setText(info->value(Qmmp::ARTIST)); + m_ui.albumLineEdit->setText(info->value(Qmmp::ALBUM)); + m_ui.trackSpinBox->setValue(info->value(Qmmp::TRACK).toInt()); + m_ui.yearSpinBox->setValue(info->value(Qmmp::YEAR).toInt()); + + if(!loadFromCache()) + on_refreshButton_clicked(); +} + +void LyricsWidget::onRequestFinished(QNetworkReply *reply) { QString name = m_tasks.take(reply); QVariant redirectTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); @@ -148,7 +160,7 @@ void LyricsWindow::onRequestFinished(QNetworkReply *reply) reply->deleteLater(); } -void LyricsWindow::on_refreshButton_clicked() +void LyricsWidget::on_refreshButton_clicked() { m_ui.textBrowser->setHtml(QString("<b>%1</b>").arg(tr("Receiving"))); m_ui.providerComboBox->clear(); @@ -174,24 +186,24 @@ void LyricsWindow::on_refreshButton_clicked() } } -void LyricsWindow::on_editButton_clicked(bool checked) +void LyricsWidget::on_editButton_clicked(bool checked) { m_ui.editWidget->setVisible(checked); } -void LyricsWindow::on_providerComboBox_activated(int index) +void LyricsWidget::on_providerComboBox_activated(int index) { m_ui.textBrowser->setHtml(m_ui.providerComboBox->itemData(index).toString()); } -QString LyricsWindow::cacheFilePath() const +QString LyricsWidget::cacheFilePath() const { QString name = m_ui.artistLineEdit->text() + "_" + m_ui.titleLineEdit->text(); QByteArray hash = QCryptographicHash::hash(name.toUtf8(), QCryptographicHash::Md5); return m_cachePath + QString::fromLatin1(hash.toHex()) + ".html"; } -bool LyricsWindow::loadFromCache() +bool LyricsWidget::loadFromCache() { QFile file(cacheFilePath()); if(!file.exists()) @@ -209,7 +221,7 @@ bool LyricsWindow::loadFromCache() return true; } -void LyricsWindow::saveToCache(const QString &text) +void LyricsWidget::saveToCache(const QString &text) { QFile file(cacheFilePath()); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) @@ -221,8 +233,11 @@ void LyricsWindow::saveToCache(const QString &text) file.write(text.toUtf8()); } -void LyricsWindow::closeEvent(QCloseEvent *) +void LyricsWidget::closeEvent(QCloseEvent *) { - QSettings settings(Qmmp::configFile(), QSettings::IniFormat); - settings.setValue("Lyrics/geometry", saveGeometry()); + if(windowFlags() & Qt::Dialog) + { + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + settings.setValue("Lyrics/geometry", saveGeometry()); + } } diff --git a/src/plugins/General/lyrics/lyricswindow.h b/src/plugins/General/lyrics/lyricswidget.h index 5ea962461..c4a7c6e20 100644 --- a/src/plugins/General/lyrics/lyricswindow.h +++ b/src/plugins/General/lyrics/lyricswidget.h @@ -17,8 +17,8 @@ * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef LYRICSWINDOW_H -#define LYRICSWINDOW_H +#ifndef LYRICSWIDGET_H +#define LYRICSWIDGET_H #include <QWidget> #include <QHash> @@ -33,13 +33,15 @@ class TrackInfo; /** @author Ilya Kotov <forkotov02@ya.ru> */ -class LyricsWindow : public QWidget +class LyricsWidget : public QWidget { Q_OBJECT public: - explicit LyricsWindow(const TrackInfo *info, QWidget *parent = nullptr); + explicit LyricsWidget(bool window, QWidget *parent = nullptr); - ~LyricsWindow(); + ~LyricsWidget(); + + void fetch(const TrackInfo *info); private slots: void onRequestFinished(QNetworkReply *reply); diff --git a/src/plugins/General/lyrics/lyricswindow.ui b/src/plugins/General/lyrics/lyricswidget.ui index 28e901ef1..28e901ef1 100644 --- a/src/plugins/General/lyrics/lyricswindow.ui +++ b/src/plugins/General/lyrics/lyricswidget.ui |
