2 * Copyright (C) 2012-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
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"
24 namespace KODI::PLAYLIST
27 class CSmartPlaylistRule
;
28 } // namespace KODI::PLAYLIST
29 struct StringSettingOption
;
31 class CGUIDialogMediaFilter
: public CGUIDialogSettingsManualBase
34 CGUIDialogMediaFilter();
35 ~CGUIDialogMediaFilter() override
;
37 // specializations of CGUIControl
38 bool OnMessage(CGUIMessage
&message
) override
;
40 static void ShowAndEditMediaFilter(const std::string
& path
,
41 KODI::PLAYLIST::CSmartPlaylist
& filter
);
45 std::string mediaType
;
48 SettingType settingType
;
49 std::string controlType
;
50 std::string controlFormat
;
51 CDatabaseQueryRule::SEARCH_OPERATOR ruleOperator
;
52 std::shared_ptr
<CSetting
> setting
= nullptr;
53 KODI::PLAYLIST::CSmartPlaylistRule
* rule
= nullptr;
58 // specializations of CGUIWindow
59 void OnWindowLoaded() override
;
60 void OnInitWindow() override
;
62 // implementations of ISettingCallback
63 void OnSettingChanged(const std::shared_ptr
<const CSetting
>& setting
) override
;
65 // specialization of CGUIDialogSettingsBase
66 bool AllowResettingSettings() const override
{ return false; }
67 bool Save() override
{ return true; }
68 std::chrono::milliseconds
GetDelayMs() const override
{ return std::chrono::milliseconds(500); }
70 // specialization of CGUIDialogSettingsManualBase
71 void SetupView() override
;
72 void InitializeSettings() override
;
74 bool SetPath(const std::string
&path
);
75 void UpdateControls();
76 void TriggerFilter() const;
77 void Reset(bool filtersOnly
= false);
79 int GetItems(const Filter
&filter
, std::vector
<std::string
> &items
, bool countOnly
= false);
80 void GetRange(const Filter
&filter
, int &min
, int &interval
, int &max
);
81 void GetRange(const Filter
&filter
, float &min
, float &interval
, float &max
);
82 bool GetMinMax(const std::string
&table
, const std::string
&field
, int &min
, int &max
, const CDatabase::Filter
&filter
= CDatabase::Filter());
84 KODI::PLAYLIST::CSmartPlaylistRule
* AddRule(
86 CDatabaseQueryRule::SEARCH_OPERATOR ruleOperator
= CDatabaseQueryRule::OPERATOR_CONTAINS
);
87 void DeleteRule(Field field
);
89 static void GetStringListOptions(const std::shared_ptr
<const CSetting
>& setting
,
90 std::vector
<StringSettingOption
>& list
,
95 std::string m_mediaType
;
96 KODI::PLAYLIST::CSmartPlaylist
* m_filter
;
97 std::map
<std::string
, Filter
> m_filters
;