WoW:UIOBJECT CheckButton: Difference between revisions
m (clean up, typos fixed: the exact same → exactly the same) |
|||
Line 15: | Line 15: | ||
You can reference the name of your Check Box either by writing it explicitly, or by making a function call. Writing it explicitly "looks prettier", but might be confusing to anyone looking at your code, as the name for it seems made-up. Note arg2 in the creation call. It is the same as what is below, but we have appended it with "Text". This is necessary, I don't know why they didn't just set it up so you can do myCheckButton:Text, but we must work with what we're given. | You can reference the name of your Check Box either by writing it explicitly, or by making a function call. Writing it explicitly "looks prettier", but might be confusing to anyone looking at your code, as the name for it seems made-up. Note arg2 in the creation call. It is the same as what is below, but we have appended it with "Text". This is necessary, I don't know why they didn't just set it up so you can do myCheckButton:Text, but we must work with what we're given. | ||
myCheckButton_GlobalNameText:SetText("CheckBox Name"); | myCheckButton_GlobalNameText:SetText("CheckBox Name"); | ||
Here is the code to do the | Here is the code to do exactly the same thing, but it's not explicitly written. This is (arguably) less confusing. | ||
getglobal(myCheckButton:GetName() .. 'Text'):SetText("CheckBox Name"); | getglobal(myCheckButton:GetName() .. 'Text'):SetText("CheckBox Name"); | ||
Line 44: | Line 44: | ||
== Recommendation == | == Recommendation == | ||
However, I recommend creating a generic "checkbox-factory function", like this: | However, I recommend creating a generic "checkbox-factory function", like this: | ||
Line 57: | Line 57: | ||
return checkbutton; | return checkbutton; | ||
end | end | ||
myCheckButton = bw_addon.createCheckbutton(UIParent, 400, -600 "A Checkbox"); | myCheckButton = bw_addon.createCheckbutton(UIParent, 400, -600 "A Checkbox"); |
Revision as of 00:51, 9 January 2014
Making Checkboxes
You can make a checkbox in WoW via the following commands:
myCheckButton = CreateFrame("CheckButton", "myCheckButton_GlobalName", parentFrame, "ChatConfigCheckButtonTemplate");
This is where you locate the checkbox relative to its parent frame. Coordinates are (0,0) is the top-left corner of the parent, so a negative y-coordinate means down and positive x-coord means right.
myCheckButton:SetPoint("TOPLEFT", 200, -65);
You can reference the name of your Check Box either by writing it explicitly, or by making a function call. Writing it explicitly "looks prettier", but might be confusing to anyone looking at your code, as the name for it seems made-up. Note arg2 in the creation call. It is the same as what is below, but we have appended it with "Text". This is necessary, I don't know why they didn't just set it up so you can do myCheckButton:Text, but we must work with what we're given.
myCheckButton_GlobalNameText:SetText("CheckBox Name");
Here is the code to do exactly the same thing, but it's not explicitly written. This is (arguably) less confusing.
getglobal(myCheckButton:GetName() .. 'Text'):SetText("CheckBox Name");
When mousing over your checkbox, you can have a tooltip appear, which is useful to describe the actions resulting from clicking the checkbox, without putting it all in the name.
myCheckButton.tooltip = "This is where you place MouseOver Text.";
Set up what happens when you click the checkbox. You can add other scripts similarly to how I have this one, you just need to change the "OnClick" to whatever else. http://www.wowwiki.com/Category:Widget_event_handlers Note that you cannot pass arguments to the "OnClick" script's function, but you can do other things as in a normal function
myCheckButton:SetScript("OnClick", function() --do stuff end);
Example entirely in Lua
myCheckButton = CreateFrame("CheckButton", "myCheckButton_GlobalName", UIParent, "ChatConfigCheckButtonTemplate"); myCheckButton:SetPoint("TOPLEFT", 200, -65); myCheckButton_GlobalNameText:SetText("CheckBox Name"); myCheckButton.tooltip = "This is where you place MouseOver Text."; myCheckButton:SetScript("OnClick", function() --do stuff end );
Recommendation
However, I recommend creating a generic "checkbox-factory function", like this:
local uniquealyzer = 1; function createCheckbutton(parent, x_loc, y_loc, displayname) uniquealyzer = uniquealyzer + 1; local checkbutton = CreateFrame("CheckButton", "my_addon_checkbutton_0" .. uniquealyzer, parent, "ChatConfigCheckButtonTemplate"); checkbutton:SetPoint("TOPLEFT", x_loc, y_loc); getglobal(checkbutton:GetName() .. 'Text'):SetText(displayname); return checkbutton; end myCheckButton = bw_addon.createCheckbutton(UIParent, 400, -600 "A Checkbox"); myCheckButton.tooltip = "If this is checked, nothing will happen, because this is a demo checkbox."; myCheckButton:SetScript("OnClick", function() -- do stuff end );
My reason for recommending this is that it is easy to port the checkbox code into a new addon, and it is also a lot more compact (3 lines per checkbox, instead of 6). Also, it is harder to make copy/pasta mistakes with a checkbox-factory.