diff options
| -rw-r--r-- | src/qmmpui/groupedcontainer.cpp (renamed from src/qmmpui/playlistcontainer.cpp) | 54 | ||||
| -rw-r--r-- | src/qmmpui/groupedcontainer_p.h | 61 | ||||
| -rw-r--r-- | src/qmmpui/normalcontainer.cpp | 176 | ||||
| -rw-r--r-- | src/qmmpui/normalcontainer_p.h | 57 | ||||
| -rw-r--r-- | src/qmmpui/playlistcontainer_p.h | 58 | ||||
| -rw-r--r-- | src/qmmpui/playlistmodel.cpp | 24 | ||||
| -rw-r--r-- | src/qmmpui/qmmpui.pro | 9 |
7 files changed, 356 insertions, 83 deletions
diff --git a/src/qmmpui/playlistcontainer.cpp b/src/qmmpui/groupedcontainer.cpp index bfd2c8457..6c395042f 100644 --- a/src/qmmpui/playlistcontainer.cpp +++ b/src/qmmpui/groupedcontainer.cpp @@ -18,14 +18,17 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#include "playlistcontainer_p.h" +#include "groupedcontainer_p.h" -PlayListContainer::PlayListContainer() +GroupedContainer::GroupedContainer() { - qDebug("%s", Q_FUNC_INFO); } -void PlayListContainer::addGroup(PlayListGroup *group) +GroupedContainer::~GroupedContainer() +{ +} + +void GroupedContainer::addGroup(PlayListGroup *group) { m_groups.append(group); m_items.append(group); @@ -36,7 +39,7 @@ void PlayListContainer::addGroup(PlayListGroup *group) updateIndex(); } -void PlayListContainer::addTrack(PlayListTrack *track) +void GroupedContainer::addTrack(PlayListTrack *track) { if(!m_groups.isEmpty() && track->groupName() == m_groups.last()->formattedTitle()) { @@ -62,50 +65,50 @@ void PlayListContainer::addTrack(PlayListTrack *track) addGroup(group); } -QList<PlayListGroup *> PlayListContainer::groups() +QList<PlayListGroup *> GroupedContainer::groups() { return m_groups; } -QList<PlayListItem *> PlayListContainer::items() const +QList<PlayListItem *> GroupedContainer::items() const { return m_items; } -int PlayListContainer::count() const +int GroupedContainer::count() const { return m_items.count(); } -int PlayListContainer::trackCount() const +int GroupedContainer::trackCount() const { return m_items.count() - m_groups.count(); } -QList<PlayListItem *> PlayListContainer::mid(int pos, int count) const +QList<PlayListItem *> GroupedContainer::mid(int pos, int count) const { return m_items.mid(pos, count); } -bool PlayListContainer::isEmpty() const +bool GroupedContainer::isEmpty() const { return m_items.isEmpty(); } -bool PlayListContainer::isSelected(int index) const +bool GroupedContainer::isSelected(int index) const { if (0 <= index && index < m_items.count()) return m_items.at(index)->isSelected(); return false; } -void PlayListContainer::setSelected(int index, bool selected) +void GroupedContainer::setSelected(int index, bool selected) { if (0 <= index && index < m_items.count())// && !m_items.at(index)->isGroup()) m_items.at(index)->setSelected(selected); } -void PlayListContainer::clearSelection() +void GroupedContainer::clearSelection() { foreach (PlayListItem *item, m_items) { @@ -113,12 +116,12 @@ void PlayListContainer::clearSelection() } } -int PlayListContainer::indexOf(PlayListItem *item) const +int GroupedContainer::indexOf(PlayListItem *item) const { return m_items.indexOf(item); } -PlayListItem *PlayListContainer::item(int index) const +PlayListItem *GroupedContainer::item(int index) const { if(index >= count() || index < 0) { @@ -128,7 +131,7 @@ PlayListItem *PlayListContainer::item(int index) const return m_items.at(index); } -PlayListTrack *PlayListContainer::track(int index) const +PlayListTrack *GroupedContainer::track(int index) const { PlayListItem *i = item(index); if(!i || i->isGroup()) @@ -136,12 +139,12 @@ PlayListTrack *PlayListContainer::track(int index) const return dynamic_cast<PlayListTrack *> (i); } -bool PlayListContainer::contains(PlayListItem *item) const +bool GroupedContainer::contains(PlayListItem *item) const { return m_items.contains(item); } -int PlayListContainer::numberOfTrack(int index) const +int GroupedContainer::numberOfTrack(int index) const { for(int i = 0; i < m_groups.count(); ++i) { @@ -153,7 +156,7 @@ int PlayListContainer::numberOfTrack(int index) const return -1; } -void PlayListContainer::removeTrack(int index) +void GroupedContainer::removeTrack(int index) { PlayListTrack *t = track(index); if(t) @@ -170,7 +173,7 @@ void PlayListContainer::removeTrack(int index) } } -void PlayListContainer::removeTrack(PlayListTrack *track) +void GroupedContainer::removeTrack(PlayListTrack *track) { m_items.removeAll(track); @@ -191,13 +194,13 @@ void PlayListContainer::removeTrack(PlayListTrack *track) } } -void PlayListContainer::removeTracks(QList<PlayListTrack *> tracks) +void GroupedContainer::removeTracks(QList<PlayListTrack *> tracks) { foreach(PlayListTrack *t, tracks) removeTrack(t); } -bool PlayListContainer::move(QList<int> indexes, int from, int to) +bool GroupedContainer::move(QList<int> indexes, int from, int to) { PlayListGroup *group = 0; @@ -251,7 +254,7 @@ bool PlayListContainer::move(QList<int> indexes, int from, int to) return true; } -void PlayListContainer::clear() +void GroupedContainer::clear() { while(!m_groups.isEmpty()) { @@ -260,7 +263,7 @@ void PlayListContainer::clear() m_items.clear(); } -void PlayListContainer::updateIndex() +void GroupedContainer::updateIndex() { for(int i = 0; i < m_groups.count(); ++i) { @@ -276,3 +279,4 @@ void PlayListContainer::updateIndex() } } } + diff --git a/src/qmmpui/groupedcontainer_p.h b/src/qmmpui/groupedcontainer_p.h new file mode 100644 index 000000000..31a9ab76d --- /dev/null +++ b/src/qmmpui/groupedcontainer_p.h @@ -0,0 +1,61 @@ +/*************************************************************************** + * Copyright (C) 2013 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef GROUPEDCONTAINER_P_H +#define GROUPEDCONTAINER_P_H + +#include "playlistcontainer_p.h" + +class GroupedContainer : public PlayListContainer +{ +public: + GroupedContainer(); + + virtual ~GroupedContainer(); + + void addTrack(PlayListTrack *item); + QList<PlayListGroup *> groups(); + QList<PlayListItem *> items() const; + int count() const; + int trackCount() const; + QList<PlayListItem *> mid(int pos, int count) const; + bool isEmpty() const; + bool isSelected(int index) const; + void setSelected(int index, bool selected); + void clearSelection(); + int indexOf(PlayListItem *item) const; + PlayListItem *item(int index) const; + PlayListTrack *track(int index) const; + bool contains(PlayListItem *item) const; + int numberOfTrack(int index) const; + void removeTrack(int index); + void removeTrack(PlayListTrack *track); + void removeTracks(QList<PlayListTrack *> tracks); + bool move(QList<int> indexes, int from, int to); + void clear(); + +private: + void addGroup(PlayListGroup *group); + void updateIndex(); + QList<PlayListGroup *> m_groups; + QList<PlayListItem *> m_items; +}; + +#endif // GROUPEDCONTAINER_P_H diff --git a/src/qmmpui/normalcontainer.cpp b/src/qmmpui/normalcontainer.cpp new file mode 100644 index 000000000..c9167930a --- /dev/null +++ b/src/qmmpui/normalcontainer.cpp @@ -0,0 +1,176 @@ +/*************************************************************************** + * Copyright (C) 2013 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "normalcontainer_p.h" + +NormalContainer::NormalContainer() +{ +} + +NormalContainer::~NormalContainer() +{ +} + +void NormalContainer::addTrack(PlayListTrack *track) +{ + m_items.append(track); +} + +QList<PlayListGroup *> NormalContainer::groups() +{ + return QList<PlayListGroup *>(); +} + +QList<PlayListItem *> NormalContainer::items() const +{ + return m_items; +} + +int NormalContainer::count() const +{ + return m_items.count(); +} + +int NormalContainer::trackCount() const +{ + return m_items.count(); +} + +QList<PlayListItem *> NormalContainer::mid(int pos, int count) const +{ + return m_items.mid(pos, count); +} + +bool NormalContainer::isEmpty() const +{ + return m_items.isEmpty(); +} + +bool NormalContainer::isSelected(int index) const +{ + if (0 <= index && index < m_items.count()) + return m_items.at(index)->isSelected(); + return false; +} + +void NormalContainer::setSelected(int index, bool selected) +{ + if (0 <= index && index < m_items.count()) + m_items.at(index)->setSelected(selected); +} + +void NormalContainer::clearSelection() +{ + foreach (PlayListItem *item, m_items) + { + item->setSelected(false); + } +} + +int NormalContainer::indexOf(PlayListItem *item) const +{ + return m_items.indexOf(item); +} + +PlayListItem *NormalContainer::item(int index) const +{ + if(index >= count() || index < 0) + { + qWarning("PlayListItem: index is out of range"); + return 0; + } + return m_items.at(index); +} + +PlayListTrack *NormalContainer::track(int index) const +{ + PlayListItem *i = item(index); + return dynamic_cast<PlayListTrack *> (i); +} + +bool NormalContainer::contains(PlayListItem *item) const +{ + return m_items.contains(item); +} + +int NormalContainer::numberOfTrack(int index) const +{ + return index; +} + +void NormalContainer::removeTrack(int index) +{ + PlayListTrack *t = track(index); + if(t) + { + removeTrack(t); + if (t->flag() == PlayListTrack::FREE) + { + delete t; + } + else if (t->flag() == PlayListTrack::EDITING) + { + t->setFlag(PlayListTrack::SCHEDULED_FOR_DELETION); + } + } +} + +void NormalContainer::removeTrack(PlayListTrack *track) +{ + m_items.removeAll(track); +} + +void NormalContainer::removeTracks(QList<PlayListTrack *> tracks) +{ + foreach(PlayListTrack *t, tracks) + removeTrack(t); +} + +bool NormalContainer::move(QList<int> indexes, int from, int to) +{ + if (from > to) + { + foreach(int i, indexes) + { + if (i + to - from < 0) + break; + + else + m_items.move(i,i + to - from); + } + } + else + { + for (int i = indexes.count() - 1; i >= 0; i--) + { + if (indexes[i] + to - from >= m_items.count()) + break; + else + m_items.move(indexes[i], indexes[i] + to - from); + } + } + return true; +} + +void NormalContainer::clear() +{ + qDeleteAll(m_items); + m_items.clear(); +} diff --git a/src/qmmpui/normalcontainer_p.h b/src/qmmpui/normalcontainer_p.h new file mode 100644 index 000000000..23286d9eb --- /dev/null +++ b/src/qmmpui/normalcontainer_p.h @@ -0,0 +1,57 @@ +/*************************************************************************** + * Copyright (C) 2013 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef NORMALCONTAINER_P_H +#define NORMALCONTAINER_P_H + +#include "playlistcontainer_p.h" + +class NormalContainer : public PlayListContainer +{ +public: + NormalContainer(); + virtual ~NormalContainer(); + + void addTrack(PlayListTrack *item); + QList<PlayListGroup *> groups(); + QList<PlayListItem *> items() const; + int count() const; + int trackCount() const; + QList<PlayListItem *> mid(int pos, int count) const; + bool isEmpty() const; + bool isSelected(int index) const; + void setSelected(int index, bool selected); + void clearSelection(); + int indexOf(PlayListItem *item) const; + PlayListItem *item(int index) const; + PlayListTrack *track(int index) const; + bool contains(PlayListItem *item) const; + int numberOfTrack(int index) const; + void removeTrack(int index); + void removeTrack(PlayListTrack *track); + void removeTracks(QList<PlayListTrack *> tracks); + bool move(QList<int> indexes, int from, int to); + void clear(); + +private: + QList<PlayListItem *> m_items; +}; + +#endif // NORMALCONTAINER_P_H diff --git a/src/qmmpui/playlistcontainer_p.h b/src/qmmpui/playlistcontainer_p.h index bd9841a2e..b4ea6a765 100644 --- a/src/qmmpui/playlistcontainer_p.h +++ b/src/qmmpui/playlistcontainer_p.h @@ -26,44 +26,32 @@ #include "playlisttrack.h" #include "playlistgroup.h" - class PlayListContainer { public: - PlayListContainer(); - - void addGroup(PlayListGroup *group); - void addTrack(PlayListTrack *item); - - QList<PlayListGroup *> groups(); - QList<PlayListItem *> items() const; - int count() const; - int trackCount() const; - QList<PlayListItem *> mid(int pos, int count) const; - bool isEmpty() const; - - bool isSelected(int index) const; - void setSelected(int index, bool selected); - void clearSelection(); - int indexOf(PlayListItem *item) const; - PlayListItem *item(int index) const; - PlayListTrack *track(int index) const; - bool contains(PlayListItem *item) const; - int numberOfTrack(int index) const; - - void removeTrack(int index); - void removeTrack(PlayListTrack *track); - void removeTracks(QList<PlayListTrack *> tracks); - - bool move(QList<int> indexes, int from, int to); - - void clear(); - -private: - void updateIndex(); - QList<PlayListGroup *> m_groups; - QList<PlayListItem *> m_items; - + PlayListContainer(){} + virtual ~PlayListContainer(){} + + virtual void addTrack(PlayListTrack *item) = 0; + virtual QList<PlayListGroup *> groups() = 0; + virtual QList<PlayListItem *> items() const = 0; + virtual int count() const = 0; + virtual int trackCount() const = 0; + virtual QList<PlayListItem *> mid(int pos, int count) const = 0; + virtual bool isEmpty() const = 0; + virtual bool isSelected(int index) const = 0; + virtual void setSelected(int index, bool selected) = 0; + virtual void clearSelection() = 0; + virtual int indexOf(PlayListItem *item) const = 0; + virtual PlayListItem *item(int index) const = 0; + virtual PlayListTrack *track(int index) const = 0; + virtual bool contains(PlayListItem *item) const = 0; + virtual int numberOfTrack(int index) const = 0; + virtual void removeTrack(int index) = 0; + virtual void removeTrack(PlayListTrack *track) = 0; + virtual void removeTracks(QList<PlayListTrack *> tracks) = 0; + virtual bool move(QList<int> indexes, int from, int to) = 0; + virtual void clear() = 0; }; #endif // PLAYLISTCONTAINER_P_H diff --git a/src/qmmpui/playlistmodel.cpp b/src/qmmpui/playlistmodel.cpp index 5af896e55..a1b6fe68d 100644 --- a/src/qmmpui/playlistmodel.cpp +++ b/src/qmmpui/playlistmodel.cpp @@ -34,6 +34,8 @@ #include "playlistparser.h" #include "playlistformat.h" #include "playlistcontainer_p.h" +#include "groupedcontainer_p.h" +#include "normalcontainer_p.h" #include "fileloader_p.h" #include "playstate_p.h" #include "detailsdialog.h" @@ -54,7 +56,8 @@ PlayListModel::PlayListModel(const QString &name, QObject *parent) m_stop_track = 0; m_play_state = new NormalPlayState(this); m_loader = new FileLoader(this); - m_container = new PlayListContainer; + m_container = new GroupedContainer; + //m_container = new NormalContainer; connect(m_loader, SIGNAL(newPlayListTrack(PlayListTrack*)), SLOT(add(PlayListTrack*)), Qt::QueuedConnection); connect(m_loader, SIGNAL(finished()), SLOT(preparePlayState())); @@ -503,25 +506,6 @@ void PlayListModel::moveItems(int from, int to) m_current = m_container->indexOf(m_current_track); emit listChanged(); } - - /*if (from > to) - foreach(int i, selected_indexes) - { - if (i + to - from < 0) - break; - - else - m_items.move(i,i + to - from); - } - else - - for (int i = selected_indexes.count() - 1; i >= 0; i--) - { - if (selected_indexes[i] + to -from >= m_items.count()) - break; - else - m_items.move(selected_indexes[i],selected_indexes[i] + to - from); - }*/ } int PlayListModel::topmostInSelection(int row) diff --git a/src/qmmpui/qmmpui.pro b/src/qmmpui/qmmpui.pro index acd9c59e2..7bb64cf74 100644 --- a/src/qmmpui/qmmpui.pro +++ b/src/qmmpui/qmmpui.pro @@ -53,7 +53,9 @@ HEADERS += general.h \ tagupdater_p.h \ playlistgroup.h \ playlisttrack.h \ - playlistcontainer_p.h + playlistcontainer_p.h \ + groupedcontainer_p.h \ + normalcontainer_p.h SOURCES += general.cpp \ playlistparser.cpp \ commandlinemanager.cpp \ @@ -82,8 +84,9 @@ SOURCES += general.cpp \ qmmpuiplugincache.cpp \ tagupdater.cpp \ playlistgroup.cpp \ - playlistcontainer.cpp \ - playlisttrack.cpp + playlisttrack.cpp \ + groupedcontainer.cpp \ + normalcontainer.cpp FORMS += forms/detailsdialog.ui \ forms/tageditor.ui \ forms/templateeditor.ui \ |
