Mercurial > wow > breuesk
comparison Gui.lua @ 63:00cb497201d0
Left side of the GUI works ...
author | John@Yosemite-PC |
---|---|
date | Mon, 26 Mar 2012 20:31:45 -0400 |
parents | dcf7c835d0a7 |
children | d3f64d7246b3 |
comparison
equal
deleted
inserted
replaced
62:619e4b9c3cd9 | 63:00cb497201d0 |
---|---|
23 end | 23 end |
24 if color == nil then return str end | 24 if color == nil then return str end |
25 return "|cff"..tostring(color or "ffffff")..str.."|r" | 25 return "|cff"..tostring(color or "ffffff")..str.."|r" |
26 end | 26 end |
27 | 27 |
28 local CreateListSelector = function(OnValueChanged) | 28 local CreateListSelector = function(SListPopulator) |
29 PersonList:RefreshRaidList() | 29 PersonList:RefreshRaidList() |
30 local pulldown = AceGUI:Create("Dropdown") | 30 local pulldown = AceGUI:Create("Dropdown") |
31 local pull = {} | 31 local pull = {} |
32 local ltemp = 0 | 32 local ltemp = 0 |
33 local lids = LootLists:GetAllIds() | 33 local lids = LootLists:GetAllIds() |
42 end | 42 end |
43 end | 43 end |
44 end | 44 end |
45 pulldown:SetWidth(175) | 45 pulldown:SetWidth(175) |
46 pulldown:SetList(pull) | 46 pulldown:SetList(pull) |
47 pulldown:SetCallback("OnValueChanged", OnValueChanged) | 47 pulldown:SetCallback("OnValueChanged", function(_,_,value) SListPopulator:SetList(value) end) |
48 if ltemp > 0 then pulldown:SetValue(ltemp); OnValueChanged(nil,nil,ltemp) end -- sadly, SetValue doesn't fire a OnValueChanged | 48 if ltemp > 0 then pulldown:SetValue(ltemp); SListPopulator:SetList(ltemp) end -- sadly, SetValue doesn't fire a OnValueChanged |
49 return pulldown | 49 return pulldown |
50 end | 50 end |
51 | 51 |
52 local tree = {} | |
53 local ovc = function(t1,value) | |
54 tree = {} | |
55 local l = LootLists:Select(value) | |
56 for le in l:OrderedListEntryIter() do | |
57 local line = {value=le:GetId(),text=le:GetName(),icon=[[Interface\Glues\CharacterCreate\UI-CharacterCreate-Classes]]} | |
58 line.iconCoords=_G.CLASS_ICON_TCOORDS[le:GetClass()] | |
59 line.text=colorize(line.text,_G.RAID_CLASS_COLORS[le:GetClass()]) | |
60 line.disabled = not PersonList:IsActive(le:GetId()) | |
61 table.insert(tree,line) | |
62 end | |
63 t1:SetList(tree) | |
64 end | |
65 local f | 52 local f |
66 local escapeButton = | 53 local escapeButton = |
67 { | 54 { |
68 shown = false, | 55 shown = false, |
69 ["IsShown"] = function(self) return self.shown end, | 56 ["IsShown"] = function(self) return self.shown end, |
70 ["Hide"] = function(self) if f then AceGUI:Release(f); self.shown=false end end | 57 ["Hide"] = function(self) if f then AceGUI:Release(f); self.shown=false end end |
71 } | 58 } |
72 | 59 |
60 local function FilterEventDispatcher() | |
61 end | |
62 | |
63 SListEventDispatch = | |
64 { | |
65 listeners= {}, | |
66 target = nil, | |
67 ["SetTarget"] = function(self,other) | |
68 self.target = other | |
69 self.target:SetCallback("OnSelectionCleared",SListListenerRebindOSC) | |
70 self.target:SetCallback("OnSelection",SListListenerRebindOS) | |
71 end, | |
72 ["RegisterListener"] = function(self,other) table.insert(self.listeners,other) end, | |
73 ["OnSelectionCleared"] = function(self,_) | |
74 self:Event("OnSelectionCleared") | |
75 end, | |
76 ["OnSelection"] = function(self,_,line) | |
77 self:Event("OnSelection",line) | |
78 end, | |
79 ["Event"] = function(self,event,arg) | |
80 if not self.target then error("Event called with no listener...") end | |
81 if not self.listeners then return end | |
82 for i,v in pairs(self.listeners) do | |
83 if type(v) == "table" then | |
84 if v[event] then | |
85 v[event](v,arg) | |
86 end | |
87 elseif type(v) == "function" then | |
88 v(event,arg) | |
89 elseif type(v) ~= "nil" then -- allow nils to pass quietly | |
90 _G.error("Bad listener - "..type(v)) | |
91 end | |
92 end | |
93 end, | |
94 ["Release"] = function(self) self.listeners = {}; target=nil end | |
95 } | |
96 function SListListenerRebindOSC(...) | |
97 SListEventDispatch:OnSelectionCleared(...) | |
98 end | |
99 function SListListenerRebindOS(...) | |
100 SListEventDispatch:OnSelection(...) | |
101 end | |
102 local SListPopulator = | |
103 { | |
104 filtered = false, | |
105 widget = nil, | |
106 data = nil, | |
107 lref = nil, | |
108 | |
109 ["Release"] = function(self) self.filtered, self.widget, self.data, self.lref = false, nil, nil, nil end, | |
110 ["Redraw"] = function(self) | |
111 if self.lref == nil or self.widget == nil then return end -- don't do work if not fully initialized | |
112 self.data = {} | |
113 for le in self.lref:OrderedListEntryIter() do | |
114 local disabled = not PersonList:IsActive(le:GetId()) | |
115 if not self.filtered or not disabled then | |
116 local line = {value=le:GetId(),text=le:GetName(),icon=[[Interface\Glues\CharacterCreate\UI-CharacterCreate-Classes]]} | |
117 line.iconCoords=_G.CLASS_ICON_TCOORDS[le:GetClass()] | |
118 line.text=colorize(line.text,_G.RAID_CLASS_COLORS[le:GetClass()]) | |
119 line.disabled = disabled | |
120 table.insert(self.data,line) | |
121 end | |
122 end | |
123 self.widget:SetList(self.data) | |
124 end, | |
125 ["SetWidget"] = function(self,w) | |
126 if type(w) ~= "table" or w["SetList"] == nil then | |
127 _G.error("Bad SetWidget") | |
128 end | |
129 self.widget = w | |
130 end, | |
131 ["SetFiltered"] = function(self,value) | |
132 self.filtered = value | |
133 self:Redraw() | |
134 end, | |
135 ["SetList"] = function(self,value) | |
136 self.lref = LootLists:Select(value) | |
137 self:Redraw() | |
138 end | |
139 } | |
140 | |
73 function CreateGUI() | 141 function CreateGUI() |
74 -- special registration procedure to be closable with the escape button | 142 -- special registration procedure to be closable with the escape button |
75 --escapeButton.shown = true | 143 --escapeButton.shown = true |
76 --_G["BSK_ESCAPEBUTTON"] = escapeButton | 144 --_G["BSK_ESCAPEBUTTON"] = escapeButton |
77 --table.insert(_G.UISpecialFrames, "BSK_ESCAPEBUTTON") | 145 --table.insert(_G.UISpecialFrames, "BSK_ESCAPEBUTTON") |
78 | 146 |
79 if f then return end -- no second gui please | 147 if f then return end -- no second gui please |
80 local admin = bsk.admin or true | 148 local admin = bsk.admin or true |
81 f = AceGUI:Create("Frame") | 149 f = AceGUI:Create("Frame") |
82 | 150 |
83 f:SetCallback("OnClose",function(widget) escapeButton.shown = false; AceGUI:Release(widget); f=nil end) | 151 f:SetCallback("OnClose",function(widget) escapeButton.shown = false; AceGUI:Release(widget); f=nil; SListEventDispatch:Release(); SListPopulator:Release() end) |
84 f:SetTitle("BSK") | 152 f:SetTitle("BSK") |
85 f:SetLayout("Flow") | 153 f:SetLayout("Flow") |
86 f:SetHeight(680) | 154 f:SetHeight(680) |
87 f:SetWidth(580) | 155 f:SetWidth(580) |
88 | 156 |
100 | 168 |
101 local t1 = AceGUI:Create("SelectorList") | 169 local t1 = AceGUI:Create("SelectorList") |
102 t1:SetNumLines(25) | 170 t1:SetNumLines(25) |
103 t1:SetFullWidth(true) | 171 t1:SetFullWidth(true) |
104 t1:SetInteractive(admin) | 172 t1:SetInteractive(admin) |
105 | 173 SListPopulator:SetWidget(t1) |
106 local listChange = function(_,_,value) | 174 SListEventDispatch:SetTarget(t1) |
107 ovc(t1,value) | 175 |
108 end | 176 local p1 = CreateListSelector(SListPopulator) |
109 local p1 = CreateListSelector(listChange) | |
110 p1:SetFullWidth(true) | 177 p1:SetFullWidth(true) |
111 | 178 |
112 left:AddChild(p1) | 179 left:AddChild(p1) |
113 left:AddChild(t1) | 180 left:AddChild(t1) |
114 | 181 |
179 biddingOn:SetCallback("OnEnter", function(widget) _G.GameTooltip:SetOwner(widget.frame,"ANCHOR_RIGHT"); _G.GameTooltip:SetHyperlink(widget.userdata[1]); _G.GameTooltip:Show() end ) | 246 biddingOn:SetCallback("OnEnter", function(widget) _G.GameTooltip:SetOwner(widget.frame,"ANCHOR_RIGHT"); _G.GameTooltip:SetHyperlink(widget.userdata[1]); _G.GameTooltip:Show() end ) |
180 biddingOn:SetCallback("OnLeave", function(widget) _G.GameTooltip:Hide() end ) | 247 biddingOn:SetCallback("OnLeave", function(widget) _G.GameTooltip:Hide() end ) |
181 local b1 = AceGUI:Create("SelectorList") | 248 local b1 = AceGUI:Create("SelectorList") |
182 b1:SetNumLines(6) | 249 b1:SetNumLines(6) |
183 b1:SetInteractive(admin) | 250 b1:SetInteractive(admin) |
184 local dummydata = {copy(tree[1]),copy( tree[2] ),copy( tree[3] )} | 251 local dummydata= {} |
185 for i,v in pairs(dummydata) do v.disabled = false end | 252 local tree =SListPopulator.data |
186 dummydata[2].text = dummydata[2].text .. " (roll 73)" | 253 for i,v in pairs(tree) do dummydata[i] = copy(v); dummydata[i].disabled = false end |
254 if dummydata[2] then dummydata[2].text = dummydata[2].text .. " (roll 73)" end | |
187 b1:SetList(dummydata) | 255 b1:SetList(dummydata) |
188 local bidTitle = AceGUI:Create("Label") | 256 local bidTitle = AceGUI:Create("Label") |
189 bidTitle:SetText("Current bids") | 257 bidTitle:SetText("Current bids") |
190 bidTitle:SetFullWidth(true) | 258 bidTitle:SetFullWidth(true) |
191 | 259 |
215 g1:AddChildren(adminForce,adminRetract) | 283 g1:AddChildren(adminForce,adminRetract) |
216 | 284 |
217 suicideSelected = AceGUI:Create("Button") | 285 suicideSelected = AceGUI:Create("Button") |
218 suicideSelected:SetFullWidth(true) | 286 suicideSelected:SetFullWidth(true) |
219 suicideSelected:SetText("Suicide") | 287 suicideSelected:SetText("Suicide") |
288 suicideSelected:SetDisabled(true) -- default is no selection has been made | |
289 -- use userdata + SListEventDispatch to toggle state | |
290 suicideSelected.userdata = | |
291 { | |
292 widget = suicideSelected, | |
293 ["OnSelection"] = function(self,_) self.widget:SetDisabled(false) end, | |
294 ["OnSelectionCleared"] = function(self) self.widget:SetDisabled(true) end | |
295 } | |
296 SListEventDispatch:RegisterListener(suicideSelected.userdata) | |
220 | 297 |
221 undo = AceGUI:Create("Button") | 298 undo = AceGUI:Create("Button") |
222 undo:SetText("Undo") | 299 undo:SetText("Undo / out of order") |
223 undo:SetFullWidth(true) | 300 undo:SetFullWidth(true) |
301 undo:SetDisabled(true) | |
224 end | 302 end |
225 | 303 |
226 | 304 |
227 local filter = AceGUI:Create("CheckBox") | 305 local filter = AceGUI:Create("CheckBox") |
228 filter:SetLabel("Only show active") | 306 filter:SetLabel("Only show active") |
229 filter:SetFullWidth(true) | 307 filter:SetFullWidth(true) |
308 filter:SetValue(false) | |
309 SListPopulator:SetFiltered(false) | |
310 filter:SetCallback("OnValueChanged",function(widget,_,value) SListPopulator:SetFiltered(value) end) | |
230 | 311 |
231 left:AddChildren(filter) | 312 left:AddChildren(filter) |
232 if admin then left:AddChildren(suicideSelected,undo) end | 313 if admin then left:AddChildren(suicideSelected,undo) end |
233 biddingZone:AddChildren(spacer,label,biddingOn,bidRetractButton,rollButton,spacer2,bidTitle,b1) | 314 biddingZone:AddChildren(spacer,label,biddingOn,bidRetractButton,rollButton,spacer2,bidTitle,b1) |
234 if admin then biddingZone:AddChildren(g1) end | 315 if admin then biddingZone:AddChildren(g1) end |