optionselectorslidersetup.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. class OptionSelectorSliderSetup extends OptionSelectorBase
  2. {
  3. protected SliderWidget m_Slider;
  4. protected float m_MinValue;
  5. protected float m_MaxValue;
  6. void ~OptionSelectorSliderSetup()
  7. {
  8. delete m_Root;
  9. }
  10. override void Enable()
  11. {
  12. super.Enable();
  13. m_Slider.ClearFlags(WidgetFlags.IGNOREPOINTER);
  14. }
  15. override void Disable()
  16. {
  17. super.Disable();
  18. m_Slider.SetFlags(WidgetFlags.IGNOREPOINTER);
  19. }
  20. override bool OnMouseEnter(Widget w, int x, int y)
  21. {
  22. if (m_ParentClass)
  23. {
  24. OnFocus(w, x, y);
  25. m_ParentClass.OnFocus(m_Root.GetParent(), -1, m_SelectorType);
  26. #ifdef PLATFORM_WINDOWS
  27. m_ParentClass.OnMouseEnter(m_Root.GetParent().GetParent(), x, y);
  28. ColorHighlight(w);
  29. #endif
  30. }
  31. return true;
  32. }
  33. override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
  34. {
  35. if (m_ParentClass)
  36. {
  37. m_ParentClass.OnFocus(null, x, y);
  38. #ifdef PLATFORM_WINDOWS
  39. m_ParentClass.OnMouseLeave(m_Root.GetParent().GetParent(), enterW, x, y);
  40. ColorNormal(w);
  41. #endif
  42. OnFocusLost(w, x, y);
  43. SetFocus(null);
  44. }
  45. return true;
  46. }
  47. override bool OnMouseButtonUp(Widget w, int x, int y, int button)
  48. {
  49. if (button == MouseState.LEFT && w == m_Slider)
  50. {
  51. }
  52. return false;
  53. }
  54. override bool OnChange(Widget w, int x, int y, bool finished)
  55. {
  56. if (w == m_Slider)
  57. {
  58. m_OptionChanged.Invoke(GetValue());
  59. return true;
  60. }
  61. return false;
  62. }
  63. override bool IsFocusable(Widget w)
  64. {
  65. if (w)
  66. {
  67. return (w == m_Parent || w == m_Slider);
  68. }
  69. return false;
  70. }
  71. override bool OnFocus(Widget w, int x, int y)
  72. {
  73. #ifdef PLATFORM_CONSOLE
  74. if (GetFocus() != m_Slider)
  75. {
  76. SetFocus(m_Slider);
  77. m_Parent.Enable(false);
  78. }
  79. return super.OnFocus(m_Parent, x, y);
  80. #else
  81. return false;
  82. #endif
  83. }
  84. override bool OnFocusLost(Widget w, int x, int y)
  85. {
  86. if (w == m_Slider)
  87. {
  88. m_Parent.Enable(true);
  89. return super.OnFocusLost(m_Parent, x, y);
  90. }
  91. return false;
  92. }
  93. float NormalizeInput(float value)
  94. {
  95. float ret = (value - m_MinValue) / (m_MaxValue - m_MinValue);
  96. return ret;
  97. }
  98. void SetStep(float step)
  99. {
  100. m_Slider.SetStep(step);
  101. }
  102. void SetValue(float value, bool update = true)
  103. {
  104. value = Math.Round(value * 100) * 0.01;
  105. m_Slider.SetCurrent(NormalizeInput(value));
  106. if (update)
  107. m_OptionChanged.Invoke(GetValue());
  108. }
  109. float GetValue()
  110. {
  111. float current = Math.Round(m_Slider.GetCurrent() * 100) * 0.01;
  112. float ret = (current * (m_MaxValue - m_MinValue)) + m_MinValue;
  113. return ret;
  114. }
  115. void SetMax(float max)
  116. {
  117. m_MaxValue = max;
  118. }
  119. override void ColorHighlight(Widget w)
  120. {
  121. if (!w)
  122. return;
  123. if (m_Slider)
  124. {
  125. SetFocus(m_Slider);
  126. m_Slider.SetColor(ARGB(255, 200, 0, 0));
  127. }
  128. super.ColorHighlight(w);
  129. }
  130. override void ColorNormal(Widget w)
  131. {
  132. if (!w)
  133. return;
  134. if (m_Slider)
  135. {
  136. m_Slider.SetColor(ARGB(140, 255, 255, 255));
  137. }
  138. super.ColorNormal(w);
  139. }
  140. }