3 * Copyright (C) 2012-2013 Team XBMC
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)
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.
16 * You should have received a copy of the GNU General Public License
17 * along with XBMC; see the file COPYING. If not, see
18 * <http://www.gnu.org/licenses/>.
26 #include "dbwrappers/Database.h"
27 #include "playlists/SmartPlayList.h"
28 #include "settings/GUIDialogSettings.h"
29 #include "threads/Timer.h"
30 #include "utils/DatabaseUtils.h"
31 #include "utils/StdString.h"
35 class CGUIDialogMediaFilter : public CGUIDialogSettings, protected ITimerCallback
38 CGUIDialogMediaFilter();
39 virtual ~CGUIDialogMediaFilter();
41 virtual bool OnMessage(CGUIMessage& message);
43 static void ShowAndEditMediaFilter(const std::string &path, CSmartPlaylist &filter);
46 std::string mediaType;
49 SettingInfo::SETTING_TYPE type;
50 CSmartPlaylistRule::SEARCH_OPERATOR ruleOperator;
52 CSmartPlaylistRule *rule;
57 virtual void OnWindowLoaded();
59 virtual void CreateSettings();
60 virtual void SetupPage();
61 virtual void OnSettingChanged(SettingInfo &setting);
63 virtual void OnTimeout();
66 bool SetPath(const std::string &path);
67 void UpdateControls();
68 void TriggerFilter() const;
70 void OnBrowse(const Filter &filter, CFileItemList &items, bool countOnly = false);
71 CSmartPlaylistRule* AddRule(Field field, CSmartPlaylistRule::SEARCH_OPERATOR ruleOperator = CSmartPlaylistRule::OPERATOR_CONTAINS);
72 void DeleteRule(Field field);
73 void GetRange(const Filter &filter, float &min, float &interval, float &max, RANGEFORMATFUNCTION &formatFunction);
74 bool GetMinMax(const CStdString &table, const CStdString &field, float &min, float &max, const CDatabase::Filter &filter = CDatabase::Filter());
76 static CStdString RangeAsFloat(float valueLower, float valueUpper, float minimum);
77 static CStdString RangeAsInt(float valueLower, float valueUpper, float minimum);
78 static CStdString RangeAsDate(float valueLower, float valueUpper, float minimum);
79 static CStdString RangeAsTime(float valueLower, float valueUpper, float minimum);
82 std::string m_mediaType;
83 CSmartPlaylist *m_filter;
84 std::map<uint32_t, Filter> m_filters;