//==============================================================================
// Created on: 12/11/2003
// Host Multiplayer implementation of maplist tab
// This version allows configuration of maplists
//
// Written by Ron Prestenback
// © 2003, Epic Games, Inc. All Rights Reserved
//==============================================================================
class UT2K4Tab_MainMP extends UT2K4Tab_MainBase;
/*
// Maplist controls
var automated GUIListBox lb_ActiveMaps, lb_AllMaps;
var automated GUIButton b_Add, b_AddAll, b_Remove, b_RemoveAll, b_MoveUp, b_MoveDown,
b_New, b_Delete, b_Load, b_Save, b_Use;
var automated GUIEditBox ed_MapName;
var automated GUIComboBox co_Maplist;
var automated GUILabel LB1,LB2;
var GUIButton SizingButton;
function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
Super.InitComponent(MyController, MyOwner);
if (lb_AllMaps.List != None)
{
lb_AllMaps.List.bDropSource = True;
lb_AllMaps.List.bDropTarget = True;
lb_AllMaps.List.OnDblClick = ModifyMapList;
lb_AllMaps.List.OnDragDrop = RemoveDragDrop;
lb_AllMaps.List.AddLinkObject( b_Add, True );
lb_AllMaps.List.CheckLinkedObjects = InternalCheckLinkedObj;
}
if (lb_ActiveMaps.List != None)
{
lb_ActiveMaps.List.bDropSource = True;
lb_ActiveMaps.List.bDropTarget = True;
lb_ActiveMaps.List.OnDblClick = ModifyMapList;
lb_ActiveMaps.List.OnDragDrop = AddDragDrop;
lb_ActiveMaps.List.AddLinkObject( b_Remove, True );
lb_ActiveMaps.List.AddLinkObject( b_MoveUp, True );
lb_ActiveMaps.List.AddLinkObject( b_MoveDown, True );
lb_ActiveMaps.List.CheckLinkedObjects = InternalCheckLinkedObj;
}
co_Maplist.List.bInitializeList = False;
GetSizingButton();
}
function GUIButton GetSizingButton()
{
if ( IsLarger( SizingButton, b_New) )
SizingButton = b_New;
if ( IsLarger( SizingButton, b_Delete) )
SizingButton = b_Delete;
if ( IsLarger( SizingButton, b_Load) )
SizingButton = b_Load;
if ( IsLarger( SizingButton, b_Save) )
SizingButton = b_Save;
if ( IsLarger( SizingButton, b_Use) )
SizingButton = b_Use;
return SizingButton;
}
protected function bool IsLarger(GUIButton Current, GUIButton Test)
{
//
Test.bBoundToParent = False;
Test.bScaleToParent = False;
//
if ( Current == None || Len(Test.Caption) > Len(Current.Caption) )
return true;
return false;
}
protected function SetSize(GUIButton But, coerce float L, coerce float T, coerce float W, coerce float H)
{
if ( But == None )
return;
But.WinTop = T;
But.WinLeft = L;
But.WinWidth = W;
But.WinHeight = H;
}
// Called when a new gametype is selected
function InitGameType()
{
local int i;
local array Games;
local bool bReload;
// Save any maplist that was currently configured before changing the gametype.
StoreMapList();
// Get a list of all gametypes.
class'CacheManager'.static.GetGameTypeList(Games);
for (i = 0; i < Games.Length; i++)
{
if (Games[i].ClassName ~= Controller.LastGameType)
{
bReload = CurrentGameType.MapPrefix != Games[i].MapPrefix;
CurrentGameType = Games[i];
GameIndex = MapHandler.GetGameIndex(CurrentGameType.ClassName);
break;
}
}
if ( i == Games.Length )
return;
// Refresh the custom maplist combo
ReloadCustomMaplists();
if ( bReload )
InitMaps();
else InitMaplist();
}
// Query the CacheManager for the maps that correspond to this gametype, then fill the main list
function InitMaps( optional string MapPrefix )
{
local int i, j;
local bool bTemp;
local string Package, Item;
local array LinkSetupNames;
local DecoText DT;
// Make sure we have a map prefix
if ( MapPrefix == "" )
MapPrefix = GetMapPrefix();
// Temporarily disable notification in all components
bTemp = Controller.bCurMenuInitialized;
Controller.bCurMenuInitialized = False;
// Get the list of maps for the current gametype
class'CacheManager'.static.GetMapList( Maps, MapPrefix );
lb_AllMaps.List.Clear();
for ( i = 0; i < Maps.Length; i++ )
{
DT = None;
// If this was a UT2003 map, then it will have deco text associated with it - load the deco text
if ( class'CacheManager'.static.Is2003Content(Maps[i].MapName) )
{
if ( Maps[i].TextName != "" )
{
if ( !Divide(Maps[i].TextName, ".", Package, Item) )
{
Package = "XMaps";
Item = Maps[i].TextName;
}
DT = class'xUtil'.static.LoadDecoText( Package, Item );
}
}
// Otherwise, if we only want to display official maps, and this map isn't an official map, skip it
else if ( bOnlyShowOfficial && !class'CacheManager'.static.IsBPContent(Maps[i].MapName) && !class'CacheManager'.static.Is2004Content(Maps[i].MapName) )
continue;
Item = "";
if ( CurrentGameType.MapPrefix ~= "ONS" && Controller.bExpertMode )
{
j = InStr(Maps[i].ExtraInfo, "LinkSetups=");
if ( j != -1 )
Item = Mid(Maps[i].ExtraInfo, j + 11);
if ( Item == "" )
lb_AllMaps.List.Add(Maps[i].MapName); // Change this line to 'Item = DefaultText;' to list default link setup when there are none in the list
else
{
//Add official setups
Split(Item, ";", LinkSetupNames);
for ( j = 0; j < LinkSetupNames.Length; j++ )
lb_AllMaps.List.Add( Maps[i].MapName @ "(" $ LinkSetupNames[j] @ LinkText $ ")", DT,"?LinkSetup=" $ LinkSetupNames[j] );
lb_AllMaps.List.Add(Maps[i].MapName @ "(" $ AutoSelectText @ LinkText $ ")", DT);
}
//Add custom setups
LinkSetupNames = GetPerObjectNames(Maps[i].MapName, "ONSPowerLinkCustomSetup");
for ( j = 0; j < LinkSetupNames.Length; j++ )
lb_AllMaps.List.Add( Maps[i].MapName @ "(" $ LinkSetupNames[j] @ LinkText $ ")", DT,"?LinkSetup=" $ LinkSetupNames[j] );
}
else lb_AllMaps.List.Add( Maps[i].MapName, DT );
}
InitMapList();
Controller.bCurMenuInitialized = bTemp;
}
// Fill the Active & Inactive lists with the appropriate maps
function InitMapList()
{
local class MLClass;
local MapList ML;
local string MaplistClass;
local int i;
local array NewActiveMaps;
// Disable OnChange calls
lb_ActiveMaps.List.bNotify = False;
lb_AllMaps.List.bNotify = False;
// Clear the active list
lb_AllMaps.List.LoadFrom( lb_ActiveMaps.List );
lb_ActiveMaps.List.Clear();
// Update the current custom maplist index
RecordIndex = MapHandler.GetRecordIndex(GameIndex, co_Maplist.GetText());
// Get the list of active maps from the MaplistManager
NewActiveMaps = MapHandler.GetMapList(GameIndex, RecordIndex);
// This should never actually happen, since MapHandler will always create default lists.
if ( NewActiveMaps.Length == 0 )
{
MaplistClass = GetMaplistClass();
if ( MaplistClass != "" )
MLClass = class(DynamicLoadObject(MaplistClass, class'class'));
if (MLClass!=None)
{
ML = PlayerOwner().spawn(MLClass);
if (ML!=None)
NewActiveMaps = ML.Maps;
}
}
for ( i = 0; i < NewActiveMaps.Length; i++ )
AddMap(NewActiveMaps[i]);
CurrentMaplistLoaded();
lb_ActiveMaps.List.bNotify = True;
lb_AllMaps.List.bNotify = True;
}
// Fill the custom maplist selection combo with the custom maplists for this gametype
function ReloadCustomMaplists(optional string CurrentMaplist)
{
local int i, Index, Current;
local array Ar;
// Disable OnChange calls
co_Maplist.List.bNotify = False;
Index = MapHandler.GetGameIndex(CurrentGameType.ClassName);
Ar = MapHandler.GetMapListNames(Index);
Current = MapHandler.GetRecordIndex(Index, CurrentMaplist);
if ( Current == -1 )
Current = MapHandler.GetActiveList(Index);
co_Maplist.List.bNotify = False;
co_Maplist.List.Clear();
for ( i = 0; i < Ar.Length; i++ )
co_Maplist.AddItem(Ar[i]);
co_Maplist.List.bNotify = True;
CurrentMaplist = MapHandler.GetMaplistTitle(Index, Current);
co_Maplist.SetText(CurrentMaplist, True);
co_Maplist.List.bNotify = True;
}
// =====================================================================================================================
// =====================================================================================================================
// Utility functions - handles all special stuff that should happen whenever events are received on the page
// =====================================================================================================================
// =====================================================================================================================
// Do not allow two lists to both have valid indexes at the same time - we use whichever map is selected in any
// of the three lists to determine the starting map for the game.
/*
function UpdateIndexes( GUIListBase List )
{
local bool bTemp;
// Disable notification
bTemp = Controller.bCurMenuInitialized;
Controller.bCurMenuInitialized = False;
if ( List == lb_AllMaps.List && lb_AllMaps.List.IsValid() )
lb_ActiveMaps.List.SetIndex(-1);
else if ( List == lb_ActiveMaps.List && lb_ActiveMaps.List.IsValid() )
lb_AllMaps.List.SetIndex(-1);
Controller.bCurMenuInitialized = bTemp;
}
*/
event SetVisibility( bool bIsVisible )
{
Super.SetVisibility(bIsVisible);
if ( bIsVisible )
CheckSaveStatus();
}
function string Play()
{
local int i;
StoreMapList();
i = MapHandler.GetActiveMap(GameIndex,RecordIndex);
if ( lb_ActiveMaps.List.IsValidIndex(i) )
return GetMapURL(lb_ActiveMaps.List, i);
else return GetMapURL(lb_ActiveMaps.List, 0);
}
// Mapname has value only when initializing list
function bool AddMap(optional string MapName)
{
local int i;
local array PendingElements;
if ( MapName != "" )
{
lb_AllMaps.List.bNotify = False;
for ( i = 0; i < lb_AllMaps.List.Elements.Length; i++ )
if ( MapName ~= (StripMapName(lb_AllMaps.List.Elements[i].Item) $ lb_AllMaps.List.Elements[i].ExtraStrData) )
break;
if ( i != lb_AllMaps.List.Elements.Length )
{
PendingElements[0] = lb_AllMaps.List.Elements[i];
lb_AllMaps.List.RemoveElement(PendingElements[0],,True);
lb_ActiveMaps.List.AddElement(PendingElements[0]);
// Do not call call MapHandler.AddMap() since MapName only has a value when adding maps FROM maphandler
// MapHandler.AddMap(GameIndex, RecordIndex, StripMapName(PendingElements[0].Item) $ PendingElements[0].ExtraStrData);
}
else log("AddMap() didn't find map named"@MapName);
}
else
{
if ( !lb_AllMaps.List.IsValid() )
return false;
lb_AllMaps.List.bNotify = False;
PendingElements = lb_AllMaps.List.GetPendingElements(True);
for ( i = 0; i < PendingElements.Length; i++ )
{
lb_AllMaps.List.RemoveElement(PendingElements[i],,True);
lb_ActiveMaps.List.AddElement(PendingElements[i]);
MapHandler.AddMap(GameIndex, RecordIndex, StripMapName(PendingElements[i].Item) $ PendingElements[i].ExtraStrData);
}
}
lb_AllMaps.List.bNotify = True;
lb_AllMaps.List.ClearPendingElements();
lb_AllMaps.List.SetIndex(lb_AllMaps.List.Index);
return true;
}
function bool RemoveMap()
{
local int i;
local array PendingElements;
if ( !lb_ActiveMaps.List.IsValid() )
return false;
lb_ActiveMaps.List.bNotify = False;
PendingElements = lb_ActiveMaps.List.GetPendingElements( True );
for ( i = 0; i < PendingElements.Length; i++ )
{
lb_ActiveMaps.List.RemoveElement( PendingElements[i],,True );
lb_AllMaps.List.AddElement( PendingElements[i] );
MapHandler.RemoveMap( GameIndex, RecordIndex, StripMapName(PendingElements[i].Item) $ PendingElements[i].ExtraStrData );
}
lb_ActiveMaps.List.bNotify = True;
lb_ActiveMaps.List.ClearPendingElements();
lb_ActiveMaps.List.SetIndex(lb_ActiveMaps.List.Index);
return true;
}
function bool InternalOnPreDraw(Canvas C)
{
local float X, Y;
local float XL, YL;
if ( !bPositioned )
return false;
// Get the largest caption size
SizingButton.Style.TextSize(C, SizingButton.MenuState, SizingButton.Caption, XL, YL, SizingButton.FontScale);
// Add a little space
XL += 15;
YL += 10;
// Don't want it to line up exactly on the edge
X = (co_Maplist.ActualLeft() + co_Maplist.ActualWidth()) - 18;
Y = (co_Maplist.ActualTop() + co_Maplist.ActualHeight()) + 15;
// Delete and New go on first row
X -= XL;
SetSize(b_Delete, X, Y, XL, YL);
X -= XL + 3;
SetSize(b_New, X, Y, XL, YL);
// Go back to first column - the rest go on the second row
X += XL + 3;
Y += YL + 3;
SetSize(b_Use, X, Y, XL, YL);
X -= XL + 3;
SetSize(b_Save, X, Y, XL, YL);
X -= XL + 3;
SetSize(b_Load, X, Y, XL, YL);
return false;
}
// =====================================================================================================================
// =====================================================================================================================
// OnClick's
// =====================================================================================================================
// =====================================================================================================================
// Called when one of the buttons between the maplists are clicked on
function bool ModifyMapList(GUIComponent Sender)
{
local int Index;
local string Str;
if ( Sender == lb_AllMaps )
{
AddMap();
return true;
}
if ( Sender == lb_ActiveMaps )
{
RemoveMap();
return true;
}
if ( GUIButton(Sender) == None )
return false;
switch ( GUIButton(Sender).Caption )
{
case b_Add.Caption:
return AddMap();
case b_AddAll.Caption:
if (lb_AllMaps.ItemCount()==0)
return true;
for ( Index = 0; Index < lb_AllMaps.List.ItemCount; Index++ )
MapHandler.AddMap( GameIndex, RecordIndex, lb_AllMaps.List.GetItemAtIndex(Index) );
lb_ActiveMaps.List.LoadFrom(lb_AllMaps.List,false);
lb_AllMaps.List.Clear();
CheckSaveStatus();
return true;
case b_Remove.Caption:
return RemoveMap();
case b_RemoveAll.Caption:
if ( lb_ActiveMaps.ItemCount()==0 )
return true;
for ( Index = 0; Index < lb_ActiveMaps.List.ItemCount; Index++ )
MapHandler.RemoveMap( GameIndex, RecordIndex, lb_ActiveMaps.List.GetItemAtIndex(Index) );
lb_AllMaps.List.LoadFrom(lb_ActiveMaps.List,false);
lb_ActiveMaps.List.Clear();
CheckSaveStatus();
return true;
case b_MoveUp.Caption:
if ( !lb_ActiveMaps.List.IsValid() )
return true;
Index = lb_ActiveMaps.List.Index;
Str = GetMapURL(lb_ActiveMaps.List, -1);
if (index>0)
{
lb_ActiveMaps.List.Swap(index,index-1);
lb_ActiveMaps.List.SetIndex(Index - 1);
}
// We've hit the top, disable the Move Up button
if ( lb_ActiveMaps.List.Index <= 0 )
DisableComponent(b_MoveUp);
else if ( lb_ActiveMaps.List.Index < lb_ActiveMaps.List.ItemCount - 1 )
EnableComponent(b_MoveDown);
MapHandler.ShiftMap(GameIndex, RecordIndex, Str, -1);
CheckSaveStatus();
return true;
case b_MoveDown.Caption:
if ( !lb_ActiveMaps.List.IsValid() )
return true;
Index = lb_ActiveMaps.List.Index;
Str = GetMapURL(lb_ActiveMaps.List, -1);
if (index= lb_ActiveMaps.List.ItemCount - 1 )
DisableComponent(b_MoveDown);
else if ( lb_ActiveMaps.List.Index > 0 )
EnableComponent(b_MoveUp);
MapHandler.ShiftMap(GameIndex, RecordIndex, Str, 1);
CheckSaveStatus();
return true;
}
return false;
}
// Called when one of the custom maplist management buttons are clicked
function bool CustomMaplistClick(GUIComponent Sender)
{
local int i;
local array Ar;
local string Str;
switch ( Sender )
{
case b_New:
Str = co_Maplist.GetText();
// Build an array of strings containing the active maps
Ar.Length = lb_ActiveMaps.List.ItemCount;
for (i = 0; i < lb_ActiveMaps.List.ItemCount; i++)
Ar[i] = StripMapName(lb_ActiveMaps.List.Elements[i].Item) $ lb_ActiveMaps.List.Elements[i].ExtraStrData;
// Since we are creating a new list, instead of changing this one, reset the old one
MapHandler.ResetList(GameIndex, RecordIndex);
RecordIndex = MapHandler.AddList(CurrentGameType.ClassName, Str, Ar);
// Reload maplist names, set the editbox's text to the new maplist's title
ReloadCustomMaplists(Str);
// Reload the maplist
InitMaplist();
break;
case b_Delete:
// Remove the currently loaded maplist
RecordIndex = MapHandler.RemoveList(GameIndex, RecordIndex);
// Get the name of the now-current maplist
Str = MapHandler.GetMapListTitle(GameIndex, RecordIndex);
// Reload maplist names, set the editbox's text to the new maplist's title
ReloadCustomMaplists(Str);
InitMaplist();
break;
case b_Load:
// Load the currently selected list.
InitMaplist();
break;
case b_Save:
// Might be renaming list, might be saving it...
Str = co_Maplist.GetText();
UpdateCustomMapList(Str);
// Reload the maplist names in case we renamed the maplist
ReloadCustomMaplists(Str);
CheckSaveStatus();
break;
case b_Use:
// Copy the currently loaded list to the game's main maplist
MapHandler.ApplyMapList(GameIndex, RecordIndex);
CurrentMaplistLoaded();
break;
}
return true;
}
// =====================================================================================================================
// =====================================================================================================================
// OnChange's
// =====================================================================================================================
// =====================================================================================================================
// Called when we've selected a new item in the custom maplist combo, or typed in a new name
function MaplistSelectChange(GUIComponent Sender)
{
local string Str;
local int Index;
if ( Sender != co_Maplist )
return;
Str = co_Maplist.GetText();
// If the name in the edit box doesn't match the list's selected item
if ( Str != co_Maplist.List.Get() )
TypingNewName();
else
{
// The name shown is the currently selected item of the list
Index = MapHandler.GetRecordIndex(GameIndex, Str);
// We selected the currently loaded maplist
if ( RecordIndex == Index )
CurrentMaplistLoaded();
else SelectedItemFromList();
}
}
// =====================================================================================================================
// =====================================================================================================================
// Misc. Events
// =====================================================================================================================
// =====================================================================================================================
// Called when a map is dragged from the inactive list to the active list
function bool AddDragDrop(GUIComponent Sender)
{
local array Ar;
local int i, idx;
if ( Sender == lb_ActiveMaps.List )
{
idx = lb_ActiveMaps.List.DropIndex;
if ( !lb_ActiveMaps.List.IsValidIndex(idx) )
idx = lb_ActiveMaps.List.ItemCount;
if ( Controller.DropSource == lb_AllMaps.List )
Ar = lb_AllMaps.List.GetPendingElements();
else if ( Controller.DropSource == lb_ActiveMaps.List )
{
Ar = lb_ActiveMaps.List.GetPendingElements();
for ( i = 0; i < Ar.Length; i++ )
{
MapHandler.RemoveMap(GameIndex, RecordIndex, StripMapName(Ar[i].Item) $ Ar[i].ExtraStrData);
lb_ActiveMaps.List.RemoveElement(Ar[i]);
}
}
// Always insert in reverse order to maintain correct map order
for ( i = Ar.Length - 1; i >= 0; i-- )
MapHandler.InsertMap(GameIndex, RecordIndex, StripMapName(Ar[i].Item) $ Ar[i].ExtraStrData, idx);
lb_ActiveMaps.List.InternalOnDragDrop(lb_ActiveMaps.List);
return true;
}
return false;
}
// Called when maps are dragged from the active list to the inactive list.
function bool RemoveDragDrop(GUIComponent Sender)
{
local array Ar;
local int i;
if ( Sender == lb_AllMaps.List )
{
if ( Controller.DropSource != lb_ActiveMaps.List )
return false;
Ar = lb_ActiveMaps.List.GetPendingElements();
for (i = 0; i < Ar.Length; i++)
MapHandler.RemoveMap(GameIndex, RecordIndex, StripMapName(Ar[i].Item) $ Ar[i].ExtraStrData);
return lb_AllMaps.List.InternalOnDragDrop(Sender);
}
return false;
}
// This function overrides GUIList default behavior because we only want to disable the AddAll and RemoveAll
// if those lists are empty
function InternalCheckLinkedObj( GUIListBase List )
{
if ( List.IsValid() )
List.EnableLinkedObjects();
else List.DisableLinkedObjects();
if ( lb_AllMaps.List.ItemCount > 0 )
EnableComponent(b_AddAll);
else DisableComponent(b_AddAll);
if ( lb_ActiveMaps.List.ItemCount > 0 )
EnableComponent(b_RemoveAll);
else DisableComponent(b_RemoveAll);
if ( lb_ActiveMaps.List.Index == 0 )
DisableComponent(b_MoveUp);
else if ( lb_ActiveMaps.List.Index == lb_ActiveMaps.List.ItemCount - 1 )
DisableComponent(b_MoveDown);
if ( lb_ActiveMaps.List.ItemCount > 0 )
{
EnableComponent( b_Primary );
EnableComponent( b_Secondary );
}
else
{
DisableComponent(b_Primary);
DisableComponent(b_Secondary);
}
}
function InternalOnCreateComponent(GUIComponent NewComp, GUIComponent Sender)
{
if ( moButton(Sender) != None && GUILabel(NewComp) != None )
{
GUILabel(NewComp).TextColor = WhiteColor;
moButton(Sender).InternalOnCreateComponent(NewComp, Sender);
}
}
function bool HandleContextSelect(GUIContextMenu Sender, int Index)
{
if ( Sender != None )
{
switch ( Index )
{
case 0:
AddMap();
break;
case 1:
RemoveMap();
break;
case 3:
bOnlyShowOfficial = !bOnlyShowOfficial;
InitMaps();
ch_OfficialMapsOnly.SetComponentValue(bOnlyShowOfficial, True);
break;
}
}
return true;
}
// =====================================================================================================================
// =====================================================================================================================
// Custom Maplist Interface
// =====================================================================================================================
// =====================================================================================================================
function StoreMapList()
{
MapHandler.ApplyMaplist(GameIndex, RecordIndex);
}
// Pass in NewName to rename the list
function UpdateCustomMaplist(optional string NewName)
{
if ( NewName == "" )
NewName = co_Maplist.GetText();
if ( !(MapHandler.GetMapListTitle(GameIndex, RecordIndex) == NewName) )
RecordIndex = MapHandler.RenameList(GameIndex, RecordIndex, NewName);
// If we're saving this gametype's active list, be sure to apply the changes to the real maplist
if ( MapHandler.GetActiveList(GameIndex) == RecordIndex )
MapHandler.ApplyMaplist(GameIndex, RecordIndex);
else MapHandler.SaveMapList(GameIndex, RecordIndex);
}
// Can save & create new, cannot load, delete, or use
function TypingNewName()
{
DisableComponent(b_Load);
DisableComponent(b_Delete);
DisableComponent(b_Use);
EnableComponent(b_Save);
EnableComponent(b_New);
}
// Called when we've selected an item, but haven't clicked on load yet
// Can only load
function SelectedItemFromList()
{
DisableComponent(b_Delete);
DisableComponent(b_Save);
DisableComponent(b_Use);
DisableComponent(b_New);
EnableComponent(b_Load);
}
// Called when the loaded maplist matches the combobox
// Can do everything but load
// bActive is true if the loaded maplist is the active maplist as well
function CurrentMaplistLoaded()
{
DisableComponent(b_Load);
EnableComponent(b_New);
EnableComponent(b_Delete);
if ( RecordIndex == MapHandler.GetActiveList(GameIndex) )
DisableComponent(b_Use);
else EnableComponent(b_Use);
CheckSaveStatus();
}
function ListChanged(GUIComponent Sender)
{
CheckSaveStatus();
}
function CheckSaveStatus()
{
if ( MapHandler.MaplistDirty(GameIndex, RecordIndex) )
EnableComponent(b_Save);
else DisableComponent(b_Save);
}
DefaultProperties
{
OnPreDraw=InternalOnPreDraw
// =====================================================================================================================
// =====================================================================================================================
// Maplist Components
// =====================================================================================================================
// =====================================================================================================================
Begin Object Class=GUIListBox Name=InactiveMaps
WinWidth=0.368359
WinHeight=0.753669
WinLeft=0.025781
WinTop=0.108021
bVisibleWhenEmpty=true
bSorted=True
TabOrder=0
OnChange=ListChanged
End Object
lb_AllMaps=InactiveMaps
Begin Object Class=GUIListBox Name=ActiveMaps
WinWidth=0.368359
WinHeight=0.662671
WinLeft=0.605861
WinTop=0.108021
bVisibleWhenEmpty=true
TabOrder=8
OnChange=ListChanged
End Object
lb_ActiveMaps=ActiveMaps
Begin Object Class=GUIButton Name=IAMapListUp
Caption="Up"
Hint="Move this map higher up in the list"
WinWidth=0.145000
WinHeight=0.050000
WinLeft=0.425000
WinTop=0.146718
OnClick=ModifyMapList
OnClickSound=CS_Up
TabOrder=1
End Object
b_MoveUp=IAMapListUp
Begin Object Class=GUIButton Name=IAMapListAll
Caption="Add All"
Hint="Add all maps to your map list"
WinWidth=0.145
WinHeight=0.05
WinLeft=0.425
WinTop=0.388905
OnClick=ModifyMapList
OnClickSound=CS_Up
TabOrder=2
End Object
b_AddAll=IAMapListAll
Begin Object Class=GUIButton Name=IAMapListAdd
Caption="Add"
Hint="Add the selected maps to your map list"
WinWidth=0.145
WinHeight=0.05
WinLeft=0.425
WinTop=0.323801
OnClick=ModifyMapList
OnClickSound=CS_Up
TabOrder=3
End Object
b_Add=IAMapListAdd
Begin Object Class=GUIButton Name=IAMapListRemove
Caption="Remove"
Hint="Remove the selected maps from your map list"
WinWidth=0.145
WinHeight=0.05
WinLeft=0.425
WinTop=0.493072
OnClick=ModifyMapList
OnClickSound=CS_Down
TabOrder=4
End Object
b_Remove=IAMapListRemove
Begin Object Class=GUIButton Name=IAMapListClear
Caption="Remove All"
Hint="Remove all maps from your map list"
WinWidth=0.145
WinHeight=0.05
WinLeft=0.425
WinTop=0.558176
OnClick=ModifyMapList
OnClickSound=CS_Down
TabOrder=5
End Object
b_RemoveAll=IAMapListClear
Begin Object Class=GUIButton Name=IAMapListDown
Caption="Down"
Hint="Move this map lower down in the list"
WinWidth=0.145000
WinHeight=0.050000
WinLeft=0.425000
WinTop=0.727450
OnClick=ModifyMapList
OnClickSound=CS_Down
TabOrder=6
End Object
b_MoveDown=IAMapListDown
Begin Object Class=GUIComboBox Name=SelectMaplist
Hint="Load another maplist or change the name of the currently loaded maplist."
OnChange=MaplistSelectChange
WinWidth=0.335802
WinHeight=0.040000
WinLeft=0.630479
WinTop=0.797917
TabOrder=7
End Object
Begin Object Class=GUIButton Name=NewMaplist
Caption="NEW"
Hint="Create new custom maplist, using the configured name and active maps"
OnClick=CustomMaplistClick
WinWidth=0.096076
WinHeight=0.050000
WinLeft=0.772357
WinTop=0.859114
TabOrder=8
End Object
Begin Object Class=GUIButton Name=DeleteMaplist
Caption="DELETE"
Hint"Delete the currently selected maplist. If this is the last maplist for this gametype, a new default maplist will be generated."
OnClick=CustomMaplistClick
WinWidth=0.094120
WinHeight=0.050000
WinLeft=0.868247
WinTop=0.863021
TabOrder=9
End Object
Begin Object Class=GUIButton Name=LoadMaplist
Caption="LOAD"
Hint="Load the currently selected maplist"
OnClick=CustomMaplistClick
WinWidth=0.096076
WinHeight=0.050000
WinLeft=0.679403
WinTop=0.915104
TabOrder=10
End Object
Begin Object Class=GUIButton Name=SaveMaplist
Caption="SAVE"
Hint="Save the selected maps to the currently loaded maplist. If this is the active maplist, it will applied to the game's map rotation."
OnClick=CustomMaplistClick
WinWidth=0.096076
WinHeight=0.050000
WinLeft=0.772357
WinTop=0.915104
TabOrder=11
End Object
Begin Object Class=GUIButton Name=UseMaplist
Caption="USE"
Hint="Save & apply this custom maplist to the game's map rotation"
OnClick=CustomMaplistClick
WinWidth=0.094120
WinHeight=0.050000
WinLeft=0.869226
WinTop=0.915104
TabOrder=12
End Object
b_New=NewMaplist
b_Delete=DeleteMaplist
b_Load=LoadMaplist
b_Save=SaveMaplist
b_Use=UseMaplist
co_Maplist=SelectMaplist
}
*/