aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-11-20 11:57:25 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-11-20 11:57:25 +0000
commit7b5e9960a11f35b3792d3417557fef5abc1ca876 (patch)
tree69ee9a72fabbcf169d1b4b2eb7f3051d6c0d3e81 /src
parent025f0783a5bdc1fffb6dbf6149ca0bb68f12f12f (diff)
downloadqmmp-7b5e9960a11f35b3792d3417557fef5abc1ca876.tar.gz
qmmp-7b5e9960a11f35b3792d3417557fef5abc1ca876.tar.bz2
qmmp-7b5e9960a11f35b3792d3417557fef5abc1ca876.zip
prepare for insert functions impelementation
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3918 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
-rw-r--r--src/plugins/Ui/skinned/listwidget.cpp26
-rw-r--r--src/plugins/Ui/skinned/listwidget.h3
-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
11 files changed, 161 insertions, 2 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp
index 6aa9792eb..8acd31783 100644
--- a/src/plugins/Ui/skinned/listwidget.cpp
+++ b/src/plugins/Ui/skinned/listwidget.cpp
@@ -46,6 +46,7 @@ ListWidget::ListWidget(QWidget *parent)
m_popupWidget = 0;
m_metrics = 0;
m_extra_metrics = 0;
+ m_drop_row = -1;
loadColors();
m_menu = new QMenu(this);
m_scroll_direction = NONE;
@@ -264,6 +265,14 @@ void ListWidget::paintEvent(QPaintEvent *)
}
sx = rtl ? 9 : width() - 7 - m_metrics->width(m_rows[i]->length);
painter.drawText(sx, sy, m_rows[i]->length);
+
+ //draw drop line
+ if(m_drop_row == (m_first + i))
+ {
+ painter.setPen(m_current);
+ painter.drawLine (6, i * (m_metrics->lineSpacing() + 2),
+ width() - 4 , i * (m_metrics->lineSpacing() + 2));
+ }
}
//draw line
if(m_number_width)
@@ -548,6 +557,23 @@ void ListWidget::dropEvent(QDropEvent *event)
m_model->add(u.toString());
}
}
+ m_drop_row = -1;
+}
+
+void ListWidget::dragLeaveEvent(QDragLeaveEvent *)
+{
+ m_drop_row = -1;
+ update();
+}
+
+void ListWidget::dragMoveEvent(QDragMoveEvent *event)
+{
+ int row = rowAt(event->pos().y());
+ if(row != m_drop_row)
+ {
+ m_drop_row = row;
+ update();
+ }
}
const QString ListWidget::getExtraString(int i)
diff --git a/src/plugins/Ui/skinned/listwidget.h b/src/plugins/Ui/skinned/listwidget.h
index b7e902203..57f5f4d1a 100644
--- a/src/plugins/Ui/skinned/listwidget.h
+++ b/src/plugins/Ui/skinned/listwidget.h
@@ -98,6 +98,8 @@ protected:
int rowAt(int)const;
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
+ void dragLeaveEvent(QDragLeaveEvent *);
+ void dragMoveEvent(QDragMoveEvent *event);
void contextMenuEvent (QContextMenuEvent * event);
bool event (QEvent *e);
@@ -140,6 +142,7 @@ private:
bool m_show_anchor;
bool m_align_numbres;
int m_number_width;
+ int m_drop_row;
QList<ListWidgetRow *> m_rows;
MediaPlayer *m_player;
PlayListPopup::PopupWidget *m_popupWidget;
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();