Mercurial > wow > itemauditor
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 |