leftarea.c 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. class LeftArea: Container
  2. {
  3. protected Widget m_UpIcon;
  4. protected Widget m_DownIcon;
  5. protected Widget m_ContentParent;
  6. protected ref VicinityContainer m_VicinityContainer;
  7. protected Widget m_SlotsHeader;
  8. protected Widget m_SlotsContent;
  9. protected ScrollWidget m_SlotsScrollWidget;
  10. protected ScrollWidget m_ScrollWidget;
  11. protected ref SizeToChild m_ContentResize;
  12. protected bool m_ShouldChangeSize = true;
  13. protected bool m_IsProcessing = false; // Prevents refreshing every time a child is added while it is still processing
  14. void LeftArea(LayoutHolder parent )
  15. {
  16. m_MainWidget.Show(true, false);
  17. m_ContentParent = m_MainWidget.FindAnyWidget("ContentParent");
  18. m_ContentParent.GetScript(m_ContentResize);
  19. #ifndef PLATFORM_CONSOLE
  20. m_SlotsHeader = m_MainWidget.FindAnyWidget("SlotsHeader");
  21. m_SlotsContent = m_MainWidget.FindAnyWidget("SlotsContent");
  22. m_SlotsScrollWidget = ScrollWidget.Cast(m_MainWidget.FindAnyWidget("ScrollerSlotsContent"));
  23. #endif
  24. m_ScrollWidget = ScrollWidget.Cast(m_MainWidget.FindAnyWidget("Scroller"));
  25. m_MainWidget = m_MainWidget.FindAnyWidget("Content");
  26. m_UpIcon = m_RootWidget.FindAnyWidget("Up");
  27. m_DownIcon = m_RootWidget.FindAnyWidget("Down");
  28. m_VicinityContainer = new VicinityContainer(this, false);
  29. m_Body.Insert(m_VicinityContainer);
  30. m_ActiveIndex = 0;
  31. WidgetEventHandler.GetInstance().RegisterOnChildAdd(m_MainWidget, this, "OnChildAdd");
  32. WidgetEventHandler.GetInstance().RegisterOnChildRemove(m_MainWidget, this, "OnChildRemove");
  33. RecomputeOpenedContainers();
  34. }
  35. override void UnfocusGrid()
  36. {
  37. Container active_container;
  38. for ( int i = 0; i < m_OpenedContainers.Count(); i++ )
  39. {
  40. active_container = Container.Cast( m_OpenedContainers.Get( i ) );
  41. active_container.UnfocusGrid();
  42. }
  43. }
  44. override bool IsActive()
  45. {
  46. if( m_OpenedContainers.Count() <= m_ActiveIndex )
  47. {
  48. m_ActiveIndex = 0;
  49. }
  50. Container active_container = Container.Cast( m_OpenedContainers.Get( m_ActiveIndex ) );
  51. return active_container.IsActive( );
  52. }
  53. override void SetActive( bool active )
  54. {
  55. super.SetActive( active );
  56. UpdateSelectionIcons();
  57. }
  58. override ScrollWidget GetScrollWidget()
  59. {
  60. return m_ScrollWidget;
  61. }
  62. override void UpdateSelectionIcons()
  63. {
  64. #ifdef PLATFORM_CONSOLE
  65. ScrollToActiveContainer();
  66. #endif
  67. m_UpIcon.Show( m_IsActive );
  68. m_DownIcon.Show( m_IsActive );
  69. if( m_IsActive )
  70. {
  71. float x, y;
  72. m_UpIcon.GetScreenSize( x, y );
  73. float top_y = GetCurrentContainerTopY();
  74. m_UpIcon.SetPos( 0, Math.Clamp( top_y, 0, 99999 ) );
  75. #ifndef PLATFORM_CONSOLE
  76. float x2, y2;
  77. m_DownIcon.GetScreenSize( x2, y2 );
  78. float bottom_y = GetCurrentContainerBottomY() - y2;
  79. float diff = bottom_y - ( top_y + y );
  80. if( diff < 0 )
  81. {
  82. top_y += diff / 2;
  83. bottom_y -= diff / 2;
  84. }
  85. m_DownIcon.SetPos( 0, bottom_y );
  86. #endif
  87. }
  88. }
  89. float GetCurrentContainerTopY()
  90. {
  91. float x, y, cont_screen_pos;
  92. m_MainWidget.GetScreenPos( x, y );
  93. if ( m_OpenedContainers.IsValidIndex( m_ActiveIndex ) )
  94. cont_screen_pos = Container.Cast( m_OpenedContainers.Get( m_ActiveIndex ) ).GetFocusedContainerYScreenPos();
  95. return cont_screen_pos - y;
  96. }
  97. float GetCurrentContainerBottomY()
  98. {
  99. float x, y, cont_screen_pos, cont_screen_height;
  100. m_MainWidget.GetScreenPos( x, y );
  101. if ( m_OpenedContainers.IsValidIndex( m_ActiveIndex ) )
  102. {
  103. cont_screen_pos = Container.Cast( m_OpenedContainers.Get( m_ActiveIndex ) ).GetFocusedContainerYScreenPos();
  104. cont_screen_height = Container.Cast( m_OpenedContainers.Get( m_ActiveIndex ) ).GetFocusedContainerHeight();
  105. }
  106. return cont_screen_pos - y + cont_screen_height;
  107. }
  108. override void SetSameLevelNextActive()
  109. {
  110. super.SetSameLevelNextActive();
  111. Refresh();
  112. }
  113. override void SetSameLevelPreviousActive()
  114. {
  115. super.SetSameLevelPreviousActive();
  116. Refresh();
  117. }
  118. override void ExpandCollapseContainer()
  119. {
  120. Container c = GetFocusedContainer();
  121. if (c)
  122. {
  123. c.ExpandCollapseContainer();
  124. }
  125. Refresh();
  126. }
  127. void OnLeftPanelDropReceived( Widget w, int x, int y, Widget receiver )
  128. {
  129. m_VicinityContainer.OnLeftPanelDropReceived( w, x, y, receiver );
  130. }
  131. override void DraggingOverHeader( Widget w, int x, int y, Widget receiver )
  132. {
  133. m_VicinityContainer.DraggingOverHeader( w, x, y, receiver );
  134. }
  135. override void SetLayoutName()
  136. {
  137. #ifdef PLATFORM_CONSOLE
  138. m_LayoutName = WidgetLayoutName.LeftAreaXbox;
  139. #else
  140. switch ( InventoryMenu.GetWidthType() )
  141. {
  142. case ScreenWidthType.NARROW:
  143. {
  144. m_LayoutName = WidgetLayoutName.LeftAreaNarrow;
  145. break;
  146. }
  147. case ScreenWidthType.MEDIUM:
  148. {
  149. m_LayoutName = WidgetLayoutName.LeftAreaMedium;
  150. break;
  151. }
  152. case ScreenWidthType.WIDE:
  153. {
  154. m_LayoutName = WidgetLayoutName.LeftAreaWide;
  155. break;
  156. }
  157. }
  158. #endif
  159. }
  160. override EntityAI GetFocusedItem()
  161. {
  162. EntityAI item = GetFocusedContainer().GetFocusedItem();
  163. return item;
  164. }
  165. VicinityContainer GetVicinityContainer()
  166. {
  167. return m_VicinityContainer;
  168. }
  169. override void SetParentWidget()
  170. {
  171. m_ParentWidget = m_Parent.GetMainWidget().FindAnyWidget( "LeftPanel" );
  172. }
  173. override void OnShow()
  174. {
  175. super.OnShow();
  176. Refresh();
  177. }
  178. override void Refresh()
  179. {
  180. super.Refresh();
  181. m_MainWidget.Update();
  182. m_RootWidget.Update();
  183. #ifndef PLATFORM_CONSOLE
  184. m_SlotsScrollWidget.Update();
  185. #endif
  186. m_ScrollWidget.Update();
  187. UpdateSelectionIcons();
  188. m_ShouldChangeSize = true;
  189. }
  190. override void UpdateInterval()
  191. {
  192. m_IsProcessing = true;
  193. super.UpdateInterval();
  194. m_IsProcessing = false;
  195. float x, y;
  196. float x2, y2;
  197. m_ContentParent.GetScreenSize( x, y );
  198. m_MainWidget.GetScreenSize( x2, y2 );
  199. if ( y2 != y )
  200. m_ShouldChangeSize = true;
  201. bool changed_size;
  202. //if ( m_ShouldChangeSize )
  203. m_ContentResize.ResizeParentToChild( changed_size );
  204. if ( changed_size || m_ShouldChangeSize )
  205. {
  206. m_MainWidget.Update();
  207. m_RootWidget.Update();
  208. #ifndef PLATFORM_CONSOLE
  209. m_SlotsScrollWidget.Update();
  210. #endif
  211. m_ScrollWidget.Update();
  212. m_ShouldChangeSize = false;
  213. }
  214. CheckScrollbarVisibility();
  215. }
  216. override bool OnChildRemove( Widget w, Widget child )
  217. {
  218. if (!m_IsProcessing)
  219. Refresh();
  220. return true;
  221. }
  222. override bool OnChildAdd( Widget w, Widget child )
  223. {
  224. if (!m_IsProcessing)
  225. Refresh();
  226. return true;
  227. }
  228. #ifndef PLATFORM_CONSOLE
  229. override ScrollWidget GetSlotsScrollWidget()
  230. {
  231. return m_SlotsScrollWidget;
  232. }
  233. Widget GetSlotsHeader()
  234. {
  235. return m_SlotsHeader;
  236. }
  237. Widget GetSlotsArea()
  238. {
  239. return m_SlotsContent;
  240. }
  241. #endif
  242. }