dialogcontrol.h 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. /*
  2. ** Command & Conquer Renegade(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. /***********************************************************************************************
  19. *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
  20. ***********************************************************************************************
  21. * *
  22. * Project Name : Combat *
  23. * *
  24. * $Archive:: /Commando/Code/wwui/dialogcontrol.h $*
  25. * *
  26. * Author:: Patrick Smith *
  27. * *
  28. * $Modtime:: 1/09/02 4:06p $*
  29. * *
  30. * $Revision:: 23 $*
  31. * *
  32. *---------------------------------------------------------------------------------------------*
  33. * Functions: *
  34. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  35. #if defined(_MSC_VER)
  36. #pragma once
  37. #endif
  38. #ifndef __DIALOG_CONTROL_H
  39. #define __DIALOG_CONTROL_H
  40. #include "rect.h"
  41. #include "vector2.h"
  42. #include "vector3.h"
  43. #include "widestring.h"
  44. #include "bittype.h"
  45. #include "controladvisesink.h"
  46. ////////////////////////////////////////////////////////////////
  47. // Forward declarations
  48. ////////////////////////////////////////////////////////////////
  49. class DialogBaseClass;
  50. class ButtonCtrlClass;
  51. class CheckBoxCtrlClass;
  52. class EditCtrlClass;
  53. class ListCtrlClass;
  54. class TabCtrlClass;
  55. class DialogTextClass;
  56. class InputCtrlClass;
  57. class ButtonCtrlClass;
  58. class MenuEntryCtrlClass;
  59. class ComboBoxCtrlClass;
  60. class ScrollBarCtrlClass;
  61. class SliderCtrlClass;
  62. class ViewerCtrlClass;
  63. class ShortcutBarCtrlClass;
  64. ////////////////////////////////////////////////////////////////
  65. // Useful macros
  66. ////////////////////////////////////////////////////////////////
  67. #define ADVISE_NOTIFY(fn) \
  68. if (Parent != NULL) { Parent->fn; } \
  69. if (AdviseSink != NULL) { AdviseSink->fn; }
  70. ////////////////////////////////////////////////////////////////
  71. //
  72. // DialogControlClass
  73. //
  74. ////////////////////////////////////////////////////////////////
  75. class DialogControlClass : public ControlAdviseSinkClass
  76. {
  77. public:
  78. ////////////////////////////////////////////////////////////////
  79. // Public friends
  80. ////////////////////////////////////////////////////////////////
  81. friend class DialogBaseClass;
  82. friend class DialogMgrClass;
  83. ////////////////////////////////////////////////////////////////
  84. // Public constructors/destructors
  85. ////////////////////////////////////////////////////////////////
  86. DialogControlClass (void);
  87. virtual ~DialogControlClass (void);
  88. ////////////////////////////////////////////////////////////////
  89. // Public methods
  90. ////////////////////////////////////////////////////////////////
  91. //
  92. // RTTI
  93. //
  94. virtual CheckBoxCtrlClass * As_CheckBoxCtrlClass (void) { return NULL; }
  95. virtual EditCtrlClass * As_EditCtrlClass (void) { return NULL; }
  96. virtual ListCtrlClass * As_ListCtrlClass (void) { return NULL; }
  97. virtual TabCtrlClass * As_TabCtrlClass (void) { return NULL; }
  98. virtual DialogTextClass * As_DialogTextClass (void) { return NULL; }
  99. virtual InputCtrlClass * As_InputCtrlClass (void) { return NULL; }
  100. virtual ButtonCtrlClass * As_ButtonCtrlClass (void) { return NULL; }
  101. virtual MenuEntryCtrlClass * As_MenuEntryCtrlClass (void) { return NULL; }
  102. virtual ComboBoxCtrlClass * As_ComboBoxCtrlClass (void) { return NULL; }
  103. virtual ScrollBarCtrlClass * As_ScrollBarCtrlClass (void) { return NULL; }
  104. virtual SliderCtrlClass * As_SliderCtrlClass (void) { return NULL; }
  105. virtual ViewerCtrlClass * As_ViewerCtrlClass (void) { return NULL; }
  106. virtual ShortcutBarCtrlClass * As_ShortcutBarCtrlClass (void){ return NULL; }
  107. virtual TreeCtrlClass * As_TreeCtrlClass (void) { return NULL; }
  108. //
  109. // Simple property access
  110. //
  111. virtual const WCHAR * Get_Text (void) const { return Title; }
  112. virtual const RectClass & Get_Window_Rect (void) const { return Rect; }
  113. Vector2 Get_Window_Pos (void) const { return Rect.Upper_Left (); }
  114. const RectClass & Get_Client_Rect (void) const { return ClientRect; }
  115. DWORD Get_Style (void) const { return Style; }
  116. int Get_ID (void) const { return ID; }
  117. virtual void Set_Text (const WCHAR *title) { Title = title; Set_Dirty (); }
  118. void Set_Window_Rect (const RectClass &rect) { Rect = rect; Update_Client_Rect (); }
  119. virtual void Set_Window_Pos (const Vector2 &pos);
  120. void Set_Client_Rect (const RectClass &rect) { ClientRect = rect; }
  121. virtual void Set_Style (DWORD style) { Style = style; }
  122. void Set_ID (int id) { ID = id; }
  123. //
  124. // Parent access
  125. //
  126. DialogBaseClass * Peek_Parent (void) const { return Parent; }
  127. void Set_Parent (DialogBaseClass *parent) { Parent = parent; }
  128. //
  129. // Advise sink access
  130. //
  131. ControlAdviseSinkClass * Get_Advise_Sink (void) const { return AdviseSink; }
  132. void Set_Advise_Sink (ControlAdviseSinkClass *sink) { AdviseSink = sink; }
  133. //
  134. // Focus support
  135. //
  136. bool Has_Focus (void) const { return HasFocus; }
  137. void Set_Focus (void);
  138. bool Wants_Focus (void) const { return WantsFocus; }
  139. void Set_Wants_Focus (bool onoff) { WantsFocus = onoff; }
  140. //
  141. // Enabled support
  142. //
  143. bool Is_Enabled (void) const { return IsEnabled; }
  144. void Enable (bool onoff);
  145. //
  146. // Visibility
  147. //
  148. void Show (bool onoff) { IsVisible = onoff; }
  149. bool Is_Visible (void) const { return IsVisible; }
  150. //
  151. // Embedded support
  152. //
  153. void Set_Is_Embedded (bool onoff) { IsEmbedded = onoff; }
  154. bool Is_Embedded (void) const { return IsEmbedded; }
  155. //
  156. // Input capture support
  157. //
  158. void Set_Capture (void);
  159. void Release_Capture (void);
  160. //
  161. // Tooltip support
  162. //
  163. virtual bool Wants_Tooltip (void) const { return (ToolTipText.Get_Length () > 0); }
  164. virtual void Get_Tooltip_Text (WideStringClass &text) { text = ToolTipText; }
  165. virtual void Set_Tooltip_Text (const WCHAR *text) { ToolTipText = text; }
  166. //
  167. // Appearance control
  168. //
  169. const Vector3 & Get_Text_Color (void) const { return TextColor; }
  170. void Set_Text_Color (const Vector3 &color) { TextColor = color; IsTextColorOverridden = true; Set_Dirty (); }
  171. //
  172. // Display methods
  173. //
  174. virtual void Render (void) { IsDirty = false; }
  175. virtual void Center_Mouse (void);
  176. //
  177. // Dirty support
  178. //
  179. virtual void Set_Dirty (bool onoff = true) { IsDirty = onoff; }
  180. virtual bool Is_Dirty (void) const { return IsDirty; }
  181. protected:
  182. ////////////////////////////////////////////////////////////////
  183. // Protected methods
  184. ////////////////////////////////////////////////////////////////
  185. virtual void On_LButton_Down (const Vector2 &mouse_pos) {}
  186. virtual void On_LButton_DblClk (const Vector2 &mouse_pos) {}
  187. virtual void On_LButton_Up (const Vector2 &mouse_pos) {}
  188. virtual void On_RButton_Down (const Vector2 &mouse_pos) {}
  189. virtual void On_RButton_Up (const Vector2 &mouse_pos) {}
  190. virtual void On_MButton_Down (const Vector2 &mouse_pos) {}
  191. virtual void On_MButton_Up (const Vector2 &mouse_pos) {}
  192. virtual void On_Mouse_Move (const Vector2 &mouse_pos) {}
  193. virtual bool On_Key_Down (uint32 key_id, uint32 key_data) {return false;}
  194. virtual bool On_Key_Up (uint32 key_id) {return false;}
  195. virtual void On_Unicode_Char(WCHAR unicode) {}
  196. virtual void On_Mouse_Wheel (int direction) {}
  197. virtual void On_Set_Cursor (const Vector2 &mouse_pos);
  198. virtual void On_Create (void) {}
  199. virtual void On_Destroy (void) {}
  200. virtual void On_Add_To_Dialog (void) {}
  201. virtual void On_Remove_From_Dialog (void) {}
  202. virtual void On_Frame_Update (void) {}
  203. virtual void On_Set_Focus (void) { HasFocus = true; }
  204. virtual void On_Kill_Focus (DialogControlClass *) { HasFocus = false; }
  205. virtual void Update_Client_Rect (void) { ClientRect = Rect; Set_Dirty (); }
  206. ////////////////////////////////////////////////////////////////
  207. // Protected member data
  208. ////////////////////////////////////////////////////////////////
  209. WideStringClass Title;
  210. WideStringClass ToolTipText;
  211. RectClass Rect;
  212. RectClass ClientRect;
  213. DWORD Style;
  214. int ID;
  215. DialogBaseClass * Parent;
  216. bool HasFocus;
  217. bool IsDirty;
  218. bool WantsFocus;
  219. bool IsEnabled;
  220. bool IsVisible;
  221. bool IsEmbedded;
  222. Vector3 TextColor;
  223. bool IsTextColorOverridden;
  224. ControlAdviseSinkClass * AdviseSink;
  225. };
  226. #endif //__DIALOG_CONTROL_H