Dayz Explorer 1.29.162510
Loading...
Searching...
No Matches
serverbrowsertab.c
Go to the documentation of this file.
9
10enum SelectedPanel
11{
15 DETAILS
16}
17
18enum ServerBrowserRightAreaView
19{
20 FILTERS,
21 DETAILS
22}
23
24class ServerBrowserTab extends ScriptedWidgetEventHandler
25{
26 protected Widget m_Root;
27 protected ScrollWidget m_ServerListScroller;
28 protected SpacerBaseWidget m_ServerList;
29
30 //protected ref array<ref GetServersResultRow> m_Entries;
31
34
35 protected ref ServerBrowserFilterContainer m_Filters;
36
37 protected ServerBrowserMenuNew m_Menu;
38 protected ServerBrowserEntry m_SelectedServer;
39
40 protected TabType m_TabType;
43
44 protected SelectedPanel m_SelectedPanel;
45 protected bool m_Initialized;
46 protected bool m_BegunLoading;
47 protected bool m_Loading;
48 protected int m_TotalServers; // UNUSED
49 protected int m_TotalLoadedServers;
50 protected int m_LastLoadedPage;
51 protected int m_TotalPages;
52 protected bool m_LoadingFinished;
53 protected int m_CurrentPageNum;
54
55 protected string m_CurrentSelectedServer;
56 protected int m_CurrentLoadedPage;
58
59 protected Widget m_ApplyFilter;
60 protected Widget m_RefreshList;
61 protected Widget m_ResetFilters;
62 protected Widget m_FiltersChanged;
63 protected Widget m_HostSort;
64 protected Widget m_TimeSort;
65 protected Widget m_PopulationSort;
66 protected Widget m_SlotsSort;
67 protected Widget m_PingSort;
68 protected Widget m_MapSort;
69 protected Widget m_FilterSearchText;
70 protected Widget m_FilterSearchTextBox;
71 protected TextWidget m_LoadingText;
72 protected ButtonWidget m_BtnPagePrev;
73 protected ButtonWidget m_BtnPageNext;
74
77 protected ref set<string> m_OnlineFavServers;
78
79 protected TextWidget m_RightAreaHeaderText;
80 protected Widget m_FilterRoot;
81 protected Widget m_FilterContent;
82 protected ButtonWidget m_BtnShowDetails;
83
84 protected Widget m_DetailsRoot;
85 protected ButtonWidget m_BtnShowFilters;
86
87 protected ref ServerBrowserDetailsContainer m_Details;
88
89 void ServerBrowserTab(Widget parent, ServerBrowserMenuNew menu, TabType type)
90 {
91 Construct(parent, menu, type);
92 m_OnlineFavServers = new set<string>();
93 GetGame().GetContentDLCService().m_OnChange.Insert(OnDLCChange);
94 }
95
96 protected void Construct(Widget parent, ServerBrowserMenuNew menu, TabType type)
97 {
101 m_LoadingText = TextWidget.Cast(m_Root.FindAnyWidget("loading_servers_info"));
102 }
103
105 {
106 if ( m_Filters )
107 m_Filters.SaveFilters();
108
109 if (m_Root)
110 delete m_Root;
111
112 if (GetGame().GetContentDLCService())
113 GetGame().GetContentDLCService().m_OnChange.Remove(OnDLCChange);
114 }
115
116 ServerBrowserMenuNew GetRootMenu()
117 {
118 return m_Menu;
119 }
120
122 {
123 return m_LoadingFinished;
124 }
125
127 {
128 return m_Loading;
129 }
130
131 void OnDLCChange(EDLCId dlcId)
132 {
133 switch (dlcId)
134 {
135 case EDLCId.DLC_FROSTLINE:
136 {
137 array<ServerBrowserEntry> serverEntries = m_EntryWidgets.GetValueArray();
138 foreach (ServerBrowserEntry entry : serverEntries)
139 {
140 entry.RefreshDLCIcon();
141 }
142 break;
143 }
144
145 default:
146 break;
147 }
148 }
149
150 void ScrollToEntry( ServerBrowserEntry entry )
151 {
152 if ( entry )
153 {
154 float x, y;
155 float x_s, y_s;
156 float x_l, y_l;
157
158 Widget root = entry.GetRoot();
159 Widget first_child = root.GetParent().GetChildren();
160 Widget last_child = first_child;
161 while ( last_child )
162 {
163 if ( last_child.GetSibling() )
164 last_child = last_child.GetSibling();
165 else
166 break;
167 }
168
169 root.GetParent().Update();
170 root.Update();
171
172 m_ServerListScroller.GetScreenPos( x, y );
173 m_ServerListScroller.GetScreenSize( x_s, y_s );
174
175 float bottom_pos = y + y_s;
176
177 root.GetScreenPos( x_l, y_l );
178 root.GetScreenSize( x_s, y_s );
179
180 if ( root == first_child )
181 {
182 m_ServerListScroller.VScrollToPos01( 0 );
183 }
184 else if ( root == last_child )
185 {
186 m_ServerListScroller.VScrollToPos01( 1 );
187 }
188 else if ( y_l + y_s >= bottom_pos )
189 {
190 m_ServerListScroller.VScrollToPos( m_ServerListScroller.GetVScrollPos() + y_s );
191 }
192 else if ( y_l <= y )
193 {
194 m_ServerListScroller.VScrollToPos( m_ServerListScroller.GetVScrollPos() - y_s );
195 }
196 }
197 }
198
209
210 void OnFilterFocusLost(Widget w)
211 {
212 m_SelectedPanel = SelectedPanel.FILTERS;
213 m_Menu.FilterFocus(false);
214 }
215
216 void OnFilterFocus(Widget w)
217 {
218 m_SelectedPanel = SelectedPanel.FILTERS;
219 m_Menu.FilterFocus(true);
220 }
221
222 void OnDetailsFocusLost(Widget w)
223 {
224 m_SelectedPanel = SelectedPanel.DETAILS;
225 m_Menu.DetailsFocus(false);
226 }
227
228 void OnDetailsFocus(Widget w)
229 {
230 m_SelectedPanel = SelectedPanel.DETAILS;
231 m_Menu.DetailsFocus(true);
232 }
233
235
236 void ServerListFocus(bool focus, bool favorite)
237 {
238 if (!m_Menu)
239 return;
240
241 m_Menu.ServerListFocus(focus, favorite);
242 }
243
244 override bool OnFocus(Widget w, int x, int y)
245 {
246 if (IsFocusable(w))
247 {
248 if (w == m_FilterSearchTextBox)
249 {
251 return false;
252 }
253 else
254 {
256 }
257
258 #ifdef PLATFORM_CONSOLE
259 string aButtonLabel;
260 if (w == m_RefreshList || w == m_ApplyFilter || w == m_ResetFilters)
261 {
262 #ifdef PLATFORM_PS4
263 aButtonLabel = "#ps4_ingame_menu_select";
264 #else
265 aButtonLabel = "#layout_xbox_ingame_menu_select";
266 #endif
267 m_Menu.UpdateAButtonLabel(aButtonLabel);
268 }
269 else if (w != m_BtnShowFilters && w != m_BtnShowDetails)
270 {
271 aButtonLabel = "#dialog_change";
272 m_Menu.UpdateAButtonLabel(aButtonLabel);
273 }
274 else
275 {
276 m_Menu.ShowAButton(false);
277 }
278 #endif
279
280 return true;
281 }
282
283 return false;
284 }
285
286 override bool OnFocusLost(Widget w, int x, int y)
287 {
288 if (IsFocusable(w))
289 {
290 if (w == m_FilterSearchTextBox)
291 {
293 return true;
294 }
295 else
296 {
297 ColorNormal(w);
298 }
299 return true;
300 }
301 return false;
302 }
303
304 override bool OnMouseEnter(Widget w, int x, int y)
305 {
306 if (IsFocusable(w))
307 {
309 if (w == m_FilterSearchText)
310 {
311 SetFocus(m_FilterSearchTextBox);
312 return true;
313 }
314 return true;
315 }
316 return false;
317 }
318
319 override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
320 {
321 if (IsFocusable(w))
322 {
323 if (enterW == m_FilterSearchText || enterW == m_FilterSearchTextBox)
324 {
325 }
326 else
327 {
328 ColorNormal(w);
329 }
330 return true;
331 }
332 return false;
333 }
334
335 bool IsFocusable(Widget w)
336 {
337 if (w)
338 {
339 return (w == m_ApplyFilter || w == m_RefreshList || w == m_ResetFilters || w == m_FilterSearchText || w == m_FilterSearchTextBox || w == m_BtnShowDetails || w == m_BtnShowFilters);
340 }
341 return false;
342 }
343
344 // Unused?!
346
347 void PressA();
348
349 void PressX()
350 {
351 if ( m_Menu.GetServersLoadingTab() == TabType.NONE )
352 RefreshList();
353 }
354
355 void PressY();
359 void Left();
360 void LeftHold();
362 void Right();
363 void RightHold();
365 void Up();
366 void Down();
368
369 void OnLoadServerModsAsync(string server_id, array<string> mods)
370 {
371 m_EntryMods.Set( server_id, mods );
372 }
373
375 {
376 Widget focused = GetFocus();
377 if ( !focused )
378 return;
379 Widget sibling = focused.GetSibling();
380 if ( !sibling )
381 return;
382
383 if ( focused.GetName() == "server_browser_list_entry_root" )
384 {
385 if ( sibling )
386 SetFocus( focused.GetSibling() );
387 else
388 SetFocus( focused.GetParent().GetSibling().GetChildren() );
389 }
390 }
391
393 {
394 Widget focused = GetFocus();
395 if ( focused && focused.GetName() == "server_browser_list_entry_root" )
396 {
397 Widget sibling = focused.GetParent().GetChildren();
398 if ( focused == sibling )
399 return;
400
401 while ( sibling )
402 {
403 if ( sibling && sibling.GetSibling() == focused )
404 {
405 SetFocus( sibling );
406 }
407 else
408 {
409 sibling = sibling.GetSibling();
410 }
411 }
412 }
413 }
414
415 // Unused?!
417
418 // Unused?!
420
421 void SetCurrentPage(int page_num)
422 {
423 m_CurrentPageNum = page_num;
424 }
425
427 {
428 return m_CurrentPageNum;
429 }
430
432 {
434 }
435
437 {
438 m_Filters.ResetFilters();
439 }
440
442
444 {
445 m_Menu.AddFavoritesToFilter( input );
446 }
447
449 {
450 m_Menu.SetServersLoadingTab( m_TabType );
451
452 m_LoadingFinished = false;
453 m_Initialized = true;
454 m_BegunLoading = false;
456 m_TotalPages = -1;
457 m_TotalServers = 0;
460
461 m_Menu.DeselectCurrentServer();
462
463 m_EntryWidgets.Clear();
464
465 #ifndef PLATFORM_WINDOWS // XBOX OR PS
466 m_CurrentFilterInput = m_Filters.GetFilterOptionsConsoles();
469 m_CurrentFilterInput.m_SortOrder = m_SortOrder;
470 #else // PLATFORM_WINDOWS
471 m_CurrentFilterInput = m_Filters.GetFilterOptionsPC();
472 #ifdef PLATFORM_CONSOLE // PC client with -XBOX flag
474 #else
475 m_CurrentFilterInput.m_Page = 0;
476 #endif
477 #endif
478
479 m_Loading = true;
480 switch ( m_TabType )
481 {
482 case TabType.OFFICIAL:
483 {
484 m_CurrentFilterInput.SetOfficialFilter( true );
486 break;
487 }
488 case TabType.COMMUNITY:
489 {
490 m_CurrentFilterInput.SetOfficialFilter( false );
492 break;
493 }
494 case TabType.LAN:
495 {
496 m_CurrentFilterInput.SetLAN();
498 break;
499 }
500 }
501 }
502
511
512 void SelectServer(ServerBrowserEntry server)
513 {
514 #ifdef PLATFORM_CONSOLE
515 ScrollToEntry(server);
516 #endif
517
518 m_SelectedServer = server;
519
520 m_CurrentSelectedServer = m_SelectedServer.GetServerData().m_Id;
521
522 if (!m_Menu)
523 return;
524
525 m_Menu.SelectServer(server);
526 }
527
528 void OnLoadServersAsyncPC(GetServersResult result_list, EBiosError error, string response);
529
530 void OnLoadServersAsyncConsole(GetServersResult result_list, EBiosError error, string response);
531
533
534 void SetSort( ESortType type, ESortOrder order )
535 {
536 m_SortOrder = order;
537 m_SortType = type;
538 }
539
540 bool IsPingInRange( int ping, string max_ping )
541 {
542 int max = max_ping.Substring( 1, max_ping.Length() - 1 ).ToInt();
543
544 if ( ping < max )
545 return true;
546 return false;
547 }
548
550 {
551 if ( !m_Menu || m_Menu.GetServersLoadingTab() != m_TabType )
552 {
553 return false;
554 }
555
556 if ( m_Filters.m_PingFilter.IsSet() )
557 {
558 if ( !IsPingInRange( result.m_Ping, m_Filters.m_PingFilter.GetStringValue() ) )
559 {
560 return false;
561 }
562 }
563
564 return true;
565 }
566
567 // Adds extra servers to the END of the list
568 protected void LoadExtraEntries(int index);
569
570 void Connect( ServerBrowserEntry server )
571 {
572 if ( !m_Menu )
573 return;
574
575 if ( m_Menu.GetServersLoadingTab() != TabType.NONE )
576 return;
577
578 m_SelectedServer = server;
579 m_Menu.Connect( server );
580 }
581
583 {
584 switch ( m_SortType )
585 {
586 case ESortType.HOST:
587 {
588 return "name";
589 }
590 case ESortType.TIME:
591 {
592 return "name";
593 }
594 case ESortType.POPULATION:
595 {
596 return "currentNumberPlayers";
597 }
598 case ESortType.SLOTS:
599 {
600 return "freeSlots";
601 }
602 case ESortType.PING:
603 {
604 return "name";
605 }
606 }
607 return "";
608 }
609
611 {
612 return -1;
613 }
614
615 void Unfavorite(string uid)
616 {
617 ServerBrowserEntry entry;
618 if (m_EntryWidgets.Find(uid, entry))
619 {
620 entry.SetFavorite(false);
621
622 // If this is an entry in favorites tab, hide it
623 if (m_TabType == TabType.FAVORITE)
624 {
625 entry.Show(false);
626 }
627 }
628 }
629
631 {
632 return m_TabType;
633 }
634
635 void ButtonEnable( Widget w )
636 {
637 w.ClearFlags( WidgetFlags.IGNOREPOINTER );
638 ColorNormal(w);
639 }
640
641 void ButtonDisable( Widget w )
642 {
643 w.SetFlags( WidgetFlags.IGNOREPOINTER );
644 ColorDisable(w);
645 }
646
647 //Coloring functions (Until WidgetStyles are useful)
648 void ColorHighlight( Widget w )
649 {
650 if ( w.IsInherited( ButtonWidget ) )
651 {
652 ButtonWidget button = ButtonWidget.Cast( w );
653 button.SetTextColor( ARGB( 255, 200, 0, 0 ) );
654 }
655
656 w.SetColor( ARGB( 255, 0, 0, 0) );
657
658 TextWidget text1 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_text" ) );
659 TextWidget text2 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_label" ) );
660 TextWidget text3 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_text_1" ) );
661 ImageWidget image = ImageWidget.Cast( w.FindAnyWidget( w.GetName() + "_image" ) );
662 Widget option = Widget.Cast( w.FindAnyWidget( w.GetName() + "_option_wrapper" ) );
663 Widget option_label = w.FindAnyWidget( "option_label" );
664
665 if ( text1 )
666 {
667 text1.SetColor( ARGB( 255, 255, 0, 0 ) );
668 }
669
670 if ( text2 )
671 {
672 text2.SetColor( ARGB( 255, 255, 0, 0 ) );
673 }
674
675 if ( text3 )
676 {
677 text3.SetColor( ARGB( 255, 255, 0, 0 ) );
678 w.SetAlpha(1);
679 }
680
681 if ( image )
682 {
683 image.SetColor( ARGB( 255, 200, 0, 0 ) );
684 }
685
686 if ( option )
687 {
688 option.SetColor( ARGB( 255, 255, 0, 0 ) );
689 }
690
691 if ( option_label )
692 {
693 option_label.SetColor( ARGB( 255, 255, 0, 0 ) );
694 }
695 }
696
697 void ColorNormal( Widget w )
698 {
699 if ( (w.GetFlags() & WidgetFlags.IGNOREPOINTER) == WidgetFlags.IGNOREPOINTER )
700 {
701 return;
702 }
703
704 if ( w.IsInherited( ButtonWidget ) )
705 {
706 ButtonWidget button = ButtonWidget.Cast( w );
707 button.SetTextColor( ARGB( 255, 255, 255, 255 ) );
708 }
709
710 TextWidget text1 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_text" ) );
711 TextWidget text2 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_text_1" ) );
712 TextWidget text3 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_label" ) );
713 ImageWidget image = ImageWidget.Cast( w.FindAnyWidget( w.GetName() + "_image" ) );
714 Widget option = w.FindAnyWidget( w.GetName() + "_option_wrapper" );
715 Widget option_label = w.FindAnyWidget( "option_label" );
716
717 if ( text1 )
718 {
719 text1.SetColor( ARGB( 255, 255, 255, 255 ) );
720 }
721
722 if ( text2 )
723 {
724 text2.SetColor( ARGB( 255, 255, 255, 255 ) );
725 }
726
727 if ( text3 )
728 {
729 text3.SetColor( ARGB( 255, 255, 255, 255 ) );
730 w.SetAlpha(0);
731 }
732
733 if ( image )
734 {
735 image.SetColor( ARGB( 255, 255, 255, 255 ) );
736 }
737
738 if ( option )
739 {
740 option.SetColor( ARGB( 150, 255, 255, 255 ) );
741 }
742
743 if ( option_label )
744 {
745 option_label.SetColor( ARGB( 255, 255, 255, 255 ) );
746 }
747 }
748
749 void ColorDisable( Widget w )
750 {
751 #ifdef PLATFORM_WINDOWS
752 SetFocus( null );
753 #endif
754
755 if ( w )
756 {
757 ButtonWidget button = ButtonWidget.Cast( w );
758 if ( button )
759 {
760 button.SetTextColor( ColorManager.COLOR_DISABLED_TEXT );
761 }
762 }
763 }
764
766 {
767 switch (m_SelectedPanel)
768 {
769 case SelectedPanel.BROWSER:
770 {
771 if (m_DetailsRoot.IsVisible())
772 {
773 SwitchToFilters(false);
774 }
775 else if (m_FilterRoot.IsVisible())
776 {
777 SwitchToDetails(false);
778 }
779 break;
780 }
781 case SelectedPanel.DETAILS:
782 {
784 break;
785 }
786 case SelectedPanel.FILTERS:
787 {
789 break;
790 }
791 }
792 }
793
794 // Here for overrides in the classes that inherit from class ServerBrowserTab
795 void SwitchToDetails(bool focus = true);
796 void SwitchToFilters(bool focus = true);
797
798 void SetServerDetails(GetServersResultRow server_info, bool online)
799 {
800 m_Details.SetDetails(server_info, online);
801 }
802
804 {
805 m_DetailsRoot.Show(true);
806 m_BtnShowDetails.Show(false);
807 m_Root.FindAnyWidget("spacer1").Show(m_TabType != TabType.FAVORITE && m_TabType != TabType.LAN);
808 m_RightAreaHeaderText.SetText("#STR_server_browser_menu_server_details");
809 }
810
812 {
813 return m_FilterRoot;
814 }
815
817 {
818 return m_DetailsRoot;
819 }
820
821 ServerBrowserEntry GetSelectedServer()
822 {
823 return m_SelectedServer;
824 }
825}
EBiosError
Possible Error codes for bios API. This is the list of errors that can be returned from bios API....
ESortOrder
ESortType
@ FAVORITE
GetServersInput the input structure of the GetServers operation.
GetServersResult the output structure of the GetServers operation.
GetServersResultRow the output structure of the GetServers operation that represents one game server.
static void LoadServers(notnull GetServersInput inputValues)
override void OnFilterFocus(Widget w)
override void OnFilterFocusLost(Widget w)
override void PressSholderRight()
override bool IsFocusable(Widget w)
override void ColorDisable(Widget w)
override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
override void SwitchToDetails(bool focus=true)
override void SetSort(ESortType type, ESortOrder order)
override void SwitchToFilters(bool focus=true)
override void ColorNormal(Widget w)
override int AddSorted(GetServersResultRow entry)
override bool PassFilter(GetServersResultRow result)
override void OnLoadServersAsyncConsole(GetServersResult result_list, EBiosError error, string response)
override void PressSholderLeft()
override void OnFilterChanged()
override bool OnMouseEnter(Widget w, int x, int y)
override void OnPressShoulder()
override void Construct(Widget parent, ServerBrowserMenuNew menu, TabType type)
override void ColorHighlight(Widget w)
override void OnLoadServersAsyncPC(GetServersResult result_list, EBiosError error, string response)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
EDLCId
Definition contentdlc.c:4
DayZGame GetGame()
Definition gameplay.c:636
@ MENU
Definition ensystem.c:343
@ NONE
body is not in simulation, nor in collision world
WidgetFlags
Definition enwidgets.c:58
Icon x
Icon y
int ARGB(int a, int r, int g, int b)
Definition proto.c:322
void LoadExtraEntries(int index)
void ServerBrowserTab(Widget parent, ServerBrowserMenuNew menu, TabType type)
ref ServerBrowserFilterContainer m_Filters
void GetPrevFilter()
ref map< ESortType, ref array< ref GetServersResultRow > > m_EntriesSorted
void OnDetailsFocusLost(Widget w)
TabType GetTabType()
TabType m_TabType
Widget m_FilterSearchText
void SelectServer(ServerBrowserEntry server)
Widget m_FiltersChanged
Widget m_SlotsSort
void GetNextPage()
TextWidget m_RightAreaHeaderText
bool m_LoadingFinished
ServerBrowserEntry m_SelectedServer
void GetNextEntry()
enum TabType BROWSER
int m_CurrentLoadedPage
void ButtonDisable(Widget w)
ref GetServersInput m_CurrentFilterInput
void SwitchRightAreaView()
void SetPanelFocus()
void ServerListFocus(bool focus, bool favorite)
ButtonWidget m_BtnPageNext
ref map< ESortType, ESortOrder > m_SortInverted
bool IsPingInRange(int ping, string max_ping)
ButtonWidget m_BtnShowFilters
ref map< string, ref ServerBrowserEntry > m_EntryWidgets
int m_TotalPages
bool GetIsServerLoadingFinished()
void ScrollToEntry(ServerBrowserEntry entry)
bool m_BegunLoading
void Connect(ServerBrowserEntry server)
enum TabType FILTERS
TabType
@ COMMUNITY
@ LAN
@ OFFICIAL
ScrollWidget m_ServerListScroller
Widget m_PingSort
int m_TotalLoadedServers
string m_CurrentSelectedServer
string GetSortOption()
Widget m_ApplyFilter
void GetPrevEntry()
ServerBrowserMenuNew m_Menu
void UpdateServerList()
ref map< string, ref array< string > > m_EntryMods
void Down()
bool m_Loading
SelectedPanel m_SelectedPanel
int m_LastLoadedPage
ESortType m_SortType
ServerBrowserEntry GetSelectedServer()
void GetNextFilter()
TextWidget m_LoadingText
void Up()
Widget m_PopulationSort
Widget m_MapSort
Widget m_HostSort
void Unfavorite(string uid)
ButtonWidget m_BtnPagePrev
void ButtonEnable(Widget w)
ESortOrder m_SortOrder
SpacerBaseWidget m_ServerList
int m_TotalServers
int m_CurrentPageNum
bool IsNotInitialized()
void OnDetailsFocus(Widget w)
void AddFavoritesToFilter(GetServersInput input)
void SetServerDetails(GetServersResultRow server_info, bool online)
Widget GetFilterRoot()
override bool OnFocusLost(Widget w, int x, int y)
int GetCurrentPage()
Widget m_FilterSearchTextBox
ref ServerBrowserDetailsContainer m_Details
void OnLoadServerModsAsync(string server_id, array< string > mods)
Widget m_FilterRoot
Widget m_ResetFilters
Widget m_DetailsRoot
Widget m_RefreshList
override bool OnFocus(Widget w, int x, int y)
Widget GetDetailsRoot()
Widget m_TimeSort
Widget m_FilterContent
void ~ServerBrowserTab()
ref set< string > m_OnlineFavServers
bool IsLoadingServers()
void SetCurrentPage(int page_num)
ButtonWidget m_BtnShowDetails
void OnDLCChange(EDLCId dlcId)
ServerBrowserMenuNew GetRootMenu()
Widget m_Root
Definition sizetochild.c:91
bool m_Initialized