diff options
| -rw-r--r-- | src/plugins/Ui/skinned/listwidget.cpp | 26 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/listwidget.h | 3 | ||||
| -rw-r--r-- | src/qmmpui/groupedcontainer.cpp | 18 | ||||
| -rw-r--r-- | src/qmmpui/groupedcontainer_p.h | 1 | ||||
| -rw-r--r-- | src/qmmpui/normalcontainer.cpp | 8 | ||||
| -rw-r--r-- | src/qmmpui/normalcontainer_p.h | 1 | ||||
| -rw-r--r-- | src/qmmpui/playlistcontainer_p.h | 1 | ||||
| -rw-r--r-- | src/qmmpui/playlistgroup.cpp | 5 | ||||
| -rw-r--r-- | src/qmmpui/playlistgroup.h | 1 | ||||
| -rw-r--r-- | src/qmmpui/playlistmodel.cpp | 75 | ||||
| -rw-r--r-- | src/qmmpui/playlistmodel.h | 24 |
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(); |
