annotate AceGUIWidget-CheckBox.lua @ 112:ccf90050cdc1 beta-mhg-1

Work around acegui bugs, revert when tickets fixed.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Thu, 09 Aug 2012 23:58:30 -0400
parents
children
rev   line source
farmbuyer@112 1 --[[-----------------------------------------------------------------------------
farmbuyer@112 2 Checkbox Widget
farmbuyer@112 3 -------------------------------------------------------------------------------]]
farmbuyer@112 4 local Type, Version = "CheckBox", 22
farmbuyer@112 5 local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
farmbuyer@112 6 if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
farmbuyer@112 7
farmbuyer@112 8 -- Lua APIs
farmbuyer@112 9 local select, pairs = select, pairs
farmbuyer@112 10
farmbuyer@112 11 -- WoW APIs
farmbuyer@112 12 local PlaySound = PlaySound
farmbuyer@112 13 local CreateFrame, UIParent = CreateFrame, UIParent
farmbuyer@112 14
farmbuyer@112 15 -- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
farmbuyer@112 16 -- List them here for Mikk's FindGlobals script
farmbuyer@112 17 -- GLOBALS: SetDesaturation, GameFontHighlight
farmbuyer@112 18
farmbuyer@112 19 --[[-----------------------------------------------------------------------------
farmbuyer@112 20 Support functions
farmbuyer@112 21 -------------------------------------------------------------------------------]]
farmbuyer@112 22 local function AlignImage(self)
farmbuyer@112 23 local img = self.image:GetTexture()
farmbuyer@112 24 self.text:ClearAllPoints()
farmbuyer@112 25 if not img then
farmbuyer@112 26 self.text:SetPoint("LEFT", self.checkbg, "RIGHT")
farmbuyer@112 27 self.text:SetPoint("RIGHT")
farmbuyer@112 28 else
farmbuyer@112 29 self.text:SetPoint("LEFT", self.image,"RIGHT", 1, 0)
farmbuyer@112 30 self.text:SetPoint("RIGHT")
farmbuyer@112 31 end
farmbuyer@112 32 end
farmbuyer@112 33
farmbuyer@112 34 --[[-----------------------------------------------------------------------------
farmbuyer@112 35 Scripts
farmbuyer@112 36 -------------------------------------------------------------------------------]]
farmbuyer@112 37 local function Control_OnEnter(frame)
farmbuyer@112 38 frame.obj:Fire("OnEnter")
farmbuyer@112 39 end
farmbuyer@112 40
farmbuyer@112 41 local function Control_OnLeave(frame)
farmbuyer@112 42 frame.obj:Fire("OnLeave")
farmbuyer@112 43 end
farmbuyer@112 44
farmbuyer@112 45 local function CheckBox_OnMouseDown(frame)
farmbuyer@112 46 local self = frame.obj
farmbuyer@112 47 if not self.disabled then
farmbuyer@112 48 if self.image:GetTexture() then
farmbuyer@112 49 self.text:SetPoint("LEFT", self.image,"RIGHT", 2, -1)
farmbuyer@112 50 else
farmbuyer@112 51 self.text:SetPoint("LEFT", self.checkbg, "RIGHT", 1, -1)
farmbuyer@112 52 end
farmbuyer@112 53 end
farmbuyer@112 54 AceGUI:ClearFocus()
farmbuyer@112 55 end
farmbuyer@112 56
farmbuyer@112 57 local function CheckBox_OnMouseUp(frame)
farmbuyer@112 58 local self = frame.obj
farmbuyer@112 59 if not self.disabled then
farmbuyer@112 60 self:ToggleChecked()
farmbuyer@112 61
farmbuyer@112 62 if self.checked then
farmbuyer@112 63 PlaySound("igMainMenuOptionCheckBoxOn")
farmbuyer@112 64 else -- for both nil and false (tristate)
farmbuyer@112 65 PlaySound("igMainMenuOptionCheckBoxOff")
farmbuyer@112 66 end
farmbuyer@112 67
farmbuyer@112 68 self:Fire("OnValueChanged", self.checked)
farmbuyer@112 69 AlignImage(self)
farmbuyer@112 70 end
farmbuyer@112 71 end
farmbuyer@112 72
farmbuyer@112 73 --[[-----------------------------------------------------------------------------
farmbuyer@112 74 Methods
farmbuyer@112 75 -------------------------------------------------------------------------------]]
farmbuyer@112 76 local methods = {
farmbuyer@112 77 ["OnAcquire"] = function(self)
farmbuyer@112 78 self:SetType()
farmbuyer@112 79 self:SetValue(false)
farmbuyer@112 80 self:SetTriState(nil)
farmbuyer@112 81 -- height is calculated from the width and required space for the description
farmbuyer@112 82 self:SetWidth(200)
farmbuyer@112 83 self:SetImage()
farmbuyer@112 84 self:SetDisabled(nil)
farmbuyer@112 85 self:SetDescription(nil)
farmbuyer@112 86 end,
farmbuyer@112 87
farmbuyer@112 88 -- ["OnRelease"] = nil,
farmbuyer@112 89
farmbuyer@112 90 ["OnWidthSet"] = function(self, width)
farmbuyer@112 91 if self.desc then
farmbuyer@112 92 self.desc:SetWidth(width - 30)
farmbuyer@112 93 if self.desc:GetText() and self.desc:GetText() ~= "" then
farmbuyer@112 94 self:SetHeight(28 + self.desc:GetHeight())
farmbuyer@112 95 end
farmbuyer@112 96 end
farmbuyer@112 97 end,
farmbuyer@112 98
farmbuyer@112 99 ["SetDisabled"] = function(self, disabled)
farmbuyer@112 100 self.disabled = disabled
farmbuyer@112 101 if disabled then
farmbuyer@112 102 self.frame:Disable()
farmbuyer@112 103 self.text:SetTextColor(0.5, 0.5, 0.5)
farmbuyer@112 104 SetDesaturation(self.check, true)
farmbuyer@112 105 if self.desc then
farmbuyer@112 106 self.desc:SetTextColor(0.5, 0.5, 0.5)
farmbuyer@112 107 end
farmbuyer@112 108 else
farmbuyer@112 109 self.frame:Enable()
farmbuyer@112 110 self.text:SetTextColor(1, 1, 1)
farmbuyer@112 111 if self.tristate and self.checked == nil then
farmbuyer@112 112 SetDesaturation(self.check, true)
farmbuyer@112 113 else
farmbuyer@112 114 SetDesaturation(self.check, false)
farmbuyer@112 115 end
farmbuyer@112 116 if self.desc then
farmbuyer@112 117 self.desc:SetTextColor(1, 1, 1)
farmbuyer@112 118 end
farmbuyer@112 119 end
farmbuyer@112 120 end,
farmbuyer@112 121
farmbuyer@112 122 ["SetValue"] = function(self,value)
farmbuyer@112 123 local check = self.check
farmbuyer@112 124 self.checked = value
farmbuyer@112 125 if value then
farmbuyer@112 126 SetDesaturation(self.check, false)
farmbuyer@112 127 self.check:Show()
farmbuyer@112 128 else
farmbuyer@112 129 --Nil is the unknown tristate value
farmbuyer@112 130 if self.tristate and value == nil then
farmbuyer@112 131 SetDesaturation(self.check, true)
farmbuyer@112 132 self.check:Show()
farmbuyer@112 133 else
farmbuyer@112 134 SetDesaturation(self.check, false)
farmbuyer@112 135 self.check:Hide()
farmbuyer@112 136 end
farmbuyer@112 137 end
farmbuyer@112 138 self:SetDisabled(self.disabled)
farmbuyer@112 139 end,
farmbuyer@112 140
farmbuyer@112 141 ["GetValue"] = function(self)
farmbuyer@112 142 return self.checked
farmbuyer@112 143 end,
farmbuyer@112 144
farmbuyer@112 145 ["SetTriState"] = function(self, enabled)
farmbuyer@112 146 self.tristate = enabled
farmbuyer@112 147 self:SetValue(self:GetValue())
farmbuyer@112 148 end,
farmbuyer@112 149
farmbuyer@112 150 ["SetType"] = function(self, type)
farmbuyer@112 151 local checkbg = self.checkbg
farmbuyer@112 152 local check = self.check
farmbuyer@112 153 local highlight = self.highlight
farmbuyer@112 154
farmbuyer@112 155 local size
farmbuyer@112 156 if type == "radio" then
farmbuyer@112 157 size = 16
farmbuyer@112 158 checkbg:SetTexture("Interface\\Buttons\\UI-RadioButton")
farmbuyer@112 159 checkbg:SetTexCoord(0, 0.25, 0, 1)
farmbuyer@112 160 check:SetTexture("Interface\\Buttons\\UI-RadioButton")
farmbuyer@112 161 check:SetTexCoord(0.25, 0.5, 0, 1)
farmbuyer@112 162 check:SetBlendMode("ADD")
farmbuyer@112 163 highlight:SetTexture("Interface\\Buttons\\UI-RadioButton")
farmbuyer@112 164 highlight:SetTexCoord(0.5, 0.75, 0, 1)
farmbuyer@112 165 else
farmbuyer@112 166 size = 24
farmbuyer@112 167 checkbg:SetTexture("Interface\\Buttons\\UI-CheckBox-Up")
farmbuyer@112 168 checkbg:SetTexCoord(0, 1, 0, 1)
farmbuyer@112 169 check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
farmbuyer@112 170 check:SetTexCoord(0, 1, 0, 1)
farmbuyer@112 171 check:SetBlendMode("BLEND")
farmbuyer@112 172 highlight:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
farmbuyer@112 173 highlight:SetTexCoord(0, 1, 0, 1)
farmbuyer@112 174 end
farmbuyer@112 175 checkbg:SetHeight(size)
farmbuyer@112 176 checkbg:SetWidth(size)
farmbuyer@112 177 end,
farmbuyer@112 178
farmbuyer@112 179 ["ToggleChecked"] = function(self)
farmbuyer@112 180 local value = self:GetValue()
farmbuyer@112 181 if self.tristate then
farmbuyer@112 182 --cycle in true, nil, false order
farmbuyer@112 183 if value then
farmbuyer@112 184 self:SetValue(nil)
farmbuyer@112 185 elseif value == nil then
farmbuyer@112 186 self:SetValue(false)
farmbuyer@112 187 else
farmbuyer@112 188 self:SetValue(true)
farmbuyer@112 189 end
farmbuyer@112 190 else
farmbuyer@112 191 self:SetValue(not self:GetValue())
farmbuyer@112 192 end
farmbuyer@112 193 end,
farmbuyer@112 194
farmbuyer@112 195 ["SetLabel"] = function(self, label)
farmbuyer@112 196 self.text:SetText(label)
farmbuyer@112 197 end,
farmbuyer@112 198
farmbuyer@112 199 ["SetDescription"] = function(self, desc)
farmbuyer@112 200 if desc then
farmbuyer@112 201 if not self.desc then
farmbuyer@112 202 local desc = self.frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall")
farmbuyer@112 203 desc:ClearAllPoints()
farmbuyer@112 204 desc:SetPoint("TOPLEFT", self.checkbg, "TOPRIGHT", 5, -21)
farmbuyer@112 205 desc:SetWidth(self.frame.width - 30)
farmbuyer@112 206 desc:SetJustifyH("LEFT")
farmbuyer@112 207 desc:SetJustifyV("TOP")
farmbuyer@112 208 self.desc = desc
farmbuyer@112 209 end
farmbuyer@112 210 self.desc:Show()
farmbuyer@112 211 --self.text:SetFontObject(GameFontNormal)
farmbuyer@112 212 self.desc:SetText(desc)
farmbuyer@112 213 self:SetHeight(28 + self.desc:GetHeight())
farmbuyer@112 214 else
farmbuyer@112 215 if self.desc then
farmbuyer@112 216 self.desc:SetText("")
farmbuyer@112 217 self.desc:Hide()
farmbuyer@112 218 end
farmbuyer@112 219 --self.text:SetFontObject(GameFontHighlight)
farmbuyer@112 220 self:SetHeight(24)
farmbuyer@112 221 end
farmbuyer@112 222 end,
farmbuyer@112 223
farmbuyer@112 224 ["SetImage"] = function(self, path, ...)
farmbuyer@112 225 local image = self.image
farmbuyer@112 226 image:SetTexture(path)
farmbuyer@112 227
farmbuyer@112 228 if image:GetTexture() then
farmbuyer@112 229 local n = select("#", ...)
farmbuyer@112 230 if n == 4 or n == 8 then
farmbuyer@112 231 image:SetTexCoord(...)
farmbuyer@112 232 else
farmbuyer@112 233 image:SetTexCoord(0, 1, 0, 1)
farmbuyer@112 234 end
farmbuyer@112 235 end
farmbuyer@112 236 AlignImage(self)
farmbuyer@112 237 end
farmbuyer@112 238 }
farmbuyer@112 239
farmbuyer@112 240 --[[-----------------------------------------------------------------------------
farmbuyer@112 241 Constructor
farmbuyer@112 242 -------------------------------------------------------------------------------]]
farmbuyer@112 243 local function Constructor()
farmbuyer@112 244 local frame = CreateFrame("Button", nil, UIParent)
farmbuyer@112 245 frame:Hide()
farmbuyer@112 246
farmbuyer@112 247 frame:EnableMouse(true)
farmbuyer@112 248 frame:SetScript("OnEnter", Control_OnEnter)
farmbuyer@112 249 frame:SetScript("OnLeave", Control_OnLeave)
farmbuyer@112 250 frame:SetScript("OnMouseDown", CheckBox_OnMouseDown)
farmbuyer@112 251 frame:SetScript("OnMouseUp", CheckBox_OnMouseUp)
farmbuyer@112 252
farmbuyer@112 253 local checkbg = frame:CreateTexture(nil, "ARTWORK")
farmbuyer@112 254 checkbg:SetWidth(24)
farmbuyer@112 255 checkbg:SetHeight(24)
farmbuyer@112 256 checkbg:SetPoint("TOPLEFT")
farmbuyer@112 257 checkbg:SetTexture("Interface\\Buttons\\UI-CheckBox-Up")
farmbuyer@112 258
farmbuyer@112 259 local check = frame:CreateTexture(nil, "OVERLAY")
farmbuyer@112 260 check:SetAllPoints(checkbg)
farmbuyer@112 261 check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
farmbuyer@112 262
farmbuyer@112 263 local text = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
farmbuyer@112 264 text:SetJustifyH("LEFT")
farmbuyer@112 265 text:SetHeight(18)
farmbuyer@112 266 text:SetPoint("LEFT", checkbg, "RIGHT")
farmbuyer@112 267 text:SetPoint("RIGHT")
farmbuyer@112 268
farmbuyer@112 269 local highlight = frame:CreateTexture(nil, "HIGHLIGHT")
farmbuyer@112 270 highlight:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
farmbuyer@112 271 highlight:SetBlendMode("ADD")
farmbuyer@112 272 highlight:SetAllPoints(checkbg)
farmbuyer@112 273
farmbuyer@112 274 local image = frame:CreateTexture(nil, "OVERLAY")
farmbuyer@112 275 image:SetHeight(16)
farmbuyer@112 276 image:SetWidth(16)
farmbuyer@112 277 image:SetPoint("LEFT", checkbg, "RIGHT", 1, 0)
farmbuyer@112 278
farmbuyer@112 279 local widget = {
farmbuyer@112 280 checkbg = checkbg,
farmbuyer@112 281 check = check,
farmbuyer@112 282 text = text,
farmbuyer@112 283 highlight = highlight,
farmbuyer@112 284 image = image,
farmbuyer@112 285 frame = frame,
farmbuyer@112 286 type = Type
farmbuyer@112 287 }
farmbuyer@112 288 for method, func in pairs(methods) do
farmbuyer@112 289 widget[method] = func
farmbuyer@112 290 end
farmbuyer@112 291
farmbuyer@112 292 return AceGUI:RegisterAsWidget(widget)
farmbuyer@112 293 end
farmbuyer@112 294
farmbuyer@112 295 AceGUI:RegisterWidgetType(Type, Constructor, Version)