Mercurial > wow > breuesk
comparison Gui.lua @ 69:b7352f007028
Working on bids/rolls in the GUI
Added debug mode to populate things with dummy data.
author | John@Yosemite-PC |
---|---|
date | Thu, 29 Mar 2012 20:17:59 -0400 |
parents | a177b863ed6c |
children | 236117ab8a49 |
comparison
equal
deleted
inserted
replaced
68:a177b863ed6c | 69:b7352f007028 |
---|---|
9 local sformat=string.format | 9 local sformat=string.format |
10 local tostring=tostring | 10 local tostring=tostring |
11 local type=type | 11 local type=type |
12 local getn=getn | 12 local getn=getn |
13 setfenv(1,bsk) | 13 setfenv(1,bsk) |
14 | |
15 -- todo: switching lists should close a presently-open bid | |
14 | 16 |
15 local copy = function(t) | 17 local copy = function(t) |
16 local c = {} | 18 local c = {} |
17 if not t then return c end | 19 if not t then return c end |
18 for i,v in pairs(t) do c[i] = v end | 20 for i,v in pairs(t) do c[i] = v end |
149 self.lref = LootLists:Select(value) | 151 self.lref = LootLists:Select(value) |
150 self:Redraw() | 152 self:Redraw() |
151 end, | 153 end, |
152 ["DataEvent"] = function(self) | 154 ["DataEvent"] = function(self) |
153 self:Redraw() | 155 self:Redraw() |
154 end | 156 end, |
157 ["GetMe"] = function(self) | |
158 local me = _G.UnitName("player") | |
159 for i,v in pairs(self.data) do | |
160 if v.textPlain == me then | |
161 return v | |
162 end | |
163 end | |
164 end, | |
165 } | |
166 | |
167 local LListPopulator = | |
168 { | |
169 -- todo: set event receivers from the comm and for loot | |
170 data = {}, | |
171 widget = nil, | |
172 ["Release"] = function(self) self.data = {}; self.widget = nil end, | |
173 ["Redraw"]= function(self) | |
174 self.widget:SetList(self.data) | |
175 LListEventDispatch:Event("Redraw") | |
176 end, | |
177 ["SetWidget"] = function(self,w) | |
178 if type(w) ~= "table" or type(w.SetList) ~= "function" then | |
179 _G.error("Bad SetWidget") | |
180 end | |
181 self.widget = w | |
182 if debug then | |
183 self.data = { | |
184 { | |
185 value=1, | |
186 text = "|cffa335ee|Hitem:77109:4080:4009:0:0:0:0:0:85:0|h[Band of Reconstruction]|h|r", | |
187 link = "|cffa335ee|Hitem:77109:4080:4009:0:0:0:0:0:85:0|h[Band of Reconstruction]|h|r", | |
188 }, | |
189 { | |
190 value=2, | |
191 text = "|cffa335ee|Hitem:19351:0:0:0:0:0:0:0:85:0|h[Maladath, Runed Blade of the Black Flight]|h|r", | |
192 link = "|cffa335ee|Hitem:19351:0:0:0:0:0:0:0:85:0|h[Maladath, Runed Blade of the Black Flight]|h|r" | |
193 }, | |
194 { | |
195 value=3, | |
196 text = "|cffa335ee|Hitem:31986:0:0:0:0:0:0:0:85:0|h[Merciless Gladiator's Crossbow of the Phoenix]|h|r", | |
197 link = "|cffa335ee|Hitem:31986:0:0:0:0:0:0:0:85:0|h[Merciless Gladiator's Crossbow of the Phoenix]|h|r" | |
198 }, | |
199 { | |
200 value=4, | |
201 text = "|cffa335ee|Hitem:65003:0:0:0:0:0:0:0:85:0|h[Reclaimed Ashkandi, Greatsword of the Brotherhood]|h|r", | |
202 link = "|cffa335ee|Hitem:65003:0:0:0:0:0:0:0:85:0|h[Reclaimed Ashkandi, Greatsword of the Brotherhood]|h|r" | |
203 }, | |
204 { | |
205 value=5, | |
206 text = "|cffff8000|Hitem:19019:0:0:0:0:0:0:0:85:0|h[Thunderfury, Blessed Blade of the Windseeker]|h|r", | |
207 link = "|cffff8000|Hitem:19019:0:0:0:0:0:0:0:85:0|h[Thunderfury, Blessed Blade of the Windseeker]|h|r" | |
208 }, | |
209 } | |
210 end | |
211 self:Redraw() | |
212 end, | |
213 } | |
214 | |
215 local RListPopulator = | |
216 { | |
217 data = {}, | |
218 widget = nil, | |
219 ["Release"] = function(self) self.data = {}; self.widget = nil end, | |
220 ["Redraw"] = function(self) | |
221 self.widget:SetList(self.data) | |
222 RListEventDispatch:Event("Redraw") | |
223 end, | |
224 ["SetWidget"] = function(self,w) | |
225 if type(w) ~= "table" or type(w.SetList) ~= "function" then | |
226 _G.error("Bad SetWidget") | |
227 end | |
228 self.widget = w | |
229 if debug then | |
230 local dummydata = {} | |
231 local tree = SListPopulator.data | |
232 for i,v in pairs(tree) do dummydata[i] = copy(v); dummydata[i].disabled = false end | |
233 if dummydata[2] then dummydata[2].text = dummydata[2].text .. " (roll 73)" end | |
234 self.data = dummydata | |
235 end | |
236 self:Redraw() | |
237 end, | |
238 ["Force"] = function(self,who) | |
239 for i,v in pairs(self.data) do | |
240 if who.value == v.value then | |
241 print(who.value .. " is already on the list") | |
242 return -- no double adds please | |
243 end | |
244 end | |
245 local new = self.Convert(who,72) | |
246 table.insert(self.data,new) | |
247 -- todo: keep this list sorted | |
248 self:Redraw() | |
249 end, | |
250 ["Retract"] = function(self,who) | |
251 for i,v in pairs(self.data) do | |
252 if who.value == v.value then | |
253 table.remove(self.data,i) | |
254 end | |
255 end | |
256 self:Redraw() | |
257 end, | |
258 ["Convert"] = function(who,roll) -- convert an LE object into one suitable to put in a SelectorList | |
259 local new = copy(who) | |
260 new.disabled = false -- todo: should be unnessary - they can't get on the list like this | |
261 if roll then | |
262 new.text = new.text .. " (roll 73)" | |
263 end | |
264 return new | |
265 end, | |
155 } | 266 } |
156 | 267 |
157 DataEventDispatch = | 268 DataEventDispatch = |
158 { | 269 { |
159 -- todo: batch events | 270 -- todo: batch events |
183 --escapeButton.shown = true | 294 --escapeButton.shown = true |
184 --_G["BSK_ESCAPEBUTTON"] = escapeButton | 295 --_G["BSK_ESCAPEBUTTON"] = escapeButton |
185 --table.insert(_G.UISpecialFrames, "BSK_ESCAPEBUTTON") | 296 --table.insert(_G.UISpecialFrames, "BSK_ESCAPEBUTTON") |
186 | 297 |
187 if f then return end -- no second gui please | 298 if f then return end -- no second gui please |
188 local admin = bsk.admin or true | 299 local admin = admin or true |
189 f = AceGUI:Create("Frame") | 300 f = AceGUI:Create("Frame") |
190 | 301 |
191 f:SetCallback("OnClose",function(widget) escapeButton.shown = false; AceGUI:Release(widget); f=nil; right=nil; SListEventDispatch:Release(); LListEventDispatch:Release(); SListPopulator:Release(); RListEventDispatch:Release() end) | 302 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) |
192 f:SetTitle("BSK") | 303 f:SetTitle("BSK") |
193 f:SetLayout("Flow") | 304 f:SetLayout("Flow") |
194 f:SetHeight(680) | 305 f:SetHeight(680) |
195 f:SetWidth(580) | 306 f:SetWidth(580) |
196 | 307 |
208 | 319 |
209 local t1 = AceGUI:Create("SelectorList") | 320 local t1 = AceGUI:Create("SelectorList") |
210 t1:SetNumLines(25) | 321 t1:SetNumLines(25) |
211 t1:SetFullWidth(true) | 322 t1:SetFullWidth(true) |
212 t1:SetInteractive(admin) | 323 t1:SetInteractive(admin) |
324 SListEventDispatch:SetTarget(t1) | |
213 SListPopulator:SetWidget(t1) | 325 SListPopulator:SetWidget(t1) |
214 SListEventDispatch:SetTarget(t1) | |
215 | 326 |
216 local p1 = CreateListSelector(SListPopulator) | 327 local p1 = CreateListSelector(SListPopulator) |
217 p1:SetFullWidth(true) | 328 p1:SetFullWidth(true) |
218 | 329 |
219 left:AddChild(p1) | 330 left:AddChild(p1) |
221 | 332 |
222 local t2 = AceGUI:Create("SelectorList") | 333 local t2 = AceGUI:Create("SelectorList") |
223 t2:SetNumLines(7) | 334 t2:SetNumLines(7) |
224 t2:SetFullWidth(true) | 335 t2:SetFullWidth(true) |
225 t2:EnableButtonTooltips(true) | 336 t2:EnableButtonTooltips(true) |
226 t2:SetList({ | |
227 { | |
228 value=1, | |
229 text = "|cffa335ee|Hitem:77109:4080:4009:0:0:0:0:0:85:0|h[Band of Reconstruction]|h|r", | |
230 link = "|cffa335ee|Hitem:77109:4080:4009:0:0:0:0:0:85:0|h[Band of Reconstruction]|h|r", | |
231 }, | |
232 { | |
233 value=2, | |
234 text = "|cffa335ee|Hitem:19351:0:0:0:0:0:0:0:85:0|h[Maladath, Runed Blade of the Black Flight]|h|r", | |
235 link = "|cffa335ee|Hitem:19351:0:0:0:0:0:0:0:85:0|h[Maladath, Runed Blade of the Black Flight]|h|r" | |
236 }, | |
237 { | |
238 value=3, | |
239 text = "|cffa335ee|Hitem:31986:0:0:0:0:0:0:0:85:0|h[Merciless Gladiator's Crossbow of the Phoenix]|h|r", | |
240 link = "|cffa335ee|Hitem:31986:0:0:0:0:0:0:0:85:0|h[Merciless Gladiator's Crossbow of the Phoenix]|h|r" | |
241 }, | |
242 { | |
243 value=4, | |
244 text = "|cffa335ee|Hitem:65003:0:0:0:0:0:0:0:85:0|h[Reclaimed Ashkandi, Greatsword of the Brotherhood]|h|r", | |
245 link = "|cffa335ee|Hitem:65003:0:0:0:0:0:0:0:85:0|h[Reclaimed Ashkandi, Greatsword of the Brotherhood]|h|r" | |
246 }, | |
247 { | |
248 value=5, | |
249 text = "|cffff8000|Hitem:19019:0:0:0:0:0:0:0:85:0|h[Thunderfury, Blessed Blade of the Windseeker]|h|r", | |
250 link = "|cffff8000|Hitem:19019:0:0:0:0:0:0:0:85:0|h[Thunderfury, Blessed Blade of the Windseeker]|h|r" | |
251 }, | |
252 }) | |
253 LListEventDispatch:SetTarget(t2) | 337 LListEventDispatch:SetTarget(t2) |
338 LListPopulator:SetWidget(t2) | |
254 | 339 |
255 local biddingZone = AceGUI:Create("SimpleGroup") | 340 local biddingZone = AceGUI:Create("SimpleGroup") |
256 biddingZone:SetLayout("Flow") | 341 biddingZone:SetLayout("Flow") |
257 biddingZone:SetFullWidth(true) | 342 biddingZone:SetFullWidth(true) |
258 | 343 |
302 bidTitle:SetFullWidth(true) | 387 bidTitle:SetFullWidth(true) |
303 | 388 |
304 local bidRetractButton = AceGUI:Create("Button") | 389 local bidRetractButton = AceGUI:Create("Button") |
305 bidRetractButton:SetText("Place Bid") | 390 bidRetractButton:SetText("Place Bid") |
306 bidRetractButton:SetWidth(100) | 391 bidRetractButton:SetWidth(100) |
392 bidRetractButton:SetCallback("OnClick", function(widget) RListPopulator:Force(SListPopulator:GetMe()) end) | |
307 local rollButton = AceGUI:Create("Button") | 393 local rollButton = AceGUI:Create("Button") |
308 rollButton:SetText("Offset Roll") | 394 rollButton:SetText("Offset Roll") |
309 rollButton:SetWidth(100) | 395 rollButton:SetWidth(100) |
310 | 396 |
311 local dummydata= {} | 397 RListEventDispatch:SetTarget(b1) |
312 local tree =SListPopulator.data | 398 RListPopulator:SetWidget(b1) |
313 for i,v in pairs(tree) do dummydata[i] = copy(v); dummydata[i].disabled = false end | |
314 if dummydata[2] then dummydata[2].text = dummydata[2].text .. " (roll 73)" end | |
315 b1:SetList(dummydata) | |
316 | 399 |
317 local g1 | 400 local g1 |
318 if admin then | 401 if admin then |
319 RListEventDispatch:SetTarget(b1) | |
320 b1.alignoffset = 0.25 -- or else g1 won't align well | 402 b1.alignoffset = 0.25 -- or else g1 won't align well |
321 g1 = AceGUI:Create("SimpleGroup") | 403 g1 = AceGUI:Create("SimpleGroup") |
322 g1.alignoffset = 0.25 | 404 g1.alignoffset = 0.25 |
323 g1:SetWidth(120) | 405 g1:SetWidth(120) |
324 g1:SetLayout("List") | 406 g1:SetLayout("List") |
332 else | 414 else |
333 adminForce:SetText("Force bid") | 415 adminForce:SetText("Force bid") |
334 adminForce:SetDisabled(true) | 416 adminForce:SetDisabled(true) |
335 end | 417 end |
336 adminForce:SetWidth(160) | 418 adminForce:SetWidth(160) |
419 adminForce:SetCallback("OnClick",function(widget) RListPopulator:Force(SListEventDispatch:LatestValue()) end) | |
337 adminForce.userdata = | 420 adminForce.userdata = |
338 { | 421 { |
339 widget = adminForce, | 422 widget = adminForce, |
340 ["Redraw"] = function(self,_) self.widget:SetDisabled(true); self.widget:SetText("Force bid") end, | 423 ["Redraw"] = function(self,_) self.widget:SetDisabled(true); self.widget:SetText("Force bid") end, |
341 ["OnSelection"] = function(self,_) self.widget:SetDisabled(false); self.widget:SetText(sformat("Force bid (%s)",SListEventDispatch:LatestValue().textPlain)) end, | 424 ["OnSelection"] = function(self,_) self.widget:SetDisabled(false); self.widget:SetText(sformat("Force bid (%s)",SListEventDispatch:LatestValue().textPlain)) end, |
357 widget = adminRetract, | 440 widget = adminRetract, |
358 ["Redraw"] = function(self,_) self.widget:SetDisabled(true); self.widget:SetText("Retract bid") end, | 441 ["Redraw"] = function(self,_) self.widget:SetDisabled(true); self.widget:SetText("Retract bid") end, |
359 ["OnSelection"] = function(self,_) self.widget:SetDisabled(false); self.widget:SetText(sformat("Retract bid (%s)",RListEventDispatch:LatestValue().textPlain)) end, | 442 ["OnSelection"] = function(self,_) self.widget:SetDisabled(false); self.widget:SetText(sformat("Retract bid (%s)",RListEventDispatch:LatestValue().textPlain)) end, |
360 ["OnSelectionCleared"] = function(self) self.widget:SetDisabled(true); self.widget:SetText("Retract bid") end | 443 ["OnSelectionCleared"] = function(self) self.widget:SetDisabled(true); self.widget:SetText("Retract bid") end |
361 } | 444 } |
445 adminRetract:SetCallback("OnClick",function(widget) RListPopulator:Retract(RListEventDispatch:LatestValue()) end) | |
362 RListEventDispatch:RegisterListener(adminRetract.userdata) | 446 RListEventDispatch:RegisterListener(adminRetract.userdata) |
363 adminRetract:SetDisabled(true) | 447 adminRetract:SetDisabled(true) |
364 | 448 |
365 g1:AddChildren(adminForce,adminRetract) | 449 g1:AddChildren(adminForce,adminRetract) |
366 end | 450 end |