aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-04-03 16:01:08 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-04-03 16:01:08 +0000
commitc73ba11ee32863d31c187b2efeb922a36504a4c7 (patch)
tree2fced2029fc70318f84a926abe19821746d108ef
parentc72a5c8ad82bd45c2e624f940225199dfa75ecdb (diff)
downloadqmmp-c73ba11ee32863d31c187b2efeb922a36504a4c7.tar.gz
qmmp-c73ba11ee32863d31c187b2efeb922a36504a4c7.tar.bz2
qmmp-c73ba11ee32863d31c187b2efeb922a36504a4c7.zip
sorting by track number
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@326 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/ui/mediafile.cpp10
-rw-r--r--src/ui/mediafile.h3
-rw-r--r--src/ui/playlist.cpp8
-rw-r--r--src/ui/playlistmodel.cpp14
-rw-r--r--src/ui/playlistmodel.h2
5 files changed, 34 insertions, 3 deletions
diff --git a/src/ui/mediafile.cpp b/src/ui/mediafile.cpp
index ffb8bd757..ff5e1b3ed 100644
--- a/src/ui/mediafile.cpp
+++ b/src/ui/mediafile.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 *
@@ -30,6 +30,8 @@ MediaFile::MediaFile(const QString& path) : m_flag(FREE)
m_current = FALSE;
m_path = path;
m_tag = 0;
+ m_year = 0;
+ m_track = 0;
QSettings settings ( QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat );
m_use_meta = settings.value ("PlayList/load_metadata", TRUE).toBool();
@@ -88,6 +90,11 @@ uint MediaFile::year() const
return m_year;
}
+uint MediaFile::track() const
+{
+ return m_track;
+}
+
bool MediaFile::isCurrent()
{
return m_current;
@@ -128,6 +135,7 @@ void MediaFile::readMetadata()
if (m_use_meta && m_tag && !m_tag->isEmpty())
{
m_year = m_tag->year();
+ m_track = m_tag->track();
m_title = m_format;
m_title.replace("%p",m_tag->artist());
m_title.replace("%a",m_tag->album());
diff --git a/src/ui/mediafile.h b/src/ui/mediafile.h
index 1652bf92d..abd40c4ad 100644
--- a/src/ui/mediafile.h
+++ b/src/ui/mediafile.h
@@ -51,6 +51,7 @@ public:
const QString fileName()const;
uint year()const;
int length()const;
+ uint track()const;
void setSelected(bool);
bool isSelected()const;
bool isCurrent();
@@ -66,7 +67,7 @@ private:
void readMetadata();
QString m_path;
QString m_title;
- uint m_year;
+ uint m_year, m_track;
FileTag *m_tag;
bool m_selected;
bool m_current;
diff --git a/src/ui/playlist.cpp b/src/ui/playlist.cpp
index 8f406ccfb..0e813d6a4 100644
--- a/src/ui/playlist.cpp
+++ b/src/ui/playlist.cpp
@@ -193,6 +193,10 @@ void PlayList::createActions()
connect ( dateAct, SIGNAL ( triggered ( bool ) ), signalMapper, SLOT ( map() ) );
signalMapper->setMapping ( dateAct, PlayListModel::DATE );
+ QAction* trackAct = sort_mode_menu->addAction ( tr ( "By Track Number" ) );
+ connect ( trackAct, SIGNAL ( triggered ( bool ) ), signalMapper, SLOT ( map() ) );
+ signalMapper->setMapping ( trackAct, PlayListModel::TRACK );
+
connect ( signalMapper, SIGNAL ( mapped ( int ) ),
m_playListModel, SLOT ( sort ( int ) ) );
@@ -216,6 +220,10 @@ void PlayList::createActions()
connect ( dateAct, SIGNAL ( triggered ( bool ) ), signalMapper, SLOT ( map() ) );
signalMapper->setMapping ( dateAct, PlayListModel::DATE );
+ trackAct = sort_mode_menu->addAction ( tr ( "By Track Number" ) );
+ connect ( trackAct, SIGNAL ( triggered ( bool ) ), signalMapper, SLOT ( map() ) );
+ signalMapper->setMapping ( trackAct, PlayListModel::TRACK );
+
connect ( signalMapper, SIGNAL ( mapped ( int ) ),
m_playListModel, SLOT ( sortSelection ( int ) ) );
diff --git a/src/ui/playlistmodel.cpp b/src/ui/playlistmodel.cpp
index 3fffd69eb..f752ebb75 100644
--- a/src/ui/playlistmodel.cpp
+++ b/src/ui/playlistmodel.cpp
@@ -687,6 +687,16 @@ static bool _dateGreaterComparator(MediaFile* s1,MediaFile* s2)
return s1->year() > s2->year();
}
+static bool _trackLessComparator(MediaFile* s1,MediaFile* s2)
+{
+ return s1->track() < s2->track();
+}
+
+static bool _trackGreaterComparator(MediaFile* s1,MediaFile* s2)
+{
+ return s1->track() > s2->track();
+}
+
// This is main sort method
void PlayListModel::doSort(int sort_mode,QList<MediaFile*>& list_to_sort)
{
@@ -718,6 +728,10 @@ void PlayListModel::doSort(int sort_mode,QList<MediaFile*>& list_to_sort)
compareGreaterFunc = _dateGreaterComparator;
break;
//qWarning("TODO Sort by Date: %s\t%d",__FILE__,__LINE__);
+ case TRACK:
+ compareLessFunc = _trackLessComparator;
+ compareGreaterFunc = _trackGreaterComparator;
+ break;
default:
compareLessFunc = _titleLessComparator;
compareGreaterFunc = _titleGreaterComparator;
diff --git a/src/ui/playlistmodel.h b/src/ui/playlistmodel.h
index b3ac19c04..798442514 100644
--- a/src/ui/playlistmodel.h
+++ b/src/ui/playlistmodel.h
@@ -214,7 +214,7 @@ public:
*/
enum SortMode
{
- TITLE,FILENAME,PATH_AND_FILENAME,DATE
+ TITLE,FILENAME,PATH_AND_FILENAME,DATE,TRACK
};
signals: