diff options
| -rw-r--r-- | src/qmmpui/covereditor.cpp | 63 | ||||
| -rw-r--r-- | src/qmmpui/covereditor_p.h | 17 | ||||
| -rw-r--r-- | src/qmmpui/coverviewer.cpp | 21 | ||||
| -rw-r--r-- | src/qmmpui/coverviewer_p.h | 9 | ||||
| -rw-r--r-- | src/qmmpui/detailsdialog.cpp | 28 | ||||
| -rw-r--r-- | src/qmmpui/forms/covereditor.ui | 83 |
6 files changed, 162 insertions, 59 deletions
diff --git a/src/qmmpui/covereditor.cpp b/src/qmmpui/covereditor.cpp index c6f59acea..07241ffc9 100644 --- a/src/qmmpui/covereditor.cpp +++ b/src/qmmpui/covereditor.cpp @@ -18,10 +18,71 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ +#include <QVBoxLayout> +#include "coverviewer_p.h" #include "covereditor_p.h" -CoverEditor::CoverEditor(QWidget *parent) : +CoverEditor::CoverEditor(MetaDataModel *model, const QString &coverPath, QWidget *parent) : QWidget(parent) { m_ui.setupUi(this); + m_model = model; + m_coverPath = coverPath; + m_editable = m_model && (m_model->dialogHints() & MetaDataModel::IS_COVER_EDITABLE) && !m_model->isReadOnly(); + + m_ui.sourceComboBox->addItem(tr("External file")); + m_ui.sourceComboBox->addItem(tr("Tag")); + + m_viewer = new CoverViewer(this); + QVBoxLayout *layout = new QVBoxLayout(); + layout->addWidget(m_viewer); + m_ui.frame->setLayout(layout); + + if(m_model && !m_model->cover().isNull()) + m_ui.sourceComboBox->setCurrentIndex(1); + else + m_ui.sourceComboBox->setCurrentIndex(0); + + on_sourceComboBox_activated(m_ui.sourceComboBox->currentIndex()); + + if(!m_model || m_coverPath.isEmpty() || (!m_editable && m_model->cover().isNull())) + m_ui.sourceComboBox->setEnabled(false); +} + +bool CoverEditor::isEditable() const +{ + return m_editable; +} + +void CoverEditor::on_sourceComboBox_activated(int index) +{ + if(index == 0) + { + m_viewer->setPixmap(QPixmap(m_coverPath)); + m_ui.loadButton->setEnabled(false); + m_ui.deleteButton->setEnabled(false); + m_ui.saveAsButton->setEnabled(m_viewer->hasPixmap()); + } + else if(index == 1) + { + m_viewer->setPixmap(m_model->cover()); + m_ui.loadButton->setEnabled(m_editable); + m_ui.deleteButton->setEnabled(m_editable && m_viewer->hasPixmap()); + m_ui.saveAsButton->setEnabled(m_viewer->hasPixmap()); + } +} + +void CoverEditor::on_loadButton_clicked() +{ + +} + +void CoverEditor::on_deleteButton_clicked() +{ + +} + +void CoverEditor::on_saveAsButton_clicked() +{ + m_viewer->saveAs(); } diff --git a/src/qmmpui/covereditor_p.h b/src/qmmpui/covereditor_p.h index 5ccbc25ae..9824fef40 100644 --- a/src/qmmpui/covereditor_p.h +++ b/src/qmmpui/covereditor_p.h @@ -22,8 +22,12 @@ #define COVEREDITOR_P_H #include <QWidget> +#include <QString> +#include <qmmp/metadatamodel.h> #include "ui_covereditor.h" +class CoverViewer; + /** @internal @author Ilya Kotov <forkotov02@ya.ru> @@ -33,11 +37,22 @@ class CoverEditor : public QWidget { Q_OBJECT public: - explicit CoverEditor(QWidget *parent = 0); + explicit CoverEditor(MetaDataModel *model, const QString &coverPath, QWidget *parent = 0); + + bool isEditable() const; +private slots: + void on_sourceComboBox_activated(int index); + void on_loadButton_clicked(); + void on_deleteButton_clicked(); + void on_saveAsButton_clicked(); private: Ui::CoverEditor m_ui; + MetaDataModel *m_model; + CoverViewer *m_viewer; + QString m_coverPath; + bool m_editable; }; diff --git a/src/qmmpui/coverviewer.cpp b/src/qmmpui/coverviewer.cpp index a27702244..5de87cbf3 100644 --- a/src/qmmpui/coverviewer.cpp +++ b/src/qmmpui/coverviewer.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2017 by Ilya Kotov * + * Copyright (C) 2017-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -42,14 +42,9 @@ void CoverViewer::setPixmap(const QPixmap &pixmap) update(); } -void CoverViewer::paintEvent(QPaintEvent *) +bool CoverViewer::hasPixmap() const { - if(!m_pixmap.isNull()) - { - QPainter paint(this); - QPixmap pixmap = m_pixmap.scaled(size().width() - 20, size().height() - 20, Qt::KeepAspectRatio, Qt::SmoothTransformation); - paint.drawPixmap((width() - pixmap.width()) / 2, (height() - pixmap.height()) / 2, pixmap); - } + return !m_pixmap.isNull(); } void CoverViewer::saveAs() @@ -61,3 +56,13 @@ void CoverViewer::saveAs() if (!path.isEmpty()) m_pixmap.save(path); } + +void CoverViewer::paintEvent(QPaintEvent *) +{ + if(!m_pixmap.isNull()) + { + QPainter paint(this); + QPixmap pixmap = m_pixmap.scaled(size().width() - 10, size().height() - 10, Qt::KeepAspectRatio, Qt::SmoothTransformation); + paint.drawPixmap((width() - pixmap.width()) / 2, (height() - pixmap.height()) / 2, pixmap); + } +} diff --git a/src/qmmpui/coverviewer_p.h b/src/qmmpui/coverviewer_p.h index bef464bc0..53d7702ad 100644 --- a/src/qmmpui/coverviewer_p.h +++ b/src/qmmpui/coverviewer_p.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2017 by Ilya Kotov * + * Copyright (C) 2017-2018 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -39,14 +39,13 @@ public: ~CoverViewer(); void setPixmap(const QPixmap&); + bool hasPixmap() const; -protected: - void paintEvent(QPaintEvent *); - -private slots: +public slots: void saveAs(); private: + void paintEvent(QPaintEvent *); QPixmap m_pixmap; }; diff --git a/src/qmmpui/detailsdialog.cpp b/src/qmmpui/detailsdialog.cpp index c9cacd6a9..6d34d1cb8 100644 --- a/src/qmmpui/detailsdialog.cpp +++ b/src/qmmpui/detailsdialog.cpp @@ -170,17 +170,8 @@ void DetailsDialog::updatePage() qDeleteAll(infoList); infoList.clear(); - //QPixmap cover = MetaDataManager::instance()->getCover(m_info.path()); - /*if(!cover.isNull()) - { - CoverViewer *coverViewer = new CoverViewer(this); - coverViewer->setPixmap(cover); - m_ui->tabWidget->addTab(coverViewer, tr("Cover")); - }*/ - - CoverEditor *coverEditor = new CoverEditor(this); - m_ui->tabWidget->addTab(coverEditor, tr("Cover")); - + QString coverPath; + QPixmap coverPixmap; if(m_info.path().contains("://")) //URL { @@ -188,12 +179,27 @@ void DetailsDialog::updatePage() } else if(QFile::exists(m_info.path())) //local file { + coverPath = MetaDataManager::instance()->findCoverFile(m_info.path()); bool writable = QFileInfo(m_info.path()).isWritable(); m_metaDataModel = MetaDataManager::instance()->createMetaDataModel(m_info.path(), !writable); } if(m_metaDataModel) { + coverPath = coverPath.isEmpty() ? m_metaDataModel->coverPath() : coverPath; + coverPixmap = m_metaDataModel->cover(); + } + + if((m_metaDataModel && (m_metaDataModel->dialogHints() & MetaDataModel::IS_COVER_EDITABLE)) || + !coverPath.isEmpty() || + !coverPixmap.isNull()) + { + CoverEditor *coverEditor = new CoverEditor(m_metaDataModel, coverPath, this); + m_ui->tabWidget->addTab(coverEditor, tr("Cover")); + } + + if(m_metaDataModel) + { foreach(TagModel *tagModel, m_metaDataModel->tags()) { TagEditor *editor = new TagEditor(tagModel, this); diff --git a/src/qmmpui/forms/covereditor.ui b/src/qmmpui/forms/covereditor.ui index 8282a9e1d..9ca86a4f2 100644 --- a/src/qmmpui/forms/covereditor.ui +++ b/src/qmmpui/forms/covereditor.ui @@ -6,15 +6,42 @@ <rect> <x>0</x> <y>0</y> - <width>451</width> - <height>382</height> + <width>434</width> + <height>381</height> </rect> </property> <property name="windowTitle"> <string notr="true">Cover Editor</string> </property> <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0" rowspan="5"> + <item row="0" column="0" colspan="2"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Image source:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="sourceComboBox"/> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>210</width> + <height>26</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="1" column="0" rowspan="5"> <widget class="QFrame" name="frame"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> @@ -23,58 +50,48 @@ </sizepolicy> </property> <property name="frameShape"> - <enum>QFrame::StyledPanel</enum> + <enum>QFrame::Box</enum> </property> <property name="frameShadow"> - <enum>QFrame::Raised</enum> + <enum>QFrame::Sunken</enum> </property> </widget> </item> - <item row="0" column="1"> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string>Source</string> + <item row="1" column="1"> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QRadioButton" name="radioButton"> - <property name="text"> - <string>File</string> - </property> - </widget> - </item> - <item> - <widget class="QRadioButton" name="radioButton_2"> - <property name="text"> - <string>Tag</string> - </property> - </widget> - </item> - </layout> - </widget> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> </item> - <item row="1" column="1"> - <widget class="QPushButton" name="pushButton"> + <item row="2" column="1"> + <widget class="QPushButton" name="loadButton"> <property name="text"> <string>Load</string> </property> </widget> </item> - <item row="2" column="1"> - <widget class="QPushButton" name="pushButton_2"> + <item row="3" column="1"> + <widget class="QPushButton" name="deleteButton"> <property name="text"> <string>Delete</string> </property> </widget> </item> - <item row="3" column="1"> - <widget class="QPushButton" name="pushButton_3"> + <item row="4" column="1"> + <widget class="QPushButton" name="saveAsButton"> <property name="text"> <string>Save as...</string> </property> </widget> </item> - <item row="4" column="1"> + <item row="5" column="1"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> |
