UIOBJECT CheckButton

From Wowpedia
Jump to: navigation, search

Making Checkboxes

You can make a checkbox in a WoW AddOn or script via the following command:

myCheckButton = CreateFrame("CheckButton", "myCheckButton_GlobalName", parentFrame, "ChatConfigCheckButtonTemplate");


As usual, SetPoint is used to position the checkbox relative to its parent frame; coordinates are (0,0) for the top-left corner of the parent, and a negative y-coordinate means down and positive x-coord means right.

myCheckButton:SetPoint("TOPLEFT", 200, -65);


You can reference the name of your CheckBox 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 (it wasn't defined earlier). Note the relationship with 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:SetText, but we must work with what we're given.

myCheckButton_GlobalNameText:SetText("CheckBox Name");


Here is the code to do the exact same thing, but this time it's not explicitly written. This is (arguably) less confusing:

_G[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.";


Use SetScript to set up what happens when you click the checkbox. You can add other scripts similarly to how this one is registered, you just need to change the "OnClick" to another Widget handler. 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);
	_G[checkbutton:GetName() .. "Text"]:SetText(displayname);

	return checkbutton;
end

-- this is how you'd use it:

myCheckButton = my_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 nothing in this demo
   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.