John@38
|
1 local AceGUI = LibStub("AceGUI-3.0")
|
John@42
|
2 local bsk=bsk
|
John@42
|
3 local _G=_G
|
John@42
|
4 local table=table
|
John@42
|
5 local pairs=pairs
|
John@65
|
6 local setmetatable=setmetatable
|
John@42
|
7 local ipairs=ipairs
|
John@42
|
8 local string=string
|
John@67
|
9 local sformat=string.format
|
John@42
|
10 local tostring=tostring
|
John@42
|
11 local type=type
|
John@42
|
12 local getn=getn
|
John@42
|
13 setfenv(1,bsk)
|
John@1
|
14
|
John@69
|
15 -- todo: switching lists should close a presently-open bid
|
John@69
|
16
|
John@56
|
17 local copy = function(t)
|
John@56
|
18 local c = {}
|
John@56
|
19 if not t then return c end
|
John@56
|
20 for i,v in pairs(t) do c[i] = v end
|
John@56
|
21 return c
|
John@56
|
22 end
|
John@56
|
23 local colorize = function(str,color)
|
John@56
|
24 if str==nil or str=="" then return "" end
|
John@56
|
25 if type(color) == "table" then
|
John@56
|
26 color = string.format("%02x%02x%02x",255*color.r,255*color.g,255*color.b)
|
John@56
|
27 end
|
John@56
|
28 if color == nil then return str end
|
John@56
|
29 return "|cff"..tostring(color or "ffffff")..str.."|r"
|
John@56
|
30 end
|
John@1
|
31
|
John@63
|
32 local CreateListSelector = function(SListPopulator)
|
John@56
|
33 PersonList:RefreshRaidList()
|
John@56
|
34 local pulldown = AceGUI:Create("Dropdown")
|
John@56
|
35 local pull = {}
|
John@56
|
36 local ltemp = 0
|
John@56
|
37 local lids = LootLists:GetAllIds()
|
John@56
|
38 for _,v in pairs(lids) do
|
John@56
|
39 local l = LootLists:Select(v)
|
John@56
|
40 pull[l:GetId()] = l:GetName()
|
John@56
|
41 --local entry = {value=i,text=v.name}
|
John@56
|
42 if l:GetLength() > 0 then
|
John@56
|
43 pulldown:SetItemDisabled(i,true)
|
John@56
|
44 if ltemp == 0 then
|
John@56
|
45 ltemp = l:GetId()
|
John@51
|
46 end
|
John@51
|
47 end
|
John@1
|
48 end
|
John@56
|
49 pulldown:SetWidth(175)
|
John@56
|
50 pulldown:SetList(pull)
|
John@71
|
51 SListPopulator:SetSwidget(pulldown)
|
John@72
|
52 pulldown:SetCallback("OnValueChanged", function(_,_,value) SListPopulator:PulldownEvent(value) end)
|
John@72
|
53 if ltemp > 0 then SListPopulator:PulldownEvent(ltemp) end -- default value
|
John@56
|
54 return pulldown
|
John@1
|
55 end
|
John@1
|
56
|
John@72
|
57 local f, right -- important gui elements
|
John@59
|
58 local escapeButton =
|
John@59
|
59 {
|
John@59
|
60 shown = false,
|
John@59
|
61 ["IsShown"] = function(self) return self.shown end,
|
John@60
|
62 ["Hide"] = function(self) if f then AceGUI:Release(f); self.shown=false end end
|
John@59
|
63 }
|
John@38
|
64
|
John@65
|
65 SelectorListEventDispatcher =
|
John@63
|
66 {
|
John@65
|
67 listeners = nil,
|
John@63
|
68 target = nil,
|
John@67
|
69 line = nil,
|
John@63
|
70 ["SetTarget"] = function(self,other)
|
John@63
|
71 self.target = other
|
John@65
|
72 self.target:SetCallback("OnSelectionCleared",function(...) self:OnSelectionCleared(...) end)
|
John@65
|
73 self.target:SetCallback("OnSelection",function(...) self:OnSelection(...) end)
|
John@63
|
74 end,
|
John@63
|
75 ["RegisterListener"] = function(self,other) table.insert(self.listeners,other) end,
|
John@63
|
76 ["OnSelectionCleared"] = function(self,_)
|
John@67
|
77 self.line = nil
|
John@63
|
78 self:Event("OnSelectionCleared")
|
John@63
|
79 end,
|
John@65
|
80 ["OnSelection"] = function(self,_,_,line)
|
John@67
|
81 self.line = line
|
John@63
|
82 self:Event("OnSelection",line)
|
John@63
|
83 end,
|
John@63
|
84 ["Event"] = function(self,event,arg)
|
John@63
|
85 if not self.target then error("Event called with no listener...") end
|
John@63
|
86 if not self.listeners then return end
|
John@63
|
87 for i,v in pairs(self.listeners) do
|
John@67
|
88 --bsk.print("listener")
|
John@63
|
89 if type(v) == "table" then
|
John@63
|
90 if v[event] then
|
John@63
|
91 v[event](v,arg)
|
John@63
|
92 end
|
John@63
|
93 elseif type(v) == "function" then
|
John@63
|
94 v(event,arg)
|
John@63
|
95 elseif type(v) ~= "nil" then -- allow nils to pass quietly
|
John@63
|
96 _G.error("Bad listener - "..type(v))
|
John@63
|
97 end
|
John@63
|
98 end
|
John@63
|
99 end,
|
John@67
|
100 ["Release"] = function(self) self.listeners = {}; self.target=nil; self.line=nil end,
|
John@67
|
101 ["LatestValue"] = function(self) return self.line end
|
John@63
|
102 }
|
John@65
|
103 function SelectorListEventDispatcher:new()
|
John@65
|
104 local t = {}
|
John@65
|
105 setmetatable(t,SelectorListEventDispatcher)
|
John@65
|
106 self.__index = self
|
John@65
|
107 t.listeners = {}
|
John@65
|
108 return t
|
John@63
|
109 end
|
John@65
|
110
|
John@65
|
111 SListEventDispatch = SelectorListEventDispatcher:new()
|
John@65
|
112 LListEventDispatch = SelectorListEventDispatcher:new()
|
John@67
|
113 RListEventDispatch = SelectorListEventDispatcher:new()
|
John@65
|
114
|
John@63
|
115 local SListPopulator =
|
John@63
|
116 {
|
John@63
|
117 filtered = false,
|
John@63
|
118 widget = nil,
|
John@71
|
119 swidget = nil,
|
John@63
|
120 data = nil,
|
John@63
|
121 lref = nil,
|
John@63
|
122
|
John@71
|
123 ["Release"] = function(self) self.filtered, self.widget, self.swidget, self.data, self.lref = false, nil, nil, nil, nil end,
|
John@63
|
124 ["Redraw"] = function(self)
|
John@63
|
125 if self.lref == nil or self.widget == nil then return end -- don't do work if not fully initialized
|
John@63
|
126 self.data = {}
|
John@63
|
127 for le in self.lref:OrderedListEntryIter() do
|
John@63
|
128 local disabled = not PersonList:IsActive(le:GetId())
|
John@63
|
129 if not self.filtered or not disabled then
|
John@63
|
130 local line = {value=le:GetId(),text=le:GetName(),icon=[[Interface\Glues\CharacterCreate\UI-CharacterCreate-Classes]]}
|
John@63
|
131 line.iconCoords=_G.CLASS_ICON_TCOORDS[le:GetClass()]
|
John@67
|
132 line.textPlain = line.text
|
John@63
|
133 line.text=colorize(line.text,_G.RAID_CLASS_COLORS[le:GetClass()])
|
John@63
|
134 line.disabled = disabled
|
John@63
|
135 table.insert(self.data,line)
|
John@63
|
136 end
|
John@63
|
137 end
|
John@63
|
138 self.widget:SetList(self.data)
|
John@65
|
139 SListEventDispatch:Event("Redraw")
|
John@63
|
140 end,
|
John@71
|
141 ["SetSwidget"] = function(self,w)
|
John@71
|
142 if type(w) ~= "table" or type(w.SetList) ~= "function" then
|
John@71
|
143 _G.error("Bad SetWidget")
|
John@71
|
144 end
|
John@71
|
145 self.swidget = w
|
John@71
|
146 end,
|
John@63
|
147 ["SetWidget"] = function(self,w)
|
John@65
|
148 if type(w) ~= "table" or type(w.SetList) ~= "function" then
|
John@63
|
149 _G.error("Bad SetWidget")
|
John@63
|
150 end
|
John@63
|
151 self.widget = w
|
John@63
|
152 end,
|
John@63
|
153 ["SetFiltered"] = function(self,value)
|
John@63
|
154 self.filtered = value
|
John@63
|
155 self:Redraw()
|
John@63
|
156 end,
|
John@72
|
157 ["SelectList"] = function(self,value,nocomm)
|
John@71
|
158 self.swidget:SetValue(value)
|
John@72
|
159 local l = LootLists:Select(value)
|
John@72
|
160 if l ~= self.lref then
|
John@72
|
161 self.lref = l
|
John@72
|
162 self:Redraw()
|
John@72
|
163 end
|
John@72
|
164 if nocomm then InitiateActiveList(value) end
|
John@72
|
165 end,
|
John@72
|
166
|
John@72
|
167
|
John@72
|
168 ["PulldownEvent"] = function(self,value)
|
John@72
|
169 self:SelectList(value)
|
John@72
|
170 if admin and state == "looting" then
|
John@72
|
171 InitiateActivateList(value)
|
John@72
|
172 end
|
John@68
|
173 end,
|
John@68
|
174 ["DataEvent"] = function(self)
|
John@68
|
175 self:Redraw()
|
John@69
|
176 end,
|
John@72
|
177 ["StateEvent"] = function(self)
|
John@72
|
178 if state == "bidding" or (state == "looting" and not admin) then
|
John@72
|
179 self.swidget:SetDisabled(true)
|
John@72
|
180 self:SelectList(stateactivelist)
|
John@72
|
181 elseif state == "looting" and admin then
|
John@72
|
182 self.swidget:SetDisabled(false)
|
John@72
|
183 else
|
John@72
|
184 self.swidget:SetDisabled(false)
|
John@72
|
185 end
|
John@72
|
186 -- if bidding then disable pulldown
|
John@72
|
187 -- if looting and not admin then disable pulldown
|
John@72
|
188 -- if looting and admin then enable pulldown
|
John@72
|
189 -- otherwise enable pulldown
|
John@72
|
190 end,
|
John@72
|
191 ["ActiveListEvent"] = function(self)
|
John@72
|
192 self:SelectList(stateactivelist)
|
John@72
|
193 end,
|
John@72
|
194
|
John@72
|
195
|
John@72
|
196
|
John@69
|
197 ["GetMe"] = function(self)
|
John@69
|
198 local me = _G.UnitName("player")
|
John@69
|
199 for i,v in pairs(self.data) do
|
John@69
|
200 if v.textPlain == me then
|
John@69
|
201 return v
|
John@69
|
202 end
|
John@69
|
203 end
|
John@69
|
204 end,
|
John@69
|
205 }
|
John@69
|
206
|
John@69
|
207 local LListPopulator =
|
John@69
|
208 {
|
John@69
|
209 -- todo: set event receivers from the comm and for loot
|
John@69
|
210 data = {},
|
John@69
|
211 widget = nil,
|
John@69
|
212 ["Release"] = function(self) self.data = {}; self.widget = nil end,
|
John@69
|
213 ["Redraw"]= function(self)
|
John@69
|
214 self.widget:SetList(self.data)
|
John@69
|
215 LListEventDispatch:Event("Redraw")
|
John@69
|
216 end,
|
John@69
|
217 ["SetWidget"] = function(self,w)
|
John@69
|
218 if type(w) ~= "table" or type(w.SetList) ~= "function" then
|
John@69
|
219 _G.error("Bad SetWidget")
|
John@69
|
220 end
|
John@69
|
221 self.widget = w
|
John@69
|
222 if debug then
|
John@69
|
223 self.data = {
|
John@69
|
224 {
|
John@69
|
225 value=1,
|
John@69
|
226 text = "|cffa335ee|Hitem:77109:4080:4009:0:0:0:0:0:85:0|h[Band of Reconstruction]|h|r",
|
John@69
|
227 link = "|cffa335ee|Hitem:77109:4080:4009:0:0:0:0:0:85:0|h[Band of Reconstruction]|h|r",
|
John@69
|
228 },
|
John@69
|
229 {
|
John@69
|
230 value=2,
|
John@69
|
231 text = "|cffa335ee|Hitem:19351:0:0:0:0:0:0:0:85:0|h[Maladath, Runed Blade of the Black Flight]|h|r",
|
John@69
|
232 link = "|cffa335ee|Hitem:19351:0:0:0:0:0:0:0:85:0|h[Maladath, Runed Blade of the Black Flight]|h|r"
|
John@69
|
233 },
|
John@69
|
234 {
|
John@69
|
235 value=3,
|
John@69
|
236 text = "|cffa335ee|Hitem:31986:0:0:0:0:0:0:0:85:0|h[Merciless Gladiator's Crossbow of the Phoenix]|h|r",
|
John@69
|
237 link = "|cffa335ee|Hitem:31986:0:0:0:0:0:0:0:85:0|h[Merciless Gladiator's Crossbow of the Phoenix]|h|r"
|
John@69
|
238 },
|
John@69
|
239 {
|
John@69
|
240 value=4,
|
John@69
|
241 text = "|cffa335ee|Hitem:65003:0:0:0:0:0:0:0:85:0|h[Reclaimed Ashkandi, Greatsword of the Brotherhood]|h|r",
|
John@69
|
242 link = "|cffa335ee|Hitem:65003:0:0:0:0:0:0:0:85:0|h[Reclaimed Ashkandi, Greatsword of the Brotherhood]|h|r"
|
John@69
|
243 },
|
John@69
|
244 {
|
John@69
|
245 value=5,
|
John@69
|
246 text = "|cffff8000|Hitem:19019:0:0:0:0:0:0:0:85:0|h[Thunderfury, Blessed Blade of the Windseeker]|h|r",
|
John@69
|
247 link = "|cffff8000|Hitem:19019:0:0:0:0:0:0:0:85:0|h[Thunderfury, Blessed Blade of the Windseeker]|h|r"
|
John@69
|
248 },
|
John@69
|
249 }
|
John@69
|
250 end
|
John@69
|
251 self:Redraw()
|
John@69
|
252 end,
|
John@69
|
253 }
|
John@69
|
254
|
John@69
|
255 local RListPopulator =
|
John@69
|
256 {
|
John@69
|
257 widget = nil,
|
John@71
|
258 ["RollEvent"] = function(self) self:Redraw() end,
|
John@71
|
259 ["Release"] = function(self) self.widget = nil end,
|
John@69
|
260 ["Redraw"] = function(self)
|
John@71
|
261 self.widget:SetList(statebids)
|
John@69
|
262 RListEventDispatch:Event("Redraw")
|
John@69
|
263 end,
|
John@69
|
264 ["SetWidget"] = function(self,w)
|
John@69
|
265 if type(w) ~= "table" or type(w.SetList) ~= "function" then
|
John@69
|
266 _G.error("Bad SetWidget")
|
John@69
|
267 end
|
John@69
|
268 self.widget = w
|
John@71
|
269 --if debug then
|
John@71
|
270 -- local dummydata = {}
|
John@71
|
271 -- local tree = SListPopulator.data
|
John@71
|
272 -- for i,v in pairs(tree) do dummydata[i] = copy(v); dummydata[i].disabled = false end
|
John@71
|
273 -- if dummydata[2] then dummydata[2].text = dummydata[2].text .. " (roll 73)" end
|
John@71
|
274 -- self.data = dummydata
|
John@71
|
275 --end
|
John@69
|
276 self:Redraw()
|
John@69
|
277 end,
|
John@69
|
278 ["Force"] = function(self,who)
|
John@69
|
279 local new = self.Convert(who,72)
|
John@71
|
280 InitiateBid(new)
|
John@71
|
281 --self:Redraw()
|
John@69
|
282 end,
|
John@69
|
283 ["Retract"] = function(self,who)
|
John@71
|
284 -- todo
|
John@71
|
285 --for i,v in pairs(self.data) do
|
John@71
|
286 -- if who.value == v.value then
|
John@71
|
287 -- table.remove(self.data,i)
|
John@71
|
288 -- end
|
John@71
|
289 --end
|
John@71
|
290 InitiateRetract(copy(who))
|
John@71
|
291 --self:Redraw()
|
John@69
|
292 end,
|
John@69
|
293 ["Convert"] = function(who,roll) -- convert an LE object into one suitable to put in a SelectorList
|
John@69
|
294 local new = copy(who)
|
John@69
|
295 new.disabled = false -- todo: should be unnessary - they can't get on the list like this
|
John@69
|
296 if roll then
|
John@69
|
297 new.text = new.text .. " (roll 73)"
|
John@69
|
298 end
|
John@69
|
299 return new
|
John@69
|
300 end,
|
John@63
|
301 }
|
John@63
|
302
|
John@68
|
303 DataEventDispatch =
|
John@68
|
304 {
|
John@68
|
305 -- todo: batch events
|
John@68
|
306 listeners = {},
|
John@68
|
307 ["DataEvent"] = function(self,_) --todo: pass along the received event
|
John@68
|
308 for i,v in pairs(self.listeners) do
|
John@68
|
309 if v and v["DataEvent"] then
|
John@68
|
310 v:DataEvent()
|
John@68
|
311 end
|
John@68
|
312 end
|
John@68
|
313 end,
|
John@68
|
314 ["RegisterListener"] = function(self,listener)
|
John@68
|
315 if not listener or not listener["DataEvent"] then
|
John@68
|
316 _G.error("Bad listener")
|
John@68
|
317 end
|
John@68
|
318 table.insert(self.listeners,listener)
|
John@68
|
319 end
|
John@68
|
320 }
|
John@68
|
321
|
John@68
|
322 function OnInitializeSetStaticData()
|
John@68
|
323 SetChangeListener(DataEventDispatch)
|
John@68
|
324 DataEventDispatch:RegisterListener(SListPopulator)
|
John@72
|
325 RegisterListenerActiveListChanged(SListPopulator)
|
John@72
|
326 RegisterListenerStateChange(SListPopulator)
|
John@71
|
327 RegisterListenerRolls(RListPopulator)
|
John@68
|
328 end
|
John@68
|
329
|
John@42
|
330 function CreateGUI()
|
John@59
|
331 -- special registration procedure to be closable with the escape button
|
John@59
|
332 --escapeButton.shown = true
|
John@59
|
333 --_G["BSK_ESCAPEBUTTON"] = escapeButton
|
John@59
|
334 --table.insert(_G.UISpecialFrames, "BSK_ESCAPEBUTTON")
|
John@59
|
335
|
John@60
|
336 if f then return end -- no second gui please
|
John@59
|
337 f = AceGUI:Create("Frame")
|
John@1
|
338
|
John@69
|
339 f:SetCallback("OnClose",function(widget) escapeButton.shown = false; AceGUI:Release(widget); f=nil; right=nil; SListEventDispatch:Release(); LListEventDispatch:Release(); SListPopulator:Release(); RListEventDispatch:Release(); LListPopulator:Release(); RListPopulator:Release() end)
|
John@56
|
340 f:SetTitle("BSK")
|
John@56
|
341 f:SetLayout("Flow")
|
John@56
|
342 f:SetHeight(680)
|
John@56
|
343 f:SetWidth(580)
|
John@1
|
344
|
John@56
|
345 local left = AceGUI:Create("InlineGroup")
|
John@56
|
346 left:SetLayout("List")
|
John@56
|
347 left:SetWidth(175)
|
John@56
|
348 left:SetFullHeight(true)
|
John@56
|
349 left.alignoffset=0.25 -- hack, as per http://forums.wowace.com/showthread.php?t=17114
|
John@1
|
350
|
John@65
|
351 right = AceGUI:Create("InlineGroup")
|
John@56
|
352 right:SetLayout("Flow")
|
John@56
|
353 right:SetWidth(700-175-160)
|
John@56
|
354 right:SetFullHeight(true)
|
John@56
|
355 right.alignoffset=0.25
|
John@38
|
356
|
John@56
|
357 local t1 = AceGUI:Create("SelectorList")
|
John@56
|
358 t1:SetNumLines(25)
|
John@56
|
359 t1:SetFullWidth(true)
|
John@56
|
360 t1:SetInteractive(admin)
|
John@69
|
361 SListEventDispatch:SetTarget(t1)
|
John@63
|
362 SListPopulator:SetWidget(t1)
|
John@38
|
363
|
John@63
|
364 local p1 = CreateListSelector(SListPopulator)
|
John@56
|
365 p1:SetFullWidth(true)
|
John@38
|
366
|
John@56
|
367 left:AddChild(p1)
|
John@56
|
368 left:AddChild(t1)
|
John@38
|
369
|
John@56
|
370 local t2 = AceGUI:Create("SelectorList")
|
John@56
|
371 t2:SetNumLines(7)
|
John@56
|
372 t2:SetFullWidth(true)
|
John@56
|
373 t2:EnableButtonTooltips(true)
|
John@65
|
374 LListEventDispatch:SetTarget(t2)
|
John@69
|
375 LListPopulator:SetWidget(t2)
|
John@65
|
376
|
John@65
|
377 local biddingZone = AceGUI:Create("SimpleGroup")
|
John@65
|
378 biddingZone:SetLayout("Flow")
|
John@65
|
379 biddingZone:SetFullWidth(true)
|
John@38
|
380
|
John@60
|
381 local alb1, alb2, alb3
|
John@60
|
382 if admin then
|
John@60
|
383 alb1 = AceGUI:Create("Button")
|
John@60
|
384 alb1:SetWidth(100)
|
John@60
|
385 alb1:SetText("Open Bids")
|
John@65
|
386 alb1.userdata =
|
John@65
|
387 {
|
John@65
|
388 state = false,
|
John@65
|
389 widget = alb1,
|
John@65
|
390 ["Redraw"] = function(self,_) self.widget:SetDisabled(true); self.item = nil end,
|
John@65
|
391 ["OnSelection"] = function(self,value) self.widget:SetDisabled(false); self.item = value end,
|
John@65
|
392 ["OnSelectionCleared"] = function(self) self.widget:SetDisabled(true); self.item = nil end
|
John@65
|
393 }
|
John@65
|
394 alb1:SetDisabled(true)
|
John@65
|
395 LListEventDispatch:RegisterListener(alb1.userdata)
|
John@65
|
396 alb1:SetCallback("OnClick",
|
John@65
|
397 function(widget)
|
John@65
|
398 if widget.userdata.state then -- we were bidding when the button was pressed
|
John@65
|
399 biddingZone:ReleaseChildren()
|
John@68
|
400 widget:SetText("Open Bids")
|
John@67
|
401 RListEventDispatch:Release()
|
John@70
|
402 RListPopulator:Release()
|
John@65
|
403 else
|
John@68
|
404 widget:SetText("Close bids")
|
John@65
|
405 local spacer = AceGUI:Create("Label")
|
John@65
|
406 spacer:SetText(" ")
|
John@65
|
407 spacer:SetFullWidth(true)
|
John@65
|
408 local spacer2 = AceGUI:Create("Label")
|
John@65
|
409 spacer2:SetText(" ")
|
John@65
|
410 spacer2:SetFullWidth(true)
|
John@65
|
411
|
John@65
|
412 local label = AceGUI:Create("Label")
|
John@65
|
413 label:SetText("Bidding now open for ...")
|
John@65
|
414 local biddingOn = AceGUI:Create("InteractiveLabel")
|
John@67
|
415 biddingOn.userdata = { LListEventDispatch:LatestValue().link }
|
John@65
|
416 biddingOn:SetText(biddingOn.userdata[1])
|
John@65
|
417 biddingOn:SetFullWidth(true)
|
John@65
|
418 biddingOn:SetCallback("OnEnter", function(widget) _G.GameTooltip:SetOwner(widget.frame,"ANCHOR_RIGHT"); _G.GameTooltip:SetHyperlink(widget.userdata[1]); _G.GameTooltip:Show() end )
|
John@65
|
419 biddingOn:SetCallback("OnLeave", function(widget) _G.GameTooltip:Hide() end )
|
John@65
|
420 local b1 = AceGUI:Create("SelectorList")
|
John@65
|
421 b1:SetNumLines(6)
|
John@65
|
422 b1:SetInteractive(admin)
|
John@65
|
423 local bidTitle = AceGUI:Create("Label")
|
John@65
|
424 bidTitle:SetText("Current bids")
|
John@65
|
425 bidTitle:SetFullWidth(true)
|
John@65
|
426
|
John@65
|
427 local bidRetractButton = AceGUI:Create("Button")
|
John@65
|
428 bidRetractButton:SetText("Place Bid")
|
John@65
|
429 bidRetractButton:SetWidth(100)
|
John@70
|
430 bidRetractButton:SetCallback("OnClick", function(widget) RListPopulator:Force(SListPopulator:GetMe()) end) -- todo: Force is not the desired thing here.
|
John@65
|
431 local rollButton = AceGUI:Create("Button")
|
John@65
|
432 rollButton:SetText("Offset Roll")
|
John@65
|
433 rollButton:SetWidth(100)
|
John@65
|
434
|
John@69
|
435 RListEventDispatch:SetTarget(b1)
|
John@69
|
436 RListPopulator:SetWidget(b1)
|
John@67
|
437
|
John@71
|
438 InitiateOpenBid(LListEventDispatch:LatestValue())
|
John@71
|
439
|
John@65
|
440 local g1
|
John@65
|
441 if admin then
|
John@65
|
442 b1.alignoffset = 0.25 -- or else g1 won't align well
|
John@65
|
443 g1 = AceGUI:Create("SimpleGroup")
|
John@65
|
444 g1.alignoffset = 0.25
|
John@65
|
445 g1:SetWidth(120)
|
John@65
|
446 g1:SetLayout("List")
|
John@65
|
447
|
John@67
|
448 -- todo: convoluted and repetitive - surely there's a
|
John@67
|
449 -- better way than this ...
|
John@65
|
450 adminForce = AceGUI:Create("Button")
|
John@67
|
451 if SListEventDispatch:LatestValue() then
|
John@67
|
452 adminForce:SetText(sformat("Force bid (%s)",SListEventDispatch:LatestValue().textPlain))
|
John@67
|
453 adminForce:SetDisabled(false)
|
John@67
|
454 else
|
John@67
|
455 adminForce:SetText("Force bid")
|
John@67
|
456 adminForce:SetDisabled(true)
|
John@67
|
457 end
|
John@67
|
458 adminForce:SetWidth(160)
|
John@69
|
459 adminForce:SetCallback("OnClick",function(widget) RListPopulator:Force(SListEventDispatch:LatestValue()) end)
|
John@67
|
460 adminForce.userdata =
|
John@67
|
461 {
|
John@67
|
462 widget = adminForce,
|
John@67
|
463 ["Redraw"] = function(self,_) self.widget:SetDisabled(true); self.widget:SetText("Force bid") end,
|
John@67
|
464 ["OnSelection"] = function(self,_) self.widget:SetDisabled(false); self.widget:SetText(sformat("Force bid (%s)",SListEventDispatch:LatestValue().textPlain)) end,
|
John@67
|
465 ["OnSelectionCleared"] = function(self) self.widget:SetDisabled(true); self.widget:SetText("Force bid") end
|
John@67
|
466 }
|
John@67
|
467 SListEventDispatch:RegisterListener(adminForce.userdata)
|
John@65
|
468
|
John@65
|
469 adminRetract = AceGUI:Create("Button")
|
John@67
|
470 if RListEventDispatch:LatestValue() then
|
John@67
|
471 adminRetract:SetText(sformat("Retract bid (%s)",RListEventDispatch:LatestValue().textPlain))
|
John@67
|
472 adminRetract:SetDisabled(false)
|
John@67
|
473 else
|
John@67
|
474 adminRetract:SetText("Retract bid")
|
John@67
|
475 adminRetract:SetDisabled(true)
|
John@67
|
476 end
|
John@67
|
477 adminRetract:SetWidth(160)
|
John@67
|
478 adminRetract.userdata =
|
John@67
|
479 {
|
John@67
|
480 widget = adminRetract,
|
John@67
|
481 ["Redraw"] = function(self,_) self.widget:SetDisabled(true); self.widget:SetText("Retract bid") end,
|
John@67
|
482 ["OnSelection"] = function(self,_) self.widget:SetDisabled(false); self.widget:SetText(sformat("Retract bid (%s)",RListEventDispatch:LatestValue().textPlain)) end,
|
John@67
|
483 ["OnSelectionCleared"] = function(self) self.widget:SetDisabled(true); self.widget:SetText("Retract bid") end
|
John@67
|
484 }
|
John@69
|
485 adminRetract:SetCallback("OnClick",function(widget) RListPopulator:Retract(RListEventDispatch:LatestValue()) end)
|
John@67
|
486 RListEventDispatch:RegisterListener(adminRetract.userdata)
|
John@67
|
487 adminRetract:SetDisabled(true)
|
John@65
|
488
|
John@65
|
489 g1:AddChildren(adminForce,adminRetract)
|
John@65
|
490 end
|
John@65
|
491
|
John@65
|
492 biddingZone:AddChildren(spacer,label,biddingOn,bidRetractButton,rollButton,spacer2,bidTitle,b1)
|
John@65
|
493 if admin then biddingZone:AddChildren(g1) end
|
John@65
|
494 end
|
John@65
|
495 widget.userdata.state = not widget.userdata.state
|
John@65
|
496 end
|
John@65
|
497 )
|
John@60
|
498
|
John@60
|
499 alb2 = AceGUI:Create("Button")
|
John@60
|
500 alb2:SetWidth(100)
|
John@60
|
501 alb2:SetText("Assign")
|
John@65
|
502 alb2.userdata =
|
John@65
|
503 {
|
John@65
|
504 widget = alb2,
|
John@65
|
505 ["OnUpdate"] = function(self) self.widget:SetDisabled(not (self.slist.checked and self.llist.checked)) end,
|
John@65
|
506 }
|
John@65
|
507 alb2.userdata.slist =
|
John@65
|
508 {
|
John@65
|
509 parent = alb2.userdata,
|
John@65
|
510 checked = false,
|
John@65
|
511 ["Redraw"] = function(self) self.checked = false; self.parent:OnUpdate() end,
|
John@65
|
512 ["OnSelection"] = function(self) self.checked = true; self.parent:OnUpdate() end,
|
John@65
|
513 ["OnSelectionCleared"] = function(self) self.checked = false; self.parent:OnUpdate() end,
|
John@65
|
514 }
|
John@65
|
515 alb2.userdata.llist =
|
John@65
|
516 {
|
John@65
|
517 parent = alb2.userdata,
|
John@65
|
518 checked = false,
|
John@65
|
519 ["Redraw"] = function(self) self.checked = false; self.parent:OnUpdate() end,
|
John@65
|
520 ["OnSelection"] = function(self) self.checked = true; self.parent:OnUpdate() end,
|
John@65
|
521 ["OnSelectionCleared"] = function(self) self.checked = false; self.parent:OnUpdate() end,
|
John@65
|
522 }
|
John@65
|
523 SListEventDispatch:RegisterListener(alb2.userdata.slist)
|
John@65
|
524 LListEventDispatch:RegisterListener(alb2.userdata.llist)
|
John@60
|
525
|
John@60
|
526 alb3 = AceGUI:Create("Button")
|
John@60
|
527 alb3:SetWidth(100)
|
John@60
|
528 alb3:SetText("Suicide")
|
John@65
|
529 alb3.userdata = -- TODO: holy hell, come up with a pattern or something for this ....
|
John@65
|
530 {
|
John@65
|
531 widget = alb3,
|
John@65
|
532 ["OnUpdate"] = function(self) self.widget:SetDisabled(not (self.slist.checked and self.llist.checked)) end,
|
John@65
|
533 }
|
John@65
|
534 alb3.userdata.slist =
|
John@65
|
535 {
|
John@65
|
536 parent = alb3.userdata,
|
John@65
|
537 checked = false,
|
John@65
|
538 ["Redraw"] = function(self) self.checked = false; self.parent:OnUpdate() end,
|
John@65
|
539 ["OnSelection"] = function(self) self.checked = true; self.parent:OnUpdate() end,
|
John@65
|
540 ["OnSelectionCleared"] = function(self) self.checked = false; self.parent:OnUpdate() end,
|
John@65
|
541 }
|
John@65
|
542 alb3.userdata.llist =
|
John@65
|
543 {
|
John@65
|
544 parent = alb3.userdata,
|
John@65
|
545 checked = false,
|
John@65
|
546 ["Redraw"] = function(self) self.checked = false; self.parent:OnUpdate() end,
|
John@65
|
547 ["OnSelection"] = function(self) self.checked = true; self.parent:OnUpdate() end,
|
John@65
|
548 ["OnSelectionCleared"] = function(self) self.checked = false; self.parent:OnUpdate() end,
|
John@65
|
549 }
|
John@65
|
550 SListEventDispatch:RegisterListener(alb3.userdata.slist)
|
John@65
|
551 LListEventDispatch:RegisterListener(alb3.userdata.llist)
|
John@60
|
552 end
|
John@38
|
553
|
John@65
|
554 local suicideSelected, undo
|
John@60
|
555 if admin then
|
John@60
|
556
|
John@60
|
557 suicideSelected = AceGUI:Create("Button")
|
John@60
|
558 suicideSelected:SetFullWidth(true)
|
John@60
|
559 suicideSelected:SetText("Suicide")
|
John@68
|
560 suicideSelected:SetCallback("OnClick",
|
John@68
|
561 function(_)
|
John@68
|
562 local p = SListEventDispatch:LatestValue()
|
John@68
|
563 local lref = SListPopulator.lref
|
John@68
|
564 lref:SuicidePerson(p.value)
|
John@68
|
565 end
|
John@68
|
566 )
|
John@68
|
567
|
John@63
|
568 -- use userdata + SListEventDispatch to toggle state
|
John@63
|
569 suicideSelected.userdata =
|
John@63
|
570 {
|
John@63
|
571 widget = suicideSelected,
|
John@65
|
572 ["Redraw"] = function(self,_) self.widget:SetDisabled(true) end,
|
John@63
|
573 ["OnSelection"] = function(self,_) self.widget:SetDisabled(false) end,
|
John@63
|
574 ["OnSelectionCleared"] = function(self) self.widget:SetDisabled(true) end
|
John@63
|
575 }
|
John@63
|
576 SListEventDispatch:RegisterListener(suicideSelected.userdata)
|
John@60
|
577
|
John@60
|
578 undo = AceGUI:Create("Button")
|
John@63
|
579 undo:SetText("Undo / out of order")
|
John@60
|
580 undo:SetFullWidth(true)
|
John@63
|
581 undo:SetDisabled(true)
|
John@60
|
582 end
|
John@60
|
583
|
John@56
|
584 local filter = AceGUI:Create("CheckBox")
|
John@56
|
585 filter:SetLabel("Only show active")
|
John@56
|
586 filter:SetFullWidth(true)
|
John@63
|
587 filter:SetValue(false)
|
John@63
|
588 SListPopulator:SetFiltered(false)
|
John@63
|
589 filter:SetCallback("OnValueChanged",function(widget,_,value) SListPopulator:SetFiltered(value) end)
|
John@56
|
590
|
John@56
|
591 left:AddChildren(filter)
|
John@56
|
592 if admin then left:AddChildren(suicideSelected,undo) end
|
John@56
|
593 right:AddChildren(t2)
|
John@56
|
594 if admin then right:AddChildren(alb1,alb2,alb3) end
|
John@56
|
595 right:AddChildren(biddingZone)
|
John@56
|
596 f:AddChildren(left,right)
|
John@58
|
597
|
John@58
|
598
|
John@1
|
599 end
|