Merge remote branch 'origin/trunk' into trac-8658
[xbmc:xbmc-antiquated.git] / xbmc / SortFileItem.h
1 #pragma once
2 /*
3  *      Copyright (C) 2005-2008 Team XBMC
4  *      http://www.xbmc.org
5  *
6  *  This Program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2, or (at your option)
9  *  any later version.
10  *
11  *  This Program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with XBMC; see the file COPYING.  If not, write to
18  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19  *  http://www.gnu.org/copyleft/gpl.html
20  *
21  */
22
23 #include "utils/LabelFormatter.h"
24 #include <boost/shared_ptr.hpp>
25
26 class CFileItem; typedef boost::shared_ptr<CFileItem> CFileItemPtr;
27
28 struct SSortFileItem
29 {
30   /*! \brief Remove any articles (eg "the", "a") from the start of a label
31    \param label the label to process
32    \return the label stripped of any articles
33    */
34   static CStdString RemoveArticles(const CStdString &label);
35
36   // Sort by sort field
37   static bool Ascending(const CFileItemPtr &left, const CFileItemPtr &right);
38   static bool Descending(const CFileItemPtr &left, const CFileItemPtr &right);
39   static bool IgnoreFoldersAscending(const CFileItemPtr &left, const CFileItemPtr &right);
40   static bool IgnoreFoldersDescending(const CFileItemPtr &left, const CFileItemPtr &right);
41
42   // Fill in sort field
43   static void ByLabel(CFileItemPtr &item);
44   static void ByLabelNoThe(CFileItemPtr &item);
45   static void ByFile(CFileItemPtr &item);
46   static void ByFullPath(CFileItemPtr &item);
47   static void ByDate(CFileItemPtr &item);
48   static void BySize(CFileItemPtr &item);
49   static void ByDriveType(CFileItemPtr &item);
50   static void BySongTitle(CFileItemPtr &item);
51   static void BySongTitleNoThe(CFileItemPtr &item);
52   static void BySongAlbum(CFileItemPtr &item);
53   static void BySongAlbumNoThe(CFileItemPtr &item);
54   static void BySongArtist(CFileItemPtr &item);
55   static void BySongArtistNoThe(CFileItemPtr &item);
56   static void BySongTrackNum(CFileItemPtr &item);
57   static void BySongDuration(CFileItemPtr &item);
58   static void BySongRating(CFileItemPtr &item);
59
60   static void ByProgramCount(CFileItemPtr &item);
61
62   static void ByGenre(CFileItemPtr &item);
63   static void ByCountry(CFileItemPtr &item);
64   static void ByYear(CFileItemPtr &item);
65
66   static void ByMovieTitle(CFileItemPtr &item);
67   static void ByMovieSortTitle(CFileItemPtr &item);
68   static void ByMovieSortTitleNoThe(CFileItemPtr &item);
69   static void ByMovieRating(CFileItemPtr &item);
70   static void ByMovieRuntime(CFileItemPtr &item);
71   static void ByMPAARating(CFileItemPtr &item);
72   static void ByStudio(CFileItemPtr &item);
73   static void ByStudioNoThe(CFileItemPtr &item);
74
75   static void ByEpisodeNum(CFileItemPtr &item);
76   static void ByProductionCode(CFileItemPtr &item);
77   static void ByLastPlayed(CFileItemPtr &item);
78   static void ByBitrate(CFileItemPtr &item);  
79 };
80
81 typedef enum {
82   SORT_METHOD_NONE=0,
83   SORT_METHOD_LABEL,
84   SORT_METHOD_LABEL_IGNORE_THE,
85   SORT_METHOD_DATE,
86   SORT_METHOD_SIZE,
87   SORT_METHOD_FILE,
88   SORT_METHOD_DRIVE_TYPE,
89   SORT_METHOD_TRACKNUM,
90   SORT_METHOD_DURATION,
91   SORT_METHOD_TITLE,
92   SORT_METHOD_TITLE_IGNORE_THE,
93   SORT_METHOD_ARTIST,
94   SORT_METHOD_ARTIST_IGNORE_THE,
95   SORT_METHOD_ALBUM,
96   SORT_METHOD_ALBUM_IGNORE_THE,
97   SORT_METHOD_GENRE,
98   SORT_METHOD_COUNTRY,
99   SORT_METHOD_YEAR,
100   SORT_METHOD_VIDEO_RATING,
101   SORT_METHOD_PROGRAM_COUNT,
102   SORT_METHOD_PLAYLIST_ORDER,
103   SORT_METHOD_EPISODE,
104   SORT_METHOD_VIDEO_TITLE,
105   SORT_METHOD_VIDEO_SORT_TITLE,
106   SORT_METHOD_VIDEO_SORT_TITLE_IGNORE_THE,
107   SORT_METHOD_PRODUCTIONCODE,
108   SORT_METHOD_SONG_RATING,
109   SORT_METHOD_MPAA_RATING,
110   SORT_METHOD_VIDEO_RUNTIME,
111   SORT_METHOD_STUDIO,
112   SORT_METHOD_STUDIO_IGNORE_THE,
113   SORT_METHOD_FULLPATH,
114   SORT_METHOD_LABEL_IGNORE_FOLDERS,
115   SORT_METHOD_LASTPLAYED,
116   SORT_METHOD_UNSORTED,
117   SORT_METHOD_BITRATE,
118   SORT_METHOD_MAX
119 } SORT_METHOD;
120
121 typedef enum {
122   SORT_ORDER_NONE=0,
123   SORT_ORDER_ASC,
124   SORT_ORDER_DESC
125 } SORT_ORDER;
126
127 typedef enum {
128   SORT_NORMALLY=0,
129   SORT_ON_TOP,
130   SORT_ON_BOTTOM
131 } SPECIAL_SORT;
132
133 typedef struct
134 {
135   SORT_METHOD m_sortMethod;
136   int m_buttonLabel;
137   LABEL_MASKS m_labelMasks;
138 } SORT_METHOD_DETAILS;
139