DayZ 1.29
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ServerBrowserTabPc.c
См. документацию.
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;
15 protected ButtonWidget m_BtnPagesFirst;
16 protected ButtonWidget m_BtnPagesLast;
17
22
25
27
28 protected override void Construct(Widget parent, ServerBrowserMenuNew menu, TabType type)
29 {
30 #ifdef PLATFORM_CONSOLE
31 m_Root = g_Game.GetWorkspace().CreateWidgets("gui/layouts/new_ui/server_browser/xbox/server_browser_tab.layout", parent);
32 #else
33 #ifdef PLATFORM_WINDOWS
34 m_Root = g_Game.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
47
56
57 m_Menu = menu;
58 m_TabType = type;
59
60 m_RightAreaHeaderText = TextWidget.Cast(m_Root.FindAnyWidget("right_area_header_text"));
61 m_BtnShowFilters = ButtonWidget.Cast(m_Root.FindAnyWidget("show_filters_button"));
62
63 m_DetailsRoot = m_Root.FindAnyWidget("details_root");
64 m_BtnShowDetails = ButtonWidget.Cast(m_Root.FindAnyWidget("show_details_button"));
65
66 m_FilterRoot = m_Root.FindAnyWidget("filters_root");
67 m_FilterContent = m_Root.FindAnyWidget("filters_content");
68 m_ApplyFilter = m_Root.FindAnyWidget("apply_filter_button");
69 m_RefreshList = m_Root.FindAnyWidget("refresh_list_button");
70 m_FiltersChanged = m_Root.FindAnyWidget("unapplied_filters_notify");
71 m_HostSort = m_Root.FindAnyWidget("server_list_content_header_host");
72 m_TimeSort = m_Root.FindAnyWidget("server_list_content_header_time");
73 m_PopulationSort = m_Root.FindAnyWidget("server_list_content_header_population");
74 m_SlotsSort = m_Root.FindAnyWidget("server_list_content_header_slots");
75 m_PingSort = m_Root.FindAnyWidget("server_list_content_header_ping");
76 m_MapSort = m_Root.FindAnyWidget("server_list_content_header_map");
77
78 m_FilterSearchText = m_Root.FindAnyWidget("search_name_setting");
79 m_FilterSearchTextBox = m_Root.FindAnyWidget("search_name_setting_option");
80 m_FilterSearchIP = m_Root.FindAnyWidget("search_ip_setting");
81 m_FilterSearchIPBox = m_Root.FindAnyWidget("search_ip_setting_option");
82
83 m_FilterPanelAccTime = m_Root.FindAnyWidget("accelerated_time_setting");
84 m_FilterPanelPing = m_Root.FindAnyWidget("ping_setting");
85 //m_FilterPanelPing.SetHandler(this);
86
87 m_LoadingText = TextWidget.Cast(m_Root.FindAnyWidget("loading_servers_info"));
88
90
91 m_Filters = new ServerBrowserFilterContainer(m_Root.FindAnyWidget("filters_content"), this);
92
93 m_Root.SetHandler(this);
94
95 SetSort(ESortType.HOST, ESortOrder.ASCENDING);
96
98
99 int page_button_num = 1;
100 ButtonWidget page_button = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_page" + page_button_num));
101
102 if (PAGES_BUTTONS_COUNT < 3 || PAGES_BUTTONS_COUNT > 10)
103 {
104 Error("ServerBrowserTabPage->PAGES_BUTTONS_COUNT must be in range 3 - 10!");
105 return;
106 }
107
108 while (page_button)
109 {
110 page_button.Show(false);
111
112 if (page_button_num <= PAGES_BUTTONS_COUNT)
113 {
114 m_BtnPages.Insert(page_button);
115 }
116
117 page_button_num++;
118 page_button = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_page"+ page_button_num));
119 }
120
121 m_ResetFilters = ButtonWidget.Cast(m_Root.FindAnyWidget( "reset_filter_button"));
122
123 m_PnlPagesPanel = m_Root.FindAnyWidget("servers_navigation_spacer");
124 m_BtnPagePrev = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_prev"));
125 m_BtnPageNext = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_next"));
126 m_BtnPagesFirst = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_page_first"));
127 m_BtnPagesLast = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_page_last"));
128 m_PageIndex = 0;
129 m_PnlPagesPanel.Show(true);
130
132
133 m_Details = new ServerBrowserDetailsContainer(m_Root.FindAnyWidget("details_content"), this);
134
135 if (m_TabType == TabType.FAVORITE || m_TabType == TabType.LAN)
136 {
137 m_Root.FindAnyWidget("filters_content").Show(false);
138 m_Root.FindAnyWidget("reset_filter_button").Show(false);
139 m_ApplyFilter.Show(false);
140 m_Root.FindAnyWidget("spacer").Show(false);
141 m_Root.FindAnyWidget("spacer1").Show(false);
142 m_Root.FindAnyWidget("spacer5").Show(false);
143 m_BtnShowFilters.Show(false);
144 m_FilterRoot.Show(true);
145 }
146
147 if (m_TabType != TabType.FAVORITE && m_TabType != TabType.LAN)
148 {
150 }
151 else
152 {
154 }
155 }
156
158 {
159
160 }
161
162 override void RefreshList()
163 {
164 for ( int i = 0; i < m_EntriesSorted.Count(); i++ )
165 {
166 m_EntriesSorted.GetElement(i).Clear();
167 }
168 m_ServerListEntries.Clear();
169
171
172 m_LoadingFinished = false;
173 m_Loading = true;
177 m_PageIndex = 0;
178 m_SelectedServer = null;
179
180 super.RefreshList();
181
182 m_ServerListScroller.VScrollToPos01( 0 );
183
188 }
189
190 override void ResetFilters()
191 {
192 m_Filters.ResetFilters();
193
195
196 if (m_Loading)
197 {
199 }
200 }
201
202 override void ApplyFilters()
203 {
204 m_Filters.SaveFilters();
205 RefreshList();
208 }
209
211 {
213
214 m_LoadingFinished = true;
215 m_Loading = false;
216
218
221
223
224 if (m_TotalLoadedServers == 0)
225 {
226 switch (m_TabType)
227 {
228 case TabType.OFFICIAL:
229 case TabType.COMMUNITY:
230 {
232 break;
233 }
234 }
235 }
236
237 int totalVisibleEntries = 0;
238 foreach(string serverID, ServerBrowserEntry entry: m_EntryWidgets)
239 {
240 if (entry.GetRoot().IsVisible())
241 totalVisibleEntries++;
242 }
243
244 if (GetTabType() == TabType.FAVORITE && totalVisibleEntries == 0)
245 g_Game.GetCallQueue(CALL_CATEGORY_GUI).Call(m_Menu.SwitchToOfficalTab);
246 }
247
248 override void OnLoadServersAsyncPC(GetServersResult result_list, EBiosError error, string response)
249 {
250 if (result_list)
251 {
252 int count = result_list.m_Results.Count();
253 if (count > 0)
254 {
255 for (int i = 0; i < count; i++)
256 {
257 GetServersResultRow result = result_list.m_Results[i];
259
260 result.m_SortName = result.m_Name.ToInt();
261 result.m_SortTime = GetTimeOfDayEnum(result.m_TimeOfDay);
262
263 if (PassFilter(result))
264 {
265 int sorted_index = AddSorted(result);
267 {
270 }
271 }
272
273 if (!m_Menu || m_Menu.GetServersLoadingTab() != m_TabType)
274 {
275 return;
276 }
277 }
278 }
279 else
280 {
281 m_Menu.SetServersLoadingTab(TabType.NONE);
282 }
283 }
284 else
285 {
286 m_Menu.SetServersLoadingTab(TabType.NONE);
287 }
288
289 if (response == "thelastone")
290 {
292 }
293 else
294 {
296 }
297
300 }
301
306
307 override bool OnClick(Widget w, int x, int y, int button)
308 {
309 super.OnClick(w, x, y, button);
310
311 if (button == MouseState.LEFT)
312 {
313 if (w == m_ResetFilters)
314 {
315 ResetFilters();
316 }
317 else if (w == m_ApplyFilter)
318 {
319 ApplyFilters();
320 return true;
321 }
322 else if (w == m_RefreshList)
323 {
325 {
327 }
328 else
329 {
330 RefreshList();
331 }
332
333 return true;
334 }
335 else if (w == m_BtnPagePrev)
336 {
338 return true;
339 }
340 else if (w == m_BtnPageNext)
341 {
343 return true;
344 }
345 else if (w == m_BtnPagesLast)
346 {
348 return true;
349 }
350 else if (w == m_BtnPagesFirst)
351 {
353 return true;
354 }
355 else if (w == m_BtnShowDetails)
356 {
358 return true;
359 }
360 else if (w == m_BtnShowFilters)
361 {
363 return true;
364 }
365 else
366 {
367 bool click = OnClickPage(w);
368 if (click)
369 {
370 return true;
371 }
372
373 return false;
374 }
375 }
376 return false;
377 }
378
379 override bool OnMouseEnter(Widget w, int x, int y)
380 {
381 if (IsFocusable(w))
382 {
384
385 if (w == m_FilterSearchText)
386 {
388 }
389 else if (w == m_FilterSearchIP)
390 {
392 }
393
394 return true;
395 }
396 return false;
397 }
398
399 override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
400 {
401 if (IsFocusable(w))
402 {
403 ColorNormal(w);
404
405 if (w == m_FilterSearchText || w == m_FilterSearchIP)
406 {
407 SetFocus( null );
408 }
409
410 return true;
411 }
412 return false;
413 }
414
415 override bool OnMouseButtonUp( Widget w, int x, int y, int button )
416 {
417 if ( button == MouseState.LEFT )
418 {
419 if ( w == m_HostSort )
420 {
421 ToggleSort( ESortType.HOST );
423 return true;
424 }
425 else if ( w == m_TimeSort )
426 {
427 ToggleSort( ESortType.TIME );
429 return true;
430 }
431 else if ( w == m_PopulationSort )
432 {
433 ToggleSort( ESortType.POPULATION );
435 return true;
436 }
437 else if ( w == m_SlotsSort )
438 {
439 ToggleSort( ESortType.SLOTS );
441 return true;
442 }
443 else if ( w == m_PingSort )
444 {
445 ToggleSort( ESortType.PING );
447 return true;
448 }
449 else if ( w == m_MapSort )
450 {
451 ToggleSort( ESortType.MAP );
453 return true;
454 }
455 }
456 return false;
457 }
458
459 override void OnFilterChanged()
460 {
461 //m_FiltersChanged.Show(true);
462
464
465 if (m_Loading)
466 {
468 }
469 }
470
472 {
473 if ( m_PageIndex > 0 )
474 {
476 }
477 else
478 {
480 }
481 }
482
484 {
485 if ( m_PageIndex < (m_PagesCount - 1) )
486 {
488 }
489 else
490 {
491 SetPageIndex( 0 );
492 }
493 }
494
496 {
498 }
499
501 {
502 SetPageIndex( 0 );
503 }
504
506 {
507 for ( int i = 0; i < m_BtnPages.Count(); ++i )
508 {
509 if ( m_BtnPages[i] == w )
510 {
511 SetPageIndex( m_PageStartNum + i - 1 );
512 return true;
513 }
514 }
515
516 return false;
517 }
518
519 void SetPageIndex(int page_index)
520 {
521 m_PageIndex = page_index;
524 Focus();
525 }
526
528 {
529 ESortOrder order = ESortOrder.ASCENDING;
530
531 if ( m_SortType != type )
532 {
533 if ( m_SortInverted[type] == true )
534 {
535 m_EntriesSorted[type].Invert();
536 }
537
538 m_SortInverted[type] = false;
539 }
540 else
541 {
542 if ( m_SortOrder == ESortOrder.ASCENDING )
543 {
544 m_EntriesSorted[type].Invert();
545 m_SortInverted[type] = true;
546 order = ESortOrder.DESCENDING;
547 }
548 else
549 {
550 m_EntriesSorted[type].Invert();
551 m_SortInverted[type] = false;
552 }
553 }
554
555 SetSort( type, order );
556 }
557
558 override void SetSort( ESortType type, ESortOrder order )
559 {
560 super.SetSort( type, order);
561
562 #ifdef PLATFORM_WINDOWS
563 m_Root.FindAnyWidget( "host_sort" ).Show( false );
564 m_Root.FindAnyWidget( "population_sort" ).Show( false );
565 m_Root.FindAnyWidget( "slots_sort" ).Show( false );
566
567 m_Root.FindAnyWidget( "time_sort" ).Show( false );
568 m_Root.FindAnyWidget( "ping_sort" ).Show( false );
569 m_Root.FindAnyWidget( "map_sort" ).Show( false );
570
571 TextWidget root;
572 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_host_label" ) );
573 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
574 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_population_label" ) );
575 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
576 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_slots_label" ) );
577 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
578
579 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_ping_label" ) );
580 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
581 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_time_label" ) );
582 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
583
584 string r_name;
585 string w_name;
586
587 switch ( type )
588 {
589 case ESortType.HOST:
590 {
591 r_name = "server_list_content_header_host_label";
592 w_name = "host_sort";
593 break;
594 }
595 case ESortType.TIME:
596 {
597 r_name = "server_list_content_header_time_label";
598 w_name = "time_sort";
599 break;
600 }
601 case ESortType.POPULATION:
602 {
603 r_name = "server_list_content_header_population_label";
604 w_name = "population_sort";
605 break;
606 }
607 case ESortType.SLOTS:
608 {
609 r_name = "server_list_content_header_slots_label";
610 w_name = "slots_sort";
611 break;
612 }
613 case ESortType.PING:
614 {
615 r_name = "server_list_content_header_ping_label";
616 w_name = "ping_sort";
617 break;
618 }
619 case ESortType.MAP:
620 {
621 r_name = "server_list_content_header_map_label";
622 w_name = "map_sort";
623 break;
624 }
625 }
626
627 root = TextWidget.Cast( m_Root.FindAnyWidget( r_name ) );
628 root.SetColor( ARGBF( 1, 1, 0, 0 ) );
629
630 m_Root.FindAnyWidget( w_name ).Show( true );
631 m_Root.FindAnyWidget( w_name + "_asc" ).Show( !m_SortOrder );
632 m_Root.FindAnyWidget( w_name + "_dsc" ).Show( m_SortOrder );
633 #endif
634 }
635
636 int GetTimeOfDayEnum( string time_of_day )
637 {
638 m_TempTime.Clear();
639
640 time_of_day.Split( ":", m_TempTime );
641
642 int minutes = 0;
643
644 if ( m_TempTime.Count() > 0 )
645 {
646 int h = m_TempTime[0].ToInt();
647
648 if ( h >= 5 )
649 {
650 h -= 5;
651 }
652 else
653 {
654 h += 24;
655 }
656
657 minutes = h * 60;
658 }
659
660 if ( m_TempTime.Count() > 1 )
661 {
662 int m = m_TempTime[0].ToInt();
663 minutes += m;
664 }
665
666 return minutes;
667 }
668
669 // Return sorted index
670 override int AddSorted( GetServersResultRow entry )
671 {
672 int index_host = SortedInsert( entry, ESortType.HOST );
673 int index_time = SortedInsert( entry, ESortType.TIME );
674 int index_popu = SortedInsert( entry, ESortType.POPULATION );
675 int index_slot = SortedInsert( entry, ESortType.SLOTS );
676 int index_ping = SortedInsert( entry, ESortType.PING );
677 int index_favo = SortedInsert( entry, ESortType.FAVORITE );
678 int index_pass = SortedInsert( entry, ESortType.PASSWORDED );
679 int index_map = SortedInsert( entry, ESortType.MAP );
680
681 switch ( m_SortType )
682 {
683 case ESortType.HOST:
684 return index_host;
685 case ESortType.TIME:
686 return index_time;
687 case ESortType.POPULATION:
688 return index_popu;
689 case ESortType.SLOTS:
690 return index_slot;
691 case ESortType.PING:
692 return index_ping;
693 case ESortType.FAVORITE:
694 return index_favo;
695 case ESortType.PASSWORDED:
696 return index_pass;
697 case ESortType.MAP:
698 return index_map;
699 }
700
701 return 0;
702 }
703
705 {
706 return SortedInsertEx(entry, sort_type, m_SortInverted[sort_type]);
707 }
708
709 private int SortedInsertEx(GetServersResultRow entry, ESortType sortType, bool isDescending)
710 {
712 int indexMax = list.Count() - 1;
713 int indexMin = 0;
714 int targetIndex = Math.Floor( indexMax / 2 );
715 int comparisonMultiplier = 1;
716
717 // if order is descending, then invert comparison results
718 if (isDescending == true)
719 {
720 comparisonMultiplier = -1;
721 }
722
723 if ( indexMax == -1 )
724 {
725 list.Insert( entry );
726 return 0;
727 }
728
729 while ( true )
730 {
731 int comparisonResult = comparisonMultiplier * entry.CompareTo(list[targetIndex], sortType);
732
733 if ((indexMax - indexMin) <= 1)
734 {
735 for (int i = indexMin; i <= indexMax; i++ )
736 {
737 comparisonResult = comparisonMultiplier * entry.CompareTo(list[i], sortType);
738
739 if ( comparisonResult > 0 )
740 {
741 list.InsertAt( entry, i );
742 return i;
743 }
744 }
745
746 // adding entry AFTER indexMax
747 targetIndex = Math.Min(indexMax + 1, list.Count());
748 list.InsertAt(entry, targetIndex);
749 return targetIndex;
750 }
751
752 if (comparisonResult == 0)
753 {
754 list.InsertAt(entry, targetIndex);
755 return targetIndex;
756 }
757
758 if (comparisonResult > 0)
759 {
760 indexMax = targetIndex;
761 }
762
763 else if (comparisonResult < 0)
764 {
765 indexMin = targetIndex;
766 }
767
768 targetIndex = indexMin + Math.Floor((indexMax - indexMin) / 2);
769 }
770
771 return 0;
772 }
773
774 // DEPRECATED
776 {
778
779 int i;
780 int index_min = 0;
781 int index_max = list.Count() - 1;
782 int target_index = Math.Floor( index_max / 2 );
783
784 if ( index_max == -1 )
785 {
786 list.Insert( entry );
787 return 0;
788 }
789
790 if ( sort_type == ESortType.HOST )
791 {
792 string entry_value_str = entry.GetValueStr(ESortType.HOST);
793
794 while ( true )
795 {
796 string target_value_str = list[target_index].GetValueStr(ESortType.HOST);
797
798 if ( entry_value_str == target_value_str || ((index_max - index_min) <= 1) )
799 {
800 for ( i = index_min; i <= index_max; i++ )
801 {
802 if ( entry_value_str <= list[i].GetValueStr(ESortType.HOST) )
803 {
804 list.InsertAt( entry, i );
805 return i;
806 }
807 }
808
809 index_max++;
810 list.InsertAt( entry, index_max );
811 return target_index;
812 }
813 else if ( entry_value_str < target_value_str )
814 {
815 index_max = target_index;
816 target_index = Math.Floor( target_index / 2 );
817 }
818 else if ( entry_value_str > target_value_str )
819 {
820 index_min = target_index;
821 target_index += Math.Floor( (index_max - index_min) / 2 );
822 }
823 }
824 }
825 else
826 {
827 int entry_value_int = entry.GetValueInt( sort_type );
828
829 while ( true )
830 {
831 int target_value_int = list[target_index].GetValueInt( sort_type );
832
833 if ( entry_value_int == target_value_int || ((index_max - index_min) <= 1) )
834 {
835 for ( i = index_min; i <= index_max; i++ )
836 {
837 if ( entry_value_int <= list[i].GetValueInt( sort_type ) )
838 {
839 list.InsertAt( entry, i );
840 return i;
841 }
842 }
843
844 index_max++;
845 list.InsertAt( entry, index_max );
846 return target_index;
847 }
848 else if ( entry_value_int < target_value_int )
849 {
850 index_max = target_index;
851 target_index = Math.Floor( target_index / 2 );
852 }
853 else if ( entry_value_int > target_value_int )
854 {
855 index_min = target_index;
856 target_index += Math.Floor( (index_max - index_min) / 2 );
857 }
858 }
859 }
860
861 return target_index;
862 }
863
864 // DEPRECATED
866 {
868
869 int i;
870 int index_min = 0;
871 int index_max = list.Count() - 1;
872 int target_index = Math.Floor( index_max / 2 );
873
874 if ( index_max == -1 )
875 {
876 list.Insert( entry );
877 return 0;
878 }
879
880 if ( sort_type == ESortType.HOST )
881 {
882 string entry_value_str = entry.GetValueStr(ESortType.HOST);
883
884 while ( true )
885 {
886 string target_value_str = list[target_index].GetValueStr(ESortType.HOST);
887
888 if ( entry_value_str == target_value_str || ((index_max - index_min) <= 1) )
889 {
890 for ( i = index_min; i <= index_max; i++ )
891 {
892 if ( entry_value_str >= list[i].GetValueStr(ESortType.HOST) )
893 {
894 list.InsertAt( entry, i );
895 return i;
896 }
897 }
898
899 index_max++;
900 list.InsertAt( entry, index_max );
901 return target_index;
902 }
903 else if ( entry_value_str > target_value_str )
904 {
905 index_max = target_index;
906 target_index = Math.Floor( target_index / 2 );
907 }
908 else if ( entry_value_str < target_value_str )
909 {
910 index_min = target_index;
911 target_index += Math.Floor( (index_max - index_min) / 2 );
912 }
913 }
914 }
915 else
916 {
917 int entry_value_int = entry.GetValueInt( sort_type );
918
919 while ( true )
920 {
921 int target_value_int = list[target_index].GetValueInt( sort_type );
922
923 if ( entry_value_int == target_value_int || ((index_max - index_min) <= 1) )
924 {
925 for ( i = index_min; i <= index_max; i++ )
926 {
927 if ( entry_value_int >= list[i].GetValueInt( sort_type ) )
928 {
929 list.InsertAt( entry, i );
930 return i;
931 }
932 }
933
934 index_max++;
935 list.InsertAt( entry, index_max );
936 return target_index;
937 }
938 else if ( entry_value_int > target_value_int )
939 {
940 index_max = target_index;
941 target_index = Math.Floor( target_index / 2 );
942 }
943 else if ( entry_value_int < target_value_int )
944 {
945 index_min = target_index;
946 target_index += Math.Floor( (index_max - index_min) / 2 );
947 }
948 }
949 }
950
951 return target_index;
952 }
953
955 {
957 if ( m_PagesCount > 1 )
958 {
959 m_PnlPagesPanel.Show( true );
960
961 int i;
962 int btn_index_center = Math.Round( PAGES_BUTTONS_COUNT / 2) - 1;
963 m_PageStartNum = 1;
965
967 {
969
970 // Pages are less like buttons - changing selected button
971 for ( i = 1; i <= m_BtnPages.Count(); ++i )
972 {
973 bool is_page_button_enable = ( i <= m_PagesCount );
974
975 int page_index = (i - 1);
976 m_BtnPages[page_index].Show( is_page_button_enable );
977 m_BtnPages[page_index].SetText( i.ToString() );
978
979 if ( m_PageIndex == page_index )
980 {
981 m_BtnPages[page_index].SetState( true );
982 }
983 else
984 {
985 m_BtnPages[page_index].SetState( false );
986 }
987 }
988 }
989 else
990 {
991 // Pages are more like buttons
992 if ( m_PageIndex <= btn_index_center )
993 {
994 //Left side (start of pages)
995 //m_PageStartNum = 1;
996 //m_PageEndNum = PAGES_BUTTONS_COUNT;
997 }
998 else
999 {
1000 m_PageStartNum = m_PageIndex - btn_index_center + 1;
1001 m_PageEndNum = m_PageIndex + (PAGES_BUTTONS_COUNT - btn_index_center);
1002
1003 if ( m_PageEndNum > m_PagesCount )
1004 {
1005 // Right side (end of pages)
1008 }
1009 }
1010
1011
1012 // Button Selection
1013 int selected_btn_index = m_PageIndex;
1014 if ( m_PageIndex > btn_index_center )
1015 {
1016 if ( m_PageEndNum == m_PagesCount )
1017 {
1018 //Right
1019 selected_btn_index = PAGES_BUTTONS_COUNT - (m_PagesCount - m_PageIndex);
1020 }
1021 else
1022 {
1023 //Center
1024 selected_btn_index = btn_index_center;
1025 }
1026 }
1027
1028
1029 for ( i = 0; i < m_BtnPages.Count(); ++i )
1030 {
1031 m_BtnPages[i].SetText( (m_PageStartNum + i).ToString() );
1032 m_BtnPages[i].SetState( ( i == selected_btn_index ) );
1033 }
1034 }
1035
1036 // Button GoTo Prev Page
1037 if ( m_PageIndex > 0 )
1038 {
1039 m_BtnPagePrev.SetText( "<" );
1040 m_BtnPagePrev.Enable( true );
1041 }
1042 else
1043 {
1044 m_BtnPagePrev.SetText( "" );
1045 m_BtnPagePrev.Enable( false );
1046 }
1047
1048 // Button GoTo Next Page
1049 if ( m_PageIndex < (m_PagesCount - 1) )
1050 {
1051 m_BtnPageNext.SetText( ">" );
1052 m_BtnPageNext.Enable( true );
1053 }
1054 else
1055 {
1056 m_BtnPageNext.SetText( "" );
1057 m_BtnPageNext.Enable( false );
1058 }
1059
1060 // Button GoTo First Page
1061 if ( m_PageStartNum == 1 )
1062 {
1063 m_BtnPagesFirst.SetText( "" );
1064 m_BtnPagesFirst.Enable( false );
1065 }
1066 else
1067 {
1068 m_BtnPagesFirst.SetText( "<<" );
1069 m_BtnPagesFirst.Enable( true );
1070 }
1071
1072 // Button GoTo Last Page
1073 if ( m_PageEndNum == m_PagesCount )
1074 {
1075 m_BtnPagesLast.SetText( "" );
1076 m_BtnPagesLast.Enable( false );
1077 }
1078 else
1079 {
1080 m_BtnPagesLast.SetText( ">>" );
1081 m_BtnPagesLast.Enable( true );
1082 }
1083 }
1084 else
1085 {
1086 m_PnlPagesPanel.Show(false);
1087 }
1088 }
1089
1090 override void UpdateServerList()
1091 {
1092 int lastFilledIndexOnPage = 0;
1094
1095 ServerBrowserEntry entry;
1096
1097 m_EntryWidgets.Clear();
1098
1099 for (int i = 0; i < SERVERS_VISIBLE_COUNT; ++i)
1100 {
1101 int serverIndex = i + (SERVERS_VISIBLE_COUNT * m_PageIndex);
1102
1103 if (serverIndex < m_EntriesSorted[m_SortType].Count())
1104 {
1105 GetServersResultRow server_info = m_EntriesSorted[m_SortType][serverIndex];
1106
1107 if (server_info.m_Favorite)
1108 {
1109 m_OnlineFavServers.Insert(server_info.GetIpPort());
1110 }
1111
1112 server_info.m_IsSelected = (server_info.GetIpPort() == m_CurrentSelectedServer);
1113
1114 entry = GetServerEntryByIndex(i, server_info.GetIpPort());
1115 entry.Show(true);
1116 entry.SetIsOnline(true);
1117 entry.FillInfo(server_info);
1118 entry.SetMods(m_EntryMods.Get(server_info.m_Id));
1119 entry.UpdateEntry();
1120
1121 lastFilledIndexOnPage++;
1122 }
1123 else
1124 {
1125 entry = GetServerEntryByIndex(i, "-1");
1126
1127 if (entry)
1128 {
1129 entry.Show(false);
1130 }
1131 }
1132 }
1133
1134 LoadExtraEntries(lastFilledIndexOnPage);
1135 m_ServerList.Update();
1136 }
1137
1139 {
1140 string serversFound = string.Format("#servers_found: %1", m_TotalLoadedServers);
1141 if ( m_LoadingFinished )
1142 {
1143 m_LoadingText.SetText( serversFound );
1144 }
1145 else
1146 {
1147 m_LoadingText.SetText( string.Format("#dayz_game_loading %1", serversFound) );
1148 }
1149 }
1150
1151 override void OnLoadServerModsAsync( string server_id, array<string> mods )
1152 {
1153 super.OnLoadServerModsAsync( server_id, mods );
1154
1155 if ( m_EntryWidgets.Contains( server_id ) )
1156 {
1157 m_EntryWidgets.Get( server_id ).SetMods( mods );
1158 }
1159 }
1160
1161 protected ServerBrowserEntry GetServerEntryByIndex( int index, string server_id )
1162 {
1163 ref ServerBrowserEntry entry;
1164
1165 if ( index >= 0 )
1166 {
1167 if ( index < m_ServerListEntries.Count() )
1168 {
1169 entry = m_ServerListEntries[index];
1170 }
1171 else
1172 {
1173 entry = new ServerBrowserEntry( null, index, this );
1174 m_ServerList.AddChild( entry.GetRoot(), false );
1175
1176 m_ServerListEntries.Insert(entry);
1177 }
1178 }
1179 else
1180 {
1181 return null;
1182 }
1183
1184 // Refresh list
1185 m_EntryWidgets.Insert( server_id, entry );
1186
1187 return entry;
1188 }
1189
1190 override bool IsFocusable( Widget w )
1191 {
1192 if ( w )
1193 {
1194 if ( super.IsFocusable( w ) )
1195 {
1196 return true;
1197 }
1198
1199 if ( w == m_ServerListScroller )
1200 {
1201 return false;
1202 }
1203
1204 if ( w == m_HostSort || w == m_TimeSort || w == m_PopulationSort || w == m_SlotsSort || w == m_PingSort || w == m_FilterSearchIP || w == m_MapSort )
1205 {
1206 return true;
1207 }
1208
1210 {
1211 return true;
1212 }
1213
1214 return false;
1215 }
1216 return false;
1217 }
1218
1220 {
1221 ButtonWidget btn = ButtonWidget.Cast( m_RefreshList );
1222 btn.SetText( "#menu_cancel" );
1223 }
1224
1226 {
1227 ButtonWidget btn = ButtonWidget.Cast( m_RefreshList );
1228 btn.SetText( "#STR_server_browser_tab_root_filters_root_filters_content_refresh_list_button0" );
1229 }
1230
1232 {
1234 }
1235
1237 {
1239 }
1240
1241 override void SwitchToDetails(bool focus = true)
1242 {
1244 }
1245
1246 override void SwitchToFilters(bool focus = true)
1247 {
1248 m_FilterRoot.Show(true);
1249 m_RightAreaHeaderText.SetText("#STR_server_browser_menu_server_filters");
1250 m_DetailsRoot.Show(false);
1251 m_BtnShowDetails.Show(true);
1252 }
1253
1254 override void ShowServerDetails()
1255 {
1256 super.ShowServerDetails();
1257
1258 if (m_TabType != TabType.FAVORITE && m_TabType != TabType.LAN)
1259 {
1260 m_BtnShowFilters.Show(true);
1261 m_FilterRoot.Show(false);
1262 }
1263 }
1264}
EScriptInvokerInsertFlags
Определения 2_GameLib/DayZ/tools.c:130
EBiosError
Possible Error codes for bios API. This is the list of errors that can be returned from bios API....
Определения BIOSErrorModule.c:7
ESortOrder
Определения BiosLobbyService.c:46
ESortType
Определения BiosLobbyService.c:33
DayZGame g_Game
Определения DayZGame.c:3942
proto string ToString()
Icon x
Icon y
@ Count
Определения RandomGeneratorSyncManager.c:8
ref ServerBrowserFilterContainer m_Filters
Определения ServerBrowserTab.c:35
ref map< ESortType, ref array< ref GetServersResultRow > > m_EntriesSorted
Определения ServerBrowserTab.c:75
TabType GetTabType()
Определения ServerBrowserTab.c:630
TabType m_TabType
Определения ServerBrowserTab.c:40
Widget m_FilterSearchText
Определения ServerBrowserTab.c:69
Widget m_FiltersChanged
Определения ServerBrowserTab.c:62
void ApplyFilters()
Widget m_SlotsSort
Определения ServerBrowserTab.c:66
TextWidget m_RightAreaHeaderText
Определения ServerBrowserTab.c:79
bool m_LoadingFinished
Определения ServerBrowserTab.c:52
ServerBrowserEntry m_SelectedServer
Определения ServerBrowserTab.c:38
void ButtonDisable(Widget w)
Определения ServerBrowserTab.c:641
ButtonWidget m_BtnPageNext
Определения ServerBrowserTab.c:73
ref map< ESortType, ESortOrder > m_SortInverted
Определения ServerBrowserTab.c:76
ButtonWidget m_BtnShowFilters
Определения ServerBrowserTab.c:85
ref map< string, ref ServerBrowserEntry > m_EntryWidgets
Определения ServerBrowserTab.c:32
void SwitchToDetails(bool focus=true)
TabType
Определения ServerBrowserTab.c:2
ScrollWidget m_ServerListScroller
Определения ServerBrowserTab.c:27
bool PassFilter(GetServersResultRow result)
Определения ServerBrowserTab.c:549
Widget m_PingSort
Определения ServerBrowserTab.c:67
int m_TotalLoadedServers
Определения ServerBrowserTab.c:49
string m_CurrentSelectedServer
Определения ServerBrowserTab.c:55
Widget m_ApplyFilter
Определения ServerBrowserTab.c:59
ServerBrowserMenuNew m_Menu
Определения ServerBrowserTab.c:37
void ResetFilters()
Определения ServerBrowserTab.c:436
void UpdateServerList()
void SwitchToFilters(bool focus=true)
ref map< string, ref array< string > > m_EntryMods
Определения ServerBrowserTab.c:33
void Focus()
Определения ServerBrowserTab.c:199
bool m_Loading
Определения ServerBrowserTab.c:47
ESortType m_SortType
Определения ServerBrowserTab.c:41
TextWidget m_LoadingText
Определения ServerBrowserTab.c:71
Widget m_PopulationSort
Определения ServerBrowserTab.c:65
Widget m_MapSort
Определения ServerBrowserTab.c:68
Widget m_HostSort
Определения ServerBrowserTab.c:63
ButtonWidget m_BtnPagePrev
Определения ServerBrowserTab.c:72
void ButtonEnable(Widget w)
Определения ServerBrowserTab.c:635
ESortOrder m_SortOrder
Определения ServerBrowserTab.c:42
SpacerBaseWidget m_ServerList
Определения ServerBrowserTab.c:28
void ShowServerDetails()
Определения ServerBrowserTab.c:803
Widget m_FilterSearchTextBox
Определения ServerBrowserTab.c:70
bool IsFocusable(Widget w)
Определения ServerBrowserTab.c:335
ref ServerBrowserDetailsContainer m_Details
Определения ServerBrowserTab.c:87
Widget m_FilterRoot
Определения ServerBrowserTab.c:80
Widget m_ResetFilters
Определения ServerBrowserTab.c:61
Widget m_DetailsRoot
Определения ServerBrowserTab.c:84
Widget m_RefreshList
Определения ServerBrowserTab.c:60
Widget m_TimeSort
Определения ServerBrowserTab.c:64
Widget m_FilterContent
Определения ServerBrowserTab.c:81
ref set< string > m_OnlineFavServers
Определения ServerBrowserTab.c:77
ButtonWidget m_BtnShowDetails
Определения ServerBrowserTab.c:82
int AddSorted(GetServersResultRow entry)
Определения ServerBrowserTab.c:610
Widget m_Root
Определения SizeToChild.c:91
int m_NumServers
Определения BiosLobbyService.c:375
ref GetServersResultRowArray m_Results
Определения BiosLobbyService.c:373
GetServersResult the output structure of the GetServers operation.
Определения BiosLobbyService.c:370
string GetValueStr(ESortType sort_type)
Определения BiosLobbyService.c:247
string GetIpPort()
Определения BiosLobbyService.c:221
string m_TimeOfDay
Определения BiosLobbyService.c:209
int m_SortTime
Определения BiosLobbyService.c:200
string m_Name
Определения BiosLobbyService.c:173
string m_Id
Определения BiosLobbyService.c:171
int CompareTo(GetServersResultRow other, ESortType sortType)
Определения BiosLobbyService.c:298
bool m_Favorite
Определения BiosLobbyService.c:219
int m_SortName
Определения BiosLobbyService.c:199
int GetValueInt(ESortType sort_type)
Определения BiosLobbyService.c:267
bool m_IsSelected
Определения BiosLobbyService.c:201
GetServersResultRow the output structure of the GetServers operation that represents one game server.
Определения BiosLobbyService.c:170
Определения EnMath.c:7
static ref ScriptInvoker m_ServersAsyncInvoker
Определения OnlineServices.c:5
Определения OnlineServices.c:2
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
ref TStringArray m_TempTime
Определения ServerBrowserTabPc.c:26
int GetTimeOfDayEnum(string time_of_day)
Определения ServerBrowserTabPc.c:636
void OnClickPageFirst()
Определения ServerBrowserTabPc.c:500
void UpdateStatusBar()
Определения ServerBrowserTabPc.c:1138
void OnClickFilters()
Определения ServerBrowserTabPc.c:1236
override bool IsFocusable(Widget w)
Определения ServerBrowserTabPc.c:1190
override void ShowServerDetails()
Определения ServerBrowserTabPc.c:1254
Widget m_PnlPagesPanel
Определения ServerBrowserTabConsolePages.c:22
override void ApplyFilters()
Определения ServerBrowserTabPc.c:202
override bool OnClick(Widget w, int x, int y, int button)
Определения ServerBrowserTabPc.c:307
void ToggleSort(ESortType type)
Определения ServerBrowserTabPc.c:527
override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
Определения ServerBrowserTabPc.c:399
void UpdatePageButtons()
Определения ServerBrowserTabConsolePages.c:657
void OnClickPagePrev()
Определения ServerBrowserTabPc.c:471
void LoadingServersStop()
Определения ServerBrowserTabPc.c:210
override void SwitchToDetails(bool focus=true)
Определения ServerBrowserTabPc.c:1241
ServerBrowserEntry GetServerEntryByIndex(int index)
Определения ServerBrowserTabConsolePages.c:292
override void SetSort(ESortType type, ESortOrder order)
Определения ServerBrowserTabPc.c:558
TextWidget m_PnlPagesLoadingText
Определения ServerBrowserTabConsolePages.c:23
override void SwitchToFilters(bool focus=true)
Определения ServerBrowserTabPc.c:1246
int SortedInsertDesc(GetServersResultRow entry, ESortType sort_type)
Определения ServerBrowserTabPc.c:865
void SetPageIndex(int page_index)
Определения ServerBrowserTabPc.c:519
override int AddSorted(GetServersResultRow entry)
Определения ServerBrowserTabPc.c:670
void ButtonCancelToRefresh()
Определения ServerBrowserTabPc.c:1225
ref array< ButtonWidget > m_BtnPages
Определения ServerBrowserTabPc.c:23
ref array< ref ServerBrowserEntry > m_ServerListEntries
Определения ServerBrowserTabPc.c:24
override void ResetFilters()
Определения ServerBrowserTabPc.c:190
Widget m_FilterPanelAccTime
Определения ServerBrowserTabPc.c:21
int m_ServersEstimateCount
Определения ServerBrowserTabConsolePages.c:18
int SortedInsertAsc(GetServersResultRow entry, ESortType sort_type)
Определения ServerBrowserTabPc.c:775
ButtonWidget m_BtnPagesFirst
Определения ServerBrowserTabPc.c:15
override void RefreshList()
Определения ServerBrowserTabPc.c:162
void OnClickPageNext()
Определения ServerBrowserTabPc.c:483
int m_PageIndex
Определения ServerBrowserTabPc.c:7
Widget m_FilterSearchIPBox
Определения ServerBrowserTabPc.c:19
ServerBrowserEntry GetServerEntryByIndex(int index, string server_id)
Определения ServerBrowserTabPc.c:1161
override void UpdateServerList()
Определения ServerBrowserTabPc.c:1090
override void OnFilterChanged()
Определения ServerBrowserTabPc.c:459
override bool OnMouseEnter(Widget w, int x, int y)
Определения ServerBrowserTabPc.c:379
int SortedInsertEx(GetServersResultRow entry, ESortType sortType, bool isDescending)
Определения ServerBrowserTabPc.c:709
int SortedInsert(GetServersResultRow entry, ESortType sort_type)
Определения ServerBrowserTabPc.c:704
void ~ServerBrowserTabPc()
Определения ServerBrowserTabPc.c:157
override void OnLoadServerModsAsync(string server_id, array< string > mods)
Определения ServerBrowserTabPc.c:1151
override void Construct(Widget parent, ServerBrowserMenuNew menu, TabType type)
Определения ServerBrowserTabPc.c:28
const int PAGES_BUTTONS_COUNT
Определения ServerBrowserTabPc.c:4
void OnClickDetails()
Определения ServerBrowserTabPc.c:1231
ButtonWidget m_BtnPagesLast
Определения ServerBrowserTabPc.c:16
void OnLoadServersAsyncPCFinished()
Определения ServerBrowserTabPc.c:302
void OnClickPageEnd()
Определения ServerBrowserTabPc.c:495
override void OnLoadServersAsyncPC(GetServersResult result_list, EBiosError error, string response)
Определения ServerBrowserTabPc.c:248
const int SERVERS_VISIBLE_COUNT
Определения ServerBrowserTabPc.c:3
override bool OnMouseButtonUp(Widget w, int x, int y, int button)
Определения ServerBrowserTabPc.c:415
Widget m_FilterSearchIP
Определения ServerBrowserTabPc.c:18
void ButtonRefreshToCancel()
Определения ServerBrowserTabPc.c:1219
bool OnClickPage(Widget w)
Определения ServerBrowserTabPc.c:505
Widget m_FilterPanelPing
Определения ServerBrowserTabPc.c:20
override void RefreshList()
Определения ServerBrowserFavoritesTabPc.c:76
override void LoadExtraEntries(int index)
Определения ServerBrowserFavoritesTabPc.c:13
Определения EnWidgets.c:220
Определения EnWidgets.c:190
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Определения CachedEquipmentStorage.c:4
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
array< string > TStringArray
Определения EnScript.c:712
static proto float Floor(float f)
Returns floor of value.
static proto float Min(float x, float y)
Returns smaller of two given values.
static proto float Round(float f)
Returns mathematical round of value.
static proto float Ceil(float f)
Returns ceil of value.
MouseState
Определения EnSystem.c:311
proto native int ToInt()
Converts string to integer.
void Split(string sample, out array< string > output)
Splits string into array of strings separated by 'sample'.
Определения EnString.c:396
const int CALL_CATEGORY_GUI
Определения 3_Game/DayZ/tools/tools.c:9
proto native void SetFocus(Widget w)
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.
Определения proto.c:332