annotate AceGUIWidget-CheckBoxSmallLabel.lua @ 142:375059a11c1d 2.21.0

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