kodi
GUIDialogSettingsBase.h
1 /*
2  * Copyright (C) 2014-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 "guilib/GUIDialog.h"
12 #include "settings/SettingControl.h"
13 #include "settings/lib/ISettingCallback.h"
14 #include "threads/Timer.h"
15 #include "utils/ILocalizer.h"
16 
17 #include <set>
18 #include <vector>
19 
20 #define CONTROL_SETTINGS_LABEL 2
21 #define CONTROL_SETTINGS_DESCRIPTION 6
22 
23 #define CONTROL_SETTINGS_OKAY_BUTTON 28
24 #define CONTROL_SETTINGS_CANCEL_BUTTON 29
25 #define CONTROL_SETTINGS_CUSTOM_BUTTON 30
26 
27 #define CONTROL_SETTINGS_START_BUTTONS -100
28 #define CONTROL_SETTINGS_START_CONTROL -80
29 
30 #define SETTINGS_RESET_SETTING_ID "settings.reset"
31 #define SETTINGS_EMPTY_CATEGORY_ID "categories.empty"
32 
33 class CGUIControl;
35 class CGUIImage;
36 class CGUISpinControlEx;
37 class CGUIEditControl;
38 class CGUIButtonControl;
41 class CGUILabelControl;
43 
44 class CSetting;
45 class CSettingAction;
46 class CSettingCategory;
47 class CSettingGroup;
48 class CSettingSection;
49 
50 class CVariant;
51 
52 class ISetting;
53 
54 typedef std::shared_ptr<CGUIControlBaseSetting> BaseSettingControlPtr;
55 
58  public ILocalizer,
59  protected ITimerCallback,
60  protected ISettingCallback
61 {
62 public:
63  CGUIDialogSettingsBase(int windowId, const std::string& xmlFile);
64  ~CGUIDialogSettingsBase() override;
65 
66  // specializations of CGUIControl
67  bool OnMessage(CGUIMessage& message) override;
68  bool OnAction(const CAction& action) override;
69  bool OnBack(int actionID) override;
70  void DoProcess(unsigned int currentTime, CDirtyRegionList& dirtyregions) override;
71 
72  virtual bool IsConfirmed() const { return m_confirmed; }
73 
74  // implementation of ILocalizer
75  std::string Localize(std::uint32_t code) const override { return GetLocalizedString(code); }
76 
77 protected:
78  // specializations of CGUIWindow
79  void OnInitWindow() override;
80 
81  // implementations of ITimerCallback
82  void OnTimeout() override;
83 
84  // implementations of ISettingCallback
85  void OnSettingChanged(const std::shared_ptr<const CSetting>& setting) override;
86  void OnSettingPropertyChanged(const std::shared_ptr<const CSetting>& setting,
87  const char* propertyName) override;
88 
89  // new virtual methods
90  virtual bool AllowResettingSettings() const { return true; }
91  virtual int GetSettingLevel() const { return 0; }
92  virtual std::shared_ptr<CSettingSection> GetSection() = 0;
93  virtual std::shared_ptr<CSetting> GetSetting(const std::string& settingId) = 0;
94  virtual std::chrono::milliseconds GetDelayMs() const { return std::chrono::milliseconds(1500); }
95  virtual std::string GetLocalizedString(uint32_t labelId) const;
96 
97  virtual bool OnOkay()
98  {
99  m_confirmed = true;
100  return true;
101  }
102  virtual void OnCancel() {}
103 
104  virtual void SetupView();
105  virtual std::set<std::string> CreateSettings();
106  virtual void UpdateSettings();
107 
118  virtual std::string GetSettingsLabel(const std::shared_ptr<ISetting>& pSetting);
119 
120  virtual CGUIControl* AddSetting(const std::shared_ptr<CSetting>& pSetting,
121  float width,
122  int& iControlID);
123  virtual CGUIControl* AddSettingControl(CGUIControl* pControl,
124  BaseSettingControlPtr pSettingControl,
125  float width,
126  int& iControlID);
127 
128  virtual void SetupControls(bool createSettings = true);
129  virtual void FreeControls();
130  virtual void DeleteControls();
131  virtual void FreeSettingsControls();
132 
133  virtual void SetHeading(const CVariant& label);
134  virtual void SetDescription(const CVariant& label);
135 
136  virtual void OnResetSettings();
137 
149  virtual void OnClick(const BaseSettingControlPtr& pSettingControl);
150 
151  void UpdateSettingControl(const std::string& settingId, bool updateDisplayOnly = false);
152  void UpdateSettingControl(const BaseSettingControlPtr& pSettingControl,
153  bool updateDisplayOnly = false);
154  void SetControlLabel(int controlId, const CVariant& label);
155 
156  BaseSettingControlPtr GetSettingControl(const std::string& setting);
157  BaseSettingControlPtr GetSettingControl(int controlId);
158 
159  CGUIControl* AddSeparator(float width, int& iControlID);
160  CGUIControl* AddGroupLabel(const std::shared_ptr<CSettingGroup>& group,
161  float width,
162  int& iControlID);
163 
164  std::vector<std::shared_ptr<CSettingCategory>> m_categories;
165  std::vector<BaseSettingControlPtr> m_settingControls;
166 
167  int m_iSetting = 0;
168  int m_iCategory = 0;
169  std::shared_ptr<CSettingAction> m_resetSetting;
170  std::shared_ptr<CSettingCategory> m_dummyCategory;
171 
172  CGUISpinControlEx* m_pOriginalSpin;
173  CGUISettingsSliderControl* m_pOriginalSlider;
174  CGUIRadioButtonControl* m_pOriginalRadioButton;
175  CGUIColorButtonControl* m_pOriginalColorButton = nullptr;
176  CGUIButtonControl* m_pOriginalCategoryButton;
177  CGUIButtonControl* m_pOriginalButton;
178  CGUIEditControl* m_pOriginalEdit;
179  CGUIImage* m_pOriginalImage;
180  CGUILabelControl* m_pOriginalGroupTitle;
181  bool m_newOriginalEdit = false;
182 
183  BaseSettingControlPtr
186 
187  bool m_confirmed = false;
188  int m_focusedControl = 0, m_fadedControl = 0;
189 };
Category of groups of settings being part of a section.
Definition: SettingSection.h:93
Definition: GUIControlSettings.h:37
Definition: GUIEditControl.h:26
virtual std::string GetSettingsLabel(const std::shared_ptr< ISetting > &pSetting)
Get the name for the setting entry.
Definition: GUIDialogSettingsBase.cpp:621
void OnSettingPropertyChanged(const std::shared_ptr< const CSetting > &setting, const char *propertyName) override
The given property of the given setting has changed.
Definition: GUIDialogSettingsBase.cpp:519
Definition: GUIButtonControl.h:27
void OnInitWindow() override
Called on window open.
Definition: GUIDialogSettingsBase.cpp:347
Definition: SettingControl.h:30
Definition: ISettingCallback.h:16
Base class for controls.
Definition: GUIControl.h:83
Setting base class containing all the properties which are common to all settings independent of the ...
Definition: Setting.h:46
Definition: GUISettingsSliderControl.h:23
Definition: Variant.h:31
Interface defining the base of all setting objects.
Definition: ISetting.h:22
Definition: Timer.h:25
Section of setting categories.
Definition: SettingSection.h:152
Definition: GUILabelControl.h:24
Definition: ILocalizer.h:14
Class encapsulating information regarding a particular user action to be sent to windows and controls...
Definition: Action.h:21
Definition: GUIDialog.h:35
Action setting implementation.
Definition: Setting.h:506
BaseSettingControlPtr m_delayedSetting
Current delayed setting.
Definition: GUIDialogSettingsBase.h:184
Definition: GUIColorButtonControl.h:24
Definition: GUIMessage.h:365
Definition: inftrees.h:24
Definition: GUIImage.h:27
Definition: SmartPlayList.cpp:137
Definition: GUIDialogSettingsBase.h:56
Group of settings being part of a category.
Definition: SettingSection.h:28
CTimer m_delayedTimer
Delayed setting timer.
Definition: GUIDialogSettingsBase.h:185
Definition: GUISpinControlEx.h:23
Definition: GUIRadioButtonControl.h:22
virtual void OnClick(const BaseSettingControlPtr &pSettingControl)
A setting control has been interacted with by the user.
Definition: GUIDialogSettingsBase.cpp:871
void OnSettingChanged(const std::shared_ptr< const CSetting > &setting) override
The value of the given setting has changed.
Definition: GUIDialogSettingsBase.cpp:510
Definition: Timer.h:17