aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qmmpui/detailsdialog.cpp8
-rw-r--r--src/qmmpui/detailsdialog.h4
-rw-r--r--src/qmmpui/playlistmodel.cpp24
-rw-r--r--src/qmmpui/tagupdater.cpp30
-rw-r--r--src/qmmpui/tagupdater_p.h6
5 files changed, 43 insertions, 29 deletions
diff --git a/src/qmmpui/detailsdialog.cpp b/src/qmmpui/detailsdialog.cpp
index 0ade03e9e..1c967e6e2 100644
--- a/src/qmmpui/detailsdialog.cpp
+++ b/src/qmmpui/detailsdialog.cpp
@@ -32,21 +32,21 @@
#include "tageditor_p.h"
#include "detailsdialog.h"
-DetailsDialog::DetailsDialog(PlayListTrack *item, QWidget *parent)
+DetailsDialog::DetailsDialog(QList<PlayListTrack *> tracks, QWidget *parent)
: QDialog(parent)
{
m_ui = new Ui::DetailsDialog;
setAttribute(Qt::WA_QuitOnClose, false);
setAttribute(Qt::WA_DeleteOnClose, false);
m_metaDataModel = 0;
- m_item = item;
+ m_item = tracks.at(0);
m_ui->setupUi(this);
setAttribute(Qt::WA_DeleteOnClose);
- m_path = item->url();
+ m_path = m_item->url();
setWindowTitle (m_path.section('/',-1));
m_ui->pathEdit->setText(m_path);
m_ui->directoryButton->setIcon(QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon));
- m_metaDataModel = MetaDataManager::instance()->createMetaDataModel(item->url(), this);
+ m_metaDataModel = MetaDataManager::instance()->createMetaDataModel(m_item->url(), this);
if(m_metaDataModel)
{
diff --git a/src/qmmpui/detailsdialog.h b/src/qmmpui/detailsdialog.h
index 570235a71..9d439fe49 100644
--- a/src/qmmpui/detailsdialog.h
+++ b/src/qmmpui/detailsdialog.h
@@ -43,10 +43,10 @@ class DetailsDialog : public QDialog
public:
/*!
* Constructor.
- * @param item Playlist item which should be used.
+ * @param tracks a list of tracks which should be used.
* @param parent Parent widget.
*/
- DetailsDialog(PlayListTrack *item, QWidget *parent = 0);
+ DetailsDialog(QList<PlayListTrack *> tracks, QWidget *parent = 0);
/*!
* Destructor.
*/
diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp
index 66955f6b9..d08282910 100644
--- a/src/qmmpui/playlistmodel.cpp
+++ b/src/qmmpui/playlistmodel.cpp
@@ -430,16 +430,24 @@ void PlayListModel::selectAll()
void PlayListModel::showDetails(QWidget *parent)
{
+ QList<PlayListTrack *> selected_tracks;
+
for (int i = 0; i < m_container->count(); ++i)
{
- if (m_container->isSelected(i) && m_container->track(i))
- {
- QDialog *d = new DetailsDialog(m_container->track(i), parent);
- TagUpdater *updater = new TagUpdater(d, m_container->track(i));
- connect(updater, SIGNAL(destroyed(QObject *)),SIGNAL(listChanged()));
- d->show();
- return;
- }
+ if(!m_container->isSelected(i))
+ continue;
+ PlayListTrack *track = m_container->track(i);
+ if(track && track->flag() != PlayListTrack::FREE)
+ continue;
+ selected_tracks.append(track);
+ }
+
+ if(!selected_tracks.isEmpty())
+ {
+ QDialog *d = new DetailsDialog(selected_tracks, parent);
+ TagUpdater *updater = new TagUpdater(d, selected_tracks);
+ connect(updater, SIGNAL(destroyed(QObject *)),SIGNAL(listChanged()));
+ d->show();
}
}
diff --git a/src/qmmpui/tagupdater.cpp b/src/qmmpui/tagupdater.cpp
index 0b50e83cc..02f0c4590 100644
--- a/src/qmmpui/tagupdater.cpp
+++ b/src/qmmpui/tagupdater.cpp
@@ -20,23 +20,29 @@
#include "tagupdater_p.h"
-TagUpdater::TagUpdater(QObject* o, PlayListTrack* track) : m_observable(o), m_item(track)
+TagUpdater::TagUpdater(QObject* o, QList<PlayListTrack *> tracks) : m_observable(o)
{
- m_item->setFlag(PlayListTrack::EDITING);
- connect(m_observable, SIGNAL(destroyed(QObject *)),SLOT(updateTag()));
+ m_tracks = tracks;
+ foreach(PlayListTrack *t, m_tracks)
+ t->setFlag(PlayListTrack::EDITING);
+ connect(m_observable, SIGNAL(destroyed(QObject *)),SLOT(updateTags()));
connect(m_observable, SIGNAL(destroyed(QObject *)),SLOT(deleteLater()));
}
-void TagUpdater::updateTag()
+void TagUpdater::updateTags()
{
- if (m_item->flag() == PlayListTrack::SCHEDULED_FOR_DELETION)
+ foreach (PlayListTrack *t, m_tracks)
{
- delete m_item;
- m_item = NULL;
- }
- else
- {
- m_item->updateMetaData();
- m_item->setFlag(PlayListTrack::FREE);
+ if (t->flag() == PlayListTrack::SCHEDULED_FOR_DELETION)
+ {
+ delete t;
+ t = 0;
+ }
+ else
+ {
+ t->updateMetaData();
+ t->setFlag(PlayListTrack::FREE);
+ }
}
+ m_tracks.clear();
}
diff --git a/src/qmmpui/tagupdater_p.h b/src/qmmpui/tagupdater_p.h
index e5fa66582..c27213c8c 100644
--- a/src/qmmpui/tagupdater_p.h
+++ b/src/qmmpui/tagupdater_p.h
@@ -34,12 +34,12 @@ class TagUpdater : public QObject
Q_OBJECT
public:
- TagUpdater(QObject* o, PlayListTrack* track);
+ TagUpdater(QObject* o, QList<PlayListTrack*> tracks);
QObject* m_observable;
- PlayListTrack* m_item;
+ QList<PlayListTrack*> m_tracks;
public slots:
- void updateTag();
+ void updateTags();
};