DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ServerBrowserTabPc.c
Go to the documentation of this file.
2{
3 protected const int SERVERS_VISIBLE_COUNT = 24;
4 protected const int PAGES_BUTTONS_COUNT = 10;
5
6 protected int m_TotalServersCount; //UNUSED
7 protected int m_PageIndex;
8 protected int m_PageStartNum;
9 protected int m_PageEndNum;
10 protected int m_PagesCount;
11 protected int m_ServersEstimateCount;
12
13 protected Widget m_PnlPagesPanel;
14 protected TextWidget m_PnlPagesLoadingText;
15 protected ButtonWidget m_BtnPagesFirst;
16 protected ButtonWidget m_BtnPagesLast;
17
22
25
26 protected ref TStringArray m_TempTime = new TStringArray;
27
28 protected override void Construct( Widget parent, ServerBrowserMenuNew menu, TabType type )
29 {
30 #ifdef PLATFORM_CONSOLE
31 m_Root = GetGame().GetWorkspace().CreateWidgets( "gui/layouts/new_ui/server_browser/xbox/server_browser_tab.layout", parent );
32 #else
33 #ifdef PLATFORM_WINDOWS
34 m_Root = GetGame().GetWorkspace().CreateWidgets( "gui/layouts/new_ui/server_browser/pc/server_browser_tab_pages.layout", parent );
35 #endif
36 #endif
37
38 m_ServerListScroller = ScrollWidget.Cast( m_Root.FindAnyWidget( "server_list_scroller" ) );
39 m_ServerList = SpacerBaseWidget.Cast( m_ServerListScroller.FindAnyWidget( "server_list_content" ) );
40 m_ServerListScroller.VScrollToPos01( 0 );
41
42 m_ServerListEntries = new array<ref ServerBrowserEntry>;
47
55
56 m_Menu = menu;
57 m_TabType = type;
58
59 m_ApplyFilter = m_Root.FindAnyWidget( "apply_filter_button" );
60 m_RefreshList = m_Root.FindAnyWidget( "refresh_list_button" );
61 m_FiltersChanged = m_Root.FindAnyWidget( "unapplied_filters_notify" );
62 m_HostSort = m_Root.FindAnyWidget( "server_list_content_header_host" );
63 m_TimeSort = m_Root.FindAnyWidget( "server_list_content_header_time" );
64 m_PopulationSort = m_Root.FindAnyWidget( "server_list_content_header_population" );
65 m_SlotsSort = m_Root.FindAnyWidget( "server_list_content_header_slots" );
66 m_PingSort = m_Root.FindAnyWidget( "server_list_content_header_ping" );
67
68 m_FilterSearchText = m_Root.FindAnyWidget( "search_name_setting" );
69 m_FilterSearchTextBox = m_Root.FindAnyWidget( "search_name_setting_option" );
70 m_FilterSearchIP = m_Root.FindAnyWidget( "search_ip_setting" );
71 m_FilterSearchIPBox = m_Root.FindAnyWidget( "search_ip_setting_option" );
72
73 m_FilterPanelAccTime = m_Root.FindAnyWidget( "accelerated_time_setting" );
74 m_FilterPanelPing = m_Root.FindAnyWidget( "ping_setting" );
75 //m_FilterPanelPing.SetHandler( this );
76
77 m_LoadingText = TextWidget.Cast( m_Root.FindAnyWidget( "loading_servers_info" ) );
78
80
81 if ( type == TabType.LAN)
82 {
83 DisableFilters();
84 }
85
86 m_Filters = new ServerBrowserFilterContainer( m_Root.FindAnyWidget( "filters_content" ), this );
87
88 m_Root.SetHandler( this );
89
90 SetSort(ESortType.HOST, ESortOrder.ASCENDING);
91
92 m_BtnPages = new array<ButtonWidget>();
93
94 int page_button_num = 1;
95 ButtonWidget page_button = ButtonWidget.Cast( m_Root.FindAnyWidget( "servers_navigation_page"+ page_button_num ) );
96
97 if ( PAGES_BUTTONS_COUNT < 3 || PAGES_BUTTONS_COUNT > 10 )
98 {
99 Error("ServerBrowserTabPage->PAGES_BUTTONS_COUNT must be in range 3 - 10!");
100 return;
101 }
102
103 while ( page_button )
104 {
105 page_button.Show(false);
106
107 if ( page_button_num <= PAGES_BUTTONS_COUNT )
108 {
109 m_BtnPages.Insert( page_button );
110 }
111
112 page_button_num++;
113 page_button = ButtonWidget.Cast( m_Root.FindAnyWidget( "servers_navigation_page"+ page_button_num ) );
114 }
115
116 m_ResetFilters = ButtonWidget.Cast( m_Root.FindAnyWidget( "reset_filter_button" ) ) ;
117
118 m_PnlPagesPanel = m_Root.FindAnyWidget( "servers_navigation_spacer" );
119 m_BtnPagePrev = ButtonWidget.Cast( m_Root.FindAnyWidget( "servers_navigation_prev" ) ) ;
120 m_BtnPageNext = ButtonWidget.Cast( m_Root.FindAnyWidget( "servers_navigation_next" ) ) ;
121 m_BtnPagesFirst = ButtonWidget.Cast( m_Root.FindAnyWidget( "servers_navigation_page_first" ) ) ;
122 m_BtnPagesLast = ButtonWidget.Cast( m_Root.FindAnyWidget( "servers_navigation_page_last" ) ) ;
123 m_PageIndex = 0;
124 m_PnlPagesPanel.Show( true );
125
126 UpdatePageButtons();
127 }
128
130 {
131
132 }
133
135 {
136 m_Root.FindAnyWidget( "filters_content" ).Show( false );
137 m_Root.FindAnyWidget( "spacer" ).Show( false );
138 m_Root.FindAnyWidget( "spacer2" ).Show( false );
139 m_Root.FindAnyWidget( "reset_filter_button" ).Show( false );
140 m_ApplyFilter.Show( false );
141 m_FiltersChanged.Show( false );
142 }
143
144 override void RefreshList()
145 {
146 for ( int i = 0; i < m_EntriesSorted.Count(); i++ )
147 {
148 m_EntriesSorted.GetElement(i).Clear();
149 }
150
152
153 m_LoadingFinished = false;
154 m_Loading = true;
155 m_TotalServersCount = 0;
157 m_ServersEstimateCount = 0;
158 m_PageIndex = 0;
159
160 super.RefreshList();
161
162 m_ServerListScroller.VScrollToPos01( 0 );
163 ButtonRefreshToCancel();
164 UpdateServerList();
165 UpdatePageButtons();
166 UpdateStatusBar();
167 }
168
169 override void ResetFilters()
170 {
171 m_Filters.ResetFilters();
172
174
175 if ( !m_Loading )
176 {
178 }
179 }
180
181 override void ApplyFilters()
182 {
183 m_Filters.SaveFilters();
184 //m_CurrentFilterInput = m_Filters.GetFilterOptionsPC();
185 RefreshList();
188 }
189
191 {
193
194 m_LoadingFinished = true;
195 m_Loading = false;
196
197 ButtonCancelToRefresh();
198
199 UpdateServerList();
200 UpdateStatusBar();
201 }
202
203 override void OnLoadServersAsyncPC( ref GetServersResult result_list, EBiosError error, string response )
204 {
205 if ( result_list )
206 {
207 int count = result_list.m_Results.Count();
208 if ( count > 0 )
209 {
210 for ( int i = 0; i < count; i++ )
211 {
212 GetServersResultRow result = result_list.m_Results[i];
213 m_TotalServersCount++;
214
215 result.m_SortName = result.m_Name.ToInt();
216 result.m_SortTime = GetTimeOfDayEnum( result.m_TimeOfDay );
217
218 if ( PassFilter( result ) )
219 {
220 int sorted_index = AddSorted( result );
221 if ( sorted_index < (m_PageIndex * SERVERS_VISIBLE_COUNT + SERVERS_VISIBLE_COUNT) )
222 {
223 UpdateServerList();
224 UpdatePageButtons();
225 }
226 }
227
228 if ( !m_Menu || m_Menu.GetServersLoadingTab() != m_TabType )
229 {
230 return;
231 }
232 }
233 }
234 else
235 {
236 m_Menu.SetServersLoadingTab( TabType.NONE );
237 }
238
239 }
240 else
241 {
242 m_Menu.SetServersLoadingTab( TabType.NONE );
243 }
244
245 if ( response == "thelastone" )
246 {
247 OnLoadServersAsyncPCFinished();
248 }
249 else
250 {
251 m_ServersEstimateCount = result_list.m_NumServers;
252 }
253
254 UpdateServerList();
255 UpdateStatusBar();
256 }
257
259 {
260 LoadingServersStop();
261 }
262
263 override bool OnClick( Widget w, int x, int y, int button )
264 {
265 super.OnClick( w, x, y, button );
266
267 if ( button == MouseState.LEFT )
268 {
269 if ( w == m_ResetFilters )
270 {
271 ResetFilters();
272 }
273 else if ( w == m_ApplyFilter )
274 {
275 ApplyFilters();
276 return true;
277 }
278 else if ( w == m_RefreshList )
279 {
281 {
282 LoadingServersStop();
283 }
284 else
285 {
286 RefreshList();
287 }
288
289 return true;
290 }
291 else if ( w == m_BtnPagePrev )
292 {
293 OnClickPagePrev();
294 return true;
295 }
296 else if ( w == m_BtnPageNext )
297 {
298 OnClickPageNext();
299 return true;
300 }
301 else if ( w == m_BtnPagesLast )
302 {
303 OnClickPageEnd();
304 return true;
305 }
306 else if ( w == m_BtnPagesFirst )
307 {
308 OnClickPageFirst();
309 return true;
310 }
311 else
312 {
313 bool click = OnClickPage( w );
314
315 if ( click )
316 {
317 return true;
318 }
319
320 return false;
321 }
322 }
323 return false;
324 }
325
326 override bool OnMouseEnter( Widget w, int x, int y )
327 {
328 if ( IsFocusable( w ) )
329 {
330 ColorHighlight( w );
331
332 if ( w == m_FilterSearchText )
333 {
335 return true;
336 }
337 else if ( w == m_FilterSearchIP )
338 {
339 SetFocus( m_FilterSearchIPBox );
340 return true;
341 }
342
343 return true;
344 }
345 return false;
346 }
347
348 override bool OnMouseLeave( Widget w, Widget enterW, int x, int y )
349 {
350 if ( IsFocusable( w ) )
351 {
352 ColorNormal( w );
353
354 if ( w == m_FilterSearchText || w == m_FilterSearchIP )
355 {
356 SetFocus( null );
357 }
358
359 return true;
360 }
361 return false;
362 }
363
364 override bool OnMouseButtonUp( Widget w, int x, int y, int button )
365 {
366 //Print("SG OnMouseButtonUp: "+ w.GetName());
367
368 if ( button == MouseState.LEFT )
369 {
370 if ( w == m_HostSort )
371 {
372 ToggleSort( ESortType.HOST );
373 UpdateServerList();
374 return true;
375 }
376 else if ( w == m_TimeSort )
377 {
378 ToggleSort( ESortType.TIME );
379 UpdateServerList();
380 return true;
381 }
382 else if ( w == m_PopulationSort )
383 {
384 ToggleSort( ESortType.POPULATION );
385 UpdateServerList();
386 return true;
387 }
388 else if ( w == m_SlotsSort )
389 {
390 ToggleSort( ESortType.SLOTS );
391 UpdateServerList();
392 return true;
393 }
394 else if ( w == m_PingSort )
395 {
396 ToggleSort( ESortType.PING );
397 UpdateServerList();
398 return true;
399 }
400 }
401 return false;
402 }
403
404 override void OnFilterChanged()
405 {
406 //m_FiltersChanged.Show( true );
407
409
410 if ( !m_Loading )
411 {
413 }
414 }
415
417 {
418 if ( m_PageIndex > 0 )
419 {
420 SetPageIndex( m_PageIndex - 1);
421 }
422 else
423 {
424 SetPageIndex( m_PagesCount - 1 );
425 }
426 }
427
429 {
430 if ( m_PageIndex < (m_PagesCount - 1) )
431 {
432 SetPageIndex( m_PageIndex + 1 );
433 }
434 else
435 {
436 SetPageIndex( 0 );
437 }
438 }
439
441 {
442 SetPageIndex( m_PagesCount - 1 );
443 }
444
446 {
447 SetPageIndex( 0 );
448 }
449
451 {
452 for ( int i = 0; i < m_BtnPages.Count(); ++i )
453 {
454 if ( m_BtnPages[i] == w )
455 {
456 SetPageIndex( m_PageStartNum + i - 1 );
457 return true;
458 }
459 }
460
461 return false;
462 }
463
464 void SetPageIndex(int page_index)
465 {
466 m_PageIndex = page_index;
467 UpdateServerList();
468 UpdatePageButtons();
469 }
470
472 {
473 ESortOrder order = ESortOrder.ASCENDING;
474
475 if ( m_SortType != type )
476 {
477 if ( m_SortInverted[type] == true )
478 {
479 m_EntriesSorted[type].Invert();
480 }
481
482 m_SortInverted[type] = false;
483 }
484 else
485 {
486 if ( m_SortOrder == ESortOrder.ASCENDING )
487 {
488 m_EntriesSorted[type].Invert();
489 m_SortInverted[type] = true;
490 order = ESortOrder.DESCENDING;
491 }
492 else
493 {
494 m_EntriesSorted[type].Invert();
495 m_SortInverted[type] = false;
496 }
497 }
498
499 SetSort( type, order );
500 }
501
502 override void SetSort( ESortType type, ESortOrder order )
503 {
504 super.SetSort( type, order);
505
506 #ifdef PLATFORM_WINDOWS
507 m_Root.FindAnyWidget( "host_sort" ).Show( false );
508 m_Root.FindAnyWidget( "population_sort" ).Show( false );
509 m_Root.FindAnyWidget( "slots_sort" ).Show( false );
510
511 m_Root.FindAnyWidget( "time_sort" ).Show( false );
512 m_Root.FindAnyWidget( "ping_sort" ).Show( false );
513
514 TextWidget root;
515 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_host_label" ) );
516 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
517 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_population_label" ) );
518 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
519 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_slots_label" ) );
520 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
521
522 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_ping_label" ) );
523 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
524 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_time_label" ) );
525 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
526
527 string r_name;
528 string w_name;
529
530 switch ( type )
531 {
532 case ESortType.HOST:
533 {
534 r_name = "server_list_content_header_host_label";
535 w_name = "host_sort";
536 break;
537 }
538 case ESortType.TIME:
539 {
540 r_name = "server_list_content_header_time_label";
541 w_name = "time_sort";
542 break;
543 }
544 case ESortType.POPULATION:
545 {
546 r_name = "server_list_content_header_population_label";
547 w_name = "population_sort";
548 break;
549 }
550 case ESortType.SLOTS:
551 {
552 r_name = "server_list_content_header_slots_label";
553 w_name = "slots_sort";
554 break;
555 }
556 case ESortType.PING:
557 {
558 r_name = "server_list_content_header_ping_label";
559 w_name = "ping_sort";
560 break;
561 }
562 }
563
564 root = TextWidget.Cast( m_Root.FindAnyWidget( r_name ) );
565 root.SetColor( ARGBF( 1, 1, 0, 0 ) );
566
567 m_Root.FindAnyWidget( w_name ).Show( true );
568 m_Root.FindAnyWidget( w_name + "_asc" ).Show( !m_SortOrder );
569 m_Root.FindAnyWidget( w_name + "_dsc" ).Show( m_SortOrder );
570 #endif
571 }
572
573 int GetTimeOfDayEnum( string time_of_day )
574 {
575 m_TempTime.Clear();
576
577 time_of_day.Split( ":", m_TempTime );
578
579 int minutes = 0;
580
581 if ( m_TempTime.Count() > 0 )
582 {
583 int h = m_TempTime[0].ToInt();
584
585 if ( h >= 5 )
586 {
587 h -= 5;
588 }
589 else
590 {
591 h += 24;
592 }
593
594 minutes = h * 60;
595 }
596
597 if ( m_TempTime.Count() > 1 )
598 {
599 int m = m_TempTime[0].ToInt();
600 minutes += m;
601 }
602
603 return minutes;
604 }
605
606 // Return sorted index
607 override int AddSorted( GetServersResultRow entry )
608 {
609 int index_host = SortedInsert( entry, ESortType.HOST );
610 int index_time = SortedInsert( entry, ESortType.TIME );
611 int index_popu = SortedInsert( entry, ESortType.POPULATION );
612 int index_slot = SortedInsert( entry, ESortType.SLOTS );
613 int index_ping = SortedInsert( entry, ESortType.PING );
614 int index_favo = SortedInsert( entry, ESortType.FAVORITE );
615 int index_pass = SortedInsert( entry, ESortType.PASSWORDED );
616
617 switch ( m_SortType )
618 {
619 case ESortType.HOST:
620 return index_host;
621 case ESortType.TIME:
622 return index_time;
623 case ESortType.POPULATION:
624 return index_popu;
625 case ESortType.SLOTS:
626 return index_slot;
627 case ESortType.PING:
628 return index_ping;
629 case ESortType.FAVORITE:
630 return index_favo;
631 case ESortType.PASSWORDED:
632 return index_pass;
633 }
634
635 return 0;
636 }
637
638 override void SelectServer( ServerBrowserEntry server )
639 {
640 super.SelectServer( server );
641
642 #ifdef PLATFORM_CONSOLE
643 ScrollToEntry( server );
644 #endif
645
646 m_SelectedServer = server;
647
648 if (!m_Menu)
649 return;
650
651 m_Menu.SelectServer( server );
652 }
653
654 int SortedInsert( GetServersResultRow entry, ESortType sort_type )
655 {
656 if ( m_SortInverted[sort_type] )
657 {
658 return SortedInsertDesc(entry, sort_type);
659 }
660
661 return SortedInsertAsc(entry, sort_type);
662 }
663
664 int SortedInsertAsc( GetServersResultRow entry, ESortType sort_type )
665 {
667
668 int i;
669 int index_min = 0;
670 int index_max = list.Count() - 1;
671 int target_index = Math.Floor( index_max / 2 );
672
673 if ( index_max == -1 )
674 {
675 list.Insert( entry );
676 return 0;
677 }
678
679 if ( sort_type == ESortType.HOST )
680 {
681 string entry_value_str = entry.GetValueStr(ESortType.HOST);
682
683 while ( true )
684 {
685 string target_value_str = list[target_index].GetValueStr(ESortType.HOST);
686
687 if ( entry_value_str == target_value_str || ((index_max - index_min) <= 1) )
688 {
689 for ( i = index_min; i <= index_max; i++ )
690 {
691 if ( entry_value_str <= list[i].GetValueStr(ESortType.HOST) )
692 {
693 list.InsertAt( entry, i );
694 return i;
695 }
696 }
697
698 index_max++;
699 list.InsertAt( entry, index_max );
700 return target_index;
701 }
702 else if ( entry_value_str < target_value_str )
703 {
704 index_max = target_index;
705 target_index = Math.Floor( target_index / 2 );
706 }
707 else if ( entry_value_str > target_value_str )
708 {
709 index_min = target_index;
710 target_index += Math.Floor( (index_max - index_min) / 2 );
711 }
712 }
713 }
714 else
715 {
716 int entry_value_int = entry.GetValueInt( sort_type );
717
718 while ( true )
719 {
720 int target_value_int = list[target_index].GetValueInt( sort_type );
721
722 if ( entry_value_int == target_value_int || ((index_max - index_min) <= 1) )
723 {
724 for ( i = index_min; i <= index_max; i++ )
725 {
726 if ( entry_value_int <= list[i].GetValueInt( sort_type ) )
727 {
728 list.InsertAt( entry, i );
729 return i;
730 }
731 }
732
733 index_max++;
734 list.InsertAt( entry, index_max );
735 return target_index;
736 }
737 else if ( entry_value_int < target_value_int )
738 {
739 index_max = target_index;
740 target_index = Math.Floor( target_index / 2 );
741 }
742 else if ( entry_value_int > target_value_int )
743 {
744 index_min = target_index;
745 target_index += Math.Floor( (index_max - index_min) / 2 );
746 }
747 }
748 }
749
750 return target_index;
751 }
752
753 int SortedInsertDesc( GetServersResultRow entry, ESortType sort_type )
754 {
756
757 int i;
758 int index_min = 0;
759 int index_max = list.Count() - 1;
760 int target_index = Math.Floor( index_max / 2 );
761
762 if ( index_max == -1 )
763 {
764 list.Insert( entry );
765 return 0;
766 }
767
768 if ( sort_type == ESortType.HOST )
769 {
770 string entry_value_str = entry.GetValueStr(ESortType.HOST);
771
772 while ( true )
773 {
774 string target_value_str = list[target_index].GetValueStr(ESortType.HOST);
775
776 if ( entry_value_str == target_value_str || ((index_max - index_min) <= 1) )
777 {
778 for ( i = index_min; i <= index_max; i++ )
779 {
780 if ( entry_value_str >= list[i].GetValueStr(ESortType.HOST) )
781 {
782 list.InsertAt( entry, i );
783 return i;
784 }
785 }
786
787 index_max++;
788 list.InsertAt( entry, index_max );
789 return target_index;
790 }
791 else if ( entry_value_str > target_value_str )
792 {
793 index_max = target_index;
794 target_index = Math.Floor( target_index / 2 );
795 }
796 else if ( entry_value_str < target_value_str )
797 {
798 index_min = target_index;
799 target_index += Math.Floor( (index_max - index_min) / 2 );
800 }
801 }
802 }
803 else
804 {
805 int entry_value_int = entry.GetValueInt( sort_type );
806
807 while ( true )
808 {
809 int target_value_int = list[target_index].GetValueInt( sort_type );
810
811 if ( entry_value_int == target_value_int || ((index_max - index_min) <= 1) )
812 {
813 for ( i = index_min; i <= index_max; i++ )
814 {
815 if ( entry_value_int >= list[i].GetValueInt( sort_type ) )
816 {
817 list.InsertAt( entry, i );
818 return i;
819 }
820 }
821
822 index_max++;
823 list.InsertAt( entry, index_max );
824 return target_index;
825 }
826 else if ( entry_value_int > target_value_int )
827 {
828 index_max = target_index;
829 target_index = Math.Floor( target_index / 2 );
830 }
831 else if ( entry_value_int < target_value_int )
832 {
833 index_min = target_index;
834 target_index += Math.Floor( (index_max - index_min) / 2 );
835 }
836 }
837 }
838
839 return target_index;
840 }
841
843 {
844 m_PagesCount = Math.Ceil( m_TotalLoadedServers / SERVERS_VISIBLE_COUNT );
845 if ( m_PagesCount > 1 )
846 {
847 m_PnlPagesPanel.Show( true );
848
849 int i;
850 int btn_index_center = Math.Round( PAGES_BUTTONS_COUNT / 2) - 1;
851 m_PageStartNum = 1;
852 m_PageEndNum = PAGES_BUTTONS_COUNT;
853
854 if ( m_PagesCount <= PAGES_BUTTONS_COUNT )
855 {
856 m_PageEndNum = m_PagesCount;
857
858 // Pages are less like buttons - changing selected button
859 for ( i = 1; i <= m_BtnPages.Count(); ++i )
860 {
861 bool is_page_button_enable = ( i <= m_PagesCount );
862
863 int page_index = (i - 1);
864 m_BtnPages[page_index].Show( is_page_button_enable );
865 m_BtnPages[page_index].SetText( i.ToString() );
866
867 if ( m_PageIndex == page_index )
868 {
869 m_BtnPages[page_index].SetState( true );
870 }
871 else
872 {
873 m_BtnPages[page_index].SetState( false );
874 }
875 }
876 }
877 else
878 {
879 // Pages are more like buttons
880 if ( m_PageIndex <= btn_index_center )
881 {
882 //Left side (start of pages)
883 //m_PageStartNum = 1;
884 //m_PageEndNum = PAGES_BUTTONS_COUNT;
885 }
886 else
887 {
888 m_PageStartNum = m_PageIndex - btn_index_center + 1;
889 m_PageEndNum = m_PageIndex + (PAGES_BUTTONS_COUNT - btn_index_center);
890
891 if ( m_PageEndNum > m_PagesCount )
892 {
893 // Right side (end of pages)
894 m_PageStartNum -= m_PageEndNum - m_PagesCount;
895 m_PageEndNum -= m_PageEndNum - m_PagesCount;
896 }
897 }
898
899
900 // Button Selection
901 int selected_btn_index = m_PageIndex;
902 if ( m_PageIndex > btn_index_center )
903 {
904 if ( m_PageEndNum == m_PagesCount )
905 {
906 //Right
907 selected_btn_index = PAGES_BUTTONS_COUNT - (m_PagesCount - m_PageIndex);
908 }
909 else
910 {
911 //Center
912 selected_btn_index = btn_index_center;
913 }
914 }
915
916
917 for ( i = 0; i < m_BtnPages.Count(); ++i )
918 {
919 m_BtnPages[i].SetText( (m_PageStartNum + i).ToString() );
920 m_BtnPages[i].SetState( ( i == selected_btn_index ) );
921 }
922 }
923
924 // Button GoTo Prev Page
925 if ( m_PageIndex > 0 )
926 {
927 m_BtnPagePrev.SetText( "<" );
928 m_BtnPagePrev.Enable( true );
929 }
930 else
931 {
932 m_BtnPagePrev.SetText( "" );
933 m_BtnPagePrev.Enable( false );
934 }
935
936 // Button GoTo Next Page
937 if ( m_PageIndex < (m_PagesCount - 1) )
938 {
939 m_BtnPageNext.SetText( ">" );
940 m_BtnPageNext.Enable( true );
941 }
942 else
943 {
944 m_BtnPageNext.SetText( "" );
945 m_BtnPageNext.Enable( false );
946 }
947
948 // Button GoTo First Page
949 if ( m_PageStartNum == 1 )
950 {
951 m_BtnPagesFirst.SetText( "" );
952 m_BtnPagesFirst.Enable( false );
953 }
954 else
955 {
956 m_BtnPagesFirst.SetText( "<<" );
957 m_BtnPagesFirst.Enable( true );
958 }
959
960 // Button GoTo Last Page
961 if ( m_PageEndNum == m_PagesCount )
962 {
963 m_BtnPagesLast.SetText( "" );
964 m_BtnPagesLast.Enable( false );
965 }
966 else
967 {
968 m_BtnPagesLast.SetText( ">>" );
969 m_BtnPagesLast.Enable( true );
970 }
971 }
972 else
973 {
974 m_PnlPagesPanel.Show(false);
975 }
976 }
977
979 {
980 int lastFilledIndexOnPage = 0;
982 ServerBrowserEntry entry;
983
984 m_EntryWidgets.Clear();
985
986 for ( int i = 0; i < SERVERS_VISIBLE_COUNT; ++i )
987 {
988 int serverIndex = i + (SERVERS_VISIBLE_COUNT * m_PageIndex);
989
990 if ( serverIndex < m_EntriesSorted[m_SortType].Count() )
991 {
992 GetServersResultRow server_info = m_EntriesSorted[m_SortType][serverIndex];
993
994 if ( server_info.m_Favorite )
995 {
996 m_OnlineFavServers.Insert(server_info.m_Id);
997 }
998
999 entry = GetServerEntryByIndex(i, server_info.m_Id);
1000 entry.Show( true );
1001 entry.SetIsOnline( true );
1002 entry.FillInfo( server_info );
1003 entry.SetMods( m_EntryMods.Get( server_info.m_Id ) );
1004 entry.UpdateEntry();
1005
1006 if ( GetRootMenu() && GetRootMenu().GetServersLoadingTab() != TabType.NONE )
1007 {
1008 entry.SetName("#dayz_game_loading");
1009 }
1010
1011 lastFilledIndexOnPage++;
1012 }
1013 else
1014 {
1015 entry = GetServerEntryByIndex(i, "-1");
1016
1017 if ( entry )
1018 {
1019 entry.Show( false );
1020 }
1021 }
1022 }
1023 LoadExtraEntries(lastFilledIndexOnPage);
1024
1025 m_ServerList.Update();
1026 }
1027
1029 {
1030 string serversFound = string.Format("#servers_found: %1", m_TotalLoadedServers);
1031 if ( m_LoadingFinished )
1032 {
1033 m_LoadingText.SetText( serversFound );
1034 }
1035 else
1036 {
1037 m_LoadingText.SetText( string.Format("#dayz_game_loading %1", serversFound) );
1038 }
1039 }
1040
1041 override void OnLoadServerModsAsync( string server_id, array<string> mods )
1042 {
1043 super.OnLoadServerModsAsync( server_id, mods );
1044
1045 if ( m_EntryWidgets.Contains( server_id ) )
1046 {
1047 m_EntryWidgets.Get( server_id ).SetMods( mods );
1048 }
1049 }
1050
1051 protected ServerBrowserEntry GetServerEntryByIndex( int index, string server_id )
1052 {
1053 ref ServerBrowserEntry entry;
1054
1055 if ( index >= 0 )
1056 {
1057 if ( index < m_ServerListEntries.Count() )
1058 {
1059 entry = m_ServerListEntries[index];
1060 }
1061 else
1062 {
1063 entry = new ServerBrowserEntry( null, index, this );
1064 m_ServerList.AddChild( entry.GetRoot(), false );
1065
1066 m_ServerListEntries.Insert(entry);
1067 }
1068 }
1069 else
1070 {
1071 return null;
1072 }
1073
1074 // Refresh list
1075 m_EntryWidgets.Insert( server_id, entry );
1076
1077 return entry;
1078 }
1079
1080 override bool IsFocusable( Widget w )
1081 {
1082 if ( w )
1083 {
1084 if ( super.IsFocusable( w ) )
1085 {
1086 return true;
1087 }
1088
1089 if ( w == m_ServerListScroller )
1090 {
1091 return false;
1092 }
1093
1094 if ( w == m_HostSort || w == m_TimeSort || w == m_PopulationSort || w == m_SlotsSort || w == m_PingSort || w == m_FilterSearchIP )
1095 {
1096 return true;
1097 }
1098
1099 if ( w == m_FilterPanelAccTime || m_FilterPanelPing )
1100 {
1101 return true;
1102 }
1103
1104 return false;
1105 }
1106 return false;
1107 }
1108
1110 {
1111 ButtonWidget btn = ButtonWidget.Cast( m_RefreshList );
1112 btn.SetText( "#menu_cancel" );
1113 }
1114
1116 {
1117 ButtonWidget btn = ButtonWidget.Cast( m_RefreshList );
1118 btn.SetText( "#STR_server_browser_tab_root_filters_root_filters_content_refresh_list_button0" );
1119 }
1120}
EScriptInvokerInsertFlags
Definition tools.c:130
EBiosError
Possible Error codes for bios API. This is the list of errors that can be returned from bios API....
ESortOrder
ESortType
int GetValueInt(ESortType sort_type)
string GetValueStr(ESortType sort_type)
Icon x
Icon y
protected Widget m_SlotsSort
protected Widget m_PopulationSort
protected ref ServerBrowserFilterContainer m_Filters
protected ServerBrowserMenuNew m_Menu
protected Widget m_ResetFilters
void ApplyFilters()
protected TextWidget m_LoadingText
void ButtonDisable(Widget w)
protected ref map< ESortType, ref array< ref GetServersResultRow > > m_EntriesSorted
void ScrollToEntry(ServerBrowserEntry entry)
protected ref map< string, ref ServerBrowserEntry > m_EntryWidgets
protected TabType m_TabType
TabType
bool PassFilter(GetServersResultRow result)
protected ref map< ESortType, ESortOrder > m_SortInverted
protected Widget m_ApplyFilter
protected ESortOrder m_SortOrder
protected Widget m_RefreshList
void ResetFilters()
protected Widget m_TimeSort
protected bool m_LoadingFinished
protected Widget m_HostSort
protected ESortType m_SortType
void ColorNormal(Widget w)
protected int m_TotalLoadedServers
protected ref map< string, ref array< string > > m_EntryMods
void ButtonEnable(Widget w)
protected Widget m_FilterSearchText
protected SpacerBaseWidget m_ServerList
protected Widget m_FiltersChanged
protected ServerBrowserEntry m_SelectedServer
protected ButtonWidget m_BtnPagePrev
bool IsFocusable(Widget w)
protected Widget m_FilterSearchTextBox
void ColorHighlight(Widget w)
protected ButtonWidget m_BtnPageNext
protected ScrollWidget m_ServerListScroller
protected ref set< string > m_OnlineFavServers
protected Widget m_PingSort
int AddSorted(GetServersResultRow entry)
ServerBrowserMenuNew GetRootMenu()
protected bool m_Loading
protected Widget m_Root
Definition SizeToChild.c:91
protected int m_PageIndex
proto native WorkspaceWidget GetWorkspace()
GetServersResult the output structure of the GetServers operation.
Definition EnMath.c:7
static ref ScriptInvoker m_ServersAsyncInvoker
proto bool Remove(func fn, int flags=EScriptInvokerRemoveFlags.ALL)
remove specific call from list
proto bool Insert(func fn, int flags=EScriptInvokerInsertFlags.IMMEDIATE)
insert method to list
protected Widget m_FilterPanelPing
override bool IsFocusable(Widget w)
protected ButtonWidget m_BtnPagesFirst
override void OnLoadServersAsyncPC(ref GetServersResult result_list, EBiosError error, string response)
protected ref array< ButtonWidget > m_BtnPages
protected int m_PageIndex
protected Widget m_FilterPanelAccTime
override void OnFilterChanged()
protected Widget m_FilterSearchIP
override void RefreshList()
override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
void SetPageIndex(int page_index)
int SortedInsertAsc(GetServersResultRow entry, ESortType sort_type)
override void SetSort(ESortType type, ESortOrder order)
void ToggleSort(ESortType type)
protected ServerBrowserEntry GetServerEntryByIndex(int index, string server_id)
bool OnClickPage(Widget w)
override int AddSorted(GetServersResultRow entry)
protected Widget m_FilterSearchIPBox
override void ApplyFilters()
override void OnLoadServerModsAsync(string server_id, array< string > mods)
protected ref array< ref ServerBrowserEntry > m_ServerListEntries
protected override void Construct(Widget parent, ServerBrowserMenuNew menu, TabType type)
int SortedInsertDesc(GetServersResultRow entry, ESortType sort_type)
int SortedInsert(GetServersResultRow entry, ESortType sort_type)
protected ButtonWidget m_BtnPagesLast
override bool OnMouseEnter(Widget w, int x, int y)
override void SelectServer(ServerBrowserEntry server)
int GetTimeOfDayEnum(string time_of_day)
override bool OnClick(Widget w, int x, int y, int button)
override bool OnMouseButtonUp(Widget w, int x, int y, int button)
override void ResetFilters()
protected override void LoadExtraEntries(int index)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
Definition EnDebug.c:90
array< string > TStringArray
Definition EnScript.c:685
static proto float Round(float f)
Returns mathematical round of value.
static proto float Ceil(float f)
Returns ceil of value.
static proto float Floor(float f)
Returns floor of value.
MouseState
Definition EnSystem.c:311
void Split(string sample, out array< string > output)
Splits string into array of strings separated by 'sample'.
Definition EnString.c:396
proto native void SetFocus(Widget w)
proto native external Widget CreateWidgets(string layout, Widget parentWidget=NULL, bool immedUpdate=true)
Create widgets from *.layout file.
proto native void SetSort(int sort, bool immedUpdate=true)
int ARGBF(float fa, float fr, float fg, float fb)
Converts <0.0, 1.0> ARGB into color.
Definition proto.c:332