layoutholder.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. class LayoutHolder extends ScriptedWidgetEventHandler
  2. {
  3. protected Widget m_MainWidget;
  4. protected Widget m_RootWidget;
  5. protected Widget m_ParentWidget;
  6. protected LayoutHolder m_Parent;
  7. protected string m_LayoutName;
  8. protected bool m_IsActive;
  9. protected bool m_ImmedUpdate;
  10. protected bool m_TooltipOwner;
  11. protected EntityAI m_am_entity1, m_am_entity2;
  12. void UpdateInterval();
  13. void SetLayoutName();
  14. // Override this and set m_ImmedUpdate to true if you need the widget to update on construction
  15. // Had to be done this way since adding it to the constructor parameters would break mods..
  16. void SetImmedUpdate()
  17. {
  18. m_ImmedUpdate = false;
  19. }
  20. void OnSelectAction(ItemBase item, int actionId)
  21. {
  22. #ifdef DIAG_DEVELOPER
  23. PlayerBase m_player = PlayerBase.Cast( GetGame().GetPlayer() );
  24. m_player.GetActionManager().OnInstantAction(ActionDebug,new Param2<ItemBase,int>(item,actionId));
  25. #endif
  26. }
  27. void OnSelectActionEx(EntityAI item, int actionId)
  28. {
  29. #ifdef DIAG_DEVELOPER
  30. PlayerBase m_player = PlayerBase.Cast( GetGame().GetPlayer() );
  31. m_player.GetActionManager().OnInstantAction(ActionDebug,new Param2<EntityAI,int>(item,actionId));
  32. #endif
  33. }
  34. void ShowActionMenu(InventoryItem item)
  35. {
  36. PlayerBase m_player = PlayerBase.Cast( GetGame().GetPlayer() );
  37. HideOwnedTooltip();
  38. m_am_entity1 = item;
  39. m_am_entity2 = null;
  40. ContextMenu cmenu = ContextMenu.Cast(GetGame().GetUIManager().GetMenu().GetContextMenu());
  41. cmenu.Hide();
  42. cmenu.Clear();
  43. if (m_am_entity1 == null)
  44. return;
  45. TSelectableActionInfoArrayEx customActions = new TSelectableActionInfoArrayEx();
  46. ItemBase itemBase = ItemBase.Cast(item);
  47. itemBase.GetDebugActions(customActions);
  48. if (ItemBase.GetDebugActionsMask() & DebugActionType.PLAYER_AGENTS)
  49. {
  50. m_player.GetDebugActions(customActions);
  51. }
  52. int actionsCount = customActions.Count();
  53. for (int i = 0; i < customActions.Count(); i++)
  54. {
  55. TSelectableActionInfoWithColor actionInfo = TSelectableActionInfoWithColor.Cast(customActions.Get(i));
  56. if (actionInfo)
  57. {
  58. int actionId = actionInfo.param2;
  59. int textColor = actionInfo.param4;
  60. string actionText = actionInfo.param3;
  61. if (actionId == EActions.SEPARATOR)
  62. cmenu.AddEx(actionText, textColor, this, "", null);
  63. else
  64. cmenu.AddEx(actionText, textColor, this, "OnSelectActionEx", new Param3<EntityAI, int, int>(itemBase, actionId, textColor));
  65. }
  66. }
  67. int actionMenuPosX, actionMenuPosY;
  68. GetMousePos(actionMenuPosX, actionMenuPosY);
  69. actionMenuPosX -= 5;
  70. actionMenuPosY -= 5;
  71. cmenu.Show(actionMenuPosX, actionMenuPosY);
  72. }
  73. void LayoutHolder( LayoutHolder parent )
  74. {
  75. m_Parent = parent;
  76. SetLayoutName();
  77. SetParentWidget();
  78. SetImmedUpdate();
  79. m_TooltipOwner = false;
  80. if ( m_LayoutName != "" )
  81. {
  82. m_MainWidget = GetGame().GetWorkspace().CreateWidgets( m_LayoutName, null, false );
  83. m_MainWidget.Show( true, false );
  84. }
  85. m_RootWidget = m_MainWidget;
  86. if ( m_ParentWidget )
  87. {
  88. m_ParentWidget.Show( true, false );
  89. if ( m_MainWidget )
  90. {
  91. m_ParentWidget.AddChild( m_MainWidget, false );
  92. }
  93. }
  94. if ( m_ImmedUpdate )
  95. {
  96. if ( m_MainWidget )
  97. m_MainWidget.Update();
  98. }
  99. }
  100. void ~LayoutHolder()
  101. {
  102. HideOwnedTooltip();
  103. delete m_RootWidget;
  104. }
  105. LayoutHolder GetRoot()
  106. {
  107. if ( m_Parent )
  108. {
  109. ref LayoutHolder container = m_Parent.GetRoot();
  110. return container;
  111. }
  112. else
  113. {
  114. return this;
  115. }
  116. }
  117. void SetParentWidget()
  118. {
  119. if ( m_Parent )
  120. m_ParentWidget = m_Parent.GetMainWidget();
  121. }
  122. LayoutHolder GetParent()
  123. {
  124. return m_Parent;
  125. }
  126. void SetActive(bool active)
  127. {
  128. m_IsActive = active;
  129. }
  130. void SetLastActive();
  131. void SetFirstActive();
  132. bool IsActive()
  133. {
  134. return m_IsActive;
  135. }
  136. Widget GetMainWidget()
  137. {
  138. return m_MainWidget;
  139. }
  140. Widget GetRootWidget()
  141. {
  142. return m_RootWidget;
  143. }
  144. bool IsDisplayable()
  145. {
  146. return true;
  147. }
  148. bool IsVisible()
  149. {
  150. if (m_RootWidget)
  151. {
  152. return m_RootWidget.IsVisible();
  153. }
  154. return false;
  155. }
  156. void OnShow()
  157. {
  158. m_RootWidget.Show( true );
  159. if ( m_ParentWidget )
  160. m_ParentWidget.Show( true );
  161. }
  162. void OnHide()
  163. {
  164. m_RootWidget.Show( false );
  165. }
  166. void Refresh()
  167. {
  168. m_RootWidget.Update();
  169. }
  170. void InspectItem( EntityAI item )
  171. {
  172. InventoryMenu menu = InventoryMenu.Cast( GetGame().GetUIManager().FindMenu(MENU_INVENTORY) );
  173. InspectMenuNew inspect_menu = InspectMenuNew.Cast( menu.EnterScriptedMenu(MENU_INSPECT) );
  174. if ( inspect_menu )
  175. {
  176. GetGame().GetMission().GetHud().ShowHudUI( false );
  177. GetGame().GetMission().GetHud().ShowQuickbarUI( false );
  178. inspect_menu.SetItem( item );
  179. }
  180. }
  181. void UpdateSelectionIcons()
  182. {}
  183. void PrepareOwnedTooltip(EntityAI item/*, Widget w*/, int x = 0, int y = 0)
  184. {
  185. ItemManager.GetInstance().PrepareTooltip(item,x,y);
  186. m_TooltipOwner = true;
  187. }
  188. void PrepareOwnedSlotsTooltip(Widget w, string name, string desc, int x = 0, int y = 0)
  189. {
  190. ItemManager.GetInstance().SetTooltipWidget(w);
  191. ItemManager.GetInstance().PrepareSlotsTooltip(name,desc,x,y);
  192. m_TooltipOwner = true;
  193. }
  194. void HideOwnedTooltip()
  195. {
  196. if (m_TooltipOwner)
  197. {
  198. ItemManager.GetInstance().HideTooltip();
  199. m_TooltipOwner = false;
  200. }
  201. }
  202. void HideOwnedSlotsTooltip()
  203. {
  204. if (m_TooltipOwner)
  205. {
  206. ItemManager.GetInstance().HideTooltipSlot();
  207. m_TooltipOwner = false;
  208. }
  209. }
  210. }