Mercurial > wow > itemauditor
diff Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.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-Slider.lua Thu May 20 19:22:19 2010 -0700 @@ -0,0 +1,282 @@ +local AceGUI = LibStub("AceGUI-3.0") + +-- Lua APIs +local min, max, floor = math.min, math.max, math.floor +local tonumber = tonumber + +-- 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: GameFontHighlightSmall + +-------------------------- +-- Slider -- +-------------------------- +do + local Type = "Slider" + local Version = 9 + + local function OnAcquire(self) + self:SetWidth(200) + self:SetHeight(44) + self:SetDisabled(false) + self:SetIsPercent(nil) + self:SetSliderValues(0,100,1) + self:SetValue(0) + end + + local function OnRelease(self) + self.frame:ClearAllPoints() + self.frame:Hide() + self.slider:EnableMouseWheel(false) + self:SetDisabled(false) + end + + local function Control_OnEnter(this) + this.obj:Fire("OnEnter") + end + + local function Control_OnLeave(this) + this.obj:Fire("OnLeave") + end + + local function UpdateText(self) + local value = self.value or 0 + if self.ispercent then + self.editbox:SetText(("%s%%"):format(floor(value*1000+0.5)/10)) + else + self.editbox:SetText(floor(value*100+0.5)/100) + end + end + + local function UpdateLabels(self) + local min, max = (self.min or 0), (self.max or 100) + if self.ispercent then + self.lowtext:SetFormattedText("%s%%",(min * 100)) + self.hightext:SetFormattedText("%s%%",(max * 100)) + else + self.lowtext:SetText(min) + self.hightext:SetText(max) + end + end + + local function Slider_OnValueChanged(this) + local self = this.obj + if not this.setup then + local newvalue + newvalue = this:GetValue() + if newvalue ~= self.value and not self.disabled then + self.value = newvalue + self:Fire("OnValueChanged", newvalue) + end + if self.value then + local value = self.value + UpdateText(self) + end + end + end + + local function Slider_OnMouseUp(this) + local self = this.obj + self:Fire("OnMouseUp",this:GetValue()) + end + + local function Slider_OnMouseWheel(this, v) + local self = this.obj + if not self.disabled then + local value = self.value + if v > 0 then + value = min(value + (self.step or 1),self.max) + else + value = max(value - (self.step or 1), self.min) + end + self.slider:SetValue(value) + end + end + + local function SetDisabled(self, disabled) + self.disabled = disabled + if disabled then + self.slider:EnableMouse(false) + self.label:SetTextColor(.5,.5,.5) + self.hightext:SetTextColor(.5,.5,.5) + self.lowtext:SetTextColor(.5,.5,.5) + --self.valuetext:SetTextColor(.5,.5,.5) + self.editbox:SetTextColor(.5,.5,.5) + self.editbox:EnableMouse(false) + self.editbox:ClearFocus() + else + self.slider:EnableMouse(true) + self.label:SetTextColor(1,.82,0) + self.hightext:SetTextColor(1,1,1) + self.lowtext:SetTextColor(1,1,1) + --self.valuetext:SetTextColor(1,1,1) + self.editbox:SetTextColor(1,1,1) + self.editbox:EnableMouse(true) + end + end + + local function SetValue(self, value) + self.slider.setup = true + self.slider:SetValue(value) + self.value = value + UpdateText(self) + self.slider.setup = nil + end + + local function SetLabel(self, text) + self.label:SetText(text) + end + + local function SetSliderValues(self, min, max, step) + local frame = self.slider + frame.setup = true + self.min = min + self.max = max + self.step = step + frame:SetMinMaxValues(min or 0,max or 100) + UpdateLabels(self) + frame:SetValueStep(step or 1) + if self.value then + frame:SetValue(self.value) + end + frame.setup = nil + end + + local function EditBox_OnEscapePressed(this) + this:ClearFocus() + end + + local function EditBox_OnEnterPressed(this) + local self = this.obj + local value = this:GetText() + if self.ispercent then + value = value:gsub('%%','') + value = tonumber(value) / 100 + else + value = tonumber(value) + end + + if value then + self:Fire("OnMouseUp",value) + end + end + + local function EditBox_OnEnter(this) + this:SetBackdropBorderColor(0.5,0.5,0.5,1) + end + + local function EditBox_OnLeave(this) + this:SetBackdropBorderColor(0.3,0.3,0.3,0.8) + end + + local function SetIsPercent(self, value) + self.ispercent = value + UpdateLabels(self) + UpdateText(self) + end + + local function FrameOnMouseDown(this) + this.obj.slider:EnableMouseWheel(true) + AceGUI:ClearFocus() + end + + local SliderBackdrop = { + bgFile = "Interface\\Buttons\\UI-SliderBar-Background", + edgeFile = "Interface\\Buttons\\UI-SliderBar-Border", + tile = true, tileSize = 8, edgeSize = 8, + insets = { left = 3, right = 3, top = 6, bottom = 6 } + } + + local ManualBackdrop = { + bgFile = "Interface\\ChatFrame\\ChatFrameBackground", + edgeFile = "Interface\\ChatFrame\\ChatFrameBackground", + tile = true, edgeSize = 1, tileSize = 5, + } + + local function Constructor() + local frame = CreateFrame("Frame",nil,UIParent) + local self = {} + self.type = Type + + self.OnRelease = OnRelease + self.OnAcquire = OnAcquire + + self.frame = frame + frame.obj = self + + self.SetDisabled = SetDisabled + self.SetValue = SetValue + self.SetSliderValues = SetSliderValues + self.SetLabel = SetLabel + self.SetIsPercent = SetIsPercent + + self.alignoffset = 25 + + frame:EnableMouse(true) + frame:SetScript("OnMouseDown",FrameOnMouseDown) + self.slider = CreateFrame("Slider",nil,frame) + local slider = self.slider + slider:SetScript("OnEnter",Control_OnEnter) + slider:SetScript("OnLeave",Control_OnLeave) + slider:SetScript("OnMouseUp", Slider_OnMouseUp) + slider.obj = self + slider:SetOrientation("HORIZONTAL") + slider:SetHeight(15) + slider:SetHitRectInsets(0,0,-10,0) + slider:SetBackdrop(SliderBackdrop) + --slider:EnableMouseWheel(true) + slider:SetScript("OnMouseWheel", Slider_OnMouseWheel) + + local label = frame:CreateFontString(nil,"OVERLAY","GameFontNormal") + label:SetPoint("TOPLEFT",frame,"TOPLEFT",0,0) + label:SetPoint("TOPRIGHT",frame,"TOPRIGHT",0,0) + label:SetJustifyH("CENTER") + label:SetHeight(15) + self.label = label + + self.lowtext = slider:CreateFontString(nil,"ARTWORK","GameFontHighlightSmall") + self.lowtext:SetPoint("TOPLEFT",slider,"BOTTOMLEFT",2,3) + + self.hightext = slider:CreateFontString(nil,"ARTWORK","GameFontHighlightSmall") + self.hightext:SetPoint("TOPRIGHT",slider,"BOTTOMRIGHT",-2,3) + + + local editbox = CreateFrame("EditBox",nil,frame) + editbox:SetAutoFocus(false) + editbox:SetFontObject(GameFontHighlightSmall) + editbox:SetPoint("TOP",slider,"BOTTOM",0,0) + editbox:SetHeight(14) + editbox:SetWidth(70) + editbox:SetJustifyH("CENTER") + editbox:EnableMouse(true) + editbox:SetScript("OnEscapePressed",EditBox_OnEscapePressed) + editbox:SetScript("OnEnterPressed",EditBox_OnEnterPressed) + editbox:SetScript("OnEnter",EditBox_OnEnter) + editbox:SetScript("OnLeave",EditBox_OnLeave) + editbox:SetBackdrop(ManualBackdrop) + editbox:SetBackdropColor(0,0,0,0.5) + editbox:SetBackdropBorderColor(0.3,0.3,0.30,0.80) + self.editbox = editbox + editbox.obj = self + + slider:SetThumbTexture("Interface\\Buttons\\UI-SliderBar-Button-Horizontal") + + frame:SetWidth(200) + frame:SetHeight(44) + slider:SetPoint("TOP",label,"BOTTOM",0,0) + slider:SetPoint("LEFT",frame,"LEFT",3,0) + slider:SetPoint("RIGHT",frame,"RIGHT",-3,0) + + + slider:SetValue(self.value or 0) + slider:SetScript("OnValueChanged",Slider_OnValueChanged) + + AceGUI:RegisterAsWidget(self) + return self + end + + AceGUI:RegisterWidgetType(Type,Constructor,Version) +end