diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-05-26 21:26:46 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-05-26 21:26:46 +0000 |
| commit | 0ded49767b9cb8a9b870f10bde72c434453ea43b (patch) | |
| tree | 73c7f4d337acc0d0f8dd10c200b415223ef7db4d /src/ui/playlistmodel.cpp | |
| parent | a0bf7877cd6b08b686133861237f5a1e02dad2b3 (diff) | |
| download | qmmp-0ded49767b9cb8a9b870f10bde72c434453ea43b.tar.gz qmmp-0ded49767b9cb8a9b870f10bde72c434453ea43b.tar.bz2 qmmp-0ded49767b9cb8a9b870f10bde72c434453ea43b.zip | |
added PlayListItem class, removed MediaFile
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@388 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/ui/playlistmodel.cpp')
| -rw-r--r-- | src/ui/playlistmodel.cpp | 213 |
1 files changed, 106 insertions, 107 deletions
diff --git a/src/ui/playlistmodel.cpp b/src/ui/playlistmodel.cpp index 85adfe6d8..22371d283 100644 --- a/src/ui/playlistmodel.cpp +++ b/src/ui/playlistmodel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Ilya Kotov * + * Copyright (C) 2006-2008 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -35,7 +35,7 @@ #include "fileloader.h" #include "playlistmodel.h" -#include "mediafile.h" +#include "playlistitem.h" #include "playlistformat.h" #include "playstate.h" @@ -43,24 +43,24 @@ #define INVALID_ROW -1 -TagUpdater::TagUpdater(QObject* o,MediaFile* f):m_observable(o),m_file(f) +TagUpdater::TagUpdater(QObject* o,PlayListItem* item):m_observable(o),m_item(item) { - m_file->setFlag(MediaFile::EDITING); + m_item->setFlag(PlayListItem::EDITING); connect (m_observable, SIGNAL(destroyed (QObject * )),SLOT(updateTag())); connect (m_observable, SIGNAL(destroyed (QObject * )),SLOT(deleteLater())); } void TagUpdater::updateTag() { - if(m_file->flag() == MediaFile::SCHEDULED_FOR_DELETION) + if(m_item->flag() == PlayListItem::SCHEDULED_FOR_DELETION) { - delete m_file; - m_file = NULL; + delete m_item; + m_item = NULL; } else { - m_file->updateTags(); - m_file->setFlag(MediaFile::FREE); + m_item->updateTags(); + m_item->setFlag(PlayListItem::FREE); } } @@ -101,15 +101,15 @@ PlayListModel::~PlayListModel() } } -void PlayListModel::load ( MediaFile *file ) +void PlayListModel::load ( PlayListItem *item ) { - if (m_files.isEmpty()) - m_currentItem = file; + if (m_items.isEmpty()) + m_currentItem = item; - m_total_length += file->length(); - m_files << file; + m_total_length += item->length(); + m_items << item; - if (m_files.size() == 1) + if (m_items.size() == 1) emit firstAdded(); //if (!m_block_update_signals) @@ -118,15 +118,15 @@ void PlayListModel::load ( MediaFile *file ) int PlayListModel::count() { - return m_files.size(); + return m_items.size(); } -MediaFile* PlayListModel::currentItem() +PlayListItem* PlayListModel::currentItem() { - if ( m_files.isEmpty() ) + if ( m_items.isEmpty() ) return 0; else - return m_files.at ( qMin(m_files.size() - 1, m_current)); + return m_items.at ( qMin(m_items.size() - 1, m_current)); } int PlayListModel::currentRow() @@ -139,7 +139,7 @@ bool PlayListModel::setCurrent ( int c ) if ( c > count()-1 || c < 0) return FALSE; m_current = c; - m_currentItem = m_files.at(c); + m_currentItem = m_items.at(c); emit currentChanged(); emit listChanged(); return TRUE; @@ -176,17 +176,17 @@ void PlayListModel::clear() m_running_loaders.clear(); m_current = 0; - while ( !m_files.isEmpty() ) + while ( !m_items.isEmpty() ) { - MediaFile* mf = m_files.takeFirst(); + PlayListItem* mf = m_items.takeFirst(); - if(mf->flag() == MediaFile::FREE) + if(mf->flag() == PlayListItem::FREE) { delete mf; } - else if(mf->flag() == MediaFile::EDITING) + else if(mf->flag() == PlayListItem::EDITING) { - mf->setFlag(MediaFile::SCHEDULED_FOR_DELETION); + mf->setFlag(PlayListItem::SCHEDULED_FOR_DELETION); } } @@ -197,41 +197,41 @@ void PlayListModel::clear() void PlayListModel::clearSelection() { - for ( int i = 0; i<m_files.size(); ++i ) - m_files.at ( i )->setSelected ( FALSE ); + for ( int i = 0; i<m_items.size(); ++i ) + m_items.at ( i )->setSelected ( FALSE ); emit listChanged(); } QList <QString> PlayListModel::getTitles ( int b,int l ) { QList <QString> m_titles; - for ( int i = b; ( i < b + l ) && ( i < m_files.size() ); ++i ) - m_titles << m_files.at ( i )->title(); + for ( int i = b; ( i < b + l ) && ( i < m_items.size() ); ++i ) + m_titles << m_items.at ( i )->text(); return m_titles; } QList <QString> PlayListModel::getTimes ( int b,int l ) { QList <QString> m_times; - for ( int i = b; ( i < b + l ) && ( i < m_files.size() ); ++i ) - m_times << QString ( "%1" ).arg ( m_files.at ( i )->length() /60 ) +":" - +QString ( "%1" ).arg ( m_files.at ( i )->length() %60/10 ) + - QString ( "%1" ).arg ( m_files.at ( i )->length() %60%10 ); + for ( int i = b; ( i < b + l ) && ( i < m_items.size() ); ++i ) + m_times << QString ( "%1" ).arg ( m_items.at ( i )->length() /60 ) +":" + +QString ( "%1" ).arg ( m_items.at ( i )->length() %60/10 ) + + QString ( "%1" ).arg ( m_items.at ( i )->length() %60%10 ); return m_times; } bool PlayListModel::isSelected ( int row ) { - if (m_files.count() > row && row >= 0) - return m_files.at ( row )->isSelected(); + if (m_items.count() > row && row >= 0) + return m_items.at ( row )->isSelected(); return false; } void PlayListModel::setSelected ( int row, bool yes ) { - if (m_files.count() > row && row >= 0) - m_files.at ( row )->setSelected ( yes ); + if (m_items.count() > row && row >= 0) + m_items.at ( row )->setSelected ( yes ); } void PlayListModel::removeSelected() @@ -250,22 +250,22 @@ void PlayListModel::removeSelection(bool inverted) int select_after_delete = -1; - while ( !m_files.isEmpty() && i<m_files.size() ) + while ( !m_items.isEmpty() && i<m_items.size() ) { - if ( m_files.at ( i )->isSelected() ^ inverted ) + if ( m_items.at ( i )->isSelected() ^ inverted ) { - MediaFile* f = m_files.takeAt ( i ); + PlayListItem* f = m_items.takeAt ( i ); m_total_length -= f->length(); if (m_total_length < 0) m_total_length = 0; - if(f->flag() == MediaFile::FREE) + if(f->flag() == PlayListItem::FREE) { delete f; f = NULL; } - else if(f->flag() == MediaFile::EDITING) - f->setFlag(MediaFile::SCHEDULED_FOR_DELETION); + else if(f->flag() == PlayListItem::EDITING) + f->setFlag(PlayListItem::SCHEDULED_FOR_DELETION); select_after_delete = i; @@ -276,11 +276,11 @@ void PlayListModel::removeSelection(bool inverted) i++; } - if (!m_files.isEmpty()) - m_currentItem = m_files.at(m_current); + if (!m_items.isEmpty()) + m_currentItem = m_items.at(m_current); - if (select_after_delete >= m_files.count()) - select_after_delete = m_files.count() - 1; + if (select_after_delete >= m_items.count()) + select_after_delete = m_items.count() - 1; setSelected(select_after_delete,true); @@ -291,32 +291,32 @@ void PlayListModel::removeSelection(bool inverted) void PlayListModel::invertSelection() { - for ( int i = 0; i<m_files.size(); ++i ) - m_files.at ( i )->setSelected ( !m_files.at ( i )->isSelected() ); + for ( int i = 0; i<m_items.size(); ++i ) + m_items.at ( i )->setSelected ( !m_items.at ( i )->isSelected() ); emit listChanged(); } void PlayListModel::selectAll() { - for ( int i = 0; i<m_files.size(); ++i ) - m_files.at ( i )->setSelected ( TRUE ); + for ( int i = 0; i<m_items.size(); ++i ) + m_items.at ( i )->setSelected ( TRUE ); emit listChanged(); } void PlayListModel::showDetails() { - for ( int i = 0; i<m_files.size(); ++i ) + for ( int i = 0; i<m_items.size(); ++i ) { - if ( m_files.at ( i )->isSelected() ) + if ( m_items.at ( i )->isSelected() ) { - DecoderFactory *fact = Decoder::findByPath ( m_files.at ( i )->path() ); + DecoderFactory *fact = Decoder::findByPath ( m_items.at ( i )->path() ); if ( fact ) { - QObject* o = fact->showDetails ( 0, m_files.at ( i )->path() ); + QObject* o = fact->showDetails ( 0, m_items.at ( i )->path() ); if(o) { - TagUpdater *updater = new TagUpdater(o,m_files.at(i)); - m_editing_files.append(m_files.at(i)); + TagUpdater *updater = new TagUpdater(o,m_items.at(i)); + m_editing_items.append(m_items.at(i)); connect (updater, SIGNAL(destroyed (QObject * )),SIGNAL(listChanged())); } } @@ -327,7 +327,6 @@ void PlayListModel::showDetails() } - void PlayListModel::readSettings() { QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); @@ -338,7 +337,7 @@ void PlayListModel::readSettings() QStringList files; QByteArray line; - m_files.clear(); + m_items.clear(); while (!file.atEnd ()) { @@ -355,7 +354,7 @@ void PlayListModel::readSettings() for (int i = 0;i < preload;i++) { - load(new MediaFile(files.takeAt(0))); + load(new PlayListItem(files.takeAt(0))); } if (files.isEmpty()) @@ -377,7 +376,7 @@ void PlayListModel::writeSettings() { QFile file ( QDir::homePath() +"/.qmmp/playlist.txt" ); file.open ( QIODevice::WriteOnly ); - foreach ( MediaFile* m, m_files ) + foreach ( PlayListItem* m, m_items ) file.write ( m->path().toUtf8 () +"\n" ); file.close (); QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); @@ -389,9 +388,9 @@ void PlayListModel::addFile(const QString& path) if (path.isEmpty ()) return; if (path.startsWith("http://")) - load(new MediaFile(path)); + load(new PlayListItem(path)); else if (Decoder::supports(path)) - load(new MediaFile(path)); + load(new PlayListItem(path)); m_play_state->prepare(); } @@ -401,7 +400,7 @@ FileLoader * PlayListModel::createFileLoader() FileLoader* f_loader = new FileLoader(this); // f_loader->setStackSize(20 * 1024 * 1024); m_running_loaders << f_loader; - connect(f_loader,SIGNAL(newMediaFile(MediaFile*)),this,SLOT(load(MediaFile*)),Qt::QueuedConnection); + connect(f_loader,SIGNAL(newPlayListItem(PlayListItem*)),this,SLOT(load(PlayListItem*)),Qt::QueuedConnection); connect(f_loader,SIGNAL(finished()),this,SLOT(preparePlayState())); connect(f_loader,SIGNAL(finished()),f_loader,SLOT(deleteLater())); return f_loader; @@ -502,15 +501,15 @@ void PlayListModel::moveItems( int from, int to ) if (i + to - from < 0) break; else - m_files.move(i,i + to - from); + m_items.move(i,i + to - from); else for (int i = selected_rows.count() - 1; i >= 0; i--) - if (selected_rows[i] + to -from >= m_files.count()) + if (selected_rows[i] + to -from >= m_items.count()) break; else - m_files.move(selected_rows[i],selected_rows[i] + to - from); + m_items.move(selected_rows[i],selected_rows[i] + to - from); - m_current = m_files.indexOf(m_currentItem); + m_current = m_items.indexOf(m_currentItem); emit listChanged(); } @@ -535,7 +534,7 @@ int PlayListModel::topmostInSelection( int row) int PlayListModel::bottommostInSelection( int row ) { - if (row >= m_files.count() - 1) + if (row >= m_items.count() - 1) return row; for (int i = row + 1;i < count() ;i++) @@ -560,9 +559,9 @@ const SimpleSelection& PlayListModel::getSelection(int row ) QList<int> PlayListModel::getSelectedRows() const { QList<int>selected_rows; - for (int i = 0;i<m_files.count();i++) + for (int i = 0;i<m_items.count();i++) { - if (m_files[i]->isSelected()) + if (m_items[i]->isSelected()) { selected_rows.append(i); } @@ -570,14 +569,14 @@ QList<int> PlayListModel::getSelectedRows() const return selected_rows; } -QList< MediaFile * > PlayListModel::getSelectedItems() const +QList< PlayListItem * > PlayListModel::getSelectedItems() const { - QList<MediaFile*>selected_items; - for (int i = 0;i<m_files.count();i++) + QList<PlayListItem*>selected_items; + for (int i = 0;i<m_items.count();i++) { - if (m_files[i]->isSelected()) + if (m_items[i]->isSelected()) { - selected_items.append(m_files[i]); + selected_items.append(m_items[i]); } } return selected_items; @@ -585,8 +584,8 @@ QList< MediaFile * > PlayListModel::getSelectedItems() const void PlayListModel::addToQueue() { - QList<MediaFile*> selected_items = getSelectedItems(); - foreach(MediaFile* file,selected_items) + QList<PlayListItem*> selected_items = getSelectedItems(); + foreach(PlayListItem* file,selected_items) {/* if (isQueued(file)) m_queued_songs.removeAt(m_queued_songs.indexOf(file)); @@ -598,7 +597,7 @@ void PlayListModel::addToQueue() emit listChanged(); } -void PlayListModel::setQueued(MediaFile* file) +void PlayListModel::setQueued(PlayListItem* file) { if (isQueued(file)) m_queued_songs.removeAt(m_queued_songs.indexOf(file)); @@ -608,7 +607,7 @@ void PlayListModel::setQueued(MediaFile* file) emit listChanged(); } -bool PlayListModel::isQueued(MediaFile* f) const +bool PlayListModel::isQueued(PlayListItem* f) const { return m_queued_songs.contains(f); } @@ -626,19 +625,19 @@ bool PlayListModel::isEmptyQueue() const void PlayListModel::randomizeList() { - for (int i = 0;i < m_files.size();i++) - m_files.swap(qrand()%m_files.size(),qrand()%m_files.size()); + for (int i = 0;i < m_items.size();i++) + m_items.swap(qrand()%m_items.size(),qrand()%m_items.size()); - m_current = m_files.indexOf(m_currentItem); + m_current = m_items.indexOf(m_currentItem); emit listChanged(); } void PlayListModel::reverseList() { - for (int i = 0;i < m_files.size()/2;i++) - m_files.swap(i,m_files.size() - i - 1); + for (int i = 0;i < m_items.size()/2;i++) + m_items.swap(i,m_items.size() - i - 1); - m_current = m_files.indexOf(m_currentItem); + m_current = m_items.indexOf(m_currentItem); emit listChanged(); } @@ -646,71 +645,71 @@ void PlayListModel::reverseList() // First we'll implement bundle of static compare procedures // to sort items in different ways -static bool _titleLessComparator(MediaFile* s1,MediaFile* s2) +static bool _titleLessComparator(PlayListItem* s1,PlayListItem* s2) { return s1->title() < s2->title(); } -static bool _titleGreaterComparator(MediaFile* s1,MediaFile* s2) +static bool _titleGreaterComparator(PlayListItem* s1,PlayListItem* s2) { return s1->title() > s2->title(); } -static bool _pathAndFilenameLessComparator(MediaFile* s1,MediaFile* s2) +static bool _pathAndFilenameLessComparator(PlayListItem* s1,PlayListItem* s2) { return s1->path() < s2->path(); } -static bool _pathAndFilenameGreaterComparator(MediaFile* s1,MediaFile* s2) +static bool _pathAndFilenameGreaterComparator(PlayListItem* s1,PlayListItem* s2) { return s1->path() > s2->path(); } -static bool _filenameLessComparator(MediaFile* s1,MediaFile* s2) +static bool _filenameLessComparator(PlayListItem* s1,PlayListItem* s2) { QFileInfo i_s1(s1->path()); QFileInfo i_s2(s2->path()); return i_s1.baseName() < i_s2.baseName(); } -static bool _filenameGreaterComparator(MediaFile* s1,MediaFile* s2) +static bool _filenameGreaterComparator(PlayListItem* s1,PlayListItem* s2) { QFileInfo i_s1(s1->path()); QFileInfo i_s2(s2->path()); return i_s1.baseName() > i_s2.baseName(); } -static bool _dateLessComparator(MediaFile* s1,MediaFile* s2) +static bool _dateLessComparator(PlayListItem* s1,PlayListItem* s2) { return s1->year() < s2->year(); } -static bool _dateGreaterComparator(MediaFile* s1,MediaFile* s2) +static bool _dateGreaterComparator(PlayListItem* s1,PlayListItem* s2) { return s1->year() > s2->year(); } -static bool _trackLessComparator(MediaFile* s1,MediaFile* s2) +static bool _trackLessComparator(PlayListItem* s1,PlayListItem* s2) { return s1->track() < s2->track(); } -static bool _trackGreaterComparator(MediaFile* s1,MediaFile* s2) +static bool _trackGreaterComparator(PlayListItem* s1,PlayListItem* s2) { return s1->track() > s2->track(); } // This is main sort method -void PlayListModel::doSort(int sort_mode,QList<MediaFile*>& list_to_sort) +void PlayListModel::doSort(int sort_mode,QList<PlayListItem*>& list_to_sort) { - QList<MediaFile*>::iterator begin; - QList<MediaFile*>::iterator end; + QList<PlayListItem*>::iterator begin; + QList<PlayListItem*>::iterator end; begin = list_to_sort.begin(); end = list_to_sort.end(); - bool (*compareLessFunc)(MediaFile*,MediaFile*) = 0; - bool (*compareGreaterFunc)(MediaFile*,MediaFile*) = 0; + bool (*compareLessFunc)(PlayListItem*,PlayListItem*) = 0; + bool (*compareGreaterFunc)(PlayListItem*,PlayListItem*) = 0; switch (sort_mode) { @@ -752,26 +751,26 @@ void PlayListModel::doSort(int sort_mode,QList<MediaFile*>& list_to_sort) sorted_asc = false; } - m_current = m_files.indexOf(m_currentItem); + m_current = m_items.indexOf(m_currentItem); } void PlayListModel::sortSelection(int mode) { - QList<MediaFile*>selected_items = getSelectedItems(); + QList<PlayListItem*>selected_items = getSelectedItems(); QList<int>selected_rows = getSelectedRows(); doSort(mode,selected_items); for (int i = 0;i < selected_rows.count();i++) - m_files.replace(selected_rows[i],selected_items[i]); + m_items.replace(selected_rows[i],selected_items[i]); - m_current = m_files.indexOf(m_currentItem); + m_current = m_items.indexOf(m_currentItem); emit listChanged(); } void PlayListModel::sort(int mode) { - doSort(mode,m_files); + doSort(mode,m_items); emit listChanged(); } @@ -843,7 +842,7 @@ void PlayListModel::savePlaylist(const QString & f_name) if (file.open(QIODevice::WriteOnly)) { QTextStream ts(&file); - ts << prs->encode(m_files); + ts << prs->encode(m_items); file.close(); } else |
