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)
|