rott/kf_sources/GUI2K4/Classes/UT2k4Browser_Page.uc
2026-07-14 20:27:09 +07:00

305 lines
7.9 KiB
Ucode

//====================================================================
// Base class for all Server Browser tab panels
//
// Updated by Ron Prestenback
// (c) 2003, Epic Games, Inc. All Rights Reserved
// ====================================================================
class UT2K4Browser_Page extends UT2K4TabPanel;
var() UT2K4ServerBrowser Browser;
var() UT2K4Browser_Footer t_Footer; // For quick access
var() localized string MustUpgradeString;
var() localized string QueryCompleteString;
var() localized string StartQueryString;
var() localized string AuthFailString;
var() localized string ConnFailString;
var() localized string ConnTimeoutString;
var() localized string RetryString;
var() localized string ReadyString;
var() localized string BackCaption;
var() localized string RefreshCaption;
var() localized string JoinCaption;
var() localized string SpectateCaption;
var() localized string FilterCaption;
var() localized string UnspecifiedNetworkError;
var() string CurrentFooterCaption;
var() bool bCommonButtonWidth;
delegate OnOpenConnection(optional int Count);
delegate OnCloseConnection(optional int Count);
function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
if (UT2K4ServerBrowser(MyOwner.MenuOwner) != None)
{
Browser = UT2K4ServerBrowser(MyOwner.MenuOwner);
t_Footer = UT2K4Browser_Footer(Browser.t_Footer);
}
Super.InitComponent(MyController, MyOwner);
CurrentFooterCaption = ReadyString;
}
event Opened(GUIComponent Sender)
{
// This should never occur, but is here to catch any weird problems
if ((Browser == None || t_Footer == None) && UT2K4ServerBrowser(Sender) != None)
{
Browser = UT2K4ServerBrowser(Sender);
t_Footer = UT2K4Browser_Footer(Browser.t_Footer);
}
Super.Opened(Sender);
}
function ShowPanel(bool bShow)
{
Super.ShowPanel(bShow);
if (bShow)
{
Browser.t_Header.SetCaption(PanelCaption);
RefreshFooter(Self,string(!bCommonButtonWidth));
SetFooterCaption(CurrentFooterCaption);
}
}
function bool InternalOnRightClick(GUIComponent Sender)
{
return false;
}
function bool ShouldDisplayGameType()
{
return false;
}
// Should be subclassed
function QueryComplete( MasterServerClient.EResponseInfo ResponseInfo, int Info );
function ReceivedPingInfo( int ServerID, ServerQueryClient.EPingCause PingCause, GameInfo.ServerResponseLine s );
function ReceivedPingTimeout( int listid, ServerQueryClient.EPingCause PingCause );
// Master Server Methods
function AddQueryTerm(coerce string Key, coerce string Value, MasterServerClient.EQueryType QueryType)
{
local MasterServerClient.QueryData QD;
local int i;
// log("AddQueryTerm Key:"$Key@"Value:"$Value@"QueryType:"$GetEnum(enum'EQueryType',QueryType));
for ( i = 0; i < Browser.Uplink().Query.Length; i++ )
{
QD = Browser.Uplink().Query[i];
if ( QD.Key ~= Key && QD.Value ~= Value && QD.QueryType == QueryType )
return;
}
QD.Key = Key;
QD.Value = Value;
QD.QueryType = QueryType;
Browser.Uplink().Query[i] = QD;
}
function ResetQueryClient( ServerQueryClient Client )
{
if ( Client == None )
return;
Client.CancelPings();
BindQueryClient(Client);
SetFooterCaption(ReadyString);
}
function BindQueryClient( ServerQueryClient Client )
{
if ( Client == None )
return;
Client.OnReceivedPingInfo = ReceivedPingInfo;
Client.OnPingTimeout = ReceivedPingTimeout;
}
function CloseMSConnection()
{
if ( Browser != None )
{
Browser.Uplink().CancelPings();
Browser.Uplink().Stop();
}
}
// this is called after panels change button captions - it forces the footer to re-initialize its button widths
delegate RefreshFooter( optional UT2K4Browser_Page Page, optional string bPerButtonSizes );
function SetFooterCaption(string NewCaption, optional bool bAppend)
{
local GUITabControl TC;
// Don't allow a non-active panel to update the footer caption
TC = GUITabControl(MenuOwner);
if ( TC.PendingTab != None )
{
if ( TC.PendingTab != MyButton )
return;
}
else if ( TC.ActiveTab != MyButton )
return;
if ( t_Footer == None )
t_Footer = UT2K4Browser_Footer(Browser.t_Footer);
if ( bAppend )
NewCaption = t_Footer.t_StatusBar.GetCaption() $ NewCaption;
t_Footer.t_StatusBar.SetCaption(NewCaption);
CurrentFooterCaption = t_Footer.t_StatusBar.Caption;
}
function SetJoinCaption(string NewCaption, optional bool bAppend)
{
if ( t_Footer == None || t_Footer.b_Join == None )
return;
if ( bAppend )
NewCaption = t_Footer.b_Join.Caption $ NewCaption;
t_Footer.b_Join.Caption = NewCaption;
}
function SetSpectateCaption(string NewCaption, optional bool bAppend)
{
if ( t_Footer == None || t_Footer.b_Spectate == None )
return;
if ( bAppend )
NewCaption = t_Footer.b_Spectate.Caption $ NewCaption;
t_Footer.b_Spectate.Caption = NewCaption;
}
function SetRefreshCaption(string NewCaption, optional bool bAppend)
{
if ( t_Footer == None || t_Footer.b_Refresh == None )
return;
if ( bAppend )
NewCaption = t_Footer.b_Refresh.Caption $ NewCaption;
t_Footer.b_Refresh.Caption = NewCaption;
}
function CheckJoinButton(bool Available)
{
if ( t_Footer == None || t_Footer.b_Join == None )
return;
if ( Available )
EnableComponent(t_Footer.b_Join);
else DisableComponent(t_Footer.b_Join);
}
function CheckSpectateButton(bool Available)
{
if ( t_Footer == None || t_Footer.b_Spectate == None )
return;
if ( Available )
EnableComponent(t_Footer.b_Spectate);
else DisableComponent(t_Footer.b_Spectate);
}
function CheckRefreshButton(bool Available)
{
if ( t_Footer == None || t_Footer.b_Refresh == None )
return;
if ( Available )
EnableComponent(t_Footer.b_Refresh);
else DisableComponent(t_Footer.b_Refresh);
}
function JoinClicked();
function SpectateClicked();
function FilterClicked();
function RefreshClicked()
{
Refresh();
}
// Returns whether the refresh button should be available for this panel - also gives chance to modify caption, if necessary
function bool IsRefreshAvailable( out string ButtonCaption )
{
ButtonCaption = RefreshCaption;
return true;
}
// Returns whether the spectate button should be available for this panel - also gives chance to modify caption, if necessary
function bool IsSpectateAvailable( out string ButtonCaption )
{
ButtonCaption = SpectateCaption;
return true;
}
// Returns whether the join button should be available for this panel - also gives chance to modify caption, if necessary
function bool IsJoinAvailable( out string ButtonCaption )
{
ButtonCaption = JoinCaption;
return true;
}
// Returns whether the filter button should be available for this panel - also gives chance to modify caption, if necessary
function bool IsFilterAvailable( out string ButtonCaption )
{
ButtonCaption = FilterCaption;
return false;
}
function ShowNetworkError( optional string ErrorMsg )
{
local GUIPage Page;
if ( ErrorMsg == "" )
ErrorMsg = UnspecifiedNetworkError;
Page = Controller.ShowQuestionDialog( ErrorMsg, QBTN_AbortRetry, QBTN_Abort );
if ( Page != None )
Page.OnClose = NetworkErrorClosed;
}
function NetworkErrorClosed( bool bCancelled )
{
}
defaultproperties
{
MustUpgradeString="Upgrade available. Please refresh the News page."
UnspecifiedNetworkError="There was an unknown error while attempting to connect to the network."
StartQueryString="Querying Master Server"
AuthFailString="Authentication Failed"
ConnFailString="Connection Failed"
ConnTimeoutString="Connection Timed Out"
QueryCompleteString="Query Complete!"
RetryString=" - Retrying"
ReadyString="Ready"
BackCaption="BACK"
JoinCaption="JOIN"
SpectateCaption="SPECTATE"
RefreshCaption="REFRESH"
FilterCaption="FILTERS"
bFillHeight=True
WinWidth=1.0
WinHeight=1.0
WinTop=0.0
WinLeft=0.0
FadeInTime=0.25
bCommonButtonWidth=true
}