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