1 #ifndef JUGIMAP_GUI_WIDGETS_A_H
2 #define JUGIMAP_GUI_WIDGETS_A_H
7 #include "jmGuiCommon.h"
17 enum class GuiButtonVisualState
20 NORMAL_CURSOR_OVER = 1,
21 NORMAL_CURSOR_DOWN = 2,
23 CHECKED_CURSOR_OVER = 4,
24 CHECKED_CURSOR_DOWN = 5,
25 NORMAL_HIGHLIGHTED = 6,
26 CHECKED_HIGHLIGHTED = 7,
31 enum class GuiButtonSpritePropertyKind
46 class GuiButtonSpritePropertyController
50 GuiButtonSpritePropertyController(Sprite *_sprite, GuiButtonSpritePropertyKind _controlledProperty) : sprite(_sprite), controlledProperty(_controlledProperty){}
51 virtual ~GuiButtonSpritePropertyController(){}
52 virtual void SetStartingState(GuiButtonVisualState _buttonVisualState) = 0;
53 virtual void Update(GuiButtonVisualState _buttonVisualState) = 0;
57 Sprite *sprite =
nullptr;
58 GuiButtonSpritePropertyKind controlledProperty = GuiButtonSpritePropertyKind::NOT_DEFINED;
59 GuiButtonVisualState oldButtonVisualState = GuiButtonVisualState::NORMAL;
64 struct GuiButtonSpriteFloatPropertyData
72 int loopDurationMS = 0;
79 LoopType loopType = LoopType::REVERT_DIRECTION;
84 static GuiButtonSpriteFloatPropertyData ParseFromString(
const std::string &text);
89 class GuiButtonSpriteFloatPropertyController :
public GuiButtonSpritePropertyController
94 GuiButtonSpriteFloatPropertyController(Sprite *_sprite, GuiButtonSpritePropertyKind _controlledProperty) : GuiButtonSpritePropertyController(_sprite, _controlledProperty){}
95 void ParseMouseOverTransitionData(
const std::string &text);
97 void SetStartingState(GuiButtonVisualState _buttonVisualState)
override;
98 void Update(GuiButtonVisualState _buttonVisualState)
override;
100 float GetSpritePropertyValue();
101 void ApplyPropertyValueToSprite(
float _value);
104 std::vector<GuiButtonSpriteFloatPropertyData>propertyDataForStates = std::vector<GuiButtonSpriteFloatPropertyData>(9);
109 float currentValue = 0.0;
110 float newValue = 0.0;
112 float targetValue = 0.0;
116 bool mouseOverTransition =
false;
117 float mouseOverTransitionSpeed = 0.0;
119 int timeCurrentMS = 0;
126 class GuiButtonSpriteBoolPropertyController :
public GuiButtonSpritePropertyController
130 GuiButtonSpriteBoolPropertyController(Sprite *_sprite, GuiButtonSpritePropertyKind _controlledProperty) : GuiButtonSpritePropertyController(_sprite, _controlledProperty){}
132 void SetStartingState(GuiButtonVisualState _buttonVisualState)
override;
133 void Update(GuiButtonVisualState _buttonVisualState)
override;
135 bool GetSpritePropertyValue();
136 void ApplyPropertyValueToSprite(
bool _value);
139 std::vector<bool>propertyDataForStates = std::vector<bool>(9);
142 bool currentValue =
false;
143 bool newValue =
false;
144 bool oldValue =
false;
149 class GuiButtonSpriteIntPropertyController :
public GuiButtonSpritePropertyController
153 GuiButtonSpriteIntPropertyController(Sprite *_sprite, GuiButtonSpritePropertyKind _controlledProperty) : GuiButtonSpritePropertyController(_sprite, _controlledProperty){}
155 void SetStartingState(GuiButtonVisualState _buttonVisualState)
override;
156 void Update(GuiButtonVisualState _buttonVisualState)
override;
158 int GetSpritePropertyValue();
159 void ApplyPropertyValueToSprite(
int _value);
162 std::vector<int>propertyDataForStates = std::vector<int>(9);
165 int currentValue =
false;
166 int newValue =
false;
172 struct GuiButtonSpriteColorPropertyData
180 int loopDurationMS = 0;
187 LoopType loopType = LoopType::REVERT_DIRECTION;
192 static GuiButtonSpriteColorPropertyData ParseFromString(
const std::string &text);
197 class GuiButtonSpriteColorPropertyController :
public GuiButtonSpritePropertyController
202 GuiButtonSpriteColorPropertyController(Sprite *_sprite, GuiButtonSpritePropertyKind _controlledProperty) : GuiButtonSpritePropertyController(_sprite, _controlledProperty){}
203 void ParseMouseOverTransitionTime(
const std::string &text);
204 void ParseColorOverlayBlend(std::string text);
206 void SetStartingState(GuiButtonVisualState _buttonVisualState)
override;
207 void Update(GuiButtonVisualState _buttonVisualState)
override;
209 ColorRGBAf GetSpriteOverlayColor();
210 void ApplyOverlayColorToSprite(ColorRGBAf _value);
213 std::vector<GuiButtonSpriteColorPropertyData>propertyDataForStates = std::vector<GuiButtonSpriteColorPropertyData>(9);
217 ColorRGBAf currentValue;
219 ColorRGBAf targetValue;
223 bool mouseOverTransition =
false;
224 float mouseOverTransitionSpeed = 0.0;
229 bool reachedR =
false;
230 bool reachedG =
false;
231 bool reachedB =
false;
232 bool reachedA =
false;
235 void CheckColorReach(
float &color,
float targetColor,
int sign,
bool &reached);
236 void CheckColorReach(
float &color,
float targetColor1,
float targetColor2,
int sign,
bool &reached);
240 class GuiButtonExclusiveGroup;
255 void SetToInitialState()
override;
256 void Update()
override;
302 Sprite *rootSprite =
nullptr;
304 GuiButtonVisualState state = GuiButtonVisualState::NORMAL;
305 GuiButtonVisualState initialState = GuiButtonVisualState::NORMAL;
306 bool checkable =
false;
307 bool checked =
false;
309 std::vector<GuiButtonSpritePropertyController*>spriteControllers;
311 GuiButtonExclusiveGroup* exclusiveGroup =
nullptr;
314 void BuildControllersForSprite(
Sprite * _sprite);
315 void _AddControllersForSprite(
Sprite * _sprite);
316 void _AddFloatPropertyControllerIfNeeded(
Sprite *_sprite, std::vector<Parameter>& cp,
const std::string &propertyName, GuiButtonSpritePropertyKind propertyKind);
317 void _AddIntPropertyControllerIfNeeded(
Sprite *_sprite, std::vector<Parameter>& cp,
const std::string &propertyName, GuiButtonSpritePropertyKind propertyKind);
318 void _AddBooleanPropertyControllerIfNeeded(
Sprite *_sprite, std::vector<Parameter>& cp,
const std::string &propertyName, GuiButtonSpritePropertyKind propertyKind);
319 void _AddColorPropertyControllerIfNeeded(
Sprite *_sprite, std::vector<Parameter>& cp,
const std::string &propertyName, GuiButtonSpritePropertyKind propertyKind);
321 int _ParseIntPropertyFromParameter(std::vector<Parameter>& cp,
const std::string ¶meterName, GuiButtonSpritePropertyKind propertyKind);
326 class GuiButtonExclusiveGroup
330 GuiButtonExclusiveGroup(
const std::string &_name) : name(_name){}
332 void AddButton(GuiButton* _button);
333 std::string GetName(){
return name; }
334 std::vector<GuiButton*>& GetButtons(){
return buttons; }
339 std::vector<GuiButton*> buttons;
345 class GuiButtonExclusiveGroups
349 ~GuiButtonExclusiveGroups();
350 GuiButtonExclusiveGroup* FindGroup(
const std::string &_name);
351 void AddGroup(GuiButtonExclusiveGroup *_g){ groups.push_back(_g); }
355 std::vector<GuiButtonExclusiveGroup*> groups;
359 extern GuiButtonExclusiveGroups guiButtonExclusiveGroups;
365 enum class GuiSliderState
387 void SetToInitialState()
override;
388 void Update()
override;
437 void SetDeltaValue(
float _deltaValue,
bool _inPercents){ deltaValue = _deltaValue/100.0; deltaValueInPercents = _inPercents; }
464 bool valueChangedViaStepButtons =
false;
468 float valueMin = 0.0;
469 float valueMax = 10.0;
471 float deltaValue = 0.05;
472 bool deltaValueInPercents =
true;
474 int nSnapDivision = -1;
475 std::vector<Vec2f>snapPositions;
479 Vec2f virtualSlidingPos;
481 Vec2f startMovingOffset;
483 int valueLabelPrecision = 0;
484 std::string valueLabelSuffix;
487 void SetSlidingButtonPositionFromValues();
488 void SetValueFromSlidingButtonPosition();
489 void SetValueLabelText();
501 class GuiBarSpriteController
505 GuiBarSpriteController(Sprite *_sprite) : sprite(_sprite){}
506 virtual ~GuiBarSpriteController(){}
509 virtual void Set(
float value,
float valueMin,
float valueMax) = 0;
513 Sprite *sprite =
nullptr;
518 class GuiBarSpriteScaleController :
public GuiBarSpriteController
529 GuiBarSpriteScaleController(Sprite * _sprite) : GuiBarSpriteController(_sprite){}
530 void ParseFromString(
const std::string &_text);
532 void Set(
float value,
float valueMin,
float valueMax)
override;
539 std::vector<PositionColor>colors;
543 class GuiBarSpriteFrameController :
public GuiBarSpriteController
554 GuiBarSpriteFrameController(Sprite * _sprite) : GuiBarSpriteController(_sprite){}
555 void ParseFromString(
const std::string &_text);
557 void Set(
float value,
float valueMin,
float valueMax)
override;
561 int frameIndexMin = 0;
562 int frameIndexMax = 0;
583 void SetToInitialState()
override;
584 void Update()
override;
620 float valueMin = 0.0;
621 float valueMax = 10.0;
623 GuiBarSpriteController* barSpriteController =
nullptr;
625 int valueLabelPrecision = 0;
626 std::string valueLabelSuffix;
629 void BuildControllersForSprite(
Sprite * _sprite);
630 void _AddControllersForSprite(
Sprite * _sprite);
632 void SetValueLabelText();