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

111 lines
2.4 KiB
Ucode

//==============================================================================
// Created on: 08/16/2003
// moComboBox plus another component - probably a checkbox
//
// Written by Ron Prestenback
// © 2003, Epic Games, Inc. All Rights Reserved
//==============================================================================
class moComboboxPlus extends moComboBox;
var string ExtraCompClass;
var GUIComponent ExtraComp;
var float ExtraCompSize;
var array<string> ExtraData; // corresponds to index in GUIComboBox
function InitComponent(GUIController InController, GUIComponent InOwner)
{
Super.InitComponent(InController, InOwner);
if ( ExtraCompClass != "" )
ExtraComp = AddComponent(ExtraCompClass);
ExtraComp.bBoundToParent = False;
ExtraComp.bScaleToParent = False;
}
function InternalOnChange(GUIComponent Sender)
{
local int i;
if ( Sender != None )
{
i = MyComboBox.GetIndex();
if ( i < 0 || i >= ExtraData.Length )
return;
if ( Sender == ExtraComp )
SetExtraValue( i, ExtraData[i] );
else if ( Sender == MyComboBox )
UpdateExtraValue(i);
}
}
function SetExtraValue(int i, string Data);
function UpdateExtraValue(int i);
function AddItem(string Item, optional object Extra, optional string Str)
{
Super.AddItem(Item,Extra,Str);
ExtraData.Length = MyComboBox.ItemCount();
}
function RemoveItem(int item, optional int Count)
{
Super.RemoveItem(Item,Count);
if ( Count == 0 )
Count = 1;
if ( Item >= 0 && Item <= ExtraData.Length - Count )
ExtraData.Remove(item,Count);
}
function bool InternalOnPreDraw(Canvas C)
{
local float AH, AW, NewScale;
if ( ExtraComp == None )
return false;
AH = ActualHeight();
AW = ActualWidth();
if ( bVerticalLayout )
{
ExtraComp.WinWidth = AW;
if ( bSquare )
ExtraComp.WinHeight = AW;
else ExtraComp.WinHeight = ExtraCompSize;
NewScale = AH - ExtraComp.ActualHeight();
MyLabel.WinHeight *= NewScale;
MyComponent.WinHeight *= NewScale;
}
else
{
ExtraComp.WinHeight = AH;
if ( bSquare )
ExtraComp.WinWidth = AH;
else ExtraComp.WinWidth = ExtraCompSize;
NewScale = AW - ExtraComp.ActualWidth();
MyLabel.WinWidth *= NewScale;
MyComponent.WinWidth *= NewScale;
}
return false;
}
DefaultProperties
{
OnPreDraw=InternalOnPreDraw
bSquare=True
ExtraCompClass="XInterface.GUICheckBox"
}