2 * Copyright (C) 2005-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.
12 \file GUISliderControl.h
16 #include "GUIControl.h"
17 #include "GUITexture.h"
21 #define SLIDER_CONTROL_TYPE_INT 1
22 #define SLIDER_CONTROL_TYPE_FLOAT 2
23 #define SLIDER_CONTROL_TYPE_PERCENTAGE 3
28 const char *formatString
;
37 class CGUISliderControl
:
42 RangeSelectorLower
= 0,
43 RangeSelectorUpper
= 1
46 CGUISliderControl(int parentID
,
52 const CTextureInfo
& backGroundTexture
,
53 const CTextureInfo
& backGroundTextureDisabled
,
54 const CTextureInfo
& mibTexture
,
55 const CTextureInfo
& nibTextureFocus
,
56 const CTextureInfo
& nibTextureDisabled
,
58 ORIENTATION orientationconst
);
59 ~CGUISliderControl() override
= default;
60 CGUISliderControl
* Clone() const override
{ return new CGUISliderControl(*this); }
62 void Process(unsigned int currentTime
, CDirtyRegionList
&dirtyregions
) override
;
63 void Render() override
;
64 bool OnAction(const CAction
&action
) override
;
65 virtual bool IsActive() const { return true; }
66 void AllocResources() override
;
67 void FreeResources(bool immediately
= false) override
;
68 void DynamicResourceAlloc(bool bOnOff
) override
;
69 void SetInvalid() override
;
70 virtual void SetRange(int iStart
, int iEnd
);
71 virtual void SetFloatRange(float fStart
, float fEnd
);
72 bool OnMessage(CGUIMessage
& message
) override
;
73 bool ProcessSelector(CGUITexture
* background
,
75 unsigned int currentTime
,
77 RangeSelector selector
);
78 void SetRangeSelection(bool rangeSelection
);
79 bool GetRangeSelection() const { return m_rangeSelection
; }
80 void SetRangeSelector(RangeSelector selector
);
81 void SwitchRangeSelector();
82 void SetInfo(int iInfo
);
83 void SetPercentage(float iPercent
, RangeSelector selector
= RangeSelectorLower
, bool updateCurrent
= false);
84 float GetPercentage(RangeSelector selector
= RangeSelectorLower
) const;
85 void SetIntValue(int iValue
, RangeSelector selector
= RangeSelectorLower
, bool updateCurrent
= false);
86 int GetIntValue(RangeSelector selector
= RangeSelectorLower
) const;
87 void SetFloatValue(float fValue
, RangeSelector selector
= RangeSelectorLower
, bool updateCurrent
= false);
88 float GetFloatValue(RangeSelector selector
= RangeSelectorLower
) const;
89 void SetIntInterval(int iInterval
);
90 void SetFloatInterval(float fInterval
);
91 void SetType(int iType
) { m_iType
= iType
; }
92 int GetType() const { return m_iType
; }
93 std::string
GetDescription() const override
;
94 void SetTextValue(const std::string
& textValue
) { m_textValue
= textValue
; }
95 void SetAction(const std::string
&action
);
98 CGUISliderControl(const CGUISliderControl
& control
);
100 bool HitTest(const CPoint
&point
) const override
;
101 EVENT_RESULT
OnMouseEvent(const CPoint
& point
, const KODI::MOUSE::CMouseEvent
& event
) override
;
102 bool UpdateColors(const CGUIListItem
* item
) override
;
103 virtual void Move(int iNumSteps
);
104 virtual void SetFromPosition(const CPoint
&point
, bool guessSelector
= false);
105 /*! \brief Get the current position of the slider as a proportion
106 \return slider position in the range [0,1]
108 float GetProportion(RangeSelector selector
= RangeSelectorLower
) const;
110 /*! \brief Send a click message (and/or action) to the app in response to a slider move
114 std::unique_ptr
<CGUITexture
> m_guiBackground
;
115 std::unique_ptr
<CGUITexture
> m_guiBackgroundDisabled
;
116 std::unique_ptr
<CGUITexture
> m_guiSelectorLower
;
117 std::unique_ptr
<CGUITexture
> m_guiSelectorUpper
;
118 std::unique_ptr
<CGUITexture
> m_guiSelectorLowerFocus
;
119 std::unique_ptr
<CGUITexture
> m_guiSelectorUpperFocus
;
120 std::unique_ptr
<CGUITexture
> m_guiSelectorLowerDisabled
;
121 std::unique_ptr
<CGUITexture
> m_guiSelectorUpperDisabled
;
124 bool m_rangeSelection
;
125 RangeSelector m_currentSelector
;
127 std::array
<float, 2> m_percentValues
;
129 std::array
<int, 2> m_intValues
;
134 std::array
<float, 2> m_floatValues
;
140 std::string m_textValue
; ///< Allows overriding of the text value to be displayed (parent must update when the slider updates)
141 const SliderAction
*m_action
; ///< Allows the skin to configure the action of a click on the slider \sa SendClick
142 bool m_dragging
; ///< Whether we're in a (mouse/touch) drag operation or not - some actions are sent only on release.
143 ORIENTATION m_orientation
;