View Single Post
01-03-06, 09:15 AM   #2
Gello
A Molten Giant
AddOn Author - Click to view addons
Join Date: Jan 2005
Posts: 521
To make a button a template add a virtual="true" in the opening tag:

<Button name="MyButtonTemplate" virtual="true">
etc
</Button>

To use: <Button name="MyButton1" inherits="MyButtonTemplate"/>

For instance this is a button template that's 96x32 with an OnEnter, OnLeave and OnClick.

<Button name="MyButtonTemplate" inherits="UIPanelButtonTemplate" virtual="true">
<Size>
<AbsDimension x="96" y="32"/>
</Size>
<Scripts>
<OnEnter>
MyMod_MyButton_OnTooltip() -- display tooltip for this button
</OnEnter>
<OnLeave>
GameTooltip:Hide()
</OnLeave>
<OnClick>
MyMod_MyButton_OnClick()
</OnClick>
</Button>

Then you can reuse that template to lay out buttons without declaring all the rest:

<Button name="MyButton1" inherits="MyButtonTemplate" text="One" id="1">
<Anchors>
<Anchor point="TOPLEFT"/>
</Anchors>
</Button>
<Button name="MyButton2" inherits="MyButtonTemplate" text="Two" id="2">
<Anchors>
<Anchor point="TOP"/>
</Anchors>
</Button>
<Button name="MyButton3" inherits="MyButtonTemplate" text="Three" id="3">
<Anchors>
<Anchor point="TOPRIGHT"/>
</Anchors>
</Button>

In the MyMod_MyButton_OnClick() to determine which button was pressed you use 'this' which is always the frame that calls an event handler:

this:GetID() = 1, 2 or 3 (due to the id="1" to id="3" tags)
this:GetName() = "MyButton1", "MyButton2", "MyButton3" (from the name= tags)
this = MyButton1, MyButton2, MyButton3 (the frame itself)
  Reply With Quote