Gah - a solution with more questions. – EntropicLqd

Legacy:Color Selection Dialog

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search

Basic Color Selection Dialog

This class lets you provide color configuration. I haven't seen too many things that could use it, but who knows... Anyways, to use it, make a GUIPage, or whatever. The important point is having a GUILabel on it, and having a LastClicked property. Before you use OpenMenu to open the Color Chooser, set the LastClicked property of your class to the index in Controls of a GUILabel. The Color Chooser will initialize itself with the BackColor of this GUILabel, allow the user to edit that color, and then save the selected color back to the GUILabel. Add some code to load the label BackColor from defaults, and save it to an ini, and you have configurable colors.

class GUIColorEdit extends GUIPage;
 
var GUILabel SetTo;
 
function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
	Super.InitComponent(MyController, MyOwner);
	SetTo=GUILabel(ParentPage.Controls[int(ParentPage.GetPropertyText("LastClicked"))]);
	InitColors();
	return;
}
 
function bool SetAndClose(GUIComponent Sender)
{
	Controller.CloseMenu(False);
	SetTo.BackColor = GUILabel(Controls[10]).BackColor;
	Return True;
}
 
function InitColors()
{
	GUILabel(Controls[10]).BackColor=SetTo.BackColor;
	GUISlider(Controls[4]).SetValue(SetTo.BackColor.R);
	GUISlider(Controls[5]).SetValue(SetTo.BackColor.G);
	GUISlider(Controls[6]).SetValue(SetTo.BackColor.B);
	GUINumericEdit(Controls[7]).SetValue(SetTo.BackColor.R);
	GUINumericEdit(Controls[8]).SetValue(SetTo.BackColor.G);
	GUINumericEdit(Controls[9]).SetValue(SetTo.BackColor.B);
}
 
function OnSliderChange(GUIComponent Sender)
{
	local int i;
 
	for (i=0; i<Controls.Length; i++)
		if (Controls[i] == Sender)
			break;
	if (i>3 && i<7)
	{
		GUINumericEdit(Controls[i+3]).SetValue(int(GUISlider(Controls[i]).Value));
		ColorUpdate();
	}
	return;
}
 
function OnREditChange(GUIComponent Sender)
{
	GUISlider(Controls[4]).SetValue(float(GUINumericEdit(Controls[7]).Value));
	ColorUpdate();
}
 
function OnGEditChange(GUIComponent Sender)
{
	GUISlider(Controls[5]).SetValue(float(GUINumericEdit(Controls[8]).Value));
	ColorUpdate();
}
 
function OnBEditChange(GUIComponent Sender)
{
	GUISlider(Controls[6]).SetValue(float(GUINumericEdit(Controls[9]).Value));
	ColorUpdate();
}
 
function ColorUpdate()
{
	GUILabel(Controls[10]).BackColor.R = int(GUISlider(Controls[4]).Value);
	GUILabel(Controls[10]).BackColor.G = int(GUISlider(Controls[5]).Value);
	GUILabel(Controls[10]).BackColor.B = int(GUISlider(Controls[6]).Value);
	return;
}
 
defaultproperties
{
	Begin Object Class=GUIButton name=DialogBackground
		WinWidth=1.0
		WinHeight=1.0
		WinTop=0
		WinLeft=0
		bAcceptsInput=false
		bNeverFocus=true
		StyleName="ComboListBox"
		bBoundToParent=True
		bScaleToParent=True
	End Object
	Controls(0)=GUIButton'DialogBackground'
	Begin Object Class=GUILabel name=RLabel
		Caption="R"
		WinWidth=0.142857
		WinHeight=0.111111
		WinLeft=0.071429
		WinTop=0.055556
		bBoundToParent=True
		bScaleToParent=True
	End Object
	Controls(1)=GUILabel'RLabel'
	Begin Object Class=GUILabel name=GLabel
		Caption="G"
		WinWidth=0.142857
		WinHeight=0.111111
		WinLeft=0.071429
		WinTop=0.222222
		bBoundToParent=True
		bScaleToParent=True
	End Object
	Controls(2)=GUILabel'GLabel'
	Begin Object Class=GUILabel name=BLabel
		Caption="B"
		WinWidth=0.142857
		WinHeight=0.111111
		WinLeft=0.071429
		WinTop=0.388889
		bBoundToParent=True
		bScaleToParent=True
	End Object
	Controls(3)=GUILabel'BLabel'
	Begin Object Class=GUISlider name=RSlider
		bIntSlider=True
		MinValue=0
		MaxValue=255
		WinWidth=0.357143
		WinHeight=0.111111
		WinLeft=0.285714
		WinTop=0.055556
		OnChange=OnSliderChange;
		bBoundToParent=True
		bScaleToParent=True
	End Object
	Controls(4)=GUISlider'RSlider'
	Begin Object Class=GUISlider name=GSlider
		bIntSlider=True
		MinValue=0
		MaxValue=255
		WinWidth=0.357143
		WinHeight=0.111111
		WinLeft=0.285714
		WinTop=0.222222
		OnChange=OnSliderChange;
		bBoundToParent=True
		bScaleToParent=True
	End Object
	Controls(5)=GUISlider'GSlider'
	Begin Object Class=GUISlider name=BSlider
		bIntSlider=True
		MinValue=0
		MaxValue=255
		WinWidth=0.357143
		WinHeight=0.111111
		WinLeft=0.285714
		WinTop=0.388889
		OnChange=OnSliderChange;
		bBoundToParent=True
		bScaleToParent=True
	End Object
	Controls(6)=GUISlider'BSlider'
	Begin Object Class=GUINumericEdit name=REdit
		MinValue=0
		MaxValue=255
		Step=1
		WinWidth=0.214286
		WinHeight=0.111111
		WinLeft=0.714286
		WinTop=0.055556
		OnChange=OnREditChange;
		bBoundToParent=True
		bScaleToParent=True
	End Object
	Controls(7)=GUINumericEdit'REdit'
	Begin Object Class=GUINumericEdit name=GEdit
		MinValue=0
		MaxValue=255
		Step=1
		WinWidth=0.214286
		WinHeight=0.111111
		WinLeft=0.714286
		WinTop=0.222222
		OnChange=OnGEditChange;
		bBoundToParent=True
		bScaleToParent=True
	End Object
	Controls(8)=GUINumericEdit'GEdit'
	Begin Object Class=GUINumericEdit name=BEdit
		MinValue=0
		MaxValue=255
		Step=1
		WinWidth=0.214286
		WinHeight=0.111111
		WinLeft=0.714286
		WinTop=0.388889
		OnChange=OnBEditChange;
		bBoundToParent=True
		bScaleToParent=True
	End Object
	Controls(9)=GUINumericEdit'BEdit'
	Begin Object Class=GUILabel name=ColorBox
		WinWidth=0.857143
		WinHeight=0.222222
		WinLeft=0.071429
		WinTop=0.555556
		bTransparent=False
		bAcceptsInput=False
		bNeverFocus=True
		bBoundToParent=True
		bScaleToParent=True
	End Object
	Controls(10)=GUILabel'ColorBox'
	Begin Object Class=GUIButton name=OkButton
		Caption="OK"
		WinWidth=0.214286
		WinHeight=0.111111
		WinLeft=0.392857
		WinTop=0.833333
		OnClick=SetAndClose
		bBoundToParent=True
		bScaleToParent=True
	End Object
	Controls(11)=GUIButton'OkButton'
	WinWidth=0.5
	WinHeight=0.5
	WinLeft=0.25
	WinTop=0.25
}