serverbrowsertabconsolepages.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829
  1. class ServerBrowserTabConsolePages extends ServerBrowserTab
  2. {
  3. private bool m_IsFilterChanged;
  4. private bool m_IsFilterFocused;
  5. protected bool m_MouseKeyboardControlled
  6. private Widget m_WidgetNavFilters;
  7. private Widget m_WidgetNavServers;
  8. protected Widget m_ButtonPageLeftImg;
  9. protected Widget m_ButtonPageRightImg;
  10. protected int m_PreviousPage;
  11. protected int m_TotalServersCount;
  12. protected int m_PageStartNum;
  13. protected int m_PageEndNum;
  14. protected int m_PagesCount;
  15. protected int m_ServersEstimateCount;
  16. protected int m_TimeLastServerRefresh;
  17. protected int m_TimeLastServerRefreshHoldButton;
  18. protected Widget m_PnlPagesPanel;
  19. protected TextWidget m_PnlPagesLoadingText;
  20. protected ref array<ref ServerBrowserEntry> m_ServerListEntiers;
  21. private bool m_IsDetailsFocused;
  22. protected override void Construct(Widget parent, ServerBrowserMenuNew menu, TabType type)
  23. {
  24. m_Root = GetGame().GetWorkspace().CreateWidgets("gui/layouts/new_ui/server_browser/xbox/server_browser_tab_console_pages.layout", parent);
  25. m_ServerListScroller = ScrollWidget.Cast( m_Root.FindAnyWidget("server_list_scroller"));
  26. m_ServerList = SpacerBaseWidget.Cast(m_ServerListScroller.FindAnyWidget("server_list_content"));
  27. m_ServerListScroller.VScrollToPos01(0);
  28. m_ServerListEntiers = new array<ref ServerBrowserEntry>;
  29. m_EntryWidgets = new map<string, ref ServerBrowserEntry>;
  30. m_EntriesSorted = new map<ESortType, ref array<ref GetServersResultRow>>;
  31. m_EntriesSorted[ESortType.HOST] = new array<ref GetServersResultRow>;
  32. m_EntriesSorted[ESortType.POPULATION] = new array<ref GetServersResultRow>;
  33. m_Menu = menu;
  34. m_TabType = type;
  35. m_FilterRoot = m_Root.FindAnyWidget("filters_root");
  36. m_FilterContent = m_Root.FindAnyWidget("filters_content");
  37. m_ApplyFilter = m_Root.FindAnyWidget("apply_filter_button");
  38. m_ResetFilters = m_Root.FindAnyWidget("reset_filter_button");
  39. m_RefreshList = m_Root.FindAnyWidget("refresh_list_button");
  40. m_FiltersChanged = m_Root.FindAnyWidget("unapplied_filters_notify");
  41. m_HostSort = m_Root.FindAnyWidget("server_list_content_header_host");
  42. m_TimeSort = m_Root.FindAnyWidget("server_list_content_header_time");
  43. m_PopulationSort = m_Root.FindAnyWidget("server_list_content_header_population");
  44. m_SlotsSort = m_Root.FindAnyWidget("server_list_content_header_slots");
  45. m_PingSort = m_Root.FindAnyWidget("server_list_content_header_ping");
  46. m_MapSort = m_Root.FindAnyWidget("server_list_content_header_map");
  47. m_FilterSearchText = m_Root.FindAnyWidget("search_name_button");
  48. m_FilterSearchTextBox = m_Root.FindAnyWidget("search_name_setting_option");
  49. m_LoadingText = TextWidget.Cast( m_Root.FindAnyWidget("loading_servers_info"));
  50. m_WidgetNavFilters = m_Root.FindAnyWidget("filters_root_nav_wrapper");
  51. m_WidgetNavServers = m_Root.FindAnyWidget("server_list_root_nav_wrapper");
  52. m_BtnPagePrev = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_prev"));
  53. m_BtnPageNext = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_next"));
  54. #ifdef PLATFORM_PS4
  55. m_ButtonPageLeftImg = m_Root.FindAnyWidget("servers_navigation_page_prev_icon_ps4");
  56. m_ButtonPageRightImg = m_Root.FindAnyWidget("servers_navigation_page_next_icon_ps4");
  57. m_Root.FindAnyWidget("servers_navigation_page_prev_icon_xbox").Show(false);
  58. m_Root.FindAnyWidget("servers_navigation_page_next_icon_xbox").Show(false);
  59. #else
  60. m_ButtonPageLeftImg = m_Root.FindAnyWidget("servers_navigation_page_prev_icon_xbox");
  61. m_ButtonPageRightImg = m_Root.FindAnyWidget("servers_navigation_page_next_icon_xbox");
  62. m_Root.FindAnyWidget("servers_navigation_page_prev_icon_ps4" ).Show(false);
  63. m_Root.FindAnyWidget("servers_navigation_page_next_icon_ps4" ).Show(false);
  64. #endif
  65. m_RightAreaHeaderText = TextWidget.Cast(m_Root.FindAnyWidget("right_area_header_text"));
  66. m_FilterRoot = m_Root.FindAnyWidget("filters_root");
  67. m_BtnShowDetails = ButtonWidget.Cast(m_Root.FindAnyWidget("show_details_button"));
  68. m_DetailsRoot = m_Root.FindAnyWidget("details_root");
  69. m_BtnShowFilters = ButtonWidget.Cast(m_Root.FindAnyWidget("show_filters_button"));
  70. ShowHideConsoleWidgets();
  71. m_Filters = new ServerBrowserFilterContainer(m_Root.FindAnyWidget("filters_content"), this);
  72. m_PnlPagesPanel = m_Root.FindAnyWidget( "servers_navigation_spacer" );
  73. m_PreviousPage = 1;
  74. SetCurrentPage(1);
  75. m_PnlPagesPanel.Show(true);
  76. m_LoadingFinished = true;
  77. m_Filters.OnSortChanged(m_Filters.m_SortingFilter.GetValue());
  78. UpdatePageButtons();
  79. m_Root.SetHandler(this);
  80. m_FilterSearchTextBox.SetHandler(this);
  81. GetGame().GetMission().GetOnInputDeviceChanged().Insert(OnInputDeviceChanged);
  82. OnInputDeviceChanged(GetGame().GetInput().GetCurrentInputDevice());
  83. m_Details = new ServerBrowserDetailsContainer(m_Root.FindAnyWidget("details_content"), this);
  84. }
  85. void ShowHideConsoleWidgets()
  86. {
  87. bool is_xbox = true;
  88. #ifdef PLATFORM_PS4
  89. is_xbox = false;
  90. #endif
  91. m_Root.FindAnyWidget( "filters_root_nav_img_lb_xbox" ).Show( is_xbox );
  92. m_Root.FindAnyWidget( "filters_root_nav_img_rb_xbox" ).Show( is_xbox );
  93. m_Root.FindAnyWidget( "server_list_root_nav_img_lb_xbox" ).Show( is_xbox );
  94. m_Root.FindAnyWidget( "server_list_root_nav_img_rb_xbox" ).Show( is_xbox );
  95. m_Root.FindAnyWidget( "filters_root_nav_img_l1_ps4" ).Show( !is_xbox );
  96. m_Root.FindAnyWidget( "filters_root_nav_img_r1_ps4" ).Show( !is_xbox );
  97. m_Root.FindAnyWidget( "server_list_root_nav_img_l1_ps4" ).Show( !is_xbox );
  98. m_Root.FindAnyWidget( "server_list_root_nav_img_r1_ps4" ).Show( !is_xbox );
  99. }
  100. protected void OnInputDeviceChanged(EInputDeviceType pInputDeviceType)
  101. {
  102. switch (pInputDeviceType)
  103. {
  104. case EInputDeviceType.CONTROLLER:
  105. ShowHideConsoleWidgets();
  106. UpdatePageButtons();
  107. m_WidgetNavFilters.Show(m_IsFilterFocused || m_IsDetailsFocused);
  108. if (m_TabType != TabType.FAVORITE)
  109. {
  110. m_WidgetNavServers.Show((!m_IsFilterFocused && !m_IsDetailsFocused));
  111. }
  112. m_BtnShowFilters.Show(false);
  113. m_BtnShowDetails.Show(false);
  114. m_RefreshList.Show(false);
  115. m_Root.FindAnyWidget("spacer2").Show(false);
  116. m_Root.FindAnyWidget("spacer5").Show(false);
  117. m_Menu.GetLayoutRoot().FindAnyWidget("play_panel_root").Show(false);
  118. m_Menu.GetLayoutRoot().FindAnyWidget("MouseAndKeyboardWarning").Show(false);
  119. m_MouseKeyboardControlled = false;
  120. break;
  121. default:
  122. if (GetGame().GetInput().IsEnabledMouseAndKeyboardEvenOnServer())
  123. {
  124. bool isFavoriteTab = m_TabType == TabType.FAVORITE;
  125. m_WidgetNavFilters.Show(false);
  126. m_WidgetNavServers.Show(false);
  127. m_ButtonPageLeftImg.Show(false);
  128. m_ButtonPageRightImg.Show(false);
  129. m_RefreshList.Show(true);
  130. m_BtnShowDetails.Show(!m_DetailsRoot.IsVisible());
  131. m_BtnShowFilters.Show(!isFavoriteTab);
  132. m_Root.FindAnyWidget("spacer").Show(!isFavoriteTab);
  133. m_Root.FindAnyWidget("spacer2").Show(true);
  134. m_Root.FindAnyWidget("spacer5").Show(!isFavoriteTab);
  135. m_Menu.GetLayoutRoot().FindAnyWidget("play_panel_root").Show(true);
  136. m_Menu.GetLayoutRoot().FindAnyWidget("MouseAndKeyboardWarning").Show(true);
  137. m_MouseKeyboardControlled = true;
  138. }
  139. break;
  140. }
  141. }
  142. override void OnLoadServersAsyncConsole( GetServersResult result_list, EBiosError error, string response )
  143. {
  144. if ( error != EBiosError.OK )
  145. {
  146. m_LoadingText.SetText( string.Format("Error: %1", ErrorModuleHandler.GetClientMessage(ErrorCategory.BIOSError, error)) );
  147. m_Menu.SetServersLoadingTab( TabType.NONE );
  148. m_LoadingFinished = true;
  149. SetFocusFilters();
  150. return;
  151. }
  152. m_PagesCount = result_list.m_Pages;
  153. m_TotalServersCount = result_list.m_NumServers;
  154. LoadEntries( result_list.m_Page, result_list.m_Results );
  155. OnLoadServersAsyncFinished();
  156. UpdatePageButtons();
  157. }
  158. void OnLoadServersAsyncFinished()
  159. {
  160. string msg = "#servers_found: " + m_TotalLoadedServers;
  161. if (m_TotalLoadedServers == 0)
  162. {
  163. msg = "#server_browser_tab_unable_to_get_server";
  164. }
  165. m_LoadingText.SetText(msg);
  166. m_LoadingFinished = true;
  167. m_Menu.SetServersLoadingTab(TabType.NONE);
  168. if (m_ServerListEntiers && m_ServerListEntiers.Count() && m_SelectedPanel == SelectedPanel.BROWSER)
  169. {
  170. ServerBrowserEntry entry = m_ServerListEntiers[0];
  171. if (entry)
  172. {
  173. entry.Darken(entry.GetRoot(), 0, 0);
  174. entry.Select();
  175. SetFocus(entry.GetRoot());
  176. }
  177. }
  178. }
  179. protected void LoadEntries( int cur_page_index , GetServersResultRowArray page_entries )
  180. {
  181. int index = 0;
  182. ServerBrowserEntry entry;
  183. m_TotalLoadedServers = m_TotalServersCount;
  184. if ( !m_Menu || m_Menu.GetServersLoadingTab() != m_TabType )
  185. {
  186. return;
  187. }
  188. // only load servers if they correspond to current page
  189. if (cur_page_index != m_CurrentPageNum)
  190. {
  191. return;
  192. }
  193. if ( m_PagesCount && page_entries )
  194. {
  195. foreach ( GetServersResultRow result : page_entries )
  196. {
  197. if ( PassFilter( result ) )
  198. {
  199. string ipPort = result.GetIpPort();
  200. bool isFavorited = m_Menu.IsFavorited(ipPort);
  201. entry = GetServerEntryByIndex( index );
  202. entry.SetIsOnline(true);
  203. entry.FillInfo( result );
  204. entry.SetFavorite(isFavorited);
  205. entry.UpdateEntry();
  206. if (isFavorited && m_OnlineFavServers.Find(ipPort) == -1)
  207. {
  208. m_OnlineFavServers.Insert(ipPort);
  209. }
  210. m_EntryWidgets.Insert(ipPort, entry);
  211. m_EntriesSorted[m_SortType].Insert( result );
  212. index++;
  213. }
  214. if ( !m_Menu || m_Menu.GetServersLoadingTab() != m_TabType )
  215. {
  216. return;
  217. }
  218. }
  219. }
  220. LoadExtraEntries(index);
  221. m_ServerList.Update();
  222. }
  223. override bool PassFilter(GetServersResultRow result)
  224. {
  225. if (m_Filters.m_PreviouslyPlayedFilter.IsSet())
  226. {
  227. bool is_visited = g_Game.IsVisited(result.m_HostIp, result.m_HostPort);
  228. if (!is_visited && m_Filters.m_PreviouslyPlayedFilter.IsEnabled())
  229. return false;
  230. if (is_visited && !m_Filters.m_PreviouslyPlayedFilter.IsEnabled())
  231. return false;
  232. }
  233. return super.PassFilter(result);
  234. }
  235. protected ServerBrowserEntry GetServerEntryByIndex( int index )
  236. {
  237. ServerBrowserEntry entry;
  238. if ( index >= 0 )
  239. {
  240. if ( index < m_ServerListEntiers.Count() )
  241. {
  242. entry = m_ServerListEntiers[index];
  243. }
  244. else
  245. {
  246. entry = new ServerBrowserEntry( m_ServerList, index, this );
  247. m_ServerListEntiers.Insert(entry);
  248. }
  249. }
  250. else
  251. {
  252. return null;
  253. }
  254. entry.Show( true );
  255. return entry;
  256. }
  257. override void OnFilterChanged()
  258. {
  259. m_IsFilterChanged = true;
  260. }
  261. bool CanRefreshServerList()
  262. {
  263. return m_LoadingFinished;
  264. }
  265. override void RefreshList()
  266. {
  267. for ( int i = 0; i < m_ServerListEntiers.Count(); i++ )
  268. {
  269. m_ServerListEntiers[i].Show(false);
  270. }
  271. for ( int j = 0; j < m_EntriesSorted.Count(); j++ )
  272. {
  273. array<ref GetServersResultRow> result_rows = m_EntriesSorted.GetElement(j);
  274. if ( result_rows )
  275. {
  276. result_rows.Clear();
  277. }
  278. }
  279. m_IsFilterChanged = false;
  280. m_Filters.SaveFilters();
  281. super.RefreshList();
  282. m_ServerListScroller.VScrollToPos01( 0 );
  283. m_LoadingText.SetText( "#dayz_game_loading" );
  284. }
  285. override void ResetFilters()
  286. {
  287. super.ResetFilters();
  288. m_IsFilterChanged = false;
  289. }
  290. override void ApplyFilters()
  291. {
  292. if ( m_IsFilterChanged )
  293. {
  294. SetCurrentPage(1);
  295. }
  296. m_IsFilterChanged = false;
  297. m_CurrentFilterInput = m_Filters.GetFilterOptionsConsoles();
  298. RefreshList();
  299. }
  300. override void PressA()
  301. {
  302. }
  303. override void PressX()
  304. {
  305. RefreshServerList();
  306. }
  307. void RefreshServerList()
  308. {
  309. if (m_TabType != TabType.FAVORITE && (GetGame().GetTime() - m_TimeLastServerRefresh) < 1000)
  310. return;
  311. m_TimeLastServerRefresh = GetGame().GetTime();
  312. if (m_IsFilterChanged)
  313. {
  314. SetCurrentPage(1);
  315. }
  316. m_OnlineFavServers.Clear();
  317. RefreshList();
  318. }
  319. override void PressY()
  320. {
  321. SwitchRightAreaView();
  322. }
  323. override void PressThumbRight()
  324. {
  325. switch (m_SelectedPanel)
  326. {
  327. case SelectedPanel.BROWSER:
  328. {
  329. if (m_SelectedServer)
  330. {
  331. m_Menu.ServerListFocus(true, m_SelectedServer.ToggleFavorite());
  332. }
  333. break;
  334. }
  335. case SelectedPanel.FILTERS:
  336. {
  337. if (m_Filters)
  338. {
  339. m_Filters.ResetFilters();
  340. }
  341. break;
  342. }
  343. }
  344. }
  345. override void Left()
  346. {
  347. if (!m_IsFilterFocused && !m_IsDetailsFocused)
  348. {
  349. int curr_page = GetCurrentPage();
  350. m_PreviousPage = curr_page;
  351. if ( curr_page > 1 )
  352. {
  353. SetCurrentPage( curr_page - 1 );
  354. UpdatePageButtons();
  355. }
  356. }
  357. }
  358. override void LeftHold()
  359. {
  360. if (!m_IsFilterFocused && !m_IsDetailsFocused)
  361. {
  362. if ( (GetGame().GetTime() - m_TimeLastServerRefreshHoldButton) > 100 )
  363. {
  364. m_TimeLastServerRefreshHoldButton = GetGame().GetTime();
  365. Left();
  366. }
  367. }
  368. }
  369. override void LeftRelease()
  370. {
  371. if ( !m_IsFilterFocused && GetCurrentPage() != m_PreviousPage )
  372. {
  373. RefreshList();
  374. }
  375. }
  376. override void Right()
  377. {
  378. if (!m_IsFilterFocused && !m_IsDetailsFocused)
  379. {
  380. int curr_page = GetCurrentPage();
  381. m_PreviousPage = curr_page;
  382. if ( curr_page < m_PagesCount )
  383. {
  384. SetCurrentPage( curr_page + 1 );
  385. UpdatePageButtons();
  386. }
  387. }
  388. }
  389. override void RightHold()
  390. {
  391. if (!m_IsFilterFocused && !m_IsDetailsFocused)
  392. {
  393. if ( (GetGame().GetTime() - m_TimeLastServerRefreshHoldButton) > 100 )
  394. {
  395. m_TimeLastServerRefreshHoldButton = GetGame().GetTime();
  396. Right();
  397. }
  398. }
  399. }
  400. override void RightRelease()
  401. {
  402. if ((!m_IsFilterFocused && !m_IsDetailsFocused) && GetCurrentPage() != m_PreviousPage)
  403. {
  404. RefreshList();
  405. }
  406. }
  407. override void PressSholderLeft()
  408. {
  409. OnPressShoulder();
  410. }
  411. override void PressSholderRight()
  412. {
  413. OnPressShoulder();
  414. }
  415. override void OnPressShoulder()
  416. {
  417. if (m_TabType == TabType.FAVORITE)
  418. return;
  419. switch (m_SelectedPanel)
  420. {
  421. case SelectedPanel.BROWSER:
  422. {
  423. if (m_TabType == TabType.FAVORITE)
  424. {
  425. SwitchToDetails();
  426. }
  427. else
  428. {
  429. SwitchToFilters();
  430. }
  431. break;
  432. }
  433. case SelectedPanel.DETAILS:
  434. case SelectedPanel.FILTERS:
  435. {
  436. SetFocusServers();
  437. break;
  438. }
  439. }
  440. }
  441. override void Focus()
  442. {
  443. if (m_TabType == TabType.FAVORITE)
  444. {
  445. SetFocusServers();
  446. }
  447. else
  448. {
  449. SwitchToFilters(true);
  450. }
  451. }
  452. override void ShowServerDetails()
  453. {
  454. super.ShowServerDetails();
  455. if (m_TabType != TabType.FAVORITE)
  456. {
  457. m_FilterRoot.Show(false);
  458. m_BtnShowFilters.Show(m_MouseKeyboardControlled);
  459. }
  460. }
  461. void SetFocusFilters()
  462. {
  463. SetEnableFilters(true);
  464. SetEnableServers(false);
  465. // if loaded servers is 0, then hide Top navigation menu <Left / Right>
  466. if (!m_MouseKeyboardControlled)
  467. {
  468. m_WidgetNavFilters.Show(true);
  469. m_WidgetNavServers.Show(false);
  470. }
  471. m_Filters.Focus();
  472. m_IsFilterFocused = true;
  473. m_IsDetailsFocused = false;
  474. m_Menu.ShowAButton(true);
  475. UpdatePageButtons();
  476. m_SelectedPanel = SelectedPanel.FILTERS;
  477. }
  478. void SetFocusDetails()
  479. {
  480. SetEnableFilters(false);
  481. SetEnableServers(false);
  482. if (!m_MouseKeyboardControlled)
  483. {
  484. m_WidgetNavFilters.Show(true);
  485. m_WidgetNavServers.Show(false);
  486. }
  487. m_Details.Focus();
  488. m_IsDetailsFocused = true;
  489. m_IsFilterFocused = false;
  490. m_SelectedPanel = SelectedPanel.DETAILS;
  491. }
  492. void SetFocusServers()
  493. {
  494. SetEnableServers(true);
  495. SetEnableFilters(false);
  496. if (!m_MouseKeyboardControlled)
  497. {
  498. m_WidgetNavFilters.Show(false);
  499. if (m_TabType != TabType.FAVORITE)
  500. {
  501. m_WidgetNavServers.Show(true);
  502. }
  503. }
  504. array<ref GetServersResultRow> entries = m_EntriesSorted[m_SortType];
  505. if (entries && entries.Count() > 0)
  506. {
  507. string entryKey = entries.Get(0).GetIpPort();
  508. ServerBrowserEntry sbEntry = m_EntryWidgets.Get(entryKey);
  509. if (sbEntry)
  510. {
  511. sbEntry.Focus();
  512. }
  513. m_Menu.ShowAButton(true);
  514. m_Menu.UpdateAButtonLabel("#str_serverbrowserroot_toolbar_bg_consoletoolbar_connect_connecttext0");
  515. m_Menu.ShowThumbRButton(true);
  516. }
  517. else
  518. {
  519. SetFocus(null);
  520. m_Menu.ShowAButton(false);
  521. m_Menu.ShowThumbRButton(false);
  522. }
  523. m_IsFilterFocused = false;
  524. m_IsDetailsFocused = false;
  525. UpdatePageButtons();
  526. m_SelectedPanel = SelectedPanel.BROWSER;
  527. }
  528. void SetEnableFilters(bool enable)
  529. {
  530. Widget w_filters = m_Root.FindAnyWidget("filters_content");
  531. Widget w_content = m_Root.FindAnyWidget("server_list_scroller");
  532. w_content.Enable( !enable );
  533. if ( enable )
  534. {
  535. SetFocus( ButtonWidget.Cast(w_filters.FindWidget("sort_button")) );
  536. }
  537. }
  538. void SetEnableServers(bool enable)
  539. {
  540. Widget w_filters = m_Root.FindAnyWidget("filters_content");
  541. Widget w_content = m_Root.FindAnyWidget("server_list_scroller");
  542. w_content.Enable( enable );
  543. }
  544. void UpdatePageButtons()
  545. {
  546. TextWidget wgt_page_stat = TextWidget.Cast( m_Root.FindAnyWidget( "servers_navigation_page_status" ) );
  547. wgt_page_stat.SetText( GetCurrentPage().ToString() +" / "+ m_PagesCount.ToString() );
  548. if ( (!m_IsFilterFocused && !m_IsDetailsFocused) && (m_PagesCount > 1) && !m_MouseKeyboardControlled )
  549. {
  550. bool can_left = (GetCurrentPage() > 1);
  551. m_ButtonPageLeftImg.Show( can_left );
  552. m_BtnPagePrev.Show( can_left );
  553. bool can_right = (GetCurrentPage() < m_PagesCount);
  554. m_ButtonPageRightImg.Show( can_right );
  555. m_BtnPageNext.Show( can_right );
  556. }
  557. else
  558. {
  559. m_ButtonPageLeftImg.Show( false );
  560. m_BtnPagePrev.Show( false );
  561. m_ButtonPageRightImg.Show( false );
  562. m_BtnPageNext.Show( false );
  563. }
  564. }
  565. override bool OnClick(Widget w, int x, int y, int button)
  566. {
  567. super.OnClick(w, x, y, button);
  568. if (button == MouseState.LEFT)
  569. {
  570. if (w == m_ResetFilters)
  571. {
  572. ResetFilters();
  573. }
  574. else if (w == m_ApplyFilter)
  575. {
  576. ApplyFilters();
  577. return true;
  578. }
  579. else if (w == m_RefreshList)
  580. {
  581. if (m_Loading && !m_LoadingFinished)
  582. {
  583. PressX();
  584. }
  585. else
  586. {
  587. RefreshList();
  588. }
  589. return true;
  590. }
  591. else if (w == m_BtnPagePrev)
  592. {
  593. Left();
  594. return true;
  595. }
  596. else if (w == m_BtnPageNext)
  597. {
  598. Right();
  599. return true;
  600. }
  601. else if (w == m_BtnShowDetails)
  602. {
  603. SwitchToDetails();
  604. return true;
  605. }
  606. else if (w == m_BtnShowFilters)
  607. {
  608. SwitchToFilters();
  609. return true;
  610. }
  611. }
  612. return false;
  613. }
  614. //Coloring functions (Until WidgetStyles are useful)
  615. override void ColorHighlight( Widget w )
  616. {
  617. if ( !w )
  618. {
  619. return;
  620. }
  621. w.SetColor( ARGB( 255, 200, 0, 0) );
  622. }
  623. override void ColorNormal( Widget w )
  624. {
  625. if ( !w )
  626. {
  627. return
  628. }
  629. if ( (w.GetFlags() & WidgetFlags.IGNOREPOINTER) == WidgetFlags.IGNOREPOINTER )
  630. {
  631. return;
  632. }
  633. if ( w.IsInherited( ButtonWidget ) )
  634. {
  635. ButtonWidget button = ButtonWidget.Cast( w );
  636. button.SetTextColor( ARGB( 255, 255, 255, 255 ) );
  637. }
  638. else if ( !w.IsInherited( EditBoxWidget ) )
  639. {
  640. w.SetColor( ARGB( 0, 255, 255, 255 ) );
  641. }
  642. TextWidget text1 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_text" ) );
  643. TextWidget text2 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_text_1" ) );
  644. TextWidget text3 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_label" ) );
  645. ImageWidget image = ImageWidget.Cast( w.FindAnyWidget( w.GetName() + "_image" ) );
  646. Widget option = Widget.Cast( w.FindAnyWidget( w.GetName() + "_option_wrapper" ) );
  647. if ( text1 )
  648. {
  649. text1.SetColor( ARGB( 255, 255, 255, 255 ) );
  650. }
  651. if ( text2 )
  652. {
  653. text2.SetColor( ARGB( 255, 255, 255, 255 ) );
  654. }
  655. if ( text3 )
  656. {
  657. text3.SetColor( ARGB( 255, 255, 255, 255 ) );
  658. w.SetAlpha(0);
  659. }
  660. if ( image )
  661. {
  662. image.SetColor( ARGB( 255, 255, 255, 255 ) );
  663. }
  664. if ( option )
  665. {
  666. option.SetColor( ARGB( 150, 255, 255, 255 ) );
  667. }
  668. }
  669. override void ColorDisable( Widget w )
  670. {
  671. #ifdef PLATFORM_WINDOWS
  672. SetFocus( null );
  673. #endif
  674. ButtonWidget button = ButtonWidget.Cast( w );
  675. if ( button )
  676. {
  677. button.SetTextColor( ColorManager.COLOR_DISABLED_TEXT );
  678. }
  679. }
  680. override void SwitchToDetails(bool focus = true)
  681. {
  682. ShowServerDetails();
  683. if (focus)
  684. SetFocusDetails();
  685. m_Menu.UpdateYButtonLabel("#server_browser_tab_server #STR_server_browser_menu_server_filters");
  686. m_RightAreaHeaderText.SetText("#STR_server_browser_menu_server_details");
  687. }
  688. override void SwitchToFilters(bool focus = true)
  689. {
  690. if (m_TabType == TabType.FAVORITE)
  691. return;
  692. m_FilterRoot.Show(true);
  693. m_BtnShowDetails.Show(m_MouseKeyboardControlled);
  694. m_DetailsRoot.Show(false);
  695. if (focus)
  696. SetFocusFilters();
  697. m_Menu.UpdateYButtonLabel("#server_details_header");
  698. m_RightAreaHeaderText.SetText("#STR_server_browser_menu_server_filters");
  699. }
  700. }