Mercurial > wow > itemauditor
diff Libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua @ 0:169f5211fc7f
First public revision.
At this point ItemAuditor watches mail for auctions sold or purchased, watches for buy/sell (money and 1 item type change) and conversions/tradeskills. Milling isn't working yet because there is too much time between the first event and the last event.
author | Asa Ayers <Asa.Ayers@Gmail.com> |
---|---|
date | Thu, 20 May 2010 19:22:19 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua Thu May 20 19:22:19 2010 -0700 @@ -0,0 +1,300 @@ +local AceGUI = LibStub("AceGUI-3.0") + +-- Lua APIs +local select = select + +-- WoW APIs +local CreateFrame, UIParent = CreateFrame, UIParent + +-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded +-- List them here for Mikk's FindGlobals script +-- GLOBALS: SetDesaturation, GameFontHighlight + +-------------------------- +-- Check Box -- +-------------------------- +--[[ + Events : + OnValueChanged + +]] +do + local Type = "CheckBox" + local Version = 13 + + local function OnAcquire(self) + self:SetValue(false) + self.tristate = nil + self:SetHeight(24) + self:SetWidth(200) + self:SetImage() + end + + local function OnRelease(self) + self.frame:ClearAllPoints() + self.frame:Hide() + self.check:Hide() + self.highlight:Hide() + self.down = nil + self.checked = nil + self:SetType() + self:SetDisabled(false) + self:SetDescription(nil) + end + + local function CheckBox_OnEnter(this) + local self = this.obj + self.highlight:Show() + self:Fire("OnEnter") + end + + local function CheckBox_OnLeave(this) + local self = this.obj + self.highlight:Hide() + self:Fire("OnLeave") + end + + local function CheckBox_OnMouseUp(this) + local self = this.obj + if not self.disabled then + self:ToggleChecked() + self:Fire("OnValueChanged",self.checked) + self.text:SetPoint("LEFT",self.check,"RIGHT",0,0) + end + self.down = nil + end + + local function CheckBox_OnMouseDown(this) + local self = this.obj + if not self.disabled then + self.text:SetPoint("LEFT",self.check,"RIGHT",1,-1) + self.down = true + end + AceGUI:ClearFocus() + end + + local function SetDisabled(self,disabled) + self.disabled = disabled + if disabled then + self.frame:Disable() + self.text:SetTextColor(0.5,0.5,0.5) + SetDesaturation(self.check, true) + else + self.frame:Enable() + self.text:SetTextColor(1,1,1) + if self.tristate and self.checked == nil then + SetDesaturation(self.check, true) + else + SetDesaturation(self.check, false) + end + end + end + + local function SetValue(self,value) + local check = self.check + self.checked = value + if value then + SetDesaturation(self.check, false) + self.check:Show() + else + --Nil is the unknown tristate value + if self.tristate and value == nil then + SetDesaturation(self.check, true) + self.check:Show() + else + SetDesaturation(self.check, false) + self.check:Hide() + end + end + end + + local function SetTriState(self, enabled) + self.tristate = enabled + self:SetValue(self:GetValue()) + end + + local function GetValue(self) + return self.checked + end + + local function SetType(self, type) + local checkbg = self.checkbg + local check = self.check + local highlight = self.highlight + + if type == "radio" then + checkbg:SetHeight(16) + checkbg:SetWidth(16) + checkbg:SetTexture("Interface\\Buttons\\UI-RadioButton") + checkbg:SetTexCoord(0,0.25,0,1) + check:SetHeight(16) + check:SetWidth(16) + check:SetTexture("Interface\\Buttons\\UI-RadioButton") + check:SetTexCoord(0.25,0.5,0,1) + check:SetBlendMode("ADD") + highlight:SetTexture("Interface\\Buttons\\UI-RadioButton") + highlight:SetTexCoord(0.5,0.75,0,1) + else + checkbg:SetHeight(24) + checkbg:SetWidth(24) + checkbg:SetTexture("Interface\\Buttons\\UI-CheckBox-Up") + checkbg:SetTexCoord(0,1,0,1) + check:SetHeight(24) + check:SetWidth(24) + check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") + check:SetTexCoord(0,1,0,1) + check:SetBlendMode("BLEND") + highlight:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight") + highlight:SetTexCoord(0,1,0,1) + end + end + + local function ToggleChecked(self) + local value = self:GetValue() + if self.tristate then + --cycle in true, nil, false order + if value then + self:SetValue(nil) + elseif value == nil then + self:SetValue(false) + else + self:SetValue(true) + end + else + self:SetValue(not self:GetValue()) + end + end + + local function SetLabel(self, label) + self.text:SetText(label) + end + + local function SetDescription(self, desc) + if desc then + if not self.desc then + local desc = self.frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") + desc:ClearAllPoints() + desc:SetPoint("TOPLEFT", self.check, "TOPRIGHT", 5, -21) + desc:SetWidth(self.frame.width - 30) + desc:SetJustifyH("LEFT") + desc:SetJustifyV("TOP") + self.desc = desc + end + self.desc:Show() + --self.text:SetFontObject(GameFontNormal) + self.desc:SetText(desc) + self:SetHeight(28 + self.desc:GetHeight()) + else + if self.desc then + self.desc:SetText("") + self.desc:Hide() + end + self.text:SetFontObject(GameFontHighlight) + self:SetHeight(24) + end + end + + local function SetImage(self, path, ...) + local image = self.image + image:SetTexture(path) + + if image:GetTexture() then + local n = select('#', ...) + if n == 4 or n == 8 then + image:SetTexCoord(...) + else + image:SetTexCoord(0, 1, 0, 1) + end + end + self:AlignImage() + end + + local function AlignImage(self) + local img = self.image:GetTexture() + self.text:ClearAllPoints() + if not img then + self.text:SetPoint("LEFT", self.check, "RIGHT", 0, 0) + self.text:SetPoint("RIGHT", self.frame, "RIGHT", 0, 0) + else + self.text:SetPoint("LEFT", self.image,"RIGHT", 1, 0) + self.text:SetPoint("RIGHT", self.frame,"RIGHT", 0, 0) + end + end + + local function OnWidthSet(self, width) + if self.desc and self.desc:GetText() ~= "" then + self.desc:SetWidth(width - 30) + self:SetHeight(28 + self.desc:GetHeight()) + end + end + + local function Constructor() + local frame = CreateFrame("Button",nil,UIParent) + local self = {} + self.type = Type + + self.OnRelease = OnRelease + self.OnAcquire = OnAcquire + + self.SetValue = SetValue + self.GetValue = GetValue + self.SetDisabled = SetDisabled + self.SetType = SetType + self.ToggleChecked = ToggleChecked + self.SetLabel = SetLabel + self.SetTriState = SetTriState + self.SetDescription = SetDescription + self.OnWidthSet = OnWidthSet + self.SetImage = SetImage + self.AlignImage = AlignImage + + self.frame = frame + frame.obj = self + + local text = frame:CreateFontString(nil,"OVERLAY","GameFontHighlight") + self.text = text + + frame:SetScript("OnEnter",CheckBox_OnEnter) + frame:SetScript("OnLeave",CheckBox_OnLeave) + frame:SetScript("OnMouseUp",CheckBox_OnMouseUp) + frame:SetScript("OnMouseDown",CheckBox_OnMouseDown) + frame:EnableMouse() + local checkbg = frame:CreateTexture(nil,"ARTWORK") + self.checkbg = checkbg + checkbg:SetWidth(24) + checkbg:SetHeight(24) + checkbg:SetPoint("TOPLEFT",frame,"TOPLEFT",0,0) + checkbg:SetTexture("Interface\\Buttons\\UI-CheckBox-Up") + local check = frame:CreateTexture(nil,"OVERLAY") + self.check = check + check:SetWidth(24) + check:SetHeight(24) + check:SetPoint("CENTER",checkbg,"CENTER",0,0) + check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") + + local highlight = frame:CreateTexture(nil, "OVERLAY") + self.highlight = highlight + highlight:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight") + highlight:SetBlendMode("ADD") + highlight:SetAllPoints(checkbg) + highlight:Hide() + + local image = frame:CreateTexture(nil, "OVERLAY") + self.image = image + image:SetHeight(16) + image:SetWidth(16) + image:SetPoint("LEFT", check, "RIGHT", 1, 0) + + text:SetJustifyH("LEFT") + frame:SetHeight(24) + frame:SetWidth(200) + text:SetHeight(18) + text:SetPoint("LEFT",check,"RIGHT",0,0) + text:SetPoint("RIGHT",frame,"RIGHT",0,0) + + AceGUI:RegisterAsWidget(self) + return self + end + + AceGUI:RegisterWidgetType(Type,Constructor,Version) +end