aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmmpui')
-rw-r--r--src/qmmpui/groupedcontainer.cpp18
-rw-r--r--src/qmmpui/groupedcontainer_p.h1
-rw-r--r--src/qmmpui/normalcontainer.cpp8
-rw-r--r--src/qmmpui/normalcontainer_p.h1
-rw-r--r--src/qmmpui/playlistcontainer_p.h1
-rw-r--r--src/qmmpui/playlistgroup.cpp5
-rw-r--r--src/qmmpui/playlistgroup.h1
-rw-r--r--src/qmmpui/playlistmodel.cpp75
-rw-r--r--src/qmmpui/playlistmodel.h24
9 files changed, 132 insertions, 2 deletions
diff --git a/src/qmmpui/groupedcontainer.cpp b/src/qmmpui/groupedcontainer.cpp
index 73d7fe3a6..4a6bc4019 100644
--- a/src/qmmpui/groupedcontainer.cpp
+++ b/src/qmmpui/groupedcontainer.cpp
@@ -68,6 +68,24 @@ void GroupedContainer::addTrack(PlayListTrack *track)
addGroup(group);
}
+void GroupedContainer::insertTrack(int index, PlayListTrack *track)
+{
+ //insert if possible
+ foreach(PlayListGroup *group, m_groups)
+ {
+ if(track->groupName() == group->formattedTitle() &&
+ index > group->firstIndex && index <= group->lastIndex + 1)
+ {
+ group->insertTrack(index - group->firstIndex - 1, track);
+ m_items.insert(index, track);
+ updateIndex();
+ return;
+ }
+ }
+ //just add otherwise
+ addTrack(track);
+}
+
QList<PlayListGroup *> GroupedContainer::groups()
{
return m_groups;
diff --git a/src/qmmpui/groupedcontainer_p.h b/src/qmmpui/groupedcontainer_p.h
index 86357de8c..765249b0e 100644
--- a/src/qmmpui/groupedcontainer_p.h
+++ b/src/qmmpui/groupedcontainer_p.h
@@ -35,6 +35,7 @@ public:
virtual ~GroupedContainer();
void addTrack(PlayListTrack *track);
+ void insertTrack(int index, PlayListTrack *track);
QList<PlayListGroup *> groups();
QList<PlayListItem *> items() const;
int count() const;
diff --git a/src/qmmpui/normalcontainer.cpp b/src/qmmpui/normalcontainer.cpp
index 3cd8fa07b..665f19e91 100644
--- a/src/qmmpui/normalcontainer.cpp
+++ b/src/qmmpui/normalcontainer.cpp
@@ -35,6 +35,14 @@ void NormalContainer::addTrack(PlayListTrack *track)
m_items.append(track);
}
+void NormalContainer::insertTrack(int index, PlayListTrack *track)
+{
+ if(index >= 0 && index < m_items.count())
+ m_items.insert(index, track);
+ else
+ m_items.append(track);
+}
+
QList<PlayListGroup *> NormalContainer::groups()
{
return QList<PlayListGroup *>();
diff --git a/src/qmmpui/normalcontainer_p.h b/src/qmmpui/normalcontainer_p.h
index f64787cb5..56d53b3f9 100644
--- a/src/qmmpui/normalcontainer_p.h
+++ b/src/qmmpui/normalcontainer_p.h
@@ -35,6 +35,7 @@ public:
virtual ~NormalContainer();
void addTrack(PlayListTrack *item);
+ void insertTrack(int index, PlayListTrack *track);
QList<PlayListGroup *> groups();
QList<PlayListItem *> items() const;
int count() const;
diff --git a/src/qmmpui/playlistcontainer_p.h b/src/qmmpui/playlistcontainer_p.h
index 9710585aa..1243f5f0b 100644
--- a/src/qmmpui/playlistcontainer_p.h
+++ b/src/qmmpui/playlistcontainer_p.h
@@ -40,6 +40,7 @@ public:
virtual void addTrack(PlayListTrack *track) = 0;
void addTracks(QList<PlayListTrack *> tracks);
+ virtual void insertTrack(int index, PlayListTrack *track) = 0;
virtual QList<PlayListGroup *> groups() = 0;
virtual QList<PlayListItem *> items() const = 0;
virtual int count() const = 0;
diff --git a/src/qmmpui/playlistgroup.cpp b/src/qmmpui/playlistgroup.cpp
index e8ee11096..3951fd035 100644
--- a/src/qmmpui/playlistgroup.cpp
+++ b/src/qmmpui/playlistgroup.cpp
@@ -59,6 +59,11 @@ void PlayListGroup::addTracks(QList<PlayListTrack *> tracks)
m_tracks.append(tracks);
}
+void PlayListGroup::insertTrack(int pos, PlayListTrack *track)
+{
+ m_tracks.insert(pos, track);
+}
+
bool PlayListGroup::contains(PlayListTrack *track) const
{
return m_tracks.contains(track);
diff --git a/src/qmmpui/playlistgroup.h b/src/qmmpui/playlistgroup.h
index 11e638744..dbd21b806 100644
--- a/src/qmmpui/playlistgroup.h
+++ b/src/qmmpui/playlistgroup.h
@@ -37,6 +37,7 @@ public:
const QString formattedTitle();
void addTrack(PlayListTrack *track);
void addTracks(QList<PlayListTrack *> tracks);
+ void insertTrack(int pos, PlayListTrack *track);
bool contains(PlayListTrack *track) const;
bool isEmpty() const;
void remove(PlayListTrack *track);
diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp
index bcf7dc554..b923a9848 100644
--- a/src/qmmpui/playlistmodel.cpp
+++ b/src/qmmpui/playlistmodel.cpp
@@ -51,6 +51,8 @@ PlayListModel::PlayListModel(const QString &name, QObject *parent)
m_container = new NormalContainer;
connect(m_loader, SIGNAL(newPlayListTrack(PlayListTrack*)),
SLOT(add(PlayListTrack*)), Qt::QueuedConnection);
+ connect(m_loader, SIGNAL(newPlayListTrack(int, PlayListTrack*)),
+ SLOT(insert(int, PlayListTrack*)), Qt::QueuedConnection);
connect(m_loader, SIGNAL(finished()), SLOT(preparePlayState()));
connect(m_loader, SIGNAL(finished()), SIGNAL(loaderFinished()));
}
@@ -114,6 +116,11 @@ void PlayListModel::add(QList<PlayListTrack *> tracks)
m_current = m_container->indexOf(track);
emit currentChanged();
}
+ else if(m_groups_enabled)
+ {
+ //update current index for grouped container only
+ m_current = m_container->indexOf(m_current_track);
+ }
emit trackAdded(track);
}
preparePlayState();
@@ -141,6 +148,74 @@ void PlayListModel::add(const QStringList &paths)
}
}
+void PlayListModel::insert(int index, PlayListTrack *track)
+{
+ m_container->insertTrack(index, track);
+ m_total_length += track->length();
+
+ if(m_container->trackCount() == 1)
+ {
+ m_current_track = track;
+ m_current = m_container->indexOf(track);
+ emit currentChanged();
+ }
+ else
+ {
+ //update current index
+ m_current = m_container->indexOf(m_current_track);
+ }
+ emit trackAdded(track);
+ emit listChanged();
+ emit countChanged();
+}
+
+void PlayListModel::insert(int index, QList<PlayListTrack *> tracks)
+{
+ if(tracks.isEmpty())
+ return;
+
+ PlayListItem *prevItem = m_container->item(index);
+ foreach(PlayListTrack *track, tracks)
+ {
+ m_container->insertTrack(index, track);
+ index = prevItem ? m_container->indexOf(prevItem) : m_container->count();
+
+ m_total_length += track->length();
+ if(m_container->trackCount() == 1)
+ {
+ m_current_track = track;
+ m_current = m_container->indexOf(track);
+ emit currentChanged();
+ }
+ emit trackAdded(track);
+ }
+ //update current index
+ m_current = m_container->indexOf(m_current_track);
+ preparePlayState();
+ emit listChanged();
+ emit countChanged();
+}
+
+void PlayListModel::insert(int index, const QString &path)
+{
+ /*QFileInfo f_info(path);
+ if (f_info.isDir())
+ m_loader->loadDirectory(path);
+ else
+ {
+ m_loader->loadFile(path);
+ loadPlaylist(path);
+ }*/
+}
+
+void PlayListModel::insert(int index, const QStringList &paths)
+{
+ /*foreach(QString str, paths)
+ {
+ add(str);
+ }*/
+}
+
int PlayListModel::count() const
{
return m_container->count();
diff --git a/src/qmmpui/playlistmodel.h b/src/qmmpui/playlistmodel.h
index 002ed5a4c..ce63a8157 100644
--- a/src/qmmpui/playlistmodel.h
+++ b/src/qmmpui/playlistmodel.h
@@ -311,9 +311,9 @@ signals:
public slots:
/*!
- * Adds \b item to the playlist.
+ * Adds \b track to the playlist.
*/
- void add(PlayListTrack *item);
+ void add(PlayListTrack *track);
/*!
* Adds a list of items to the playlist.
* @param items List of items.
@@ -330,6 +330,26 @@ public slots:
*/
void add(const QStringList &paths);
/*!
+ * Inserts \b track at index position \b index in the playlist.
+ */
+ void insert(int index, PlayListTrack *track);
+ /*!
+ * Inserts \b tracks at index position \b index in the playlist.
+ */
+ void insert(int index, QList <PlayListTrack *> tracks);
+ /*!
+ * Inserts file or directory at index position \b index in the playlist.
+ * @param path Full path of file or directory.
+ * @param index Position in the playlist.
+ */
+ void insert(int index, const QString &path);
+ /*!
+ * Adds a list of files and directories at index position \b index in the playlist.
+ * @param paths Full paths of files and directories.
+ * @param index Position in the playlist.
+ */
+ void insert(int index, const QStringList &paths);
+ /*!
* Removes all items.
*/
void clear();