aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmmpui')
-rw-r--r--src/qmmpui/covereditor.cpp63
-rw-r--r--src/qmmpui/covereditor_p.h17
-rw-r--r--src/qmmpui/coverviewer.cpp21
-rw-r--r--src/qmmpui/coverviewer_p.h9
-rw-r--r--src/qmmpui/detailsdialog.cpp28
-rw-r--r--src/qmmpui/forms/covereditor.ui83
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>