serverbrowsertabconsole.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. class ServerBrowserTabConsole extends ServerBrowserTab
  2. {
  3. private bool m_IsFilterChanged;
  4. private bool m_IsFilterFocused;
  5. private bool m_IsDetailsFocused;
  6. private Widget m_WidgetNavFilters;
  7. private Widget m_WidgetNavServers;
  8. protected override void Construct( Widget parent, ServerBrowserMenuNew menu, TabType type )
  9. {
  10. m_Root = GetGame().GetWorkspace().CreateWidgets( "gui/layouts/new_ui/server_browser/xbox/server_browser_tab.layout", parent );
  11. m_ServerListScroller = ScrollWidget.Cast( m_Root.FindAnyWidget( "server_list_scroller" ) );
  12. m_ServerList = SpacerBaseWidget.Cast( m_ServerListScroller.FindAnyWidget( "server_list_content" ) );
  13. m_ServerListScroller.VScrollToPos01( 0 );
  14. m_EntryWidgets = new map<string, ref ServerBrowserEntry>;
  15. m_EntriesSorted = new map<ESortType, ref array<ref GetServersResultRow>>;
  16. m_EntriesSorted[ESortType.HOST] = new array<ref GetServersResultRow>;
  17. m_EntriesSorted[ESortType.POPULATION] = new array<ref GetServersResultRow>;
  18. m_Menu = menu;
  19. m_TabType = type;
  20. m_ApplyFilter = m_Root.FindAnyWidget( "apply_filter_button" );
  21. m_RefreshList = m_Root.FindAnyWidget( "refresh_list_button" );
  22. m_FiltersChanged = m_Root.FindAnyWidget( "unapplied_filters_notify" );
  23. m_HostSort = m_Root.FindAnyWidget( "server_list_content_header_host" );
  24. m_TimeSort = m_Root.FindAnyWidget( "server_list_content_header_time" );
  25. m_PopulationSort = m_Root.FindAnyWidget( "server_list_content_header_population" );
  26. m_SlotsSort = m_Root.FindAnyWidget( "server_list_content_header_slots" );
  27. m_PingSort = m_Root.FindAnyWidget( "server_list_content_header_ping" );
  28. m_MapSort = m_Root.FindAnyWidget( "server_list_content_header_map" );
  29. m_LoadingText = TextWidget.Cast( m_Root.FindAnyWidget( "loading_servers_info" ) );
  30. m_WidgetNavFilters = m_Root.FindAnyWidget( "filters_root_nav_wrapper" );
  31. m_WidgetNavServers = m_Root.FindAnyWidget( "server_list_root_nav_wrapper" );
  32. ShowHideConsoleWidgets();
  33. m_Filters = new ServerBrowserFilterContainer(m_Root.FindAnyWidget("filters_content"), this);
  34. SetSort(ESortType.HOST, ESortOrder.ASCENDING);
  35. m_Details = new ServerBrowserDetailsContainer(m_Root.FindAnyWidget("details_content"), this);
  36. m_Root.SetHandler(this);
  37. SetFocusServers();
  38. }
  39. void ShowHideConsoleWidgets()
  40. {
  41. #ifdef PLATFORM_PS4
  42. bool is_xbox = false;
  43. #else
  44. bool is_xbox = true;
  45. #endif
  46. m_Root.FindAnyWidget( "filters_root_nav_img_lb_xbox" ).Show( is_xbox );
  47. m_Root.FindAnyWidget( "filters_root_nav_img_rb_xbox" ).Show( is_xbox );
  48. m_Root.FindAnyWidget( "server_list_root_nav_img_lb_xbox" ).Show( is_xbox );
  49. m_Root.FindAnyWidget( "server_list_root_nav_img_rb_xbox" ).Show( is_xbox );
  50. m_Root.FindAnyWidget( "filters_root_nav_img_l1_ps4" ).Show( !is_xbox );
  51. m_Root.FindAnyWidget( "filters_root_nav_img_r1_ps4" ).Show( !is_xbox );
  52. m_Root.FindAnyWidget( "server_list_root_nav_img_l1_ps4" ).Show( !is_xbox );
  53. m_Root.FindAnyWidget( "server_list_root_nav_img_r1_ps4" ).Show( !is_xbox );
  54. }
  55. override void OnLoadServersAsyncConsole( GetServersResult result_list, EBiosError error, string response )
  56. {
  57. //Print("m_NumServers: "+ result_list.m_NumServers +" m_Pages: "+ result_list.m_Pages + " m_Page: "+ result_list.m_Page);
  58. //string smg = "m_NumServers: "+ result_list.m_NumServers +" m_Pages: "+ result_list.m_Pages + " m_Page: "+ result_list.m_Page +" response: "+ response +" error: "+ error;
  59. //m_LoadingText.SetText( smg );
  60. if ( error != EBiosError.OK || !result_list )
  61. {
  62. m_LoadingText.SetText( string.Format("Error: %1", ErrorModuleHandler.GetClientMessage(ErrorCategory.BIOSError, error)) );
  63. return;
  64. }
  65. if ( result_list.m_Page == 1 )
  66. {
  67. m_TotalPages = result_list.m_Pages;
  68. m_TotalServers = result_list.m_NumServers;
  69. if ( m_Menu.GetServersLoadingTab() != m_TabType || !result_list || ( !result_list.m_Results || result_list.m_Results.Count() == 0 ) )
  70. {
  71. m_Menu.SetServersLoadingTab( TabType.NONE );
  72. m_LoadingText.SetText("#server_browser_tab_unable_to_get_server #server_browser_tab_no_servers_with_filter");
  73. return;
  74. }
  75. }
  76. m_LastLoadedPage = result_list.m_Page;
  77. if ( m_TotalPages > 0 )
  78. {
  79. LoadEntries( result_list.m_Page, result_list.m_Results );
  80. }
  81. if ( m_TotalPages > m_LastLoadedPage )
  82. {
  83. GetNextPage();
  84. return;
  85. }
  86. if ( result_list.m_Page == result_list.m_Pages )
  87. {
  88. OnLoadServersAsyncFinished();
  89. }
  90. }
  91. void OnLoadServersAsyncFinished()
  92. {
  93. string msg = "#servers_found: "+ m_TotalLoadedServers;
  94. if ( m_TotalLoadedServers == 0 )
  95. {
  96. msg = "#server_browser_tab_unable_to_get_server";
  97. }
  98. m_LoadingText.SetText( msg );
  99. m_LoadingFinished = true;
  100. }
  101. void LoadEntries( int cur_page_index , GetServersResultRowArray page )
  102. {
  103. if ( !m_Menu || m_Menu.GetServersLoadingTab() != m_TabType )
  104. {
  105. return;
  106. }
  107. int index = cur_page_index * SERVER_BROWSER_PAGE_SIZE;
  108. GetServersResultRowArray page_entries = page;
  109. if ( page_entries )
  110. {
  111. foreach ( GetServersResultRow result : page_entries )
  112. {
  113. m_TotalLoadedServers++;
  114. if ( PassFilter( result ) )
  115. {
  116. ServerBrowserEntry entry = new ServerBrowserEntry( m_ServerList, index, this );
  117. string ipPort = result.GetIpPort();
  118. entry.FillInfo( result );
  119. entry.SetFavorite( m_Menu.IsFavorited(ipPort));
  120. entry.UpdateEntry();
  121. m_EntryWidgets.Insert(ipPort, entry);
  122. index++;
  123. m_EntriesSorted[m_SortType].Insert( result );
  124. if ( m_EntryWidgets.Count() > 0 )
  125. {
  126. SetFocusServers();
  127. }
  128. }
  129. if ( !m_Menu || m_Menu.GetServersLoadingTab() != m_TabType )
  130. return;
  131. }
  132. m_ServerList.Update();
  133. }
  134. /*
  135. if ( cur_page_index == 1 && m_EntryWidgets.Count() > 0 )
  136. {
  137. SetFocusServers();
  138. }
  139. else
  140. {
  141. m_LoadingText.SetText( "#server_browser_unable_with_filter" );
  142. SetFocusFilters();
  143. }
  144. */
  145. if ( m_EntriesSorted[m_SortType].Count() > 0 )
  146. {
  147. /*
  148. */
  149. }
  150. else
  151. {
  152. //m_LoadingText.SetText( "#server_browser_unable_with_filter" );
  153. }
  154. if ( !m_Menu )
  155. return;
  156. if ( m_LastLoadedPage == m_TotalPages )
  157. {
  158. //m_LoadingText.SetText( "#server_browser_tab_loaded" + " " + m_EntryWidgets.Count() + "/" + m_EntryWidgets.Count() + " " + "#server_browser_servers_desc" );
  159. m_Menu.SetServersLoadingTab( TabType.NONE );
  160. }
  161. }
  162. override void OnFilterFocus( Widget w )
  163. {
  164. super.OnFilterFocus( w );
  165. //ColorHighlight( w );
  166. }
  167. override void OnFilterChanged()
  168. {
  169. m_IsFilterChanged = true;
  170. }
  171. override void RefreshList()
  172. {
  173. for ( int i = 0; i < m_EntriesSorted.Count(); i++ )
  174. {
  175. m_EntriesSorted.GetElement(i).Clear();
  176. }
  177. m_Filters.SaveFilters();
  178. super.RefreshList();
  179. m_ServerListScroller.VScrollToPos01( 0 );
  180. m_LoadingText.SetText( "#dayz_game_loading" );
  181. //SetFocusFilters();
  182. //UpdateStatusBar();
  183. }
  184. override void ResetFilters()
  185. {
  186. super.ResetFilters();
  187. m_IsFilterChanged = false;
  188. }
  189. override void ApplyFilters()
  190. {
  191. m_IsFilterChanged = false;
  192. m_CurrentFilterInput = m_Filters.GetFilterOptionsConsoles();
  193. RefreshList();
  194. }
  195. override void OnFilterFocusLost( Widget w )
  196. {
  197. super.OnFilterFocusLost( w );
  198. }
  199. override void PressA()
  200. {
  201. }
  202. override void PressX()
  203. {
  204. RefreshList();
  205. }
  206. override void PressY()
  207. {
  208. /*
  209. if( m_Menu.GetServersLoadingTab() != TabType.NONE )
  210. {
  211. return;
  212. }
  213. */
  214. switch ( m_SelectedPanel )
  215. {
  216. case SelectedPanel.BROWSER:
  217. {
  218. if ( m_SelectedServer )
  219. {
  220. m_Menu.ServerListFocus( true, m_SelectedServer.ToggleFavorite() );
  221. }
  222. break;
  223. }
  224. case SelectedPanel.FILTERS:
  225. {
  226. if ( m_Filters )
  227. m_Filters.ResetFilters();
  228. break;
  229. }
  230. }
  231. }
  232. override void PressSholderLeft()
  233. {
  234. OnPressShoulder();
  235. }
  236. override void PressSholderRight()
  237. {
  238. OnPressShoulder();
  239. }
  240. override void OnPressShoulder()
  241. {
  242. switch (m_SelectedPanel)
  243. {
  244. case SelectedPanel.FILTERS:
  245. case SelectedPanel.DETAILS:
  246. {
  247. SetFocusServers();
  248. break;
  249. }
  250. case SelectedPanel.BROWSER:
  251. {
  252. SwitchToFilters();
  253. break;
  254. }
  255. }
  256. }
  257. void SetFocusFilters()
  258. {
  259. SetEnableFilters(true);
  260. SetEnableServers(false);
  261. // if loaded servers is 0, then hide Top navigation menu <Left / Right>
  262. m_WidgetNavFilters.Show((m_EntryWidgets.Count() > 0));
  263. m_WidgetNavServers.Show(false);
  264. m_Filters.Focus();
  265. m_IsFilterFocused = true;
  266. }
  267. void SetFocusDetails()
  268. {
  269. SetEnableFilters(false);
  270. SetEnableServers(false);
  271. m_Details.Focus();
  272. m_IsDetailsFocused = true;
  273. m_IsFilterFocused = false;
  274. }
  275. override void Focus()
  276. {
  277. if ( m_EntryWidgets.Contains( m_CurrentSelectedServer ) )
  278. {
  279. m_EntryWidgets.Get(m_CurrentSelectedServer).Focus();
  280. ScrollToEntry(m_EntryWidgets.Get(m_CurrentSelectedServer));
  281. }
  282. SetFocusServers();
  283. }
  284. void SetFocusServers()
  285. {
  286. SetEnableServers(true);
  287. SetEnableFilters(false);
  288. m_WidgetNavFilters.Show(false);
  289. m_WidgetNavServers.Show(true);
  290. array<ref GetServersResultRow> entries = m_EntriesSorted[m_SortType];
  291. if (entries.Count() > 0)
  292. {
  293. m_EntryWidgets.Get(entries.Get(0).GetIpPort()).Focus();
  294. m_IsFilterFocused = false;
  295. }
  296. /*else
  297. {
  298. SetFocusFilters();
  299. }*/
  300. }
  301. void SetEnableFilters(bool enable)
  302. {
  303. Widget w_filters = m_Root.FindAnyWidget("filters_content");
  304. Widget w_content = m_Root.FindAnyWidget("server_list_scroller");
  305. w_filters.Enable( enable );
  306. w_content.Enable( !enable );
  307. }
  308. void SetEnableServers(bool enable)
  309. {
  310. Widget w_filters = m_Root.FindAnyWidget("filters_content");
  311. Widget w_content = m_Root.FindAnyWidget("server_list_scroller");
  312. w_filters.Enable( !enable );
  313. w_content.Enable( enable );
  314. }
  315. //Coloring functions (Until WidgetStyles are useful)
  316. override void ColorHighlight( Widget w )
  317. {
  318. if ( !w )
  319. {
  320. return;
  321. }
  322. w.SetColor( ARGB( 255, 200, 0, 0) );
  323. }
  324. override void ColorNormal( Widget w )
  325. {
  326. if ( !w)
  327. {
  328. return
  329. }
  330. if ( (w.GetFlags() & WidgetFlags.IGNOREPOINTER) == WidgetFlags.IGNOREPOINTER )
  331. {
  332. return;
  333. }
  334. if ( w.IsInherited( ButtonWidget ) )
  335. {
  336. ButtonWidget button = ButtonWidget.Cast( w );
  337. button.SetTextColor( ARGB( 255, 255, 255, 255 ) );
  338. }
  339. TextWidget text1 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_text" ) );
  340. TextWidget text2 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_text_1" ) );
  341. TextWidget text3 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_label" ) );
  342. ImageWidget image = ImageWidget.Cast( w.FindAnyWidget( w.GetName() + "_image" ) );
  343. Widget option = Widget.Cast( w.FindAnyWidget( w.GetName() + "_option_wrapper" ) );
  344. if ( text1 )
  345. {
  346. text1.SetColor( ARGB( 255, 255, 255, 255 ) );
  347. }
  348. if ( text2 )
  349. {
  350. text2.SetColor( ARGB( 255, 255, 255, 255 ) );
  351. }
  352. if ( text3 )
  353. {
  354. text3.SetColor( ARGB( 255, 255, 255, 255 ) );
  355. w.SetAlpha(0);
  356. }
  357. if ( image )
  358. {
  359. image.SetColor( ARGB( 255, 255, 255, 255 ) );
  360. }
  361. if ( option )
  362. {
  363. option.SetColor( ARGB( 150, 255, 255, 255 ) );
  364. }
  365. }
  366. override void ColorDisable( Widget w )
  367. {
  368. #ifdef PLATFORM_WINDOWS
  369. SetFocus( null );
  370. #endif
  371. ButtonWidget button = ButtonWidget.Cast( w );
  372. if ( button )
  373. {
  374. button.SetTextColor( ColorManager.COLOR_DISABLED_TEXT );
  375. }
  376. }
  377. }