00001 #ifndef VIDEOFILTER_H_
00002 #define VIDEOFILTER_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <mythtv/mythdialogs.h>
00015
00016 #include "parentalcontrols.h"
00017
00018 class Metadata;
00019 class VideoList;
00020
00021 class VideoFilterSettings
00022 {
00023 public:
00024 static const unsigned int FILTER_MASK = 0xFFFE;
00025 static const unsigned int SORT_MASK = 0x1;
00026 enum FilterChanges {
00027 kSortOrderChanged = (1 << 0),
00028 kFilterCategoryChanged = (1 << 1),
00029 kFilterGenreChanged = (1 << 2),
00030 kFilterCountryChanged = (1 << 3),
00031 kFilterYearChanged = (1 << 4),
00032 kFilterRuntimeChanged = (1 << 5),
00033 kFilterUserRatingChanged = (1 << 6),
00034 kFilterBrowseChanged = (1 << 7),
00035 kFilterInetRefChanged = (1 << 8),
00036 kFilterCoverFileChanged = (1 << 9),
00037 kFilterParentalLevelChanged = (1 << 10),
00038 kFilterCastChanged = (1 << 11)
00039 };
00040
00041 public:
00042 VideoFilterSettings(bool loaddefaultsettings = true,
00043 const QString &_prefix = "");
00044 VideoFilterSettings(const VideoFilterSettings &rhs);
00045 VideoFilterSettings &operator=(const VideoFilterSettings &rhs);
00046
00047 bool matches_filter(const Metadata &mdata) const;
00048 bool meta_less_than(const Metadata &lhs, const Metadata &rhs,
00049 bool sort_ignores_case) const;
00050
00051 void saveAsDefault();
00052
00053 enum ordering
00054 {
00055
00056
00057 kOrderByTitle = 0,
00058 kOrderByYearDescending = 1,
00059 kOrderByUserRatingDescending = 2,
00060 kOrderByLength = 3,
00061 kOrderByFilename = 4,
00062 kOrderByID = 5
00063 };
00064
00065 int getCategory() const { return category; }
00066 void setCategory(int lcategory)
00067 {
00068 m_changed_state |= kFilterCategoryChanged;
00069 category = lcategory;
00070 }
00071
00072 int getGenre() const { return genre; }
00073 void setGenre(int lgenre)
00074 {
00075 m_changed_state |= kFilterGenreChanged;
00076 genre = lgenre;
00077 }
00078
00079 int getCast() const { return cast; }
00080 void setCast(int lcast)
00081 {
00082 m_changed_state |= kFilterCastChanged;
00083 cast = lcast;
00084 }
00085
00086 int getCountry() const { return country; }
00087 void setCountry(int lcountry)
00088 {
00089 m_changed_state |= kFilterCountryChanged;
00090 country = lcountry;
00091 }
00092
00093 int getYear() const { return year; }
00094 void setYear(int lyear)
00095 {
00096 m_changed_state |= kFilterYearChanged;
00097 year = lyear;
00098 }
00099
00100 int getRuntime() const { return runtime; }
00101 void setRuntime(int lruntime)
00102 {
00103 m_changed_state |= kFilterRuntimeChanged;
00104 runtime = lruntime;
00105 }
00106
00107 int getUserrating() const { return userrating; }
00108 void setUserrating(int luserrating)
00109 {
00110 m_changed_state |= kFilterUserRatingChanged;
00111 userrating = luserrating;
00112 }
00113
00114 int getBrowse() const {return browse; }
00115 void setBrowse(int lbrowse)
00116 {
00117 m_changed_state |= kFilterBrowseChanged;
00118 browse = lbrowse;
00119 }
00120
00121 ordering getOrderby() const { return orderby; }
00122 void setOrderby(ordering lorderby)
00123 {
00124 m_changed_state |= kSortOrderChanged;
00125 orderby = lorderby;
00126 }
00127
00128 ParentalLevel::Level getParentalLevel() const { return m_parental_level; }
00129 void setParentalLevel(ParentalLevel::Level parental_level)
00130 {
00131 m_changed_state |= kFilterParentalLevelChanged;
00132 m_parental_level = parental_level;
00133 }
00134
00135 int getInteRef() const { return m_inetref; }
00136 void setInetRef(int inetref)
00137 {
00138 m_inetref = inetref;
00139 m_changed_state |= kFilterInetRefChanged;
00140 }
00141
00142 int getCoverFile() const { return m_coverfile; }
00143 void setCoverFile(int coverfile)
00144 {
00145 m_coverfile = coverfile;
00146 m_changed_state |= kFilterCoverFileChanged;
00147 }
00148
00149 unsigned int getChangedState()
00150 {
00151 unsigned int ret = m_changed_state;
00152 m_changed_state = 0;
00153 return ret;
00154 }
00155
00156 private:
00157 int category;
00158 int genre;
00159 int country;
00160 int cast;
00161 int year;
00162 int runtime;
00163 int userrating;
00164 int browse;
00165 int m_inetref;
00166 int m_coverfile;
00167 ordering orderby;
00168 ParentalLevel::Level m_parental_level;
00169 QString prefix;
00170
00171 unsigned int m_changed_state;
00172 };
00173
00174 struct FilterSettingsProxy
00175 {
00176 virtual ~FilterSettingsProxy() {}
00177 virtual const VideoFilterSettings &getSettings() = 0;
00178 virtual void setSettings(const VideoFilterSettings &settings) = 0;
00179 };
00180
00181 template <typename T>
00182 class BasicFilterSettingsProxy : public FilterSettingsProxy
00183 {
00184 public:
00185 BasicFilterSettingsProxy(T &type) : m_type(type) {}
00186
00187 const VideoFilterSettings &getSettings()
00188 {
00189 return m_type.getCurrentVideoFilter();
00190 }
00191
00192 void setSettings(const VideoFilterSettings &settings)
00193 {
00194 m_type.setCurrentVideoFilter(settings);
00195 }
00196
00197 private:
00198 T &m_type;
00199 };
00200
00201 class VideoFilterDialog : public MythThemedDialog
00202 {
00203
00204 Q_OBJECT
00205
00206
00207
00208
00209
00210 public:
00211 VideoFilterDialog(FilterSettingsProxy *fsp,
00212 MythMainWindow *parent_,
00213 QString window_name,
00214 QString theme_filename,
00215 const VideoList &video_list,
00216 const char *name_ = 0);
00217 ~VideoFilterDialog();
00218
00219 void keyPressEvent(QKeyEvent *e);
00220 void wireUpTheme();
00221 void fillWidgets();
00222
00223 public slots:
00224
00225 void takeFocusAwayFromEditor(bool up_or_down);
00226 void saveAndExit();
00227 void saveAsDefault();
00228 void setYear(int new_year);
00229 void setUserRating(int new_userrating);
00230 void setCategory(int new_category);
00231 void setCountry(int new_country);
00232 void setGenre(int new_genre);
00233 void setCast(int new_cast);
00234 void setRunTime(int new_runtime);
00235 void setBrowse(int new_browse);
00236 void setInetRef(int new_inetref);
00237 void setCoverFile(int new_coverfile);
00238 void setOrderby(int new_orderby);
00239
00240 private:
00241 void update_numvideo();
00242 VideoFilterSettings m_settings;
00243
00244
00245
00246 UISelectorType *browse_select;
00247 UISelectorType *orderby_select;
00248 UISelectorType *year_select;
00249 UISelectorType *userrating_select;
00250 UISelectorType *category_select;
00251 UISelectorType *country_select;
00252 UISelectorType *genre_select;
00253 UISelectorType *cast_select;
00254 UISelectorType *runtime_select;
00255 UITextButtonType *save_button;
00256 UITextButtonType *done_button;
00257 UITextType *numvideos_text;
00258
00259 UISelectorType *m_intetref_select;
00260 UISelectorType *m_coverfile_select;
00261
00262 FilterSettingsProxy *m_fsp;
00263 const VideoList &m_video_list;
00264 };
00265
00266 #endif