annotate AceGUIWidget-CheckBoxSmallLabel.lua @ 70:cdee65c1bd8c

Implement a list of items to be automatically marked as sent to the guild vault. List controlled on the Options tab like the existing filter. Default list is Cataclysm crafting material drops.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Fri, 11 May 2012 03:56:21 +0000
parents 822b6ca3ef89
children fe04f5c4114a
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@1 114 else
farmbuyer@1 115 self.frame:Enable()
farmbuyer@1 116 self.text:SetTextColor(1, 1, 1)
farmbuyer@1 117 if self.tristate and self.checked == nil then
farmbuyer@1 118 SetDesaturation(self.check, true)
farmbuyer@1 119 else
farmbuyer@1 120 SetDesaturation(self.check, false)
farmbuyer@1 121 end
farmbuyer@1 122 end
farmbuyer@1 123 end,
farmbuyer@1 124
farmbuyer@1 125 ["SetValue"] = function(self,value)
farmbuyer@1 126 local check = self.check
farmbuyer@1 127 self.checked = value
farmbuyer@1 128 if value then
farmbuyer@1 129 SetDesaturation(self.check, false)
farmbuyer@1 130 self.check:Show()
farmbuyer@1 131 else
farmbuyer@1 132 --Nil is the unknown tristate value
farmbuyer@1 133 if self.tristate and value == nil then
farmbuyer@1 134 SetDesaturation(self.check, true)
farmbuyer@1 135 self.check:Show()
farmbuyer@1 136 else
farmbuyer@1 137 SetDesaturation(self.check, false)
farmbuyer@1 138 self.check:Hide()
farmbuyer@1 139 end
farmbuyer@1 140 end
farmbuyer@1 141 self:SetDisabled(self.disabled)
farmbuyer@1 142 end,
farmbuyer@1 143
farmbuyer@1 144 ["GetValue"] = function(self)
farmbuyer@1 145 return self.checked
farmbuyer@1 146 end,
farmbuyer@1 147
farmbuyer@1 148 ["SetTriState"] = function(self, enabled)
farmbuyer@1 149 self.tristate = enabled
farmbuyer@1 150 self:SetValue(self:GetValue())
farmbuyer@1 151 end,
farmbuyer@1 152
farmbuyer@1 153 ["SetType"] = function(self, type)
farmbuyer@1 154 local checkbg = self.checkbg
farmbuyer@1 155 local check = self.check
farmbuyer@1 156 local highlight = self.highlight
farmbuyer@1 157
farmbuyer@1 158 local size
farmbuyer@1 159 if type == "radio" then
farmbuyer@1 160 size = 16
farmbuyer@1 161 checkbg:SetTexture("Interface\\Buttons\\UI-RadioButton")
farmbuyer@1 162 checkbg:SetTexCoord(0, 0.25, 0, 1)
farmbuyer@1 163 check:SetTexture("Interface\\Buttons\\UI-RadioButton")
farmbuyer@1 164 check:SetTexCoord(0.25, 0.5, 0, 1)
farmbuyer@1 165 check:SetBlendMode("ADD")
farmbuyer@1 166 highlight:SetTexture("Interface\\Buttons\\UI-RadioButton")
farmbuyer@1 167 highlight:SetTexCoord(0.5, 0.75, 0, 1)
farmbuyer@1 168 else
farmbuyer@1 169 size = 24
farmbuyer@1 170 checkbg:SetTexture("Interface\\Buttons\\UI-CheckBox-Up")
farmbuyer@1 171 checkbg:SetTexCoord(0, 1, 0, 1)
farmbuyer@1 172 check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
farmbuyer@1 173 check:SetTexCoord(0, 1, 0, 1)
farmbuyer@1 174 check:SetBlendMode("BLEND")
farmbuyer@1 175 highlight:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
farmbuyer@1 176 highlight:SetTexCoord(0, 1, 0, 1)
farmbuyer@1 177 end
farmbuyer@1 178 checkbg:SetHeight(size)
farmbuyer@1 179 checkbg:SetWidth(size)
farmbuyer@1 180 end,
farmbuyer@1 181
farmbuyer@1 182 ["ToggleChecked"] = function(self)
farmbuyer@1 183 local value = self:GetValue()
farmbuyer@1 184 if self.tristate then
farmbuyer@1 185 --cycle in true, nil, false order
farmbuyer@1 186 if value then
farmbuyer@1 187 self:SetValue(nil)
farmbuyer@1 188 elseif value == nil then
farmbuyer@1 189 self:SetValue(false)
farmbuyer@1 190 else
farmbuyer@1 191 self:SetValue(true)
farmbuyer@1 192 end
farmbuyer@1 193 else
farmbuyer@1 194 self:SetValue(not self:GetValue())
farmbuyer@1 195 end
farmbuyer@1 196 end,
farmbuyer@1 197
farmbuyer@1 198 ["SetLabel"] = function(self, label)
farmbuyer@1 199 self.text:SetText(label)
farmbuyer@1 200 end,
farmbuyer@1 201
farmbuyer@1 202 ["SetDescription"] = function(self, desc)
farmbuyer@1 203 if desc then
farmbuyer@1 204 if not self.desc then
farmbuyer@1 205 local desc = self.frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall")
farmbuyer@1 206 desc:ClearAllPoints()
farmbuyer@1 207 desc:SetPoint("TOPLEFT", self.checkbg, "TOPRIGHT", 5, -21)
farmbuyer@1 208 desc:SetWidth(self.frame.width - 30)
farmbuyer@1 209 desc:SetJustifyH("LEFT")
farmbuyer@1 210 desc:SetJustifyV("TOP")
farmbuyer@1 211 self.desc = desc
farmbuyer@1 212 end
farmbuyer@1 213 self.desc:Show()
farmbuyer@1 214 --self.text:SetFontObject(GameFontNormal)
farmbuyer@1 215 self.desc:SetText(desc)
farmbuyer@1 216 self:SetHeight(28 + self.desc:GetHeight())
farmbuyer@1 217 else
farmbuyer@1 218 if self.desc then
farmbuyer@1 219 self.desc:SetText("")
farmbuyer@1 220 self.desc:Hide()
farmbuyer@1 221 end
farmbuyer@1 222 --self.text:SetFontObject(GameFontHighlight)
farmbuyer@1 223 self:SetHeight(24)
farmbuyer@1 224 end
farmbuyer@1 225 end,
farmbuyer@1 226
farmbuyer@1 227 ["SetImage"] = function(self, path, ...)
farmbuyer@1 228 local image = self.image
farmbuyer@1 229 image:SetTexture(path)
farmbuyer@1 230
farmbuyer@1 231 if image:GetTexture() then
farmbuyer@1 232 local n = select("#", ...)
farmbuyer@1 233 if n == 4 or n == 8 then
farmbuyer@1 234 image:SetTexCoord(...)
farmbuyer@1 235 else
farmbuyer@1 236 image:SetTexCoord(0, 1, 0, 1)
farmbuyer@1 237 end
farmbuyer@1 238 end
farmbuyer@1 239 AlignImage(self)
farmbuyer@1 240 end
farmbuyer@1 241 }
farmbuyer@1 242
farmbuyer@1 243 --[[-----------------------------------------------------------------------------
farmbuyer@1 244 Constructor
farmbuyer@1 245 -------------------------------------------------------------------------------]]
farmbuyer@1 246 local function Constructor()
farmbuyer@1 247 local frame = CreateFrame("Button", nil, UIParent)
farmbuyer@1 248 frame:Hide()
farmbuyer@1 249
farmbuyer@1 250 frame:EnableMouse(true)
farmbuyer@1 251 frame:SetScript("OnEnter", Control_OnEnter)
farmbuyer@1 252 frame:SetScript("OnLeave", Control_OnLeave)
farmbuyer@1 253 frame:SetScript("OnMouseDown", CheckBox_OnMouseDown)
farmbuyer@1 254 frame:SetScript("OnMouseUp", CheckBox_OnMouseUp)
farmbuyer@1 255
farmbuyer@1 256 local checkbg = frame:CreateTexture(nil, "ARTWORK")
farmbuyer@1 257 checkbg:SetWidth(24)
farmbuyer@1 258 checkbg:SetHeight(24)
farmbuyer@1 259 checkbg:SetPoint("TOPLEFT")
farmbuyer@1 260 checkbg:SetTexture("Interface\\Buttons\\UI-CheckBox-Up")
farmbuyer@1 261
farmbuyer@1 262 local check = frame:CreateTexture(nil, "OVERLAY")
farmbuyer@1 263 check:SetAllPoints(checkbg)
farmbuyer@1 264 check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
farmbuyer@1 265
farmbuyer@1 266 --local text = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
farmbuyer@1 267 local text = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall")
farmbuyer@1 268 text:SetJustifyH("LEFT")
farmbuyer@1 269 text:SetHeight(18)
farmbuyer@1 270 text:SetPoint("LEFT", checkbg, "RIGHT")
farmbuyer@1 271 text:SetPoint("RIGHT")
farmbuyer@1 272
farmbuyer@1 273 local highlight = frame:CreateTexture(nil, "HIGHLIGHT")
farmbuyer@1 274 highlight:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
farmbuyer@1 275 highlight:SetBlendMode("ADD")
farmbuyer@1 276 highlight:SetAllPoints(checkbg)
farmbuyer@1 277
farmbuyer@1 278 local image = frame:CreateTexture(nil, "OVERLAY")
farmbuyer@1 279 image:SetHeight(16)
farmbuyer@1 280 image:SetWidth(16)
farmbuyer@1 281 image:SetPoint("LEFT", checkbg, "RIGHT", 1, 0)
farmbuyer@1 282
farmbuyer@1 283 local widget = {
farmbuyer@1 284 checkbg = checkbg,
farmbuyer@1 285 check = check,
farmbuyer@1 286 text = text,
farmbuyer@1 287 highlight = highlight,
farmbuyer@1 288 image = image,
farmbuyer@1 289 frame = frame,
farmbuyer@1 290 type = Type
farmbuyer@1 291 }
farmbuyer@1 292 for method, func in pairs(methods) do
farmbuyer@1 293 widget[method] = func
farmbuyer@1 294 end
farmbuyer@1 295
farmbuyer@1 296 return AceGUI:RegisterAsWidget(widget)
farmbuyer@1 297 end
farmbuyer@1 298
farmbuyer@1 299 AceGUI:RegisterWidgetType(Type, Constructor, Version)