Mercurial > wow > breuesk
comparison Gui.lua @ 75:ed1c9fd4cc95
Progress on bidding events and GUI. Slave GUIs now respond properly.
| author | John@Doomsday |
|---|---|
| date | Mon, 09 Apr 2012 09:40:53 -0400 |
| parents | 7eb2963eea7d |
| children | 39be9328acd0 |
comparison
equal
deleted
inserted
replaced
| 74:15844864a5f7 | 75:ed1c9fd4cc95 |
|---|---|
| 169 end, | 169 end, |
| 170 ["DataEvent"] = function(self) | 170 ["DataEvent"] = function(self) |
| 171 self:Redraw() | 171 self:Redraw() |
| 172 end, | 172 end, |
| 173 ["StateEvent"] = function(self) | 173 ["StateEvent"] = function(self) |
| 174 -- todo: events still happen even if the gui is closed. protect the api. | |
| 175 | |
| 174 print("State event in SL: ", state, admin) | 176 print("State event in SL: ", state, admin) |
| 175 if state == "bidding" or (state == "looting" and not admin) then | 177 if state == "bidding" or (state == "looting" and not admin) then |
| 176 self.swidget:SetDisabled(true) | 178 self.swidget:SetDisabled(true) |
| 177 self:SelectList(stateactivelist) | 179 self:SelectList(stateactivelist) |
| 178 elseif state == "looting" and admin then | |
| 179 self.swidget:SetDisabled(false) | |
| 180 else | 180 else |
| 181 self.swidget:SetDisabled(false) | 181 self.swidget:SetDisabled(false) |
| 182 end | 182 end |
| 183 -- if bidding then disable pulldown | 183 -- if bidding then disable pulldown |
| 184 -- if looting and not admin then disable pulldown | 184 -- if looting and not admin then disable pulldown |
| 303 end | 303 end |
| 304 return new | 304 return new |
| 305 end, | 305 end, |
| 306 } | 306 } |
| 307 | 307 |
| 308 local BZPopulator = | |
| 309 { | |
| 310 group = nil, | |
| 311 ["SetGroup"] = function(self,g) | |
| 312 if type(g) ~= "table" or type(g.AddChild) ~= "function" then | |
| 313 _G.error("Bad SetGroup for BZPopulator") | |
| 314 end | |
| 315 self.group = g | |
| 316 end, | |
| 317 | |
| 318 | |
| 319 ["Release"] = function(self) self.group = nil; RListEventDispatch:Release(); RListPopulator:Release() end, | |
| 320 | |
| 321 ["StateEvent"] = function(self) | |
| 322 if state == "bidding" then | |
| 323 | |
| 324 local spacer = AceGUI:Create("Label") | |
| 325 spacer:SetText(" ") | |
| 326 spacer:SetFullWidth(true) | |
| 327 local spacer2 = AceGUI:Create("Label") | |
| 328 spacer2:SetText(" ") | |
| 329 spacer2:SetFullWidth(true) | |
| 330 | |
| 331 local label = AceGUI:Create("Label") | |
| 332 label:SetText("Bidding now open for ...") | |
| 333 local biddingOn = AceGUI:Create("InteractiveLabel") | |
| 334 biddingOn.userdata = { stateitem.link } | |
| 335 biddingOn:SetText(biddingOn.userdata[1]) | |
| 336 biddingOn:SetFullWidth(true) | |
| 337 biddingOn:SetCallback("OnEnter", function(widget) _G.GameTooltip:SetOwner(widget.frame,"ANCHOR_RIGHT"); _G.GameTooltip:SetHyperlink(widget.userdata[1]); _G.GameTooltip:Show() end ) | |
| 338 biddingOn:SetCallback("OnLeave", function(widget) _G.GameTooltip:Hide() end ) | |
| 339 local b1 = AceGUI:Create("SelectorList") | |
| 340 b1:SetNumLines(6) | |
| 341 b1:SetInteractive(admin) | |
| 342 local bidTitle = AceGUI:Create("Label") | |
| 343 bidTitle:SetText("Current bids") | |
| 344 bidTitle:SetFullWidth(true) | |
| 345 | |
| 346 local bidRetractButton = AceGUI:Create("Button") | |
| 347 bidRetractButton:SetText("Place Bid") | |
| 348 bidRetractButton:SetWidth(100) | |
| 349 bidRetractButton:SetCallback("OnClick", function(widget) RListPopulator:Force(SListPopulator:GetMe()) end) -- todo: Force is not the desired thing here. | |
| 350 local rollButton = AceGUI:Create("Button") | |
| 351 rollButton:SetText("Offset Roll") | |
| 352 rollButton:SetWidth(100) | |
| 353 | |
| 354 RListEventDispatch:SetTarget(b1) | |
| 355 RListPopulator:SetWidget(b1) | |
| 356 | |
| 357 | |
| 358 local g1 | |
| 359 if admin then | |
| 360 b1.alignoffset = 0.25 -- or else g1 won't align well | |
| 361 g1 = AceGUI:Create("SimpleGroup") | |
| 362 g1.alignoffset = 0.25 | |
| 363 g1:SetWidth(120) | |
| 364 g1:SetLayout("List") | |
| 365 | |
| 366 -- todo: convoluted and repetitive - surely there's a | |
| 367 -- better way than this ... | |
| 368 adminForce = AceGUI:Create("Button") | |
| 369 if SListEventDispatch:LatestValue() then | |
| 370 adminForce:SetText(sformat("Force bid (%s)",SListEventDispatch:LatestValue().textPlain)) | |
| 371 adminForce:SetDisabled(false) | |
| 372 else | |
| 373 adminForce:SetText("Force bid") | |
| 374 adminForce:SetDisabled(true) | |
| 375 end | |
| 376 adminForce:SetWidth(160) | |
| 377 adminForce:SetCallback("OnClick",function(widget) RListPopulator:Force(SListEventDispatch:LatestValue()) end) | |
| 378 adminForce.userdata = | |
| 379 { | |
| 380 widget = adminForce, | |
| 381 ["Redraw"] = function(self,_) self.widget:SetDisabled(true); self.widget:SetText("Force bid") end, | |
| 382 ["OnSelection"] = function(self,_) self.widget:SetDisabled(false); self.widget:SetText(sformat("Force bid (%s)",SListEventDispatch:LatestValue().textPlain)) end, | |
| 383 ["OnSelectionCleared"] = function(self) self.widget:SetDisabled(true); self.widget:SetText("Force bid") end | |
| 384 } | |
| 385 SListEventDispatch:RegisterListener(adminForce.userdata) | |
| 386 | |
| 387 adminRetract = AceGUI:Create("Button") | |
| 388 if RListEventDispatch:LatestValue() then | |
| 389 adminRetract:SetText(sformat("Retract bid (%s)",RListEventDispatch:LatestValue().textPlain)) | |
| 390 adminRetract:SetDisabled(false) | |
| 391 else | |
| 392 adminRetract:SetText("Retract bid") | |
| 393 adminRetract:SetDisabled(true) | |
| 394 end | |
| 395 adminRetract:SetWidth(160) | |
| 396 adminRetract.userdata = | |
| 397 { | |
| 398 widget = adminRetract, | |
| 399 ["Redraw"] = function(self,_) self.widget:SetDisabled(true); self.widget:SetText("Retract bid") end, | |
| 400 ["OnSelection"] = function(self,_) self.widget:SetDisabled(false); self.widget:SetText(sformat("Retract bid (%s)",RListEventDispatch:LatestValue().textPlain)) end, | |
| 401 ["OnSelectionCleared"] = function(self) self.widget:SetDisabled(true); self.widget:SetText("Retract bid") end | |
| 402 } | |
| 403 adminRetract:SetCallback("OnClick",function(widget) RListPopulator:Retract(RListEventDispatch:LatestValue()) end) | |
| 404 RListEventDispatch:RegisterListener(adminRetract.userdata) | |
| 405 adminRetract:SetDisabled(true) | |
| 406 | |
| 407 g1:AddChildren(adminForce,adminRetract) | |
| 408 end | |
| 409 | |
| 410 self.group:AddChildren(spacer,label,biddingOn,bidRetractButton,rollButton,spacer2,bidTitle,b1) | |
| 411 if admin then self.group:AddChildren(g1) end | |
| 412 | |
| 413 else | |
| 414 | |
| 415 | |
| 416 self.group:ReleaseChildren() | |
| 417 RListEventDispatch:Release() | |
| 418 RListPopulator:Release() | |
| 419 end | |
| 420 | |
| 421 end, | |
| 422 | |
| 423 | |
| 424 } | |
| 425 | |
| 308 DataEventDispatch = | 426 DataEventDispatch = |
| 309 { | 427 { |
| 310 -- todo: batch events | 428 -- todo: batch events |
| 311 listeners = {}, | 429 listeners = {}, |
| 312 ["DataEvent"] = function(self,_) --todo: pass along the received event | 430 ["DataEvent"] = function(self,_) --todo: pass along the received event |
| 329 DataEventDispatch:RegisterListener(SListPopulator) | 447 DataEventDispatch:RegisterListener(SListPopulator) |
| 330 RegisterListenerActiveListChanged(SListPopulator) | 448 RegisterListenerActiveListChanged(SListPopulator) |
| 331 RegisterListenerStateChange(SListPopulator) | 449 RegisterListenerStateChange(SListPopulator) |
| 332 RegisterListenerRolls(RListPopulator) | 450 RegisterListenerRolls(RListPopulator) |
| 333 RegisterItemListListener(LListPopulator) | 451 RegisterItemListListener(LListPopulator) |
| 452 RegisterListenerStateChange(BZPopulator) | |
| 334 end | 453 end |
| 335 | 454 |
| 336 function CreateGUI() | 455 function CreateGUI() |
| 337 -- special registration procedure to be closable with the escape button | 456 -- special registration procedure to be closable with the escape button |
| 338 --escapeButton.shown = true | 457 --escapeButton.shown = true |
| 340 --table.insert(_G.UISpecialFrames, "BSK_ESCAPEBUTTON") | 459 --table.insert(_G.UISpecialFrames, "BSK_ESCAPEBUTTON") |
| 341 | 460 |
| 342 if f then return end -- no second gui please | 461 if f then return end -- no second gui please |
| 343 f = AceGUI:Create("Frame") | 462 f = AceGUI:Create("Frame") |
| 344 | 463 |
| 345 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) | 464 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(); BZPopulator:Release() end) |
| 346 f:SetTitle("BSK") | 465 f:SetTitle("BSK") |
| 347 f:SetLayout("Flow") | 466 f:SetLayout("Flow") |
| 348 f:SetHeight(680) | 467 f:SetHeight(680) |
| 349 f:SetWidth(580) | 468 f:SetWidth(580) |
| 350 | 469 |
| 378 t2:SetFullWidth(true) | 497 t2:SetFullWidth(true) |
| 379 t2:EnableButtonTooltips(true) | 498 t2:EnableButtonTooltips(true) |
| 380 LListEventDispatch:SetTarget(t2) | 499 LListEventDispatch:SetTarget(t2) |
| 381 LListPopulator:SetWidget(t2) | 500 LListPopulator:SetWidget(t2) |
| 382 | 501 |
| 383 local biddingZone = AceGUI:Create("SimpleGroup") | 502 biddingZone = AceGUI:Create("SimpleGroup") |
| 384 biddingZone:SetLayout("Flow") | 503 biddingZone:SetLayout("Flow") |
| 385 biddingZone:SetFullWidth(true) | 504 biddingZone:SetFullWidth(true) |
| 505 BZPopulator:SetGroup(biddingZone) | |
| 386 | 506 |
| 387 local alb1, alb2, alb3 | 507 local alb1, alb2, alb3 |
| 388 if admin then | 508 if admin then |
| 389 alb1 = AceGUI:Create("Button") | 509 alb1 = AceGUI:Create("Button") |
| 390 alb1:SetWidth(100) | 510 alb1:SetWidth(100) |
| 400 alb1:SetDisabled(true) | 520 alb1:SetDisabled(true) |
| 401 LListEventDispatch:RegisterListener(alb1.userdata) | 521 LListEventDispatch:RegisterListener(alb1.userdata) |
| 402 alb1:SetCallback("OnClick", | 522 alb1:SetCallback("OnClick", |
| 403 function(widget) | 523 function(widget) |
| 404 if widget.userdata.state then -- we were bidding when the button was pressed | 524 if widget.userdata.state then -- we were bidding when the button was pressed |
| 405 biddingZone:ReleaseChildren() | |
| 406 widget:SetText("Open Bids") | 525 widget:SetText("Open Bids") |
| 407 RListEventDispatch:Release() | 526 InitiateCloseBidding() -- todo: plug in loot award, etc |
| 408 RListPopulator:Release() | |
| 409 else | 527 else |
| 410 widget:SetText("Close bids") | 528 widget:SetText("Close bids") |
| 411 local spacer = AceGUI:Create("Label") | |
| 412 spacer:SetText(" ") | |
| 413 spacer:SetFullWidth(true) | |
| 414 local spacer2 = AceGUI:Create("Label") | |
| 415 spacer2:SetText(" ") | |
| 416 spacer2:SetFullWidth(true) | |
| 417 | |
| 418 local label = AceGUI:Create("Label") | |
| 419 label:SetText("Bidding now open for ...") | |
| 420 local biddingOn = AceGUI:Create("InteractiveLabel") | |
| 421 biddingOn.userdata = { LListEventDispatch:LatestValue().link } | |
| 422 biddingOn:SetText(biddingOn.userdata[1]) | |
| 423 biddingOn:SetFullWidth(true) | |
| 424 biddingOn:SetCallback("OnEnter", function(widget) _G.GameTooltip:SetOwner(widget.frame,"ANCHOR_RIGHT"); _G.GameTooltip:SetHyperlink(widget.userdata[1]); _G.GameTooltip:Show() end ) | |
| 425 biddingOn:SetCallback("OnLeave", function(widget) _G.GameTooltip:Hide() end ) | |
| 426 local b1 = AceGUI:Create("SelectorList") | |
| 427 b1:SetNumLines(6) | |
| 428 b1:SetInteractive(admin) | |
| 429 local bidTitle = AceGUI:Create("Label") | |
| 430 bidTitle:SetText("Current bids") | |
| 431 bidTitle:SetFullWidth(true) | |
| 432 | |
| 433 local bidRetractButton = AceGUI:Create("Button") | |
| 434 bidRetractButton:SetText("Place Bid") | |
| 435 bidRetractButton:SetWidth(100) | |
| 436 bidRetractButton:SetCallback("OnClick", function(widget) RListPopulator:Force(SListPopulator:GetMe()) end) -- todo: Force is not the desired thing here. | |
| 437 local rollButton = AceGUI:Create("Button") | |
| 438 rollButton:SetText("Offset Roll") | |
| 439 rollButton:SetWidth(100) | |
| 440 | |
| 441 RListEventDispatch:SetTarget(b1) | |
| 442 RListPopulator:SetWidget(b1) | |
| 443 | |
| 444 InitiateOpenBid(LListEventDispatch:LatestValue()) | 529 InitiateOpenBid(LListEventDispatch:LatestValue()) |
| 445 | |
| 446 local g1 | |
| 447 if admin then | |
| 448 b1.alignoffset = 0.25 -- or else g1 won't align well | |
| 449 g1 = AceGUI:Create("SimpleGroup") | |
| 450 g1.alignoffset = 0.25 | |
| 451 g1:SetWidth(120) | |
| 452 g1:SetLayout("List") | |
| 453 | |
| 454 -- todo: convoluted and repetitive - surely there's a | |
| 455 -- better way than this ... | |
| 456 adminForce = AceGUI:Create("Button") | |
| 457 if SListEventDispatch:LatestValue() then | |
| 458 adminForce:SetText(sformat("Force bid (%s)",SListEventDispatch:LatestValue().textPlain)) | |
| 459 adminForce:SetDisabled(false) | |
| 460 else | |
| 461 adminForce:SetText("Force bid") | |
| 462 adminForce:SetDisabled(true) | |
| 463 end | |
| 464 adminForce:SetWidth(160) | |
| 465 adminForce:SetCallback("OnClick",function(widget) RListPopulator:Force(SListEventDispatch:LatestValue()) end) | |
| 466 adminForce.userdata = | |
| 467 { | |
| 468 widget = adminForce, | |
| 469 ["Redraw"] = function(self,_) self.widget:SetDisabled(true); self.widget:SetText("Force bid") end, | |
| 470 ["OnSelection"] = function(self,_) self.widget:SetDisabled(false); self.widget:SetText(sformat("Force bid (%s)",SListEventDispatch:LatestValue().textPlain)) end, | |
| 471 ["OnSelectionCleared"] = function(self) self.widget:SetDisabled(true); self.widget:SetText("Force bid") end | |
| 472 } | |
| 473 SListEventDispatch:RegisterListener(adminForce.userdata) | |
| 474 | |
| 475 adminRetract = AceGUI:Create("Button") | |
| 476 if RListEventDispatch:LatestValue() then | |
| 477 adminRetract:SetText(sformat("Retract bid (%s)",RListEventDispatch:LatestValue().textPlain)) | |
| 478 adminRetract:SetDisabled(false) | |
| 479 else | |
| 480 adminRetract:SetText("Retract bid") | |
| 481 adminRetract:SetDisabled(true) | |
| 482 end | |
| 483 adminRetract:SetWidth(160) | |
| 484 adminRetract.userdata = | |
| 485 { | |
| 486 widget = adminRetract, | |
| 487 ["Redraw"] = function(self,_) self.widget:SetDisabled(true); self.widget:SetText("Retract bid") end, | |
| 488 ["OnSelection"] = function(self,_) self.widget:SetDisabled(false); self.widget:SetText(sformat("Retract bid (%s)",RListEventDispatch:LatestValue().textPlain)) end, | |
| 489 ["OnSelectionCleared"] = function(self) self.widget:SetDisabled(true); self.widget:SetText("Retract bid") end | |
| 490 } | |
| 491 adminRetract:SetCallback("OnClick",function(widget) RListPopulator:Retract(RListEventDispatch:LatestValue()) end) | |
| 492 RListEventDispatch:RegisterListener(adminRetract.userdata) | |
| 493 adminRetract:SetDisabled(true) | |
| 494 | |
| 495 g1:AddChildren(adminForce,adminRetract) | |
| 496 end | |
| 497 | |
| 498 biddingZone:AddChildren(spacer,label,biddingOn,bidRetractButton,rollButton,spacer2,bidTitle,b1) | |
| 499 if admin then biddingZone:AddChildren(g1) end | |
| 500 end | 530 end |
| 501 widget.userdata.state = not widget.userdata.state | 531 widget.userdata.state = not widget.userdata.state |
| 502 end | 532 end |
| 503 ) | 533 ) |
| 504 | 534 |
