optionselector.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. class OptionSelector extends OptionSelectorBase
  2. {
  3. protected Widget m_PreviousOption;
  4. protected Widget m_NextOption;
  5. protected TextWidget m_SelectedOption;
  6. protected int m_SelectedOptionIndex;
  7. protected ref array<string> m_Options;
  8. void OptionSelector(Widget parent, int current_index, ScriptedWidgetEventHandler parent_c, bool disabled)
  9. {
  10. m_Options = { "#server_browser_disabled", "#server_browser_show", "#server_browser_hide" };
  11. m_ParentClass = parent_c;
  12. m_SelectorType = 2;
  13. if (current_index < 0 || current_index >= m_Options.Count())
  14. {
  15. m_SelectedOptionIndex = 0;
  16. }
  17. else
  18. {
  19. m_SelectedOptionIndex = current_index;
  20. }
  21. m_Root = GetGame().GetWorkspace().CreateWidgets("gui/layouts/new_ui/option_selector.layout", parent);
  22. #ifdef PLATFORM_CONSOLE
  23. m_Parent = parent.GetParent().GetParent();
  24. #else
  25. #ifdef PLATFORM_WINDOWS
  26. m_Parent = parent.GetParent();
  27. #endif
  28. #endif
  29. m_SelectedOption = TextWidget.Cast(m_Root.FindAnyWidget("option_label"));
  30. m_PreviousOption = m_Root.FindAnyWidget("prev_option");
  31. m_NextOption = m_Root.FindAnyWidget("next_option");
  32. #ifdef PLATFORM_CONSOLE
  33. m_NextOption.Show(false);
  34. m_PreviousOption.Show(false);
  35. #endif
  36. m_SelectedOption.SetText(m_Options.Get(m_SelectedOptionIndex));
  37. m_Enabled = !disabled;
  38. if (m_Enabled)
  39. {
  40. Enable();
  41. }
  42. else
  43. {
  44. Disable();
  45. }
  46. m_Parent.SetHandler(this);
  47. }
  48. void ~OptionSelector()
  49. {
  50. delete m_Root;
  51. }
  52. override bool OnMouseButtonUp(Widget w, int x, int y, int button)
  53. {
  54. if (button == MouseState.LEFT)
  55. {
  56. if (w == m_NextOption)
  57. {
  58. SetNextOption();
  59. return true;
  60. }
  61. else if (w == m_PreviousOption)
  62. {
  63. SetPrevOption();
  64. return true;
  65. }
  66. }
  67. return false;
  68. }
  69. override bool OnClick(Widget w, int x, int y, int button)
  70. {
  71. if (button == MouseState.LEFT)
  72. {
  73. if (w == m_Parent)
  74. SetNextOption();
  75. }
  76. return true;
  77. }
  78. override bool OnMouseEnter(Widget w, int x, int y)
  79. {
  80. return super.OnMouseEnter(w, x, y);
  81. }
  82. override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
  83. {
  84. return super.OnMouseLeave(w, enterW, x, y);
  85. }
  86. void Reset()
  87. {
  88. m_SelectedOptionIndex = 0;
  89. m_SelectedOption.SetText(m_Options.Get(m_SelectedOptionIndex));
  90. m_OptionChanged.Invoke(m_SelectedOptionIndex);
  91. }
  92. void SetNextOption()
  93. {
  94. m_SelectedOptionIndex++;
  95. if (m_SelectedOptionIndex >= m_Options.Count())
  96. {
  97. m_SelectedOptionIndex = 0;
  98. }
  99. m_SelectedOption.SetText(m_Options.Get(m_SelectedOptionIndex));
  100. m_OptionChanged.Invoke(m_SelectedOptionIndex);
  101. }
  102. void SetPrevOption()
  103. {
  104. m_SelectedOptionIndex--;
  105. if (m_SelectedOptionIndex < 0)
  106. {
  107. m_SelectedOptionIndex = m_Options.Count() - 1;
  108. }
  109. m_SelectedOption.SetText(m_Options.Get(m_SelectedOptionIndex));
  110. m_OptionChanged.Invoke(m_SelectedOptionIndex);
  111. }
  112. array<string> GetOptions()
  113. {
  114. return m_Options;
  115. }
  116. bool IsSet()
  117. {
  118. return m_SelectedOptionIndex != 0;
  119. }
  120. //! Returns 'true' if current index == 1 (default 'enabled' value). Take care, as different selectors may follow different logic!
  121. bool IsEnabled()
  122. {
  123. return m_SelectedOptionIndex == 1;
  124. }
  125. //! Returns false for the selector in 'disabled' states
  126. bool IsSelectorEnabled()
  127. {
  128. return m_Enabled;
  129. }
  130. string GetStringValue()
  131. {
  132. return m_Options.Get(m_SelectedOptionIndex);
  133. }
  134. void SetStringOption(string option, bool fire_event = true)
  135. {
  136. int index = m_Options.Find(option);
  137. if (index > -1)
  138. {
  139. m_SelectedOptionIndex = index;
  140. m_SelectedOption.SetText(m_Options.Get(m_SelectedOptionIndex));
  141. if (fire_event)
  142. m_OptionChanged.Invoke(m_SelectedOptionIndex);
  143. }
  144. }
  145. void ColorOption()
  146. {
  147. switch (m_SelectedOptionIndex)
  148. {
  149. case 0:
  150. {
  151. m_SelectedOption.SetColor(ARGB(255, 255, 255, 255));
  152. break;
  153. }
  154. case 1:
  155. {
  156. m_SelectedOption.SetColor(ARGB(255, 0, 255, 0));
  157. break;
  158. }
  159. case 2:
  160. {
  161. m_SelectedOption.SetColor(ARGB(255, 255, 0, 0));
  162. break;
  163. }
  164. }
  165. }
  166. override bool IsFocusable(Widget w)
  167. {
  168. if (w)
  169. {
  170. return (w == m_Parent || w == m_NextOption || w == m_PreviousOption);
  171. }
  172. return false;
  173. }
  174. override void Enable()
  175. {
  176. super.Enable();
  177. #ifndef PLATFORM_CONSOLE
  178. m_NextOption.ClearFlags(WidgetFlags.IGNOREPOINTER);
  179. m_NextOption.Show(true);
  180. m_PreviousOption.ClearFlags(WidgetFlags.IGNOREPOINTER);
  181. m_PreviousOption.Show(true);
  182. #else
  183. m_Parent.ClearFlags(WidgetFlags.NOFOCUS);
  184. m_Parent.ClearFlags(WidgetFlags.IGNOREPOINTER);
  185. #endif
  186. }
  187. override void Disable()
  188. {
  189. super.Disable();
  190. #ifndef PLATFORM_CONSOLE
  191. m_NextOption.SetFlags(WidgetFlags.IGNOREPOINTER);
  192. m_NextOption.Show(false);
  193. m_PreviousOption.SetFlags(WidgetFlags.IGNOREPOINTER);
  194. m_PreviousOption.Show(false);
  195. #else
  196. m_Parent.SetFlags(WidgetFlags.NOFOCUS);
  197. m_Parent.SetFlags(WidgetFlags.IGNOREPOINTER);
  198. #endif
  199. }
  200. override void ColorNormalConsole(Widget w)
  201. {
  202. super.ColorNormalConsole(w);
  203. if (!w)
  204. return;
  205. if (m_SelectedOption)
  206. {
  207. m_SelectedOption.SetColor(ARGB(255,255,255,255));
  208. }
  209. }
  210. override void ColorDisabledConsole(Widget w)
  211. {
  212. super.ColorDisabledConsole(w);
  213. if (!w)
  214. return;
  215. if (m_SelectedOption)
  216. {
  217. m_SelectedOption.SetColor(ARGB(120,255,255,255));
  218. }
  219. }
  220. }