xbmc
GUIDialogMediaFilter.h
1 /*
2  * Copyright (C) 2012-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "dbwrappers/Database.h"
12 #include "dbwrappers/DatabaseQuery.h"
13 #include "settings/dialogs/GUIDialogSettingsManualBase.h"
14 #include "settings/lib/SettingType.h"
15 #include "utils/DatabaseUtils.h"
16 
17 #include <map>
18 #include <string>
19 #include <utility>
20 #include <vector>
21 
22 class CDbUrl;
23 class CSetting;
24 class CSmartPlaylist;
25 class CSmartPlaylistRule;
26 struct StringSettingOption;
27 
29 {
30 public:
32  ~CGUIDialogMediaFilter() override;
33 
34  // specializations of CGUIControl
35  bool OnMessage(CGUIMessage &message) override;
36 
37  static void ShowAndEditMediaFilter(const std::string &path, CSmartPlaylist &filter);
38 
39  struct Filter
40  {
41  std::string mediaType;
42  Field field;
43  uint32_t label;
44  SettingType settingType;
45  std::string controlType;
46  std::string controlFormat;
47  CDatabaseQueryRule::SEARCH_OPERATOR ruleOperator;
48  std::shared_ptr<CSetting> setting = nullptr;
49  CSmartPlaylistRule* rule = nullptr;
50  void* data = nullptr;
51  };
52 
53 protected:
54  // specializations of CGUIWindow
55  void OnWindowLoaded() override;
56  void OnInitWindow() override;
57 
58  // implementations of ISettingCallback
59  void OnSettingChanged(const std::shared_ptr<const CSetting>& setting) override;
60 
61  // specialization of CGUIDialogSettingsBase
62  bool AllowResettingSettings() const override { return false; }
63  bool Save() override { return true; }
64  std::chrono::milliseconds GetDelayMs() const override { return std::chrono::milliseconds(500); }
65 
66  // specialization of CGUIDialogSettingsManualBase
67  void SetupView() override;
68  void InitializeSettings() override;
69 
70  bool SetPath(const std::string &path);
71  void UpdateControls();
72  void TriggerFilter() const;
73  void Reset(bool filtersOnly = false);
74 
75  int GetItems(const Filter &filter, std::vector<std::string> &items, bool countOnly = false);
76  void GetRange(const Filter &filter, int &min, int &interval, int &max);
77  void GetRange(const Filter &filter, float &min, float &interval, float &max);
78  bool GetMinMax(const std::string &table, const std::string &field, int &min, int &max, const CDatabase::Filter &filter = CDatabase::Filter());
79 
80  CSmartPlaylistRule* AddRule(Field field, CDatabaseQueryRule::SEARCH_OPERATOR ruleOperator = CDatabaseQueryRule::OPERATOR_CONTAINS);
81  void DeleteRule(Field field);
82 
83  static void GetStringListOptions(const std::shared_ptr<const CSetting>& setting,
84  std::vector<StringSettingOption>& list,
85  std::string& current,
86  void* data);
87 
88  CDbUrl* m_dbUrl;
89  std::string m_mediaType;
90  CSmartPlaylist *m_filter;
91  std::map<std::string, Filter> m_filters;
92 };
Definition: Database.h:29
Setting base class containing all the properties which are common to all settings independent of the ...
Definition: Setting.h:46
Definition: SettingDefinitions.h:85
Definition: SmartPlayList.h:23
Definition: GUIMessage.h:365
void OnSettingChanged(const std::shared_ptr< const CSetting > &setting) override
The value of the given setting has changed.
Definition: GUIDialogMediaFilter.cpp:220
Definition: SmartPlayList.h:90
Definition: GUIDialogMediaFilter.h:39
SettingType
Basic setting types available in the settings system.
Definition: SettingType.h:15
Definition: GUIDialogMediaFilter.h:28
Definition: DbUrl.h:18
Definition: GUIDialogSettingsManualBase.h:37
void OnInitWindow() override
Called on window open.
Definition: GUIDialogMediaFilter.cpp:213