aboutsummaryrefslogtreecommitdiff
path: root/src/ui/playlistmodel.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-05-26 21:26:46 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-05-26 21:26:46 +0000
commit0ded49767b9cb8a9b870f10bde72c434453ea43b (patch)
tree73c7f4d337acc0d0f8dd10c200b415223ef7db4d /src/ui/playlistmodel.cpp
parenta0bf7877cd6b08b686133861237f5a1e02dad2b3 (diff)
downloadqmmp-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.cpp213
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