annotate 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
rev   line source
Asa@0 1 local AceGUI = LibStub("AceGUI-3.0")
Asa@0 2
Asa@0 3 -- Lua APIs
Asa@0 4 local min, max, floor = math.min, math.max, math.floor
Asa@0 5 local tonumber = tonumber
Asa@0 6
Asa@0 7 -- WoW APIs
Asa@0 8 local CreateFrame, UIParent = CreateFrame, UIParent
Asa@0 9
Asa@0 10 -- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
Asa@0 11 -- List them here for Mikk's FindGlobals script
Asa@0 12 -- GLOBALS: GameFontHighlightSmall
Asa@0 13
Asa@0 14 --------------------------
Asa@0 15 -- Slider --
Asa@0 16 --------------------------
Asa@0 17 do
Asa@0 18 local Type = "Slider"
Asa@0 19 local Version = 9
Asa@0 20
Asa@0 21 local function OnAcquire(self)
Asa@0 22 self:SetWidth(200)
Asa@0 23 self:SetHeight(44)
Asa@0 24 self:SetDisabled(false)
Asa@0 25 self:SetIsPercent(nil)
Asa@0 26 self:SetSliderValues(0,100,1)
Asa@0 27 self:SetValue(0)
Asa@0 28 end
Asa@0 29
Asa@0 30 local function OnRelease(self)
Asa@0 31 self.frame:ClearAllPoints()
Asa@0 32 self.frame:Hide()
Asa@0 33 self.slider:EnableMouseWheel(false)
Asa@0 34 self:SetDisabled(false)
Asa@0 35 end
Asa@0 36
Asa@0 37 local function Control_OnEnter(this)
Asa@0 38 this.obj:Fire("OnEnter")
Asa@0 39 end
Asa@0 40
Asa@0 41 local function Control_OnLeave(this)
Asa@0 42 this.obj:Fire("OnLeave")
Asa@0 43 end
Asa@0 44
Asa@0 45 local function UpdateText(self)
Asa@0 46 local value = self.value or 0
Asa@0 47 if self.ispercent then
Asa@0 48 self.editbox:SetText(("%s%%"):format(floor(value*1000+0.5)/10))
Asa@0 49 else
Asa@0 50 self.editbox:SetText(floor(value*100+0.5)/100)
Asa@0 51 end
Asa@0 52 end
Asa@0 53
Asa@0 54 local function UpdateLabels(self)
Asa@0 55 local min, max = (self.min or 0), (self.max or 100)
Asa@0 56 if self.ispercent then
Asa@0 57 self.lowtext:SetFormattedText("%s%%",(min * 100))
Asa@0 58 self.hightext:SetFormattedText("%s%%",(max * 100))
Asa@0 59 else
Asa@0 60 self.lowtext:SetText(min)
Asa@0 61 self.hightext:SetText(max)
Asa@0 62 end
Asa@0 63 end
Asa@0 64
Asa@0 65 local function Slider_OnValueChanged(this)
Asa@0 66 local self = this.obj
Asa@0 67 if not this.setup then
Asa@0 68 local newvalue
Asa@0 69 newvalue = this:GetValue()
Asa@0 70 if newvalue ~= self.value and not self.disabled then
Asa@0 71 self.value = newvalue
Asa@0 72 self:Fire("OnValueChanged", newvalue)
Asa@0 73 end
Asa@0 74 if self.value then
Asa@0 75 local value = self.value
Asa@0 76 UpdateText(self)
Asa@0 77 end
Asa@0 78 end
Asa@0 79 end
Asa@0 80
Asa@0 81 local function Slider_OnMouseUp(this)
Asa@0 82 local self = this.obj
Asa@0 83 self:Fire("OnMouseUp",this:GetValue())
Asa@0 84 end
Asa@0 85
Asa@0 86 local function Slider_OnMouseWheel(this, v)
Asa@0 87 local self = this.obj
Asa@0 88 if not self.disabled then
Asa@0 89 local value = self.value
Asa@0 90 if v > 0 then
Asa@0 91 value = min(value + (self.step or 1),self.max)
Asa@0 92 else
Asa@0 93 value = max(value - (self.step or 1), self.min)
Asa@0 94 end
Asa@0 95 self.slider:SetValue(value)
Asa@0 96 end
Asa@0 97 end
Asa@0 98
Asa@0 99 local function SetDisabled(self, disabled)
Asa@0 100 self.disabled = disabled
Asa@0 101 if disabled then
Asa@0 102 self.slider:EnableMouse(false)
Asa@0 103 self.label:SetTextColor(.5,.5,.5)
Asa@0 104 self.hightext:SetTextColor(.5,.5,.5)
Asa@0 105 self.lowtext:SetTextColor(.5,.5,.5)
Asa@0 106 --self.valuetext:SetTextColor(.5,.5,.5)
Asa@0 107 self.editbox:SetTextColor(.5,.5,.5)
Asa@0 108 self.editbox:EnableMouse(false)
Asa@0 109 self.editbox:ClearFocus()
Asa@0 110 else
Asa@0 111 self.slider:EnableMouse(true)
Asa@0 112 self.label:SetTextColor(1,.82,0)
Asa@0 113 self.hightext:SetTextColor(1,1,1)
Asa@0 114 self.lowtext:SetTextColor(1,1,1)
Asa@0 115 --self.valuetext:SetTextColor(1,1,1)
Asa@0 116 self.editbox:SetTextColor(1,1,1)
Asa@0 117 self.editbox:EnableMouse(true)
Asa@0 118 end
Asa@0 119 end
Asa@0 120
Asa@0 121 local function SetValue(self, value)
Asa@0 122 self.slider.setup = true
Asa@0 123 self.slider:SetValue(value)
Asa@0 124 self.value = value
Asa@0 125 UpdateText(self)
Asa@0 126 self.slider.setup = nil
Asa@0 127 end
Asa@0 128
Asa@0 129 local function SetLabel(self, text)
Asa@0 130 self.label:SetText(text)
Asa@0 131 end
Asa@0 132
Asa@0 133 local function SetSliderValues(self, min, max, step)
Asa@0 134 local frame = self.slider
Asa@0 135 frame.setup = true
Asa@0 136 self.min = min
Asa@0 137 self.max = max
Asa@0 138 self.step = step
Asa@0 139 frame:SetMinMaxValues(min or 0,max or 100)
Asa@0 140 UpdateLabels(self)
Asa@0 141 frame:SetValueStep(step or 1)
Asa@0 142 if self.value then
Asa@0 143 frame:SetValue(self.value)
Asa@0 144 end
Asa@0 145 frame.setup = nil
Asa@0 146 end
Asa@0 147
Asa@0 148 local function EditBox_OnEscapePressed(this)
Asa@0 149 this:ClearFocus()
Asa@0 150 end
Asa@0 151
Asa@0 152 local function EditBox_OnEnterPressed(this)
Asa@0 153 local self = this.obj
Asa@0 154 local value = this:GetText()
Asa@0 155 if self.ispercent then
Asa@0 156 value = value:gsub('%%','')
Asa@0 157 value = tonumber(value) / 100
Asa@0 158 else
Asa@0 159 value = tonumber(value)
Asa@0 160 end
Asa@0 161
Asa@0 162 if value then
Asa@0 163 self:Fire("OnMouseUp",value)
Asa@0 164 end
Asa@0 165 end
Asa@0 166
Asa@0 167 local function EditBox_OnEnter(this)
Asa@0 168 this:SetBackdropBorderColor(0.5,0.5,0.5,1)
Asa@0 169 end
Asa@0 170
Asa@0 171 local function EditBox_OnLeave(this)
Asa@0 172 this:SetBackdropBorderColor(0.3,0.3,0.3,0.8)
Asa@0 173 end
Asa@0 174
Asa@0 175 local function SetIsPercent(self, value)
Asa@0 176 self.ispercent = value
Asa@0 177 UpdateLabels(self)
Asa@0 178 UpdateText(self)
Asa@0 179 end
Asa@0 180
Asa@0 181 local function FrameOnMouseDown(this)
Asa@0 182 this.obj.slider:EnableMouseWheel(true)
Asa@0 183 AceGUI:ClearFocus()
Asa@0 184 end
Asa@0 185
Asa@0 186 local SliderBackdrop = {
Asa@0 187 bgFile = "Interface\\Buttons\\UI-SliderBar-Background",
Asa@0 188 edgeFile = "Interface\\Buttons\\UI-SliderBar-Border",
Asa@0 189 tile = true, tileSize = 8, edgeSize = 8,
Asa@0 190 insets = { left = 3, right = 3, top = 6, bottom = 6 }
Asa@0 191 }
Asa@0 192
Asa@0 193 local ManualBackdrop = {
Asa@0 194 bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
Asa@0 195 edgeFile = "Interface\\ChatFrame\\ChatFrameBackground",
Asa@0 196 tile = true, edgeSize = 1, tileSize = 5,
Asa@0 197 }
Asa@0 198
Asa@0 199 local function Constructor()
Asa@0 200 local frame = CreateFrame("Frame",nil,UIParent)
Asa@0 201 local self = {}
Asa@0 202 self.type = Type
Asa@0 203
Asa@0 204 self.OnRelease = OnRelease
Asa@0 205 self.OnAcquire = OnAcquire
Asa@0 206
Asa@0 207 self.frame = frame
Asa@0 208 frame.obj = self
Asa@0 209
Asa@0 210 self.SetDisabled = SetDisabled
Asa@0 211 self.SetValue = SetValue
Asa@0 212 self.SetSliderValues = SetSliderValues
Asa@0 213 self.SetLabel = SetLabel
Asa@0 214 self.SetIsPercent = SetIsPercent
Asa@0 215
Asa@0 216 self.alignoffset = 25
Asa@0 217
Asa@0 218 frame:EnableMouse(true)
Asa@0 219 frame:SetScript("OnMouseDown",FrameOnMouseDown)
Asa@0 220 self.slider = CreateFrame("Slider",nil,frame)
Asa@0 221 local slider = self.slider
Asa@0 222 slider:SetScript("OnEnter",Control_OnEnter)
Asa@0 223 slider:SetScript("OnLeave",Control_OnLeave)
Asa@0 224 slider:SetScript("OnMouseUp", Slider_OnMouseUp)
Asa@0 225 slider.obj = self
Asa@0 226 slider:SetOrientation("HORIZONTAL")
Asa@0 227 slider:SetHeight(15)
Asa@0 228 slider:SetHitRectInsets(0,0,-10,0)
Asa@0 229 slider:SetBackdrop(SliderBackdrop)
Asa@0 230 --slider:EnableMouseWheel(true)
Asa@0 231 slider:SetScript("OnMouseWheel", Slider_OnMouseWheel)
Asa@0 232
Asa@0 233 local label = frame:CreateFontString(nil,"OVERLAY","GameFontNormal")
Asa@0 234 label:SetPoint("TOPLEFT",frame,"TOPLEFT",0,0)
Asa@0 235 label:SetPoint("TOPRIGHT",frame,"TOPRIGHT",0,0)
Asa@0 236 label:SetJustifyH("CENTER")
Asa@0 237 label:SetHeight(15)
Asa@0 238 self.label = label
Asa@0 239
Asa@0 240 self.lowtext = slider:CreateFontString(nil,"ARTWORK","GameFontHighlightSmall")
Asa@0 241 self.lowtext:SetPoint("TOPLEFT",slider,"BOTTOMLEFT",2,3)
Asa@0 242
Asa@0 243 self.hightext = slider:CreateFontString(nil,"ARTWORK","GameFontHighlightSmall")
Asa@0 244 self.hightext:SetPoint("TOPRIGHT",slider,"BOTTOMRIGHT",-2,3)
Asa@0 245
Asa@0 246
Asa@0 247 local editbox = CreateFrame("EditBox",nil,frame)
Asa@0 248 editbox:SetAutoFocus(false)
Asa@0 249 editbox:SetFontObject(GameFontHighlightSmall)
Asa@0 250 editbox:SetPoint("TOP",slider,"BOTTOM",0,0)
Asa@0 251 editbox:SetHeight(14)
Asa@0 252 editbox:SetWidth(70)
Asa@0 253 editbox:SetJustifyH("CENTER")
Asa@0 254 editbox:EnableMouse(true)
Asa@0 255 editbox:SetScript("OnEscapePressed",EditBox_OnEscapePressed)
Asa@0 256 editbox:SetScript("OnEnterPressed",EditBox_OnEnterPressed)
Asa@0 257 editbox:SetScript("OnEnter",EditBox_OnEnter)
Asa@0 258 editbox:SetScript("OnLeave",EditBox_OnLeave)
Asa@0 259 editbox:SetBackdrop(ManualBackdrop)
Asa@0 260 editbox:SetBackdropColor(0,0,0,0.5)
Asa@0 261 editbox:SetBackdropBorderColor(0.3,0.3,0.30,0.80)
Asa@0 262 self.editbox = editbox
Asa@0 263 editbox.obj = self
Asa@0 264
Asa@0 265 slider:SetThumbTexture("Interface\\Buttons\\UI-SliderBar-Button-Horizontal")
Asa@0 266
Asa@0 267 frame:SetWidth(200)
Asa@0 268 frame:SetHeight(44)
Asa@0 269 slider:SetPoint("TOP",label,"BOTTOM",0,0)
Asa@0 270 slider:SetPoint("LEFT",frame,"LEFT",3,0)
Asa@0 271 slider:SetPoint("RIGHT",frame,"RIGHT",-3,0)
Asa@0 272
Asa@0 273
Asa@0 274 slider:SetValue(self.value or 0)
Asa@0 275 slider:SetScript("OnValueChanged",Slider_OnValueChanged)
Asa@0 276
Asa@0 277 AceGUI:RegisterAsWidget(self)
Asa@0 278 return self
Asa@0 279 end
Asa@0 280
Asa@0 281 AceGUI:RegisterWidgetType(Type,Constructor,Version)
Asa@0 282 end