farmbuyer@1
|
1 local addon = select(2,...)
|
farmbuyer@1
|
2
|
farmbuyer@1
|
3 --[[
|
farmbuyer@1
|
4 Purely the AceGUI-related routines, and the subroutines needed for support.
|
farmbuyer@1
|
5 ------ Constants
|
farmbuyer@6
|
6 ------ Globals
|
farmbuyer@1
|
7 ------ Behind the scenes routines
|
farmbuyer@1
|
8 ------ Main GUI Window
|
farmbuyer@1
|
9 ------ Popup dialogs
|
farmbuyer@1
|
10 ]]
|
farmbuyer@1
|
11
|
farmbuyer@1
|
12 ------ Constants
|
farmbuyer@1
|
13 local eoi_st_rowheight = 20
|
farmbuyer@16
|
14 local eoi_st_displayed_rows = math.floor(416/eoi_st_rowheight) --math.floor(366/eoi_st_rowheight)
|
farmbuyer@1
|
15 local eoi_st_textured_item_format = "|T%s:"..(eoi_st_rowheight-2).."|t %s[%s]|r%s"
|
farmbuyer@1
|
16 local eoi_st_otherrow_bgcolortable = {
|
farmbuyer@1
|
17 wipe = { ["r"] = 0.3, ["g"] = 0.3, ["b"] = 0.3},
|
farmbuyer@1
|
18 kill = { ["r"] = 0.2, ["g"] = 0.2, ["b"] = 0.2},
|
farmbuyer@1
|
19 time = { ["r"] = 0x0/255, ["g"] = 0x0/255, ["b"] = 1, ["a"] = 0.3},
|
farmbuyer@1
|
20 }
|
farmbuyer@1
|
21 eoi_st_otherrow_bgcolortable[""] = eoi_st_otherrow_bgcolortable["kill"]
|
farmbuyer@4
|
22 --eoi_st_otherrow_bgcolortable["realm"] = eoi_st_otherrow_bgcolortable["time"]
|
farmbuyer@1
|
23 local eoi_st_otherrow_bgcolortable_default
|
farmbuyer@1
|
24 local eoi_st_lootrow_col3_colortable = {
|
farmbuyer@1
|
25 [""] = { text = "", r = 1.0, g = 1.0, b = 1.0, a = 1.0 },
|
farmbuyer@1
|
26 shard = { text = "shard", r = 0xa3/255, g = 0x35/255, b = 0xee/255, a = 1.0 },
|
farmbuyer@1
|
27 offspec = { text = "offspec", r = 0.78, g = 0.61, b = 0.43, a = 1.0 },
|
farmbuyer@1
|
28 gvault = { text = "guild vault", r = 0x33/255, g = 1.0, b = 0x99/255, a = 1.0 },
|
farmbuyer@1
|
29 }
|
farmbuyer@1
|
30 local function eoi_st_lootrow_col3_colortable_func (data, cols, realrow, column, table)
|
farmbuyer@1
|
31 local disp = data[realrow].disposition
|
farmbuyer@1
|
32 return eoi_st_lootrow_col3_colortable[disp or ""]
|
farmbuyer@1
|
33 end
|
farmbuyer@1
|
34 addon.time_column1_used_mt = { __index = {
|
farmbuyer@1
|
35 [2] = {value=""},
|
farmbuyer@1
|
36 [3] = {value=""},
|
farmbuyer@1
|
37 } }
|
farmbuyer@1
|
38 local time_column1_used_mt = addon.time_column1_used_mt
|
farmbuyer@1
|
39
|
farmbuyer@1
|
40
|
farmbuyer@6
|
41 ------ Globals
|
farmbuyer@1
|
42 local GUI = LibStub("AceGUI-3.0")
|
farmbuyer@1
|
43 local flib = LibStub("LibFarmbuyer")
|
farmbuyer@1
|
44
|
farmbuyer@1
|
45 local g_loot = nil
|
farmbuyer@1
|
46 local g_generated = nil
|
farmbuyer@1
|
47
|
farmbuyer@1
|
48 local pairs, ipairs, tinsert, tremove, tonumber = pairs, ipairs, table.insert, table.remove, tonumber
|
farmbuyer@1
|
49
|
farmbuyer@1
|
50 local pprint, tabledump = addon.pprint, flib.tabledump
|
farmbuyer@11
|
51 local GetItemInfo, ITEM_QUALITY_COLORS = GetItemInfo, ITEM_QUALITY_COLORS
|
farmbuyer@1
|
52
|
farmbuyer@1
|
53 -- En masse forward decls of symbols defined inside local blocks
|
farmbuyer@1
|
54 local _generate_text, _populate_text_specials
|
farmbuyer@1
|
55 local _tabtexts, _taborder -- filled out in gui block scope
|
farmbuyer@1
|
56
|
farmbuyer@1
|
57 -- Working around this bug:
|
farmbuyer@1
|
58 -- http://forums.wowace.com/showpost.php?p=295202&postcount=31
|
farmbuyer@1
|
59 do
|
farmbuyer@1
|
60 local function FixFrameLevel (level, ...)
|
farmbuyer@1
|
61 for i = 1, select("#", ...) do
|
farmbuyer@1
|
62 local button = select(i, ...)
|
farmbuyer@1
|
63 button:SetFrameLevel(level)
|
farmbuyer@1
|
64 end
|
farmbuyer@1
|
65 end
|
farmbuyer@1
|
66
|
farmbuyer@1
|
67 local function FixMenuFrameLevels()
|
farmbuyer@1
|
68 local f = DropDownList1
|
farmbuyer@1
|
69 local i = 1
|
farmbuyer@1
|
70 while f do
|
farmbuyer@1
|
71 FixFrameLevel (f:GetFrameLevel() + 2, f:GetChildren())
|
farmbuyer@1
|
72 i = i + 1
|
farmbuyer@1
|
73 f = _G["DropDownList"..i]
|
farmbuyer@1
|
74 end
|
farmbuyer@1
|
75 end
|
farmbuyer@1
|
76
|
farmbuyer@1
|
77 -- To fix Blizzard's bug caused by the new "self:SetFrameLevel(2);"
|
farmbuyer@1
|
78 hooksecurefunc("UIDropDownMenu_CreateFrames", FixMenuFrameLevels)
|
farmbuyer@1
|
79 end
|
farmbuyer@1
|
80
|
farmbuyer@1
|
81
|
farmbuyer@1
|
82 ------ Behind the scenes routines
|
farmbuyer@1
|
83 -- Text generation
|
farmbuyer@1
|
84 do
|
farmbuyer@1
|
85 local next_insertion_position = 2 -- position in _taborder
|
farmbuyer@1
|
86 local text_gen_funcs, specials_gen_funcs = {}, {}
|
farmbuyer@1
|
87 local accumulator = {}
|
farmbuyer@1
|
88
|
farmbuyer@1
|
89 -- Can do clever things by passing other halting points as zero
|
farmbuyer@1
|
90 function addon:zero_printed_fenceposts(zero)
|
farmbuyer@1
|
91 for t in pairs(text_gen_funcs) do
|
farmbuyer@1
|
92 g_loot.printed[t] = zero or g_loot.printed[t] or 0
|
farmbuyer@1
|
93 end
|
farmbuyer@1
|
94 end
|
farmbuyer@1
|
95
|
farmbuyer@10
|
96 function addon:registered_textgen_iter()
|
farmbuyer@10
|
97 return pairs(text_gen_funcs)
|
farmbuyer@10
|
98 end
|
farmbuyer@10
|
99
|
farmbuyer@1
|
100 -- This function is called during load, so be careful!
|
farmbuyer@1
|
101 function addon:register_text_generator (text_type, title, description, generator, opt_specgen)
|
farmbuyer@1
|
102 if type(generator) ~= 'function' then
|
farmbuyer@1
|
103 error(("Generator for text type '%s' must be a function!"):format(text_type))
|
farmbuyer@1
|
104 end
|
farmbuyer@1
|
105 _tabtexts[text_type] = { title=title, desc=description }
|
farmbuyer@1
|
106 tinsert (_taborder, next_insertion_position, text_type)
|
farmbuyer@1
|
107 next_insertion_position = next_insertion_position + 1
|
farmbuyer@1
|
108 text_gen_funcs[text_type] = generator
|
farmbuyer@1
|
109 specials_gen_funcs[text_type] = opt_specgen
|
farmbuyer@1
|
110 end
|
farmbuyer@1
|
111
|
farmbuyer@1
|
112 -- Called by tabs_generated_text_OGS
|
farmbuyer@1
|
113 function _generate_text (text_type)
|
farmbuyer@1
|
114 local f = text_gen_funcs[text_type]
|
farmbuyer@1
|
115 if not f then
|
farmbuyer@1
|
116 error(("Generator called for unregistered text type '%s'."):format(text_type))
|
farmbuyer@1
|
117 end
|
farmbuyer@1
|
118 g_generated = g_generated or {}
|
farmbuyer@1
|
119 g_loot[text_type] = g_loot[text_type] or ""
|
farmbuyer@1
|
120
|
farmbuyer@1
|
121 if g_loot.printed[text_type] >= #g_loot then return false end
|
farmbuyer@1
|
122 assert(addon.loot_clean == #g_loot, tostring(addon.loot_clean) .. " ~= " .. #g_loot)
|
farmbuyer@1
|
123 -- if glc is nil, #==0 test already returned
|
farmbuyer@1
|
124
|
farmbuyer@1
|
125 local ok,ret = pcall (f, text_type, g_loot, g_loot.printed[text_type], g_generated, accumulator)
|
farmbuyer@1
|
126 if not ok then
|
farmbuyer@1
|
127 error(("ERROR: text generator '%s' failed: %s"):format(text_type, ret))
|
farmbuyer@1
|
128 return false
|
farmbuyer@1
|
129 end
|
farmbuyer@1
|
130 if ret then
|
farmbuyer@1
|
131 g_loot.printed[text_type] = #g_loot
|
farmbuyer@1
|
132 g_generated[text_type] = (g_generated[text_type] or "") .. table.concat(accumulator,'\n') .. '\n'
|
farmbuyer@1
|
133 end
|
farmbuyer@1
|
134 wipe(accumulator)
|
farmbuyer@1
|
135 return ret
|
farmbuyer@1
|
136 end
|
farmbuyer@1
|
137 function _populate_text_specials (editbox, specials, mkb, text_type)
|
farmbuyer@1
|
138 local f = specials_gen_funcs[text_type]
|
farmbuyer@1
|
139 if not f then return end
|
farmbuyer@1
|
140 pcall (f, text_type, editbox, specials, mkb)
|
farmbuyer@1
|
141 end
|
farmbuyer@1
|
142 end
|
farmbuyer@1
|
143
|
farmbuyer@1
|
144 --[[
|
farmbuyer@1
|
145 The g_loot table is populated only with "behavior-relevant" data (names,
|
farmbuyer@1
|
146 links, etc). This function runs through it and fills out the "display-
|
farmbuyer@1
|
147 relevant" bits (icons, user-friendly labels, etc). Everything from the
|
farmbuyer@1
|
148 loot_clean index to the end of the table is filled out, loot_clean is
|
farmbuyer@1
|
149 updated. Override the starting point with the argument.
|
farmbuyer@1
|
150
|
farmbuyer@1
|
151 XXX blizzard's scrolling update and lib-st keep finding some way of displaying
|
farmbuyer@1
|
152 the grid without ever calling the hooked refresh, thereby skipping this
|
farmbuyer@1
|
153 function and erroring on missing columnar data. fuckit. from now on
|
farmbuyer@1
|
154 this function gets called everywhere, all the time, and loops over the
|
farmbuyer@1
|
155 entire goddamn table each time. If we can't find blizz's scrollframe bugs,
|
farmbuyer@1
|
156 we'll just work around them. Sorry for your smoking CPU.
|
farmbuyer@1
|
157
|
farmbuyer@1
|
158 FIXME just move this functionality to a per-entry function and call it once
|
farmbuyer@1
|
159 in _addlootentry. --actually no, then the columnar data won't be updated once
|
farmbuyer@1
|
160 the backend data is changed on the fly.
|
farmbuyer@1
|
161 ]]
|
farmbuyer@1
|
162 do
|
farmbuyer@1
|
163 local grammar = { -- not worth making a mt for this
|
farmbuyer@1
|
164 [2] = "nd",
|
farmbuyer@1
|
165 [3] = "rd",
|
farmbuyer@1
|
166 }
|
farmbuyer@1
|
167
|
farmbuyer@1
|
168 function addon:_fill_out_eoi_data (opt_starting_index)
|
farmbuyer@1
|
169 if #g_loot < 1 then
|
farmbuyer@1
|
170 --pprint('_f_o_e_d', "#g_loot<1")
|
farmbuyer@1
|
171 self.loot_clean = nil
|
farmbuyer@1
|
172 opt_starting_index = nil
|
farmbuyer@1
|
173 end
|
farmbuyer@1
|
174 for i = (opt_starting_index or self.loot_clean or 1), #g_loot do
|
farmbuyer@1
|
175 local e = g_loot[i]
|
farmbuyer@1
|
176 if e == nil then
|
farmbuyer@1
|
177 self.loot_clean = nil
|
farmbuyer@1
|
178 pprint('_f_o_e_d', "index",i,"somehow still in loop past",#g_loot,"bailing")
|
farmbuyer@1
|
179 return
|
farmbuyer@1
|
180 end
|
farmbuyer@1
|
181
|
farmbuyer@1
|
182 -- XXX FIXME a major weakness here is that we're constantly replacing
|
farmbuyer@1
|
183 -- what's already been created. Lots of garbage. Trying to detect what
|
farmbuyer@1
|
184 -- actually needs to be replaced is even worse. We'll live with
|
farmbuyer@1
|
185 -- garbage for now.
|
farmbuyer@1
|
186 if e.kind == 'loot' then
|
farmbuyer@11
|
187 local textured = eoi_st_textured_item_format:format (e.itexture, ITEM_QUALITY_COLORS[e.quality].hex, e.itemname, e.count or "")
|
farmbuyer@1
|
188 e.cols = {
|
farmbuyer@1
|
189 {value = textured},
|
farmbuyer@1
|
190 {value = e.person},
|
farmbuyer@1
|
191 { color = eoi_st_lootrow_col3_colortable_func }
|
farmbuyer@1
|
192 }
|
farmbuyer@1
|
193 -- This is horrible. Must do better.
|
farmbuyer@1
|
194 if e.extratext then for k,v in pairs(eoi_st_lootrow_col3_colortable) do
|
farmbuyer@1
|
195 if v.text == e.extratext then
|
farmbuyer@1
|
196 e.disposition = k
|
farmbuyer@1
|
197 --e.extratext = nil, not feasible
|
farmbuyer@1
|
198 break
|
farmbuyer@1
|
199 end
|
farmbuyer@1
|
200 end end
|
farmbuyer@1
|
201 local ex = eoi_st_lootrow_col3_colortable[e.disposition or ""].text
|
farmbuyer@1
|
202 if e.bcast_from and e.extratext then
|
farmbuyer@1
|
203 ex = e.extratext .. " (from " .. e.bcast_from .. ")"
|
farmbuyer@1
|
204 elseif e.bcast_from then
|
farmbuyer@1
|
205 ex = "(from " .. e.bcast_from .. ")"
|
farmbuyer@1
|
206 elseif e.extratext then
|
farmbuyer@1
|
207 ex = e.extratext
|
farmbuyer@1
|
208 end
|
farmbuyer@1
|
209 e.cols[3].value = ex
|
farmbuyer@1
|
210
|
farmbuyer@1
|
211 elseif e.kind == 'boss' then
|
farmbuyer@1
|
212 local v
|
farmbuyer@1
|
213 if e.reason == 'kill' then
|
farmbuyer@1
|
214 if e.attempts == 1 then
|
farmbuyer@1
|
215 v = "one-shot"
|
farmbuyer@1
|
216 else
|
farmbuyer@16
|
217 v = ("kill on %d%s attempt"):format(e.attempts or 0, grammar[e.attempts] or "th")
|
farmbuyer@1
|
218 end
|
farmbuyer@1
|
219 v = ("%s (%d:%.2d)"):format(v, math.floor(e.duration/60), math.floor(e.duration%60))
|
farmbuyer@1
|
220 elseif e.reason == 'wipe' then
|
farmbuyer@1
|
221 v = ("wipe (%d:%.2d)"):format(math.floor(e.duration/60), math.floor(e.duration%60))
|
farmbuyer@1
|
222 end
|
farmbuyer@1
|
223 e.cols = {
|
farmbuyer@1
|
224 {value = e.bosskill},
|
farmbuyer@1
|
225 {value = e.instance},
|
farmbuyer@1
|
226 {value = v or ""},
|
farmbuyer@1
|
227 }
|
farmbuyer@1
|
228
|
farmbuyer@1
|
229 elseif e.kind == 'time' then
|
farmbuyer@1
|
230 e.cols = setmetatable({
|
farmbuyer@1
|
231 {value=e.startday.text},
|
farmbuyer@1
|
232 }, time_column1_used_mt)
|
farmbuyer@1
|
233 --[[e.cols = {
|
farmbuyer@1
|
234 {value=e.startday.text},
|
farmbuyer@1
|
235 {value=""},
|
farmbuyer@1
|
236 {value=""},
|
farmbuyer@1
|
237 }]]
|
farmbuyer@1
|
238
|
farmbuyer@1
|
239 end
|
farmbuyer@1
|
240 end
|
farmbuyer@1
|
241 self.loot_clean = #g_loot
|
farmbuyer@1
|
242 end
|
farmbuyer@1
|
243 end
|
farmbuyer@1
|
244
|
farmbuyer@1
|
245 do
|
farmbuyer@1
|
246 function addon:_fill_out_hist_data (opt_starting_index)
|
farmbuyer@6
|
247 local new, del = flib.new, flib.del
|
farmbuyer@6
|
248
|
farmbuyer@1
|
249 -- Clearing history finishes this function with #hist==0 and hist_clean==0.
|
farmbuyer@1
|
250 -- The next call typically detects this (#<1) and handles it. If loot is
|
farmbuyer@1
|
251 -- recorded before then, it results in hist_clean==0 and #hist==1, which
|
farmbuyer@1
|
252 -- breaks the first iteration of the loop. Thus, the "extra" test here:
|
farmbuyer@1
|
253 if #self.history < 1 or self.hist_clean == 0 then
|
farmbuyer@1
|
254 self.hist_clean = nil
|
farmbuyer@1
|
255 opt_starting_index = nil
|
farmbuyer@1
|
256 end
|
farmbuyer@1
|
257 if not self.history.st then
|
farmbuyer@6
|
258 --print"creating ST!"
|
farmbuyer@1
|
259 self.history.st = {
|
farmbuyer@4
|
260 --[[{ kind = "realm",
|
farmbuyer@1
|
261 cols = setmetatable({
|
farmbuyer@1
|
262 { value = self.history.realm },
|
farmbuyer@1
|
263 }, time_column1_used_mt)
|
farmbuyer@4
|
264 }]]
|
farmbuyer@1
|
265 }
|
farmbuyer@1
|
266 end
|
farmbuyer@6
|
267
|
farmbuyer@6
|
268 -- for now
|
farmbuyer@6
|
269 if self.hist_clean == #self.history then return end
|
farmbuyer@6
|
270
|
farmbuyer@1
|
271 local st = self.history.st
|
farmbuyer@6
|
272 --print("starting history loop, #st ==", #st, "#history ==", #self.history)
|
farmbuyer@6
|
273 for i,t in ipairs(st) do
|
farmbuyer@6
|
274 del(t.cols[1])
|
farmbuyer@6
|
275 del(t.cols[2])
|
farmbuyer@6
|
276 del(t.cols[3])
|
farmbuyer@6
|
277 del(t.cols)
|
farmbuyer@6
|
278 del(t)
|
farmbuyer@6
|
279 st[i] = nil
|
farmbuyer@6
|
280 end
|
farmbuyer@1
|
281
|
farmbuyer@6
|
282 --for i = (opt_starting_index or self.hist_clean or 1), #self.history do
|
farmbuyer@6
|
283 local cache_okay = true
|
farmbuyer@6
|
284 for pi,player in ipairs(self.history) do
|
farmbuyer@6
|
285 local col1 = new()
|
farmbuyer@6
|
286 col1.OLi = pi
|
farmbuyer@6
|
287 col1.OLn = #player
|
farmbuyer@6
|
288 col1.value = player.name -- may spiffy this up in future
|
farmbuyer@1
|
289
|
farmbuyer@6
|
290 for li,loot in ipairs(player) do
|
farmbuyer@6
|
291 local col2 = new()
|
farmbuyer@6
|
292 col2.OLi = li
|
farmbuyer@6
|
293 local col3 = new()
|
farmbuyer@6
|
294 col3.value = loot.when
|
farmbuyer@6
|
295
|
farmbuyer@6
|
296 local itexture = GetItemIcon(loot.id)
|
farmbuyer@6
|
297 local iname, ilink, iquality = GetItemInfo(loot.id)
|
farmbuyer@4
|
298 local textured
|
farmbuyer@4
|
299 if itexture and iname then
|
farmbuyer@6
|
300 textured = eoi_st_textured_item_format:format (itexture,
|
farmbuyer@11
|
301 ITEM_QUALITY_COLORS[iquality].hex, iname, loot.count or "")
|
farmbuyer@4
|
302 else
|
farmbuyer@6
|
303 textured = eoi_st_textured_item_format:format ([[ICONS\INV_Misc_QuestionMark]],
|
farmbuyer@11
|
304 ITEM_QUALITY_COLORS[ITEM_QUALITY_COMMON].hex, 'UNKNOWN - TRY AGAIN', "")
|
farmbuyer@6
|
305 cache_okay = false
|
farmbuyer@4
|
306 end
|
farmbuyer@6
|
307 col2.value = textured
|
farmbuyer@6
|
308
|
farmbuyer@6
|
309 local dotcols = new (col1, col2, col3)
|
farmbuyer@6
|
310 local st_entry = new()
|
farmbuyer@6
|
311 st_entry.kind = 'history'
|
farmbuyer@6
|
312 st_entry.OLwho = player.name
|
farmbuyer@6
|
313 st_entry.cols = dotcols
|
farmbuyer@16
|
314 st_entry.itemlink = ilink -- for onenter and onclick
|
farmbuyer@6
|
315 tinsert (st, st_entry)
|
farmbuyer@1
|
316 end
|
farmbuyer@6
|
317 end
|
farmbuyer@1
|
318
|
farmbuyer@6
|
319 --print("finished history loop, #st ==", #st)
|
farmbuyer@6
|
320 self.hist_clean = cache_okay and #self.history or nil
|
farmbuyer@1
|
321 end
|
farmbuyer@6
|
322
|
farmbuyer@6
|
323
|
farmbuyer@1
|
324 end
|
farmbuyer@1
|
325
|
farmbuyer@1
|
326
|
farmbuyer@1
|
327 ------ Main GUI Window
|
farmbuyer@1
|
328 -- Lots of shared data here, kept in a large local scope. For readability,
|
farmbuyer@1
|
329 -- indentation of the scope as a whole is kicked left a notch.
|
farmbuyer@1
|
330 do
|
farmbuyer@1
|
331 local _d
|
farmbuyer@1
|
332 local function setstatus(txt) _d:SetStatusText(txt) end
|
farmbuyer@1
|
333 local function statusy_OnLeave() setstatus("") end
|
farmbuyer@1
|
334 local tabgroup_tabs
|
farmbuyer@1
|
335
|
farmbuyer@1
|
336 --[[
|
farmbuyer@1
|
337 Controls for the tabs on the left side of the main display.
|
farmbuyer@1
|
338 ]]
|
farmbuyer@1
|
339 _tabtexts = {
|
farmbuyer@1
|
340 ["eoi"] = {title=[[Loot]], desc=[[Observed loot, plus boss kills and other events of interest]]},
|
farmbuyer@1
|
341 ["hist"] = {title=[[History]], desc=[[A short semi-permanent record]]},
|
farmbuyer@1
|
342 ["help"] = {title=[[Help]], desc=[[Instructions, reminders, and tips for non-obvious features]]},
|
farmbuyer@1
|
343 ["opt"] = {title=[[Options]], desc=[[Options for fine-tuning behavior]]},
|
farmbuyer@1
|
344 --["adv"] = {title=[[Advanced]], desc=[[Debugging and testing]]},
|
farmbuyer@1
|
345 }
|
farmbuyer@6
|
346 --if addon.author_debug then
|
farmbuyer@1
|
347 _taborder = { "eoi", "hist", "help", "opt" }
|
farmbuyer@6
|
348 --else _taborder = { "eoi", "help", "opt" } end
|
farmbuyer@1
|
349
|
farmbuyer@1
|
350 --[[
|
farmbuyer@1
|
351 This is a table of callback functions, each responsible for drawing a tab
|
farmbuyer@1
|
352 into the container passed in the first argument. Special-purpose buttons
|
farmbuyer@1
|
353 can optionally be created (mkbutton) and added to the container in the second
|
farmbuyer@1
|
354 argument.
|
farmbuyer@1
|
355 ]]
|
farmbuyer@1
|
356 local tabs_OnGroupSelected = {}
|
farmbuyer@1
|
357 local mkbutton
|
farmbuyer@1
|
358 local tabs_OnGroupSelected_func, tabs_generated_text_OGS
|
farmbuyer@1
|
359
|
farmbuyer@1
|
360 function addon:gui_init (loot_pointer)
|
farmbuyer@1
|
361 g_loot = loot_pointer
|
farmbuyer@1
|
362 g_generated = nil
|
farmbuyer@1
|
363 tabgroup_tabs = {}
|
farmbuyer@1
|
364 for _,v in ipairs(_taborder) do
|
farmbuyer@1
|
365 tinsert (tabgroup_tabs, {value=v, text=_tabtexts[v].title})
|
farmbuyer@1
|
366 -- By default, tabs are editboxes with generated text
|
farmbuyer@1
|
367 if not tabs_OnGroupSelected[v] then
|
farmbuyer@1
|
368 tabs_OnGroupSelected[v] = tabs_generated_text_OGS
|
farmbuyer@1
|
369 end
|
farmbuyer@1
|
370 end
|
farmbuyer@1
|
371 end
|
farmbuyer@1
|
372
|
farmbuyer@1
|
373 -- Tab 1: Events Of Interest
|
farmbuyer@1
|
374 -- This actually takes up quite a bit of the file.
|
farmbuyer@1
|
375 local eoi_editcell
|
farmbuyer@1
|
376
|
farmbuyer@1
|
377 local function dropdownmenu_handler (ddbutton, subfunc, arg)
|
farmbuyer@1
|
378 local i = _d:GetUserData("DD loot index")
|
farmbuyer@1
|
379 subfunc(i,arg)
|
farmbuyer@1
|
380 _d:GetUserData("eoiST"):OuroLoot_Refresh(i)
|
farmbuyer@1
|
381 end
|
farmbuyer@1
|
382
|
farmbuyer@1
|
383 local function gen_easymenu_table (initial, list, funcs)
|
farmbuyer@1
|
384 for _,tag in ipairs(list) do
|
farmbuyer@1
|
385 local name, arg, tiptext
|
farmbuyer@1
|
386 name, tiptext = strsplit('|',tag)
|
farmbuyer@1
|
387 name, arg = strsplit('%',name)
|
farmbuyer@1
|
388 if name == "--" then
|
farmbuyer@1
|
389 tinsert (initial, {
|
farmbuyer@6
|
390 disabled = true, notCheckable = true, text = "",
|
farmbuyer@1
|
391 })
|
farmbuyer@1
|
392 else
|
farmbuyer@1
|
393 if not funcs[name] then
|
farmbuyer@1
|
394 error(("'%s' not defined as a dropdown function"):format(name))
|
farmbuyer@1
|
395 end
|
farmbuyer@1
|
396 tinsert (initial, {
|
farmbuyer@1
|
397 text = name,
|
farmbuyer@1
|
398 func = dropdownmenu_handler,
|
farmbuyer@1
|
399 arg1 = funcs[name],
|
farmbuyer@1
|
400 arg2 = arg,
|
farmbuyer@1
|
401 notCheckable = true,
|
farmbuyer@1
|
402 tooltipTitle = tiptext and name or nil,
|
farmbuyer@1
|
403 tooltipText = tiptext,
|
farmbuyer@1
|
404 })
|
farmbuyer@1
|
405 end
|
farmbuyer@1
|
406 end
|
farmbuyer@1
|
407 return initial
|
farmbuyer@1
|
408 end
|
farmbuyer@1
|
409
|
farmbuyer@1
|
410 local dropdownmenuframe = CreateFrame("Frame", "OuroLootDropDownMenu", nil, "UIDropDownMenuTemplate")
|
farmbuyer@1
|
411 local dropdownfuncs
|
farmbuyer@1
|
412 dropdownfuncs = {
|
farmbuyer@1
|
413 [CLOSE] = function() CloseDropDownMenus() end,
|
farmbuyer@1
|
414
|
farmbuyer@1
|
415 df_INSERT = function(rowi,text)
|
farmbuyer@1
|
416 local which = (text == 'loot') and "OUROL_EOI_INSERT_LOOT" or "OUROL_EOI_INSERT"
|
farmbuyer@1
|
417 local dialog = StaticPopup_Show(which,text)
|
farmbuyer@16
|
418 dialog.editBox:SetScript("OnTextChanged",StaticPopup_EditBoxOnTextChanged)
|
farmbuyer@1
|
419 dialog.data = {rowindex=rowi, display=_d, kind=text}
|
farmbuyer@1
|
420 end,
|
farmbuyer@1
|
421
|
farmbuyer@1
|
422 df_DELETE = function(rowi)
|
farmbuyer@1
|
423 local gone = tremove(g_loot,rowi)
|
farmbuyer@1
|
424 addon:Print("Removed %s.",
|
farmbuyer@1
|
425 gone.itemlink or gone.bosskill or gone.startday.text)
|
farmbuyer@1
|
426 end,
|
farmbuyer@1
|
427
|
farmbuyer@16
|
428 ["Delete this history event"] = function(rowi)
|
farmbuyer@16
|
429 --local gone = tremove(g_loot,rowi)
|
farmbuyer@16
|
430 --addon:Print("Removed %s.",
|
farmbuyer@16
|
431 --gone.itemlink or gone.bosskill or gone.startday.text)
|
farmbuyer@16
|
432 end,
|
farmbuyer@16
|
433
|
farmbuyer@1
|
434 -- if kind is boss, also need to stop at new timestamp
|
farmbuyer@1
|
435 ["Delete remaining entries for this day"] = function(rowi,kind)
|
farmbuyer@1
|
436 local fencepost
|
farmbuyer@1
|
437 local closest_time = addon._find_next_after('time',rowi)
|
farmbuyer@1
|
438 if kind == 'time' then
|
farmbuyer@1
|
439 fencepost = closest_time
|
farmbuyer@1
|
440 elseif kind == 'boss' then
|
farmbuyer@1
|
441 local closest_boss = addon._find_next_after('boss',rowi)
|
farmbuyer@1
|
442 if not closest_boss then
|
farmbuyer@1
|
443 fencepost = closest_time
|
farmbuyer@1
|
444 elseif not closest_time then
|
farmbuyer@1
|
445 fencepost = closest_boss
|
farmbuyer@1
|
446 else
|
farmbuyer@1
|
447 fencepost = math.min(closest_time,closest_boss)
|
farmbuyer@1
|
448 end
|
farmbuyer@1
|
449 end
|
farmbuyer@1
|
450 local count = fencepost and (fencepost-rowi) or (#g_loot-rowi+1)
|
farmbuyer@1
|
451 repeat
|
farmbuyer@1
|
452 dropdownfuncs.df_DELETE(rowi)
|
farmbuyer@1
|
453 count = count - 1
|
farmbuyer@1
|
454 until count < 1
|
farmbuyer@1
|
455 end,
|
farmbuyer@1
|
456
|
farmbuyer@1
|
457 ["Rebroadcast this loot entry"] = function(rowi)
|
farmbuyer@1
|
458 local e = g_loot[rowi]
|
farmbuyer@1
|
459 -- This only works because GetItemInfo accepts multiple argument formats
|
farmbuyer@1
|
460 addon:broadcast('loot', e.person, e.itemlink, e.count, e.cols[3].value)
|
farmbuyer@1
|
461 addon:Print("Rebroadcast entry",rowi,e.itemlink)
|
farmbuyer@1
|
462 end,
|
farmbuyer@1
|
463
|
farmbuyer@1
|
464 ["Rebroadcast this boss"] = function(rowi,kind)
|
farmbuyer@1
|
465 addon:Print("not implemented yet") -- TODO
|
farmbuyer@1
|
466 end,
|
farmbuyer@1
|
467
|
farmbuyer@1
|
468 ["Mark as normal"] = function(rowi,disp) -- broadcast the change? ugh
|
farmbuyer@1
|
469 g_loot[rowi].disposition = disp
|
farmbuyer@1
|
470 g_loot[rowi].bcast_from = nil
|
farmbuyer@1
|
471 g_loot[rowi].extratext = nil
|
farmbuyer@1
|
472 end,
|
farmbuyer@1
|
473
|
farmbuyer@1
|
474 ["Show only this player"] = function(rowi)
|
farmbuyer@1
|
475 local st = _d:GetUserData("eoiST")
|
farmbuyer@1
|
476 _d:SetUserData("player filter name", g_loot[rowi].person)
|
farmbuyer@1
|
477 st:SetFilter(_d:GetUserData("player filter by name"))
|
farmbuyer@1
|
478 _d:GetUserData("eoi_filter_reset"):SetDisabled(false)
|
farmbuyer@1
|
479 end,
|
farmbuyer@1
|
480
|
farmbuyer@1
|
481 ["Change from 'wipe' to 'kill'"] = function(rowi)
|
farmbuyer@1
|
482 addon:_mark_boss_kill(rowi)
|
farmbuyer@1
|
483 -- the fillout function called automatically will start too far down the list
|
farmbuyer@1
|
484 _d:GetUserData("eoiST"):OuroLoot_Refresh()
|
farmbuyer@1
|
485 end,
|
farmbuyer@1
|
486
|
farmbuyer@1
|
487 ["Edit note"] = function(rowi)
|
farmbuyer@1
|
488 eoi_editcell (rowi, _d:GetUserData("DD loot cell"))
|
farmbuyer@1
|
489 end,
|
farmbuyer@1
|
490
|
farmbuyer@1
|
491 df_REASSIGN = function(rowi,to_whom)
|
farmbuyer@1
|
492 g_loot[rowi].person = to_whom
|
farmbuyer@1
|
493 g_loot[rowi].person_class = select(2,UnitClass(to_whom))
|
farmbuyer@16
|
494 -- FIXME also update history
|
farmbuyer@1
|
495 CloseDropDownMenus() -- also need to close parent menu
|
farmbuyer@1
|
496 end,
|
farmbuyer@1
|
497 ["Enter name..."] = function(rowi)
|
farmbuyer@1
|
498 local dialog = StaticPopup_Show "OUROL_REASSIGN_ENTER"
|
farmbuyer@1
|
499 dialog.data = {index=rowi, display=_d}
|
farmbuyer@1
|
500 end,
|
farmbuyer@1
|
501 }
|
farmbuyer@1
|
502 -- Would be better to move the %arg to this list rather than below, but
|
farmbuyer@1
|
503 -- that's a lot of extra effort that doesn't buy much in return.
|
farmbuyer@1
|
504 dropdownfuncs["Delete this loot event"] = dropdownfuncs.df_DELETE
|
farmbuyer@1
|
505 dropdownfuncs["Delete this boss event"] = dropdownfuncs.df_DELETE
|
farmbuyer@1
|
506 dropdownfuncs["Insert new loot entry"] = dropdownfuncs.df_INSERT
|
farmbuyer@1
|
507 dropdownfuncs["Insert new boss kill event"] = dropdownfuncs.df_INSERT
|
farmbuyer@1
|
508 dropdownfuncs["Mark as disenchanted"] = dropdownfuncs["Mark as normal"]
|
farmbuyer@1
|
509 dropdownfuncs["Mark as guild vault"] = dropdownfuncs["Mark as normal"]
|
farmbuyer@1
|
510 dropdownfuncs["Mark as offspec"] = dropdownfuncs["Mark as normal"]
|
farmbuyer@1
|
511 dropdownfuncs["Delete remaining entries for this boss"] = dropdownfuncs["Delete remaining entries for this day"]
|
farmbuyer@1
|
512 dropdownfuncs["Rebroadcast this day"] = dropdownfuncs["Rebroadcast this boss"]
|
farmbuyer@1
|
513 local eoi_time_dropdown = gen_easymenu_table(
|
farmbuyer@1
|
514 {{
|
farmbuyer@1
|
515 -- this is the dropdown title, text filled in on the fly
|
farmbuyer@1
|
516 isTitle = true,
|
farmbuyer@1
|
517 notClickable = true,
|
farmbuyer@1
|
518 notCheckable = true,
|
farmbuyer@1
|
519 }},
|
farmbuyer@1
|
520 {
|
farmbuyer@1
|
521 "Rebroadcast this day%time|Broadcasts everything from here down until a new day",
|
farmbuyer@1
|
522 "Delete remaining entries for this day%time|Erases everything from here down until a new day",
|
farmbuyer@1
|
523 "Insert new loot entry%loot|Inserts new loot above this one, prompting you for information",
|
farmbuyer@1
|
524 "Insert new boss kill event%boss|Inserts new event above this one, prompting you for information",
|
farmbuyer@1
|
525 CLOSE
|
farmbuyer@1
|
526 }, dropdownfuncs)
|
farmbuyer@1
|
527 local eoi_loot_dropdown = gen_easymenu_table(
|
farmbuyer@1
|
528 {{
|
farmbuyer@1
|
529 -- this is the dropdown title, text filled in on the fly
|
farmbuyer@1
|
530 notClickable = true,
|
farmbuyer@1
|
531 notCheckable = true,
|
farmbuyer@1
|
532 }},
|
farmbuyer@1
|
533 {
|
farmbuyer@1
|
534 "Mark as disenchanted%shard",
|
farmbuyer@1
|
535 "Mark as offspec%offspec",
|
farmbuyer@1
|
536 "Mark as guild vault%gvault",
|
farmbuyer@1
|
537 "Mark as normal|This is the default. Selecting any 'Mark as <x>' action blanks out extra notes about who broadcast this entry, etc.",
|
farmbuyer@1
|
538 "--",
|
farmbuyer@1
|
539 "Rebroadcast this loot entry|Sends this loot event, including special notes, as if it just happened.",
|
farmbuyer@1
|
540 "Delete this loot event|Permanent, no going back!",
|
farmbuyer@1
|
541 "Delete remaining entries for this boss%boss|Erases everything from here down until a new boss/day",
|
farmbuyer@1
|
542 "Insert new loot entry%loot|Inserts new loot above this one, prompting you for information",
|
farmbuyer@1
|
543 "Insert new boss kill event%boss|Inserts new event above this one, prompting you for information",
|
farmbuyer@1
|
544 "Edit note|Same as double-clicking in the notes column",
|
farmbuyer@1
|
545 "--",
|
farmbuyer@1
|
546 CLOSE
|
farmbuyer@1
|
547 }, dropdownfuncs)
|
farmbuyer@1
|
548 local eoi_player_dropdown = gen_easymenu_table(
|
farmbuyer@1
|
549 {
|
farmbuyer@1
|
550 {
|
farmbuyer@1
|
551 -- this is the dropdown title, text filled in on the fly
|
farmbuyer@1
|
552 isTitle = true,
|
farmbuyer@1
|
553 notClickable = true,
|
farmbuyer@1
|
554 notCheckable = true,
|
farmbuyer@1
|
555 },
|
farmbuyer@1
|
556 {
|
farmbuyer@1
|
557 text = "Reassign to...",
|
farmbuyer@1
|
558 hasArrow = true,
|
farmbuyer@1
|
559 --menuList = filled in in the fly,
|
farmbuyer@1
|
560 },
|
farmbuyer@1
|
561 },
|
farmbuyer@1
|
562 {
|
farmbuyer@1
|
563 "Show only this player",
|
farmbuyer@1
|
564 CLOSE
|
farmbuyer@1
|
565 }, dropdownfuncs)
|
farmbuyer@1
|
566 local eoi_boss_dropdown = gen_easymenu_table(
|
farmbuyer@1
|
567 {{
|
farmbuyer@1
|
568 -- this is the dropdown title, text filled in on the fly
|
farmbuyer@1
|
569 isTitle = true,
|
farmbuyer@1
|
570 notClickable = true,
|
farmbuyer@1
|
571 notCheckable = true,
|
farmbuyer@1
|
572 }},
|
farmbuyer@1
|
573 {
|
farmbuyer@1
|
574 "Change from 'wipe' to 'kill'|Also collapses other wipe entries",
|
farmbuyer@1
|
575 "Rebroadcast this boss|Broadcasts the kill event and all subsequent loot until next boss",
|
farmbuyer@1
|
576 "Delete this boss event|Permanent, no going back!",
|
farmbuyer@1
|
577 "Delete remaining entries for this boss%boss|Erases everything from here down until a new boss/day",
|
farmbuyer@1
|
578 "Insert new loot entry%loot|Inserts new loot above this one, prompting you for information",
|
farmbuyer@1
|
579 "Insert new boss kill event%boss|Inserts new event above this one, prompting you for information",
|
farmbuyer@1
|
580 "--",
|
farmbuyer@1
|
581 CLOSE
|
farmbuyer@1
|
582 }, dropdownfuncs)
|
farmbuyer@16
|
583 local hist_dropdown = gen_easymenu_table(
|
farmbuyer@16
|
584 {{
|
farmbuyer@16
|
585 -- this is the dropdown title, text filled in on the fly
|
farmbuyer@16
|
586 notClickable = true,
|
farmbuyer@16
|
587 notCheckable = true,
|
farmbuyer@16
|
588 }},
|
farmbuyer@16
|
589 {
|
farmbuyer@16
|
590 "Delete this history event|Permanent, no going back!",
|
farmbuyer@16
|
591 --"Delete remaining entries for this boss%boss|Erases everything from here down until a new boss/day",
|
farmbuyer@16
|
592 "--",
|
farmbuyer@16
|
593 CLOSE
|
farmbuyer@16
|
594 }, dropdownfuncs)
|
farmbuyer@1
|
595
|
farmbuyer@1
|
596 --[[ quoted verbatim from lib-st docs:
|
farmbuyer@1
|
597 rowFrame This is the UI Frame table for the row.
|
farmbuyer@1
|
598 cellFrame This is the UI Frame table for the cell in the row.
|
farmbuyer@1
|
599 data This is the data table supplied to the scrolling table (in case you lost it :) )
|
farmbuyer@1
|
600 cols This is the cols table supplied to the scrolling table (again, in case you lost it :) )
|
farmbuyer@1
|
601 row This is the number of the UI row that the event was triggered for.<br/> ex. If your scrolling table only shows ten rows, this number will be a number between 1 and 10.
|
farmbuyer@1
|
602 realrow This is the exact row index (after sorting and filtering) in the data table of what data is displayed in the row you triggered the event in. (NOT the UI row!)
|
farmbuyer@1
|
603 column This is the index of which column the event was triggered in.
|
farmbuyer@1
|
604 table This is a reference to the scrollingtable table.
|
farmbuyer@1
|
605 ... Any arguments generated by the '''NORMAL''' Blizzard event triggered by the frame are passed as is.
|
farmbuyer@1
|
606 ]]
|
farmbuyer@1
|
607 local function eoi_st_OnEnter (rowFrame, cellFrame, data, cols, row, realrow, column, table, button, ...)
|
farmbuyer@1
|
608 if (row == nil) or (realrow == nil) then return end -- mouseover column header
|
farmbuyer@1
|
609 local e = data[realrow]
|
farmbuyer@1
|
610 local kind = e.kind
|
farmbuyer@1
|
611
|
farmbuyer@16
|
612 if (kind == 'loot' and column == 1) or (kind == 'history' and column == 2) then
|
farmbuyer@16
|
613 if e.itemlink then
|
farmbuyer@16
|
614 GameTooltip:SetOwner (cellFrame, "ANCHOR_RIGHT", -20, 0)
|
farmbuyer@16
|
615 GameTooltip:SetHyperlink (e.itemlink)
|
farmbuyer@16
|
616 end
|
farmbuyer@1
|
617
|
farmbuyer@1
|
618 elseif kind == 'loot' and column == 2 then
|
farmbuyer@1
|
619 GameTooltip:SetOwner (cellFrame, "ANCHOR_BOTTOMRIGHT", -50, 5)
|
farmbuyer@1
|
620 GameTooltip:ClearLines()
|
farmbuyer@1
|
621 GameTooltip:AddLine(e.person.." Loot:")
|
farmbuyer@1
|
622 local counter = 0
|
farmbuyer@1
|
623 for i,e2 in ipairs(data) do
|
farmbuyer@1
|
624 if e2.person == e.person then -- would be awesome to test for alts
|
farmbuyer@1
|
625 if counter > 10 then
|
farmbuyer@1
|
626 GameTooltip:AddLine("...")
|
farmbuyer@1
|
627 break
|
farmbuyer@1
|
628 else
|
farmbuyer@1
|
629 -- textures screw up too badly, strip them
|
farmbuyer@1
|
630 local textured = e2.cols[1].value
|
farmbuyer@1
|
631 local space = textured:find(" ")
|
farmbuyer@1
|
632 GameTooltip:AddLine(textured:sub(space+1))
|
farmbuyer@1
|
633 counter = counter + 1
|
farmbuyer@1
|
634 end
|
farmbuyer@1
|
635 end
|
farmbuyer@1
|
636 end
|
farmbuyer@1
|
637 GameTooltip:Show()
|
farmbuyer@1
|
638
|
farmbuyer@1
|
639 elseif kind == 'loot' and column == 3 then
|
farmbuyer@1
|
640 setstatus(e.cols[column].value)
|
farmbuyer@1
|
641
|
farmbuyer@1
|
642 end
|
farmbuyer@1
|
643
|
farmbuyer@1
|
644 return false -- continue with default highlighting behavior
|
farmbuyer@1
|
645 end
|
farmbuyer@1
|
646 local function eoi_st_OnLeave (rowFrame, cellFrame, data, cols, row, realrow, column, table, button, ...)
|
farmbuyer@1
|
647 GameTooltip:Hide()
|
farmbuyer@1
|
648 if row and realrow and data[realrow].kind ~= 'loot' then
|
farmbuyer@1
|
649 table:SetHighLightColor (rowFrame, eoi_st_otherrow_bgcolortable[data[realrow].reason or data[realrow].kind])
|
farmbuyer@1
|
650 return true -- do not do anything further
|
farmbuyer@1
|
651 else
|
farmbuyer@1
|
652 --setstatus("")
|
farmbuyer@1
|
653 return false -- continue with default un-highlighting behavior
|
farmbuyer@1
|
654 end
|
farmbuyer@1
|
655 end
|
farmbuyer@1
|
656
|
farmbuyer@1
|
657 local function eoi_st_OnClick (rowFrame, cellFrame, data, cols, row, realrow, column, stable, button, ...)
|
farmbuyer@1
|
658 if (row == nil) or (realrow == nil) then return true end -- click column header, suppress reordering
|
farmbuyer@1
|
659 local e = data[realrow]
|
farmbuyer@1
|
660 local kind = e.kind
|
farmbuyer@1
|
661
|
farmbuyer@1
|
662 -- Check for shift-clicking a loot line
|
farmbuyer@16
|
663 if IsModifiedClick("CHATLINK") and
|
farmbuyer@16
|
664 ((kind == 'loot' and column == 1) or (kind == 'history' and column == 2))
|
farmbuyer@16
|
665 then
|
farmbuyer@1
|
666 ChatEdit_InsertLink (e.itemlink)
|
farmbuyer@1
|
667 return true -- do not do anything further
|
farmbuyer@1
|
668 end
|
farmbuyer@1
|
669
|
farmbuyer@1
|
670 -- Remaining actions are all right-click
|
farmbuyer@1
|
671 if button ~= "RightButton" then return true end
|
farmbuyer@1
|
672 _d:SetUserData("DD loot index", realrow)
|
farmbuyer@1
|
673
|
farmbuyer@1
|
674 if kind == 'loot' and (column == 1 or column == 3) then
|
farmbuyer@1
|
675 _d:SetUserData("DD loot cell", cellFrame)
|
farmbuyer@1
|
676 eoi_loot_dropdown[1].text = e.itemlink
|
farmbuyer@1
|
677 EasyMenu (eoi_loot_dropdown, dropdownmenuframe, cellFrame, 0, 0, "MENU")
|
farmbuyer@1
|
678
|
farmbuyer@1
|
679 elseif kind == 'loot' and column == 2 then
|
farmbuyer@1
|
680 eoi_player_dropdown[1].text = e.person
|
farmbuyer@1
|
681 local raiders = {}
|
farmbuyer@1
|
682 for i = 1, GetNumRaidMembers() do
|
farmbuyer@1
|
683 tinsert (raiders, (GetRaidRosterInfo(i)))
|
farmbuyer@1
|
684 end
|
farmbuyer@1
|
685 table.sort(raiders)
|
farmbuyer@1
|
686 for i = 1, #raiders do
|
farmbuyer@1
|
687 local name = raiders[i]
|
farmbuyer@1
|
688 raiders[i] = {
|
farmbuyer@1
|
689 text = name,
|
farmbuyer@1
|
690 func = dropdownmenu_handler,
|
farmbuyer@1
|
691 arg1 = dropdownfuncs.df_REASSIGN,
|
farmbuyer@1
|
692 arg2 = name,
|
farmbuyer@1
|
693 notCheckable = true,
|
farmbuyer@1
|
694 }
|
farmbuyer@1
|
695 end
|
farmbuyer@1
|
696 eoi_player_dropdown[2].menuList =
|
farmbuyer@1
|
697 gen_easymenu_table (raiders, {"Enter name...",CLOSE}, dropdownfuncs)
|
farmbuyer@1
|
698 --tabledump(eoi_player_dropdown)
|
farmbuyer@1
|
699 EasyMenu (eoi_player_dropdown, dropdownmenuframe, cellFrame, 0, 0, "MENU")
|
farmbuyer@1
|
700
|
farmbuyer@1
|
701 elseif kind == 'boss' then
|
farmbuyer@1
|
702 eoi_boss_dropdown[1].text = e.bosskill
|
farmbuyer@1
|
703 EasyMenu (eoi_boss_dropdown, dropdownmenuframe, cellFrame, 0, 0, "MENU")
|
farmbuyer@1
|
704
|
farmbuyer@1
|
705 elseif kind == 'time' then
|
farmbuyer@1
|
706 eoi_time_dropdown[1].text = e.startday.text
|
farmbuyer@1
|
707 EasyMenu (eoi_time_dropdown, dropdownmenuframe, cellFrame, 0, 0, "MENU")
|
farmbuyer@1
|
708
|
farmbuyer@16
|
709 elseif kind == 'history' then -- XXX need to move this into new onclick handler
|
farmbuyer@16
|
710 _d:SetUserData("DD loot cell", cellFrame)
|
farmbuyer@16
|
711 hist_dropdown[1].text = e.itemlink
|
farmbuyer@16
|
712 EasyMenu (hist_dropdown, dropdownmenuframe, cellFrame, 0, 0, "MENU")
|
farmbuyer@1
|
713 end
|
farmbuyer@1
|
714
|
farmbuyer@1
|
715 return true -- do not do anything further
|
farmbuyer@1
|
716 end
|
farmbuyer@1
|
717
|
farmbuyer@1
|
718 function eoi_editcell (row_index, cell_frame)
|
farmbuyer@1
|
719 local e = g_loot[row_index]
|
farmbuyer@1
|
720 if not e then return end -- how the hell could we get this far?
|
farmbuyer@1
|
721 local celldata = e.cols[3]
|
farmbuyer@1
|
722 local box = GUI:Create("EditBox")
|
farmbuyer@1
|
723 box:SetText(celldata.value)
|
farmbuyer@1
|
724 box:SetUserData("old show", box.editbox:GetScript("OnShow"))
|
farmbuyer@1
|
725 box:SetUserData("old escape", box.editbox:GetScript("OnEscapePressed"))
|
farmbuyer@1
|
726 box.editbox:SetScript("OnShow", box.editbox.SetFocus)
|
farmbuyer@1
|
727 box.editbox:SetScript("OnEscapePressed", function(_be)
|
farmbuyer@1
|
728 _be:ClearFocus()
|
farmbuyer@1
|
729 _be.obj:Release()
|
farmbuyer@1
|
730 end)
|
farmbuyer@1
|
731 box:SetCallback("OnEnterPressed", function(_b,event,value)
|
farmbuyer@1
|
732 e.extratext = value
|
farmbuyer@1
|
733 celldata.value = value
|
farmbuyer@1
|
734 e.bcast_from = nil -- things get screwy if this field is still present. sigh.
|
farmbuyer@1
|
735 e.extratext_byhand = true
|
farmbuyer@1
|
736 value = value and value:match("^(x%d+)")
|
farmbuyer@1
|
737 if value then e.count = value end
|
farmbuyer@1
|
738 _b:Release()
|
farmbuyer@1
|
739 return _d:GetUserData("eoiST"):OuroLoot_Refresh(row_index)
|
farmbuyer@1
|
740 end)
|
farmbuyer@1
|
741 box:SetCallback("OnRelease", function(_b)
|
farmbuyer@1
|
742 _b.editbox:ClearFocus()
|
farmbuyer@1
|
743 _b.editbox:SetScript("OnShow", _b:GetUserData("old show"))
|
farmbuyer@1
|
744 _b.editbox:SetScript("OnEscapePressed", _b:GetUserData("old escape"))
|
farmbuyer@1
|
745 setstatus("")
|
farmbuyer@1
|
746 end)
|
farmbuyer@1
|
747 box.frame:SetAllPoints(cell_frame)
|
farmbuyer@1
|
748 box.frame:SetParent(cell_frame)
|
farmbuyer@1
|
749 box.frame:SetFrameLevel(cell_frame:GetFrameLevel()+1)
|
farmbuyer@1
|
750 box.frame:Show()
|
farmbuyer@1
|
751 setstatus("Press Enter or click Okay to accept changes, or press Escape to cancel them.")
|
farmbuyer@1
|
752 end
|
farmbuyer@1
|
753
|
farmbuyer@1
|
754 local function eoi_st_OnDoubleClick (rowFrame, cellFrame, data, cols, row, realrow, column, stable, button, ...)
|
farmbuyer@1
|
755 if (row == nil) or (realrow == nil) then return true end -- they clicked on column header, suppress reordering
|
farmbuyer@1
|
756 local e = data[realrow]
|
farmbuyer@1
|
757 local kind = e.kind
|
farmbuyer@1
|
758
|
farmbuyer@1
|
759 --_d:SetUserData("DD loot index", realrow)
|
farmbuyer@1
|
760 if kind == 'loot' and column == 3 and button == "LeftButton" then
|
farmbuyer@1
|
761 eoi_editcell (realrow, cellFrame)
|
farmbuyer@1
|
762 end
|
farmbuyer@1
|
763
|
farmbuyer@1
|
764 return true -- do not do anything further
|
farmbuyer@1
|
765 end
|
farmbuyer@1
|
766
|
farmbuyer@1
|
767 -- Used for EOI column 2 and Hist column 1. Both are player name columns.
|
farmbuyer@6
|
768 local function eoi_st_col2_DoCellUpdate (rowFrame, cellFrame, data, cols, row, realrow, column, fShow, stable, ...)
|
farmbuyer@1
|
769 if not fShow then
|
farmbuyer@1
|
770 cellFrame.text:SetText("")
|
farmbuyer@1
|
771 if cellFrame.icontexture then
|
farmbuyer@1
|
772 cellFrame.icontexture:Hide()
|
farmbuyer@1
|
773 end
|
farmbuyer@1
|
774 return
|
farmbuyer@1
|
775 end
|
farmbuyer@1
|
776
|
farmbuyer@1
|
777 local e = data[realrow]
|
farmbuyer@1
|
778 local cell = e.cols[column]
|
farmbuyer@1
|
779
|
farmbuyer@1
|
780 cellFrame.text:SetText(cell.value)
|
farmbuyer@1
|
781 cellFrame.text:SetTextColor(1,1,1,1)
|
farmbuyer@1
|
782
|
farmbuyer@1
|
783 if e.person_class then
|
farmbuyer@1
|
784 local icon
|
farmbuyer@1
|
785 if cellFrame.icontexture then
|
farmbuyer@1
|
786 icon = cellFrame.icontexture
|
farmbuyer@1
|
787 else
|
farmbuyer@1
|
788 icon = cellFrame:CreateTexture(nil,"BACKGROUND")
|
farmbuyer@1
|
789 icon:SetPoint("LEFT", cellFrame, "LEFT")
|
farmbuyer@1
|
790 icon:SetHeight(eoi_st_rowheight-4)
|
farmbuyer@1
|
791 icon:SetWidth(eoi_st_rowheight-4)
|
farmbuyer@1
|
792 icon:SetTexture("Interface\\Glues\\CharacterCreate\\UI-CharacterCreate-Classes")
|
farmbuyer@1
|
793 cellFrame.icontexture = icon
|
farmbuyer@1
|
794 end
|
farmbuyer@1
|
795 icon:SetTexCoord(unpack(CLASS_ICON_TCOORDS[e.person_class]))
|
farmbuyer@1
|
796 icon:Show()
|
farmbuyer@1
|
797 cellFrame.text:SetPoint("LEFT", icon, "RIGHT", 1, 0)
|
farmbuyer@1
|
798 else
|
farmbuyer@1
|
799 if cellFrame.icontexture then
|
farmbuyer@1
|
800 cellFrame.icontexture:Hide()
|
farmbuyer@1
|
801 cellFrame.text:SetPoint("LEFT", cellFrame, "LEFT")
|
farmbuyer@1
|
802 end
|
farmbuyer@1
|
803 end
|
farmbuyer@1
|
804
|
farmbuyer@1
|
805 --if e.kind ~= 'loot' then
|
farmbuyer@1
|
806 stable:SetHighLightColor (rowFrame, eoi_st_otherrow_bgcolortable[e.reason or e.kind or ""])
|
farmbuyer@1
|
807 --else
|
farmbuyer@1
|
808 -- table:SetHighLightColor (rowFrame, table:GetDefaultHighlightBlank())
|
farmbuyer@1
|
809 --end
|
farmbuyer@1
|
810 end
|
farmbuyer@1
|
811
|
farmbuyer@1
|
812 local eoi_st_cols = {
|
farmbuyer@1
|
813 { -- col 1
|
farmbuyer@1
|
814 name = "Item",
|
farmbuyer@1
|
815 width = 250,
|
farmbuyer@1
|
816 },
|
farmbuyer@1
|
817 { -- col 2
|
farmbuyer@1
|
818 name = "Player",
|
farmbuyer@1
|
819 width = 130,
|
farmbuyer@1
|
820 DoCellUpdate = eoi_st_col2_DoCellUpdate,
|
farmbuyer@1
|
821 },
|
farmbuyer@1
|
822 { -- col 3
|
farmbuyer@1
|
823 name = "Notes",
|
farmbuyer@3
|
824 width = 250,
|
farmbuyer@1
|
825 },
|
farmbuyer@1
|
826 }
|
farmbuyer@1
|
827
|
farmbuyer@6
|
828 local player_filter_all
|
farmbuyer@6
|
829 local player_filter_by_name = function (st, e)
|
farmbuyer@1
|
830 if e.kind ~= 'loot' then return true end
|
farmbuyer@1
|
831 return e.person == _d:GetUserData("player filter name")
|
farmbuyer@1
|
832 end
|
farmbuyer@1
|
833
|
farmbuyer@1
|
834 -- Tab 1: Events Of Interest (implementation)
|
farmbuyer@1
|
835 tabs_OnGroupSelected["eoi"] = function(ocontainer,specials)
|
farmbuyer@1
|
836 if (not addon.rebroadcast) and (not addon.enabled) and (#g_loot < 1) then
|
farmbuyer@1
|
837 return addon.dprint('flow', "Nothing to show in first tab, skipping creation")
|
farmbuyer@1
|
838 end
|
farmbuyer@1
|
839
|
farmbuyer@1
|
840 -- The first time this function is called, we set up a persistent ST
|
farmbuyer@1
|
841 -- object and store it. Any other delayed setup work is done, and then
|
farmbuyer@1
|
842 -- this function replaces itself with a smaller, sleeker, sexier one.
|
farmbuyer@1
|
843 -- This function will later be garbage collected.
|
farmbuyer@1
|
844 local ST = LibStub("ScrollingTable"):CreateST(eoi_st_cols,eoi_st_displayed_rows,eoi_st_rowheight)
|
farmbuyer@1
|
845 _d:SetUserData("eoiST",ST)
|
farmbuyer@1
|
846 if addon.author_debug then
|
farmbuyer@1
|
847 _G.OLST = ST
|
farmbuyer@1
|
848 end
|
farmbuyer@1
|
849
|
farmbuyer@1
|
850 if not eoi_st_otherrow_bgcolortable_default then
|
farmbuyer@1
|
851 eoi_st_otherrow_bgcolortable_default = ST:GetDefaultHighlightBlank()
|
farmbuyer@1
|
852 setmetatable(eoi_st_otherrow_bgcolortable, {__index = function (bg, key)
|
farmbuyer@1
|
853 return eoi_st_otherrow_bgcolortable_default
|
farmbuyer@1
|
854 end})
|
farmbuyer@1
|
855 end
|
farmbuyer@1
|
856
|
farmbuyer@1
|
857 -- Calling SetData breaks (trying to call Refresh) if g_loot hasn't gone
|
farmbuyer@1
|
858 -- through this loop.
|
farmbuyer@1
|
859 addon:_fill_out_eoi_data(1)
|
farmbuyer@1
|
860 -- safety check begin
|
farmbuyer@1
|
861 for i,e in ipairs(g_loot) do
|
farmbuyer@1
|
862 if type(e.cols) ~= 'table' then
|
farmbuyer@1
|
863 addon:Print("ARGH, index",i,"bad in eoi_OGS, type",type(e.cols),
|
farmbuyer@1
|
864 "entry kind", e.kind, "data", e.itemname or e.bosskill or e.startday.text,
|
farmbuyer@1
|
865 "-- please take a screenshot and send to Farmbuyer.")
|
farmbuyer@1
|
866 tabledump(e)
|
farmbuyer@1
|
867 end
|
farmbuyer@1
|
868 end
|
farmbuyer@1
|
869 -- safety check end
|
farmbuyer@1
|
870 ST:SetData(g_loot)
|
farmbuyer@1
|
871 ST:RegisterEvents{
|
farmbuyer@1
|
872 OnEnter = eoi_st_OnEnter,
|
farmbuyer@1
|
873 OnLeave = eoi_st_OnLeave,
|
farmbuyer@1
|
874 OnClick = eoi_st_OnClick,
|
farmbuyer@1
|
875 OnDoubleClick = eoi_st_OnDoubleClick,
|
farmbuyer@1
|
876 }
|
farmbuyer@1
|
877
|
farmbuyer@1
|
878 -- We want a single "update and redraw" function for the ST. Also, the
|
farmbuyer@1
|
879 -- given refresh function is badly named and does nothing; the actual
|
farmbuyer@1
|
880 -- function is SortData (also badly named when no sorting is being done),
|
farmbuyer@1
|
881 -- which unconditionally calls the *hooked* Refresh.
|
farmbuyer@1
|
882 local oldrefresh = ST.Refresh
|
farmbuyer@1
|
883 ST.Refresh = function (self, opt_index)
|
farmbuyer@1
|
884 addon:_fill_out_eoi_data(opt_index)
|
farmbuyer@1
|
885 return oldrefresh(self)
|
farmbuyer@1
|
886 end
|
farmbuyer@1
|
887 ST.OuroLoot_Refresh = function (self, opt_index)
|
farmbuyer@1
|
888 addon:_fill_out_eoi_data(opt_index)
|
farmbuyer@1
|
889 -- safety check begin
|
farmbuyer@1
|
890 for i,e in ipairs(g_loot) do
|
farmbuyer@1
|
891 if type(e.cols) ~= 'table' then
|
farmbuyer@4
|
892 addon:Print("ARGH, index",i,"bad in eoi refresh, refreshed at", opt_index, "type",type(e.cols),
|
farmbuyer@1
|
893 "entry kind", e.kind, "data", e.itemname or e.bosskill or e.startday.text,
|
farmbuyer@1
|
894 "-- please take a screenshot and send to Farmbuyer.")
|
farmbuyer@1
|
895 tabledump(e)
|
farmbuyer@1
|
896 end
|
farmbuyer@1
|
897 end
|
farmbuyer@1
|
898 -- safety check end
|
farmbuyer@1
|
899 self:SortData() -- calls hooked refresh
|
farmbuyer@1
|
900 end
|
farmbuyer@1
|
901
|
farmbuyer@1
|
902 -- No need to keep creating function closures that all just "return true",
|
farmbuyer@1
|
903 -- instead we grab the one made inside lib-st. There's no "get filter" API
|
farmbuyer@1
|
904 -- so we just reach inside.
|
farmbuyer@6
|
905 player_filter_all = ST.Filter
|
farmbuyer@1
|
906
|
farmbuyer@1
|
907 -- Now set up the future drawing function...
|
farmbuyer@1
|
908 tabs_OnGroupSelected["eoi"] = function(container,specials)
|
farmbuyer@1
|
909 local st_widget = GUI:Create("lib-st")
|
farmbuyer@1
|
910 local st = _d:GetUserData("eoiST")
|
farmbuyer@1
|
911
|
farmbuyer@1
|
912 -- This is actually required each time
|
farmbuyer@6
|
913 _d:SetUserData ("player filter clear", player_filter_all)
|
farmbuyer@6
|
914 _d:SetUserData ("player filter by name", player_filter_by_name)
|
farmbuyer@1
|
915
|
farmbuyer@1
|
916 st:OuroLoot_Refresh()
|
farmbuyer@1
|
917 st_widget:WrapST(st)
|
farmbuyer@3
|
918 st_widget.head_offset = 15
|
farmbuyer@3
|
919 st_widget.tail_offset = 0
|
farmbuyer@1
|
920
|
farmbuyer@1
|
921 if OuroLootSV_opts.scroll_to_bottom then
|
farmbuyer@1
|
922 local scrollbar = _G[st.scrollframe:GetName().."ScrollBar"]
|
farmbuyer@1
|
923 if scrollbar then
|
farmbuyer@1
|
924 local _,max = scrollbar:GetMinMaxValues()
|
farmbuyer@1
|
925 scrollbar:SetValue(max) -- also calls hooked Refresh
|
farmbuyer@1
|
926 end
|
farmbuyer@1
|
927 end
|
farmbuyer@1
|
928
|
farmbuyer@1
|
929 container:SetLayout("Fill")
|
farmbuyer@1
|
930 container:AddChild(st_widget)
|
farmbuyer@1
|
931
|
farmbuyer@1
|
932 local b = mkbutton('eoi_filter_reset', "Reset Player Filter",
|
farmbuyer@1
|
933 [[Return to showing complete loot information.]])
|
farmbuyer@1
|
934 b:SetFullWidth(true)
|
farmbuyer@1
|
935 b:SetCallback("OnClick", function (_b)
|
farmbuyer@1
|
936 local st = _d:GetUserData("eoiST")
|
farmbuyer@6
|
937 st:SetFilter(player_filter_all)
|
farmbuyer@1
|
938 _b:SetDisabled(true)
|
farmbuyer@1
|
939 end)
|
farmbuyer@6
|
940 b:SetDisabled(st.Filter == player_filter_all)
|
farmbuyer@1
|
941 specials:AddChild(b)
|
farmbuyer@1
|
942
|
farmbuyer@1
|
943 local people = { "<nobody>" }
|
farmbuyer@1
|
944 for i=1,GetNumRaidMembers() do
|
farmbuyer@1
|
945 tinsert(people,(GetRaidRosterInfo(i)))
|
farmbuyer@1
|
946 end
|
farmbuyer@1
|
947 table.sort(people)
|
farmbuyer@1
|
948 local initial
|
farmbuyer@1
|
949 for i,n in ipairs(people) do
|
farmbuyer@1
|
950 if n == addon.sharder then initial = i end
|
farmbuyer@1
|
951 end
|
farmbuyer@1
|
952 b = mkbutton("Dropdown", nil, "",
|
farmbuyer@1
|
953 [[If set, items received by this person will be automatically marked as disenchanted.]])
|
farmbuyer@1
|
954 b:SetFullWidth(true)
|
farmbuyer@1
|
955 b:SetLabel("Auto-mark as shard:")
|
farmbuyer@1
|
956 b:SetList(people)
|
farmbuyer@1
|
957 b:SetValue(initial or 1)
|
farmbuyer@1
|
958 b:SetCallback("OnValueChanged", function(_dd,event,choice)
|
farmbuyer@1
|
959 addon.sharder = (choice ~= 1) and people[choice] or nil
|
farmbuyer@1
|
960 end)
|
farmbuyer@1
|
961 specials:AddChild(b)
|
farmbuyer@1
|
962
|
farmbuyer@1
|
963 local b = mkbutton('eoi_bcast_req', "Request B'casters",
|
farmbuyer@1
|
964 [[Sends out a request for others to enable loot rebroadcasting if they have not already done so.]])
|
farmbuyer@1
|
965 b:SetFullWidth(true)
|
farmbuyer@1
|
966 b:SetCallback("OnClick", function ()
|
farmbuyer@1
|
967 addon:Print("Sending request!")
|
farmbuyer@1
|
968 addon.requesting = true
|
farmbuyer@1
|
969 addon:broadcast('bcast_req')
|
farmbuyer@1
|
970 end)
|
farmbuyer@1
|
971 b:SetDisabled(not addon.enabled)
|
farmbuyer@1
|
972 specials:AddChild(b)
|
farmbuyer@1
|
973 end
|
farmbuyer@1
|
974 -- ...and call it.
|
farmbuyer@1
|
975 return tabs_OnGroupSelected["eoi"](ocontainer,specials)
|
farmbuyer@1
|
976 end
|
farmbuyer@1
|
977
|
farmbuyer@1
|
978 -- Tab 2/3 (generated text)
|
farmbuyer@1
|
979 function tabs_generated_text_OGS (container, specials, text_kind)
|
farmbuyer@1
|
980 container:SetLayout("Fill")
|
farmbuyer@1
|
981 local box = GUI:Create("MultiLineEditBox")
|
farmbuyer@1
|
982 box:SetFullWidth(true)
|
farmbuyer@1
|
983 box:SetFullHeight(true)
|
farmbuyer@1
|
984 box:SetLabel("Pressing the Escape key while typing will return keystroke control to the usual chat window.")
|
farmbuyer@1
|
985 box:DisableButton(true)
|
farmbuyer@1
|
986 addon:_fill_out_eoi_data(1)
|
farmbuyer@1
|
987
|
farmbuyer@1
|
988 -- Update the savedvar copy of the text before presenting it for editing,
|
farmbuyer@1
|
989 -- then save it again when editing finishes. This way if the user goes
|
farmbuyer@1
|
990 -- offline while editing, at least the unedited version is saved instead
|
farmbuyer@1
|
991 -- of all the new text being lost entirely. (Yes, it's happened.)
|
farmbuyer@1
|
992 --
|
farmbuyer@1
|
993 -- No good local-ish place to store the cursor position that will also
|
farmbuyer@1
|
994 -- survive the entire display being released. Abuse the generated text
|
farmbuyer@1
|
995 -- cache for this purpose.
|
farmbuyer@1
|
996 local pos = text_kind.."_pos"
|
farmbuyer@1
|
997 if _generate_text(text_kind) then
|
farmbuyer@1
|
998 g_loot[text_kind] = g_loot[text_kind] .. g_generated[text_kind]
|
farmbuyer@1
|
999 g_generated[text_kind] = nil
|
farmbuyer@1
|
1000 end
|
farmbuyer@1
|
1001 box:SetText(g_loot[text_kind])
|
farmbuyer@1
|
1002 box.editBox:SetCursorPosition(g_generated[pos] or 0)
|
farmbuyer@1
|
1003 box.editBox:SetScript("OnShow", box.editBox.SetFocus)
|
farmbuyer@1
|
1004 box:SetCallback("OnRelease", function(_box)
|
farmbuyer@1
|
1005 box.editBox:ClearFocus()
|
farmbuyer@1
|
1006 g_loot[text_kind] = _box:GetText()
|
farmbuyer@1
|
1007 g_generated[pos] = _box.editBox:GetCursorPosition()
|
farmbuyer@1
|
1008 end)
|
farmbuyer@1
|
1009 container:AddChild(box)
|
farmbuyer@1
|
1010
|
farmbuyer@1
|
1011 local w = mkbutton("Regenerate",
|
farmbuyer@1
|
1012 [[+DISCARD> all text in this tab, and regenerate it from the current loot information.]])
|
farmbuyer@1
|
1013 w:SetFullWidth(true)
|
farmbuyer@1
|
1014 w:SetDisabled ((#g_loot == 0) and (box:GetText() == ""))
|
farmbuyer@1
|
1015 w:SetCallback("OnClick", function(_w)
|
farmbuyer@1
|
1016 box:SetText("")
|
farmbuyer@1
|
1017 g_loot[text_kind] = ""
|
farmbuyer@1
|
1018 g_loot.printed[text_kind] = 0
|
farmbuyer@1
|
1019 g_generated.last_instance = nil
|
farmbuyer@1
|
1020 g_generated[pos] = nil
|
farmbuyer@1
|
1021 addon:Print("'%s' has been regenerated.", _tabtexts[text_kind].title)
|
farmbuyer@1
|
1022 return addon:redisplay()
|
farmbuyer@1
|
1023 --return tabs_OnGroupSelected_func(container,"OnGroupSelected",text_kind)
|
farmbuyer@1
|
1024 end)
|
farmbuyer@1
|
1025 specials:AddChild(w)
|
farmbuyer@1
|
1026 _populate_text_specials (box, specials, mkbutton, text_kind)
|
farmbuyer@1
|
1027 end
|
farmbuyer@1
|
1028
|
farmbuyer@1
|
1029 -- Tab 4: History
|
farmbuyer@1
|
1030 -- Much of the implementation here follows a similar desgin for the first
|
farmbuyer@4
|
1031 -- tab's handling of ST objects. We will even reuse its controlling tables
|
farmbuyer@4
|
1032 -- when feasible.
|
farmbuyer@1
|
1033 do
|
farmbuyer@1
|
1034 local histST
|
farmbuyer@1
|
1035 local hist_st_cols = {
|
farmbuyer@1
|
1036 { -- col 1
|
farmbuyer@1
|
1037 name = "Player",
|
farmbuyer@1
|
1038 width = 130,
|
farmbuyer@1
|
1039 DoCellUpdate = eoi_st_col2_DoCellUpdate,
|
farmbuyer@1
|
1040 },
|
farmbuyer@1
|
1041 { -- col 2
|
farmbuyer@1
|
1042 name = "Most Recent Loot",
|
farmbuyer@1
|
1043 width = 250,
|
farmbuyer@1
|
1044 DoCellUpdate = hist_st_col2_DoCellUpdate,
|
farmbuyer@1
|
1045 },
|
farmbuyer@1
|
1046 { -- col 3
|
farmbuyer@1
|
1047 name = "When",
|
farmbuyer@3
|
1048 width = 250,
|
farmbuyer@1
|
1049 DoCellUpdate = hist_st_col3_DoCellUpdate,
|
farmbuyer@4
|
1050 defaultsort = "asc",
|
farmbuyer@4
|
1051 sort = "asc",
|
farmbuyer@4
|
1052 sortnext = 1,
|
farmbuyer@1
|
1053 },
|
farmbuyer@1
|
1054 }
|
farmbuyer@1
|
1055
|
farmbuyer@6
|
1056 local hist_normal_status = [[Click on a row to view all history for that player only. (Click column headers to re-sort.)]]
|
farmbuyer@6
|
1057 local hist_name_status = [[Right-click on any row to return to normal history display.]]
|
farmbuyer@6
|
1058
|
farmbuyer@6
|
1059 local history_filter_by_recent = function (st, e)
|
farmbuyer@6
|
1060 if e.kind ~= 'history' then return true end
|
farmbuyer@6
|
1061 return e.cols[2].OLi == 1
|
farmbuyer@6
|
1062 end
|
farmbuyer@6
|
1063
|
farmbuyer@6
|
1064 local history_filter_who
|
farmbuyer@6
|
1065 local history_filter_by_name = function (st, e)
|
farmbuyer@6
|
1066 if e.kind ~= 'history' then return true end
|
farmbuyer@6
|
1067 return e.OLwho == history_filter_who
|
farmbuyer@6
|
1068 end
|
farmbuyer@6
|
1069
|
farmbuyer@1
|
1070 -- Loot column
|
farmbuyer@6
|
1071 local function hist_st_col2_DoCellUpdate (rowFrame, cellFrame, data, cols, row, realrow, column, fShow, stable, ...)
|
farmbuyer@6
|
1072 print("col2 DCU", realrow)
|
farmbuyer@1
|
1073 end
|
farmbuyer@1
|
1074
|
farmbuyer@1
|
1075 -- Formatted timestamp column
|
farmbuyer@6
|
1076 local function hist_st_col3_DoCellUpdate (rowFrame, cellFrame, data, cols, row, realrow, column, fShow, stable, ...)
|
farmbuyer@6
|
1077 print("col3 DCU", realrow)
|
farmbuyer@1
|
1078 if not fShow then
|
farmbuyer@1
|
1079 cellFrame.text:SetText("")
|
farmbuyer@1
|
1080 return
|
farmbuyer@1
|
1081 end
|
farmbuyer@1
|
1082
|
farmbuyer@1
|
1083 local d = data[realrow]
|
farmbuyer@1
|
1084 local cell = d.cols[column]
|
farmbuyer@1
|
1085
|
farmbuyer@1
|
1086 cellFrame.text:SetText(cell.value)
|
farmbuyer@1
|
1087 cellFrame.text:SetTextColor(1,1,1,1)
|
farmbuyer@1
|
1088
|
farmbuyer@1
|
1089 --if d.kind ~= 'loot' then
|
farmbuyer@1
|
1090 stable:SetHighLightColor (rowFrame, eoi_st_otherrow_bgcolortable[d.kind])
|
farmbuyer@1
|
1091 --else
|
farmbuyer@1
|
1092 -- table:SetHighLightColor (rowFrame, table:GetDefaultHighlightBlank())
|
farmbuyer@1
|
1093 --end
|
farmbuyer@1
|
1094 end
|
farmbuyer@1
|
1095
|
farmbuyer@6
|
1096 local function hist_st_OnClick (rowFrame, cellFrame, data, cols, row, realrow, column, stable, button, ...)
|
farmbuyer@6
|
1097 if (row == nil) or (realrow == nil) then return false end -- click column header, do default resorting
|
farmbuyer@6
|
1098 local h = data[realrow]
|
farmbuyer@6
|
1099 local kind = h.kind
|
farmbuyer@6
|
1100
|
farmbuyer@6
|
1101 if history_filter_who and button == "RightButton" then -- now filtering and wanting not to
|
farmbuyer@6
|
1102 history_filter_who = nil
|
farmbuyer@6
|
1103 stable:SetFilter(history_filter_by_recent)
|
farmbuyer@6
|
1104 setstatus(hist_normal_status)
|
farmbuyer@6
|
1105 elseif (not history_filter_who) and button == "LeftButton" then -- not filtering and wanting to
|
farmbuyer@6
|
1106 history_filter_who = h.OLwho
|
farmbuyer@6
|
1107 stable:SetFilter(history_filter_by_name)
|
farmbuyer@6
|
1108 setstatus(hist_name_status)
|
farmbuyer@6
|
1109 end
|
farmbuyer@6
|
1110
|
farmbuyer@6
|
1111 return true -- do not do anything further
|
farmbuyer@6
|
1112 end
|
farmbuyer@6
|
1113
|
farmbuyer@6
|
1114 --[[
|
farmbuyer@6
|
1115 local function hist_st_OnDoubleClick (rowFrame, cellFrame, data, cols, row, realrow, column, stable, button, ...)
|
farmbuyer@6
|
1116 if (row == nil) or (realrow == nil) then return true end -- they clicked on column header, suppress reordering
|
farmbuyer@6
|
1117 local h = data[realrow]
|
farmbuyer@6
|
1118 local kind = h.kind
|
farmbuyer@6
|
1119
|
farmbuyer@6
|
1120 return true -- do not do anything further
|
farmbuyer@6
|
1121 end]]
|
farmbuyer@6
|
1122
|
farmbuyer@1
|
1123 tabs_OnGroupSelected["hist"] = function(container,specials)
|
farmbuyer@1
|
1124 histST = LibStub("ScrollingTable"):CreateST(hist_st_cols,eoi_st_displayed_rows,eoi_st_rowheight)
|
farmbuyer@1
|
1125 if addon.author_debug then
|
farmbuyer@1
|
1126 _G.OLHST = histST
|
farmbuyer@1
|
1127 end
|
farmbuyer@1
|
1128
|
farmbuyer@1
|
1129 if not eoi_st_otherrow_bgcolortable_default then
|
farmbuyer@1
|
1130 eoi_st_otherrow_bgcolortable_default = histST:GetDefaultHighlightBlank()
|
farmbuyer@1
|
1131 setmetatable(eoi_st_otherrow_bgcolortable, {__index = function (bg, key)
|
farmbuyer@1
|
1132 return eoi_st_otherrow_bgcolortable_default
|
farmbuyer@1
|
1133 end})
|
farmbuyer@1
|
1134 end
|
farmbuyer@1
|
1135
|
farmbuyer@1
|
1136 addon:_build_history_names()
|
farmbuyer@1
|
1137 addon:_fill_out_hist_data(1)
|
farmbuyer@1
|
1138 histST:SetData(addon.history.st)
|
farmbuyer@1
|
1139 histST:RegisterEvents{
|
farmbuyer@1
|
1140 OnEnter = eoi_st_OnEnter,
|
farmbuyer@1
|
1141 OnLeave = eoi_st_OnLeave,
|
farmbuyer@1
|
1142 OnClick = hist_st_OnClick,
|
farmbuyer@6
|
1143 --OnDoubleClick = hist_st_OnDoubleClick,
|
farmbuyer@1
|
1144 }
|
farmbuyer@1
|
1145 local oldrefresh = histST.Refresh
|
farmbuyer@1
|
1146 histST.Refresh = function (self, opt_index)
|
farmbuyer@1
|
1147 addon:_fill_out_hist_data(opt_index)
|
farmbuyer@1
|
1148 return oldrefresh(self)
|
farmbuyer@1
|
1149 end
|
farmbuyer@1
|
1150 histST.OuroLoot_Refresh = function (self, opt_index)
|
farmbuyer@1
|
1151 addon:_fill_out_hist_data(opt_index)
|
farmbuyer@1
|
1152 self:SortData() -- calls hooked refresh
|
farmbuyer@1
|
1153 end
|
farmbuyer@1
|
1154
|
farmbuyer@6
|
1155 histST:SetFilter(history_filter_by_recent)
|
farmbuyer@6
|
1156
|
farmbuyer@6
|
1157 -- Zaps history for the given realm, or the current (current-playing
|
farmbuyer@6
|
1158 -- realm, not currently-displayed realm) one if not specified.
|
farmbuyer@6
|
1159 local function reset_current_realm (opt_realmname)
|
farmbuyer@6
|
1160 local r = assert(opt_realmname or GetRealmName())
|
farmbuyer@4
|
1161 -- new .history table:
|
farmbuyer@4
|
1162 addon.history_all[r] = addon:_prep_new_history_category (nil, r)
|
farmbuyer@4
|
1163 addon.history = addon.history_all[r]
|
farmbuyer@4
|
1164 addon.hist_clean = nil
|
farmbuyer@4
|
1165 -- new .history.st table:
|
farmbuyer@4
|
1166 histST:OuroLoot_Refresh()
|
farmbuyer@4
|
1167 histST:SetData(addon.history.st)
|
farmbuyer@4
|
1168 end
|
farmbuyer@4
|
1169
|
farmbuyer@1
|
1170 tabs_OnGroupSelected["hist"] = function(container,specials)
|
farmbuyer@1
|
1171 local st_widget = GUI:Create("lib-st")
|
farmbuyer@1
|
1172 histST:OuroLoot_Refresh()
|
farmbuyer@1
|
1173 st_widget:WrapST(histST)
|
farmbuyer@4
|
1174 st_widget.head_offset = 15
|
farmbuyer@4
|
1175 st_widget.tail_offset = 0
|
farmbuyer@1
|
1176 container:SetLayout("Fill")
|
farmbuyer@1
|
1177 container:AddChild(st_widget)
|
farmbuyer@6
|
1178 setstatus(hist_normal_status)
|
farmbuyer@1
|
1179
|
farmbuyer@4
|
1180 local b
|
farmbuyer@4
|
1181 do
|
farmbuyer@4
|
1182 local realms,current = {},1
|
farmbuyer@4
|
1183 for realmname,histtable in pairs(addon.history_all) do
|
farmbuyer@9
|
1184 if type(histtable) == 'table' then
|
farmbuyer@9
|
1185 tinsert(realms,realmname)
|
farmbuyer@9
|
1186 if addon.history == histtable then current = #realms end
|
farmbuyer@9
|
1187 end
|
farmbuyer@4
|
1188 end
|
farmbuyer@4
|
1189 b = mkbutton("Dropdown", nil, "", [[Which realm to display]])
|
farmbuyer@4
|
1190 b:SetFullWidth(true)
|
farmbuyer@4
|
1191 b:SetLabel() -- required even when empty, see ace3 ticket #234
|
farmbuyer@4
|
1192 b:SetList(realms)
|
farmbuyer@4
|
1193 b:SetValue(current)
|
farmbuyer@4
|
1194 b:SetCallback("OnValueChanged", function(_dd,event,choice)
|
farmbuyer@6
|
1195 local r = realms[choice]
|
farmbuyer@6
|
1196 addon.history = addon:_prep_new_history_category (addon.history_all[r], r)
|
farmbuyer@6
|
1197 addon.hist_clean = nil
|
farmbuyer@6
|
1198 histST:OuroLoot_Refresh()
|
farmbuyer@6
|
1199 histST:SetData(addon.history.st)
|
farmbuyer@6
|
1200 -- Reset filters to normal
|
farmbuyer@6
|
1201 history_filter_who = nil
|
farmbuyer@6
|
1202 histST:SetFilter(history_filter_by_recent)
|
farmbuyer@6
|
1203 setstatus(hist_normal_status)
|
farmbuyer@6
|
1204 return addon:redisplay()
|
farmbuyer@4
|
1205 end)
|
farmbuyer@4
|
1206 specials:AddChild(b)
|
farmbuyer@4
|
1207 end
|
farmbuyer@4
|
1208
|
farmbuyer@6
|
1209 --[[ b = GUI:Create("Spacer") b:SetFullWidth(true) b:SetHeight(10) specials:AddChild(b) ]]
|
farmbuyer@4
|
1210
|
farmbuyer@4
|
1211 b = mkbutton("Regenerate",
|
farmbuyer@4
|
1212 [[Erases all history entries from the displayed realm, and regenerates it from current loot information.]])
|
farmbuyer@1
|
1213 b:SetFullWidth(true)
|
farmbuyer@1
|
1214 b:SetDisabled (#addon.history == 0)
|
farmbuyer@1
|
1215 b:SetCallback("OnClick", function(_b)
|
farmbuyer@6
|
1216 addon:rewrite_history (addon.history.realm)
|
farmbuyer@6
|
1217 histST:OuroLoot_Refresh()
|
farmbuyer@6
|
1218 histST:SetData(addon.history.st)
|
farmbuyer@1
|
1219 addon:Print("%s history has been regenerated.", addon.history.realm)
|
farmbuyer@1
|
1220 return addon:redisplay()
|
farmbuyer@1
|
1221 end)
|
farmbuyer@1
|
1222 specials:AddChild(b)
|
farmbuyer@1
|
1223
|
farmbuyer@4
|
1224 b = mkbutton('hist_clear', "Clear Realm History",
|
farmbuyer@16
|
1225 [[|cffff1010Erases absolutely all> history entries from the displayed realm.]])
|
farmbuyer@1
|
1226 b:SetFullWidth(true)
|
farmbuyer@1
|
1227 b:SetCallback("OnClick", function (_b)
|
farmbuyer@16
|
1228 local dialog = StaticPopup_Show("OUROL_HIST_CLEAR", addon.history.realm)
|
farmbuyer@16
|
1229 dialog.data = addon
|
farmbuyer@16
|
1230 dialog.data2 = function(_addon)
|
farmbuyer@16
|
1231 reset_current_realm(_addon.history.realm)
|
farmbuyer@16
|
1232 end
|
farmbuyer@4
|
1233 end)
|
farmbuyer@4
|
1234 specials:AddChild(b)
|
farmbuyer@4
|
1235
|
farmbuyer@4
|
1236 b = mkbutton('hist_clear_all', "Clear All History",
|
farmbuyer@16
|
1237 [[|cffff1010Erases absolutely all> history entries from ALL realms.]])
|
farmbuyer@4
|
1238 b:SetFullWidth(true)
|
farmbuyer@4
|
1239 b:SetCallback("OnClick", function (_b)
|
farmbuyer@16
|
1240 local dialog = StaticPopup_Show("OUROL_HIST_CLEAR", "ALL realms")
|
farmbuyer@16
|
1241 dialog.data = addon
|
farmbuyer@16
|
1242 dialog.data2 = function(_addon)
|
farmbuyer@16
|
1243 _addon.history_all = {}
|
farmbuyer@16
|
1244 reset_current_realm()
|
farmbuyer@16
|
1245 end
|
farmbuyer@1
|
1246 end)
|
farmbuyer@1
|
1247 specials:AddChild(b)
|
farmbuyer@1
|
1248
|
farmbuyer@1
|
1249 b = mkbutton('hist_clear_old', "Clear Older",
|
farmbuyer@6
|
1250 [[Preserves only the latest loot entry for each player on the displayed realm, removing all earlier ones.]])
|
farmbuyer@1
|
1251 b:SetFullWidth(true)
|
farmbuyer@1
|
1252 b:SetCallback("OnClick", function (_b)
|
farmbuyer@16
|
1253 local dialog = StaticPopup_Show("OUROL_HIST_PREEN", addon.history.realm)
|
farmbuyer@16
|
1254 dialog.data = addon
|
farmbuyer@16
|
1255 dialog.data2 = function(_addon)
|
farmbuyer@16
|
1256 _addon:preen_history(_addon.history.realm)
|
farmbuyer@16
|
1257 _addon.hist_clean = nil
|
farmbuyer@16
|
1258 histST:OuroLoot_Refresh()
|
farmbuyer@16
|
1259 end
|
farmbuyer@1
|
1260 end)
|
farmbuyer@1
|
1261 specials:AddChild(b)
|
farmbuyer@1
|
1262 end
|
farmbuyer@1
|
1263 return tabs_OnGroupSelected["hist"](container,specials)
|
farmbuyer@1
|
1264 end
|
farmbuyer@1
|
1265 end
|
farmbuyer@1
|
1266
|
farmbuyer@6
|
1267 -- Tab 5: Help (content in verbage.lua)
|
farmbuyer@1
|
1268 do
|
farmbuyer@1
|
1269 local tabs_help_OnGroupSelected_func = function (treeg,event,category)
|
farmbuyer@1
|
1270 treeg:ReleaseChildren()
|
farmbuyer@1
|
1271 local txt = GUI:Create("Label")
|
farmbuyer@1
|
1272 txt:SetFullWidth(true)
|
farmbuyer@1
|
1273 txt:SetFontObject(GameFontNormal)--Highlight)
|
farmbuyer@1
|
1274 txt:SetText(addon.helptext[category])
|
farmbuyer@1
|
1275 local sf = GUI:Create("ScrollFrame")
|
farmbuyer@1
|
1276 local sfstat = _d:GetUserData("help tab scroll status") or {}
|
farmbuyer@1
|
1277 sf:SetStatusTable(sfstat)
|
farmbuyer@1
|
1278 _d:SetUserData("help tab scroll status",sfstat)
|
farmbuyer@1
|
1279 sf:SetLayout("Fill")
|
farmbuyer@1
|
1280 -- This forces the scrolling area to be bigger than the visible area; else
|
farmbuyer@1
|
1281 -- some of the text gets cut off.
|
farmbuyer@1
|
1282 sf.content:SetHeight(700)
|
farmbuyer@1
|
1283 sf:AddChild(txt)
|
farmbuyer@1
|
1284 treeg:AddChild(sf)
|
farmbuyer@1
|
1285 if treeg:GetUserData("help restore scroll") then
|
farmbuyer@1
|
1286 sfstat = sfstat.scrollvalue
|
farmbuyer@1
|
1287 if sfstat then sf:SetScroll(sfstat) end
|
farmbuyer@1
|
1288 treeg:SetUserData("help restore scroll", false)
|
farmbuyer@1
|
1289 else
|
farmbuyer@1
|
1290 sf:SetScroll(0)
|
farmbuyer@1
|
1291 end
|
farmbuyer@1
|
1292 end
|
farmbuyer@1
|
1293 tabs_OnGroupSelected["help"] = function(container,specials)
|
farmbuyer@1
|
1294 container:SetLayout("Fill")
|
farmbuyer@1
|
1295 local left = GUI:Create("TreeGroup")
|
farmbuyer@1
|
1296 local leftstat = _d:GetUserData("help tab select status")
|
farmbuyer@1
|
1297 or {treewidth=145}
|
farmbuyer@1
|
1298 left:SetStatusTable(leftstat)
|
farmbuyer@1
|
1299 _d:SetUserData("help tab select status",leftstat)
|
farmbuyer@1
|
1300 left:SetLayout("Fill")
|
farmbuyer@1
|
1301 left:SetFullWidth(true)
|
farmbuyer@1
|
1302 left:SetFullHeight(true)
|
farmbuyer@1
|
1303 left:EnableButtonTooltips(false)
|
farmbuyer@1
|
1304 left:SetTree(addon.helptree)
|
farmbuyer@1
|
1305 left:SetCallback("OnGroupSelected", tabs_help_OnGroupSelected_func)
|
farmbuyer@1
|
1306 container:AddChild(left)
|
farmbuyer@1
|
1307 leftstat = leftstat.selected
|
farmbuyer@1
|
1308 if leftstat then
|
farmbuyer@1
|
1309 left:SetUserData("help restore scroll", true)
|
farmbuyer@1
|
1310 left:SelectByValue(leftstat)
|
farmbuyer@1
|
1311 else
|
farmbuyer@1
|
1312 left:SelectByValue("basic")
|
farmbuyer@1
|
1313 end
|
farmbuyer@1
|
1314 end
|
farmbuyer@1
|
1315 end
|
farmbuyer@1
|
1316
|
farmbuyer@1
|
1317 -- Tab 6: Options / Advanced
|
farmbuyer@1
|
1318 do
|
farmbuyer@1
|
1319 local function mkoption (opt, label, width, desc, opt_func)
|
farmbuyer@1
|
1320 local w = mkbutton("CheckBoxSmallLabel", nil, "", desc)
|
farmbuyer@1
|
1321 w:SetRelativeWidth(width)
|
farmbuyer@1
|
1322 w:SetType("checkbox")
|
farmbuyer@1
|
1323 w:SetLabel(label)
|
farmbuyer@1
|
1324 if opt then
|
farmbuyer@1
|
1325 w:SetValue(OuroLootSV_opts[opt])
|
farmbuyer@1
|
1326 w:SetCallback("OnValueChanged", opt_func or (function(_w,event,value)
|
farmbuyer@1
|
1327 OuroLootSV_opts[opt] = value
|
farmbuyer@1
|
1328 end))
|
farmbuyer@1
|
1329 end
|
farmbuyer@1
|
1330 return w
|
farmbuyer@1
|
1331 end
|
farmbuyer@1
|
1332
|
farmbuyer@1
|
1333 local function adv_careful_OnTextChanged (ebox,event,value)
|
farmbuyer@1
|
1334 -- The EditBox widget's code will call an internal ShowButton routine
|
farmbuyer@1
|
1335 -- after this callback returns. ShowButton will test for this flag:
|
farmbuyer@1
|
1336 ebox:DisableButton (value == "")
|
farmbuyer@1
|
1337 end
|
farmbuyer@1
|
1338
|
farmbuyer@1
|
1339 -- Like the first tab, we use a pair of functions; first and repeating.
|
farmbuyer@1
|
1340 local function adv_real (container, specials)
|
farmbuyer@1
|
1341 local grp, w
|
farmbuyer@1
|
1342
|
farmbuyer@1
|
1343 grp = GUI:Create("InlineGroup")
|
farmbuyer@1
|
1344 grp:SetLayout("Flow")
|
farmbuyer@1
|
1345 grp:PauseLayout()
|
farmbuyer@1
|
1346 grp:SetFullWidth(true)
|
farmbuyer@1
|
1347 grp:SetTitle("Debugging/Testing Options [not saved across sessions]")
|
farmbuyer@1
|
1348
|
farmbuyer@1
|
1349 w = mkbutton("EditBox", 'comm_ident', addon.ident,
|
farmbuyer@1
|
1350 [[Disable the addon, change this field (click Okay or press Enter), then re-enable the addon.]])
|
farmbuyer@1
|
1351 w:SetRelativeWidth(0.2)
|
farmbuyer@1
|
1352 w:SetLabel("Addon channel ID")
|
farmbuyer@1
|
1353 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@1
|
1354 w:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@1
|
1355 -- if they set it to blank spaces, they're boned. oh well.
|
farmbuyer@1
|
1356 -- Re-enabling will take care of propogating this new value.
|
farmbuyer@1
|
1357 addon.ident = (value == "") and "OuroLoot2" or value
|
farmbuyer@1
|
1358 _w:SetText(addon.ident)
|
farmbuyer@1
|
1359 addon:Print("Addon channel ID set to '".. addon.ident.. "' for rebroadcasting and listening.")
|
farmbuyer@1
|
1360 end)
|
farmbuyer@1
|
1361 w:SetDisabled(addon.enabled or addon.rebroadcast)
|
farmbuyer@1
|
1362 grp:AddChild(w)
|
farmbuyer@1
|
1363
|
farmbuyer@1
|
1364 w = mkbutton("EditBox", nil, addon.recent_messages.ttl, [[comm cache (only) ttl]])
|
farmbuyer@1
|
1365 w:SetRelativeWidth(0.05)
|
farmbuyer@1
|
1366 w:SetLabel("ttl")
|
farmbuyer@1
|
1367 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@1
|
1368 w:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@1
|
1369 value = tonumber(value) or addon.recent_messages.ttl
|
farmbuyer@1
|
1370 addon.recent_messages.ttl = value
|
farmbuyer@1
|
1371 _w:SetText(tostring(value))
|
farmbuyer@1
|
1372 end)
|
farmbuyer@1
|
1373 grp:AddChild(w)
|
farmbuyer@1
|
1374
|
farmbuyer@1
|
1375 w = mkbutton("load nsaab1548", [[Cursed Darkhound]])
|
farmbuyer@1
|
1376 w:SetRelativeWidth(0.25)
|
farmbuyer@1
|
1377 w:SetCallback("OnClick", function()
|
farmbuyer@1
|
1378 for i, v in ipairs(DBM.AddOns) do
|
farmbuyer@1
|
1379 if v.modId == "DBM-NotScaryAtAll" then
|
farmbuyer@1
|
1380 DBM:LoadMod(v)
|
farmbuyer@1
|
1381 break
|
farmbuyer@1
|
1382 end
|
farmbuyer@1
|
1383 end
|
farmbuyer@1
|
1384 local mod = DBM:GetModByName("NotScaryAtAll")
|
farmbuyer@1
|
1385 if mod then
|
farmbuyer@1
|
1386 mod:EnableMod()
|
farmbuyer@1
|
1387 addon:Print("Now tracking ID",mod.creatureId)
|
farmbuyer@1
|
1388 else addon:Print("Can do nothing; DBM testing mod wasn't loaded.") end
|
farmbuyer@1
|
1389 end)
|
farmbuyer@5
|
1390 w:SetDisabled(addon.bossmod_registered ~= 'DBM')
|
farmbuyer@1
|
1391 grp:AddChild(w)
|
farmbuyer@1
|
1392
|
farmbuyer@1
|
1393 w = mkbutton("GC", [[full GC cycle]])
|
farmbuyer@1
|
1394 w:SetRelativeWidth(0.1)
|
farmbuyer@1
|
1395 w:SetCallback("OnClick", function() collectgarbage() end)
|
farmbuyer@1
|
1396 grp:AddChild(w)
|
farmbuyer@1
|
1397
|
farmbuyer@1
|
1398 w = mkbutton("EditBox", nil, addon.loot_pattern:sub(17), [[]])
|
farmbuyer@1
|
1399 w:SetRelativeWidth(0.35)
|
farmbuyer@1
|
1400 w:SetLabel("CML pattern suffix")
|
farmbuyer@1
|
1401 w:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@1
|
1402 addon.loot_pattern = addon.loot_pattern:sub(1,16) .. value
|
farmbuyer@1
|
1403 end)
|
farmbuyer@1
|
1404 grp:AddChild(w)
|
farmbuyer@1
|
1405
|
farmbuyer@1
|
1406 local simple = GUI:Create("SimpleGroup")
|
farmbuyer@1
|
1407 simple:SetLayout("List")
|
farmbuyer@1
|
1408 simple:SetRelativeWidth(0.3)
|
farmbuyer@1
|
1409 w = GUI:Create("CheckBoxSmallLabel")
|
farmbuyer@1
|
1410 w:SetFullWidth(true)
|
farmbuyer@1
|
1411 w:SetType("checkbox")
|
farmbuyer@1
|
1412 w:SetLabel("master dtoggle")
|
farmbuyer@1
|
1413 w:SetValue(addon.DEBUG_PRINT)
|
farmbuyer@1
|
1414 w:SetCallback("OnValueChanged", function(_w,event,value) addon.DEBUG_PRINT = value end)
|
farmbuyer@1
|
1415 simple:AddChild(w)
|
farmbuyer@1
|
1416 w = mkbutton("Clear All & Reload",
|
farmbuyer@1
|
1417 [[No confirmation! |cffff1010Erases absolutely all> Ouro Loot saved variables and reloads the UI.]])
|
farmbuyer@1
|
1418 w:SetFullWidth(true)
|
farmbuyer@1
|
1419 w:SetCallback("OnClick", function()
|
farmbuyer@8
|
1420 addon:_clear_SVs() -- reloads
|
farmbuyer@1
|
1421 end)
|
farmbuyer@1
|
1422 simple:AddChild(w)
|
farmbuyer@1
|
1423 grp:AddChild(simple)
|
farmbuyer@1
|
1424
|
farmbuyer@1
|
1425 simple = GUI:Create("SimpleGroup")
|
farmbuyer@1
|
1426 simple:SetLayout("List")
|
farmbuyer@1
|
1427 simple:SetRelativeWidth(0.5)
|
farmbuyer@1
|
1428 for d,v in pairs(addon.debug) do
|
farmbuyer@1
|
1429 w = GUI:Create("CheckBoxSmallLabel")
|
farmbuyer@1
|
1430 w:SetFullWidth(true)
|
farmbuyer@1
|
1431 w:SetType("checkbox")
|
farmbuyer@1
|
1432 w:SetLabel(d)
|
farmbuyer@1
|
1433 if d == "notraid" then
|
farmbuyer@1
|
1434 w:SetDescription("Tick this before enabling to make the addon work outside of raid groups")
|
farmbuyer@1
|
1435 end
|
farmbuyer@1
|
1436 w:SetValue(v)
|
farmbuyer@1
|
1437 w:SetCallback("OnValueChanged", function(_w,event,value) addon.debug[d] = value end)
|
farmbuyer@1
|
1438 simple:AddChild(w)
|
farmbuyer@1
|
1439 end
|
farmbuyer@1
|
1440 grp:AddChild(simple)
|
farmbuyer@10
|
1441
|
farmbuyer@10
|
1442 simple = GUI:Create("SimpleGroup")
|
farmbuyer@10
|
1443 simple:SetLayout("Flow")
|
farmbuyer@10
|
1444 simple:SetRelativeWidth(0.85)
|
farmbuyer@10
|
1445 w = mkbutton("MidS-H", [[not exactly an Easter egg, with sound]])
|
farmbuyer@10
|
1446 w:SetRelativeWidth(0.15)
|
farmbuyer@10
|
1447 w:SetCallback("OnClick", function()
|
farmbuyer@10
|
1448 PlaySoundFile[[Sound\Music\WorldEvents\HordeFirepole.mp3]]
|
farmbuyer@10
|
1449 end)
|
farmbuyer@10
|
1450 simple:AddChild(w)
|
farmbuyer@10
|
1451 w = mkbutton("MidS-A", [[not exactly an Easter egg, with sound]])
|
farmbuyer@10
|
1452 w:SetRelativeWidth(0.15)
|
farmbuyer@10
|
1453 w:SetCallback("OnClick", function()
|
farmbuyer@10
|
1454 PlaySoundFile[[Sound\Music\WorldEvents\AllianceFirepole.mp3]]
|
farmbuyer@10
|
1455 end)
|
farmbuyer@10
|
1456 simple:AddChild(w)
|
farmbuyer@10
|
1457 grp:AddChild(simple)
|
farmbuyer@10
|
1458
|
farmbuyer@1
|
1459 grp:ResumeLayout()
|
farmbuyer@1
|
1460 container:AddChild(grp)
|
farmbuyer@1
|
1461 GUI:ClearFocus()
|
farmbuyer@1
|
1462 end
|
farmbuyer@1
|
1463
|
farmbuyer@1
|
1464 -- Initial lower panel function
|
farmbuyer@1
|
1465 local function adv_lower (container, specials)
|
farmbuyer@1
|
1466 local speedbump = GUI:Create("InteractiveLabel")
|
farmbuyer@1
|
1467 speedbump:SetFullWidth(true)
|
farmbuyer@1
|
1468 speedbump:SetFontObject(GameFontHighlightLarge)
|
farmbuyer@1
|
1469 speedbump:SetImage("Interface\\DialogFrame\\DialogAlertIcon")
|
farmbuyer@1
|
1470 speedbump:SetImageSize(50,50)
|
farmbuyer@1
|
1471 speedbump:SetText("The debugging/testing settings on the rest of this panel can"
|
farmbuyer@1
|
1472 .." seriously bork up the addon if you make a mistake. If you're okay"
|
farmbuyer@1
|
1473 .." with the possibility of losing data, click this warning to load the panel.")
|
farmbuyer@1
|
1474 speedbump:SetCallback("OnClick", function (_sb)
|
farmbuyer@1
|
1475 adv_lower = adv_real
|
farmbuyer@1
|
1476 return addon:redisplay()
|
farmbuyer@1
|
1477 --return tabs_OnGroupSelected_func(container.parent,"OnGroupSelected","opt")
|
farmbuyer@1
|
1478 end)
|
farmbuyer@1
|
1479 container:AddChild(speedbump)
|
farmbuyer@1
|
1480 end
|
farmbuyer@1
|
1481
|
farmbuyer@1
|
1482 tabs_OnGroupSelected["opt"] = function(container,specials)
|
farmbuyer@1
|
1483 --container:SetLayout("List")
|
farmbuyer@1
|
1484 container:SetLayout("Fill")
|
farmbuyer@1
|
1485 local scroll, grp, w
|
farmbuyer@1
|
1486
|
farmbuyer@1
|
1487 scroll = GUI:Create("ScrollFrame")
|
farmbuyer@1
|
1488 scroll:SetLayout("Flow")
|
farmbuyer@1
|
1489
|
farmbuyer@1
|
1490 grp = GUI:Create("InlineGroup")
|
farmbuyer@1
|
1491 grp:SetLayout("Flow")
|
farmbuyer@1
|
1492 grp:SetFullWidth(true)
|
farmbuyer@1
|
1493 grp:SetTitle("User Options [these are saved across sessions]")
|
farmbuyer@1
|
1494
|
farmbuyer@10
|
1495 -- The relative width fields used to be done to take up less vertical space, but
|
farmbuyer@10
|
1496 -- that turned out to look messy. Now they're just a straight line for the most part.
|
farmbuyer@10
|
1497
|
farmbuyer@1
|
1498 -- reminder popup
|
farmbuyer@16
|
1499 w = mkoption ('popup_on_join', "Show reminder popup", 0.49,
|
farmbuyer@1
|
1500 [[When joining a raid and not already tracking, display a dialog asking for instructions.]])
|
farmbuyer@1
|
1501 grp:AddChild(w)
|
farmbuyer@1
|
1502
|
farmbuyer@1
|
1503 -- toggle scroll-to-bottom on first tab
|
farmbuyer@16
|
1504 w = mkoption('scroll_to_bottom', "Scroll to bottom when opening display", 0.49,
|
farmbuyer@1
|
1505 [[Scroll to the bottom of the loot window (most recent entries) when displaying the GUI.]])
|
farmbuyer@1
|
1506 grp:AddChild(w)
|
farmbuyer@1
|
1507
|
farmbuyer@1
|
1508 -- /loot option
|
farmbuyer@16
|
1509 w = mkoption('register_slashloot', "Register /loot slash command on login", 0.49,
|
farmbuyer@1
|
1510 [[Register "/loot" as a slash command in addition to the normal "/ouroloot". Relog to take effect.]])
|
farmbuyer@1
|
1511 grp:AddChild(w)
|
farmbuyer@1
|
1512
|
farmbuyer@1
|
1513 -- chatty mode
|
farmbuyer@16
|
1514 w = mkoption('chatty_on_kill', "Be chatty on boss kill", 0.49,
|
farmbuyer@1
|
1515 [[Print something to chat output when DBM tells Ouro Loot about a successful boss kill.]])
|
farmbuyer@1
|
1516 grp:AddChild(w)
|
farmbuyer@1
|
1517
|
farmbuyer@1
|
1518 -- less noise in main panel
|
farmbuyer@16
|
1519 w = mkoption('no_tracking_wipes', "Do not track wipes", 0.49,
|
farmbuyer@1
|
1520 [[Do not add 'wipe' entries on the main loot grid, or generate any text for them.]])
|
farmbuyer@1
|
1521 grp:AddChild(w)
|
farmbuyer@1
|
1522
|
farmbuyer@1
|
1523 -- cutesy abbrevs
|
farmbuyer@16
|
1524 w = mkoption('snarky_boss', "Use snarky boss names", 0.49,
|
farmbuyer@1
|
1525 [[Irreverent replacement names for boss events.]])
|
farmbuyer@1
|
1526 grp:AddChild(w)
|
farmbuyer@1
|
1527
|
farmbuyer@1
|
1528 -- possible keybindings
|
farmbuyer@1
|
1529 do
|
farmbuyer@1
|
1530 local pair = GUI:Create("SimpleGroup")
|
farmbuyer@1
|
1531 pair:SetLayout("Flow")
|
farmbuyer@10
|
1532 pair:SetRelativeWidth(0.95)
|
farmbuyer@1
|
1533 local editbox, checkbox
|
farmbuyer@1
|
1534 editbox = mkbutton("EditBox", nil, OuroLootSV_opts.keybinding_text,
|
farmbuyer@1
|
1535 [[Keybinding text format is fragile! Relog to take effect.]])
|
farmbuyer@1
|
1536 editbox:SetRelativeWidth(0.5)
|
farmbuyer@1
|
1537 editbox:SetLabel("Keybinding text")
|
farmbuyer@1
|
1538 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@1
|
1539 OuroLootSV_opts.keybinding_text = value
|
farmbuyer@1
|
1540 end)
|
farmbuyer@1
|
1541 editbox:SetDisabled(not OuroLootSV_opts.keybinding)
|
farmbuyer@1
|
1542 checkbox = mkoption('keybinding', "Register keybinding", 0.5,
|
farmbuyer@1
|
1543 [[Register a keybinding to toggle the loot display. Relog to take effect.]],
|
farmbuyer@1
|
1544 function (_w,_,value)
|
farmbuyer@1
|
1545 OuroLootSV_opts.keybinding = value
|
farmbuyer@1
|
1546 editbox:SetDisabled(not OuroLootSV_opts.keybinding)
|
farmbuyer@1
|
1547 end)
|
farmbuyer@1
|
1548 pair:AddChild(checkbox)
|
farmbuyer@1
|
1549 pair:AddChild(editbox)
|
farmbuyer@1
|
1550 grp:AddChild(pair)
|
farmbuyer@1
|
1551 end
|
farmbuyer@1
|
1552
|
farmbuyer@3
|
1553 -- boss mod selection
|
farmbuyer@3
|
1554 w = GUI:Create("Spacer")
|
farmbuyer@3
|
1555 w:SetFullWidth(true)
|
farmbuyer@3
|
1556 w:SetHeight(20)
|
farmbuyer@3
|
1557 grp:AddChild(w)
|
farmbuyer@3
|
1558 do
|
farmbuyer@3
|
1559 local list = {}
|
farmbuyer@3
|
1560 local current
|
farmbuyer@3
|
1561 for k,v in ipairs(addon.bossmods) do
|
farmbuyer@3
|
1562 list[k] = v.n
|
farmbuyer@3
|
1563 if v.n == OuroLootSV_opts.bossmod then
|
farmbuyer@3
|
1564 current = k
|
farmbuyer@3
|
1565 end
|
farmbuyer@3
|
1566 end
|
farmbuyer@3
|
1567 w = mkbutton("Dropdown", nil, "", [[Which 'boss mod' to use.]])
|
farmbuyer@3
|
1568 w:SetRelativeWidth(0.2)
|
farmbuyer@3
|
1569 w:SetLabel("Boss Mod:")
|
farmbuyer@3
|
1570 w:SetList(list)
|
farmbuyer@3
|
1571 w:SetValue(current)
|
farmbuyer@3
|
1572 w:SetCallback("OnValueChanged", function(_w,event,choice)
|
farmbuyer@3
|
1573 OuroLootSV_opts.bossmod = list[choice]
|
farmbuyer@3
|
1574 end)
|
farmbuyer@3
|
1575 grp:AddChild(w)
|
farmbuyer@3
|
1576 end
|
farmbuyer@3
|
1577
|
farmbuyer@1
|
1578 -- item filter
|
farmbuyer@1
|
1579 w = GUI:Create("Spacer")
|
farmbuyer@1
|
1580 w:SetFullWidth(true)
|
farmbuyer@1
|
1581 w:SetHeight(20)
|
farmbuyer@1
|
1582 grp:AddChild(w)
|
farmbuyer@1
|
1583 do
|
farmbuyer@1
|
1584 local list = {}
|
farmbuyer@1
|
1585 for id in pairs(OuroLootSV_opts.itemfilter) do
|
farmbuyer@1
|
1586 local iname, _, iquality = GetItemInfo(id)
|
farmbuyer@2
|
1587 if iname then
|
farmbuyer@11
|
1588 list[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@2
|
1589 end
|
farmbuyer@1
|
1590 end
|
farmbuyer@1
|
1591 w = GUI:Create("EditBoxDropDown")
|
farmbuyer@1
|
1592 w:SetRelativeWidth(0.4)
|
farmbuyer@1
|
1593 w:SetText("Item filter")
|
farmbuyer@1
|
1594 w:SetEditBoxTooltip("Link items which should no longer be tracked.")
|
farmbuyer@1
|
1595 w:SetList(list)
|
farmbuyer@1
|
1596 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
|
farmbuyer@1
|
1597 local iname, ilink, iquality = GetItemInfo(strtrim(text))
|
farmbuyer@1
|
1598 if not iname then
|
farmbuyer@1
|
1599 return addon:Print("Error: %s is not a valid item name/link!", text)
|
farmbuyer@1
|
1600 end
|
farmbuyer@1
|
1601 local id = tonumber(ilink:match("item:(%d+)"))
|
farmbuyer@11
|
1602 list[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@1
|
1603 OuroLootSV_opts.itemfilter[id] = true
|
farmbuyer@1
|
1604 addon:Print("Now filtering out", ilink)
|
farmbuyer@1
|
1605 end)
|
farmbuyer@1
|
1606 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
|
farmbuyer@1
|
1607 --local ilink = select(2,GetItemInfo(key_id))
|
farmbuyer@1
|
1608 OuroLootSV_opts.itemfilter[tonumber(key_id)] = nil
|
farmbuyer@1
|
1609 --addon:Print("No longer filtering out", ilink)
|
farmbuyer@1
|
1610 addon:Print("No longer filtering out", val_name)
|
farmbuyer@1
|
1611 end)
|
farmbuyer@1
|
1612 grp:AddChild(w)
|
farmbuyer@1
|
1613 end
|
farmbuyer@1
|
1614
|
farmbuyer@1
|
1615 addon.sender_list.sort()
|
farmbuyer@1
|
1616 if #addon.sender_list.namesI > 0 then
|
farmbuyer@1
|
1617 local senders = table.concat(addon.sender_list.namesI,'\n') -- sigh
|
farmbuyer@1
|
1618 -- If 39 other people in the raid are running this, the label will
|
farmbuyer@1
|
1619 -- explode... is it likely enough to care about? No.
|
farmbuyer@1
|
1620 w = GUI:Create("Spacer")
|
farmbuyer@1
|
1621 w:SetFullWidth(true)
|
farmbuyer@1
|
1622 w:SetHeight(20)
|
farmbuyer@1
|
1623 grp:AddChild(w)
|
farmbuyer@1
|
1624 w = GUI:Create("Label")
|
farmbuyer@1
|
1625 w:SetRelativeWidth(0.4)
|
farmbuyer@11
|
1626 w:SetText(ITEM_QUALITY_COLORS[3].hex .."Echo from latest ping:|r\n"..senders)
|
farmbuyer@1
|
1627 grp:AddChild(w)
|
farmbuyer@1
|
1628 end
|
farmbuyer@1
|
1629
|
farmbuyer@6
|
1630 scroll:AddChild(grp)
|
farmbuyer@6
|
1631
|
farmbuyer@1
|
1632 w = mkbutton("ReloadUI", [[Does what you think it does. Loot information is written out and restored.]])
|
farmbuyer@1
|
1633 w:SetFullWidth(true)
|
farmbuyer@1
|
1634 w:SetCallback("OnClick", ReloadUI)
|
farmbuyer@1
|
1635 specials:AddChild(w)
|
farmbuyer@1
|
1636
|
farmbuyer@1
|
1637 w = mkbutton("Ping!",
|
farmbuyer@1
|
1638 [[Asks other raid users for their addon version and current status. Results displayed on User Options panel.]])
|
farmbuyer@1
|
1639 w:SetFullWidth(true)
|
farmbuyer@1
|
1640 w:SetCallback("OnClick", function(_w)
|
farmbuyer@1
|
1641 addon:Print("Give me a ping, Vasili. One ping only, please.")
|
farmbuyer@1
|
1642 addon.sender_list.active = {}
|
farmbuyer@1
|
1643 addon.sender_list.names = {}
|
farmbuyer@1
|
1644 _w:SetText("5... 4... 3...")
|
farmbuyer@1
|
1645 _w:SetDisabled(true)
|
farmbuyer@1
|
1646 addon:broadcast('ping')
|
farmbuyer@1
|
1647 addon:ScheduleTimer(function(b)
|
farmbuyer@1
|
1648 if b:IsVisible() then
|
farmbuyer@1
|
1649 return addon:redisplay()
|
farmbuyer@1
|
1650 --return tabs_OnGroupSelected_func(container,"OnGroupSelected","opt")
|
farmbuyer@1
|
1651 end
|
farmbuyer@1
|
1652 end, 5, _w)
|
farmbuyer@1
|
1653 end)
|
farmbuyer@1
|
1654 specials:AddChild(w)
|
farmbuyer@1
|
1655
|
farmbuyer@1
|
1656 -- Add appropriate lower panel
|
farmbuyer@1
|
1657 adv_lower (scroll, specials)
|
farmbuyer@1
|
1658
|
farmbuyer@1
|
1659 -- Finish up
|
farmbuyer@1
|
1660 container:AddChild(scroll)
|
farmbuyer@1
|
1661 end
|
farmbuyer@1
|
1662 end
|
farmbuyer@1
|
1663
|
farmbuyer@1
|
1664
|
farmbuyer@1
|
1665 -- Simply to avoid recreating the same function over and over
|
farmbuyer@1
|
1666 local tabs_OnGroupSelected_func_args = { [2] = "OnGroupSelected" }
|
farmbuyer@1
|
1667 tabs_OnGroupSelected_func = function (tabs,event,group)
|
farmbuyer@1
|
1668 tabs_OnGroupSelected_func_args[1] = tabs
|
farmbuyer@1
|
1669 tabs_OnGroupSelected_func_args[3] = group
|
farmbuyer@1
|
1670 tabs:ReleaseChildren()
|
farmbuyer@1
|
1671 local spec = tabs:GetUserData("special buttons group")
|
farmbuyer@1
|
1672 spec:ReleaseChildren()
|
farmbuyer@1
|
1673 local h = GUI:Create("Heading")
|
farmbuyer@1
|
1674 h:SetFullWidth(true)
|
farmbuyer@1
|
1675 h:SetText(_tabtexts[group].title)
|
farmbuyer@1
|
1676 spec:AddChild(h)
|
farmbuyer@1
|
1677 return tabs_OnGroupSelected[group](tabs,spec,group)
|
farmbuyer@1
|
1678 --[====[
|
farmbuyer@1
|
1679 Unfortunately, :GetHeight() called on anything useful out of a TabGroup
|
farmbuyer@1
|
1680 returns the static default size (about 50 pixels) until the refresh
|
farmbuyer@1
|
1681 cycle *after* all the frames are shown. Trying to fix it up after a
|
farmbuyer@1
|
1682 single OnUpdate doesn't work either. So for now it's all hardcoded.
|
farmbuyer@1
|
1683
|
farmbuyer@1
|
1684 Using this to determine the actual height of the usable area.
|
farmbuyer@1
|
1685 366 pixels
|
farmbuyer@1
|
1686 if group == "eoi" then
|
farmbuyer@1
|
1687 local stframe = tabs.children[1].frame
|
farmbuyer@1
|
1688 print(stframe:GetTop(),"-",stframe:GetBottom(),"=",
|
farmbuyer@1
|
1689 stframe:GetTop()-stframe:GetBottom())
|
farmbuyer@1
|
1690 print(stframe:GetRight(),"-",stframe:GetLeft(),"=",
|
farmbuyer@1
|
1691 stframe:GetRight()-stframe:GetLeft())
|
farmbuyer@1
|
1692 end
|
farmbuyer@1
|
1693 ]====]
|
farmbuyer@1
|
1694 end
|
farmbuyer@1
|
1695
|
farmbuyer@1
|
1696 --[[
|
farmbuyer@1
|
1697 mkbutton ("WidgetType", 'display key', "Text On Widget", "the mouseover display text")
|
farmbuyer@1
|
1698 mkbutton ( [Button] 'display key', "Text On Widget", "the mouseover display text")
|
farmbuyer@1
|
1699 mkbutton ( [Button] [text] "Text On Widget", "the mouseover display text")
|
farmbuyer@1
|
1700 ]]
|
farmbuyer@1
|
1701 do
|
farmbuyer@1
|
1702 local replacement_colors = { ["+"]="|cffffffff", ["<"]="|cff00ff00", [">"]="|r" }
|
farmbuyer@1
|
1703 function mkbutton (opt_widget_type, opt_key, label, status)
|
farmbuyer@1
|
1704 if not label then
|
farmbuyer@1
|
1705 opt_widget_type, opt_key, label, status = "Button", opt_widget_type, opt_widget_type, opt_key
|
farmbuyer@1
|
1706 elseif not status then
|
farmbuyer@1
|
1707 opt_widget_type, opt_key, label, status = "Button", opt_widget_type, opt_key, label
|
farmbuyer@1
|
1708 end
|
farmbuyer@1
|
1709 local button = GUI:Create(opt_widget_type)
|
farmbuyer@1
|
1710 if button.SetText then button:SetText(tostring(label)) end
|
farmbuyer@1
|
1711 status = status:gsub("[%+<>]",replacement_colors)
|
farmbuyer@1
|
1712 button:SetCallback("OnEnter", function() setstatus(status) end) -- maybe factor that closure out
|
farmbuyer@1
|
1713 button:SetCallback("OnLeave", statusy_OnLeave)
|
farmbuyer@1
|
1714 -- retrieval key may be specified as nil if all the parameters are given
|
farmbuyer@1
|
1715 if opt_key then _d:SetUserData (opt_key, button) end
|
farmbuyer@1
|
1716 return button
|
farmbuyer@1
|
1717 end
|
farmbuyer@1
|
1718 end
|
farmbuyer@1
|
1719
|
farmbuyer@1
|
1720 --[[
|
farmbuyer@1
|
1721 Creates the main window.
|
farmbuyer@1
|
1722 ]]
|
farmbuyer@1
|
1723 function addon:BuildMainDisplay (opt_tabselect)
|
farmbuyer@1
|
1724 if self.display then
|
farmbuyer@1
|
1725 -- try to get everything to update, rebuild, refresh... ugh, no
|
farmbuyer@1
|
1726 self.display:Hide()
|
farmbuyer@1
|
1727 end
|
farmbuyer@1
|
1728
|
farmbuyer@1
|
1729 local display = GUI:Create("Frame")
|
farmbuyer@1
|
1730 if _d then
|
farmbuyer@1
|
1731 display:SetUserData("eoiST",_d) -- warning! warning! kludge detected!
|
farmbuyer@1
|
1732 end
|
farmbuyer@1
|
1733 _d = display
|
farmbuyer@1
|
1734 self.display = display
|
farmbuyer@1
|
1735 display:SetTitle("Ouro Loot")
|
farmbuyer@1
|
1736 display:SetStatusText(self.status_text)
|
farmbuyer@1
|
1737 display:SetLayout("Flow")
|
farmbuyer@16
|
1738 display:SetStatusTable{width=900,height=550} -- default height is 500
|
farmbuyer@2
|
1739 -- prevent resizing, also see ace3 tickets 80 and 214
|
farmbuyer@2
|
1740 -- grrrr, no longer works after frame rewrite
|
farmbuyer@1
|
1741 --[[
|
farmbuyer@1
|
1742 display.sizer_se:SetScript("OnMouseDown",nil)
|
farmbuyer@1
|
1743 display.sizer_se:SetScript("OnMouseUp",nil)
|
farmbuyer@1
|
1744 display.sizer_s:SetScript("OnMouseDown",nil)
|
farmbuyer@1
|
1745 display.sizer_s:SetScript("OnMouseUp",nil)
|
farmbuyer@1
|
1746 display.sizer_e:SetScript("OnMouseDown",nil)
|
farmbuyer@1
|
1747 display.sizer_e:SetScript("OnMouseUp",nil)
|
farmbuyer@1
|
1748 ]]
|
farmbuyer@1
|
1749 display:SetCallback("OnClose", function(_display)
|
farmbuyer@1
|
1750 _d = _display:GetUserData("eoiST")
|
farmbuyer@1
|
1751 self.display = nil
|
farmbuyer@1
|
1752 GUI:Release(_display)
|
farmbuyer@6
|
1753 flib.clear()
|
farmbuyer@1
|
1754 collectgarbage()
|
farmbuyer@1
|
1755 end)
|
farmbuyer@1
|
1756
|
farmbuyer@1
|
1757 ----- Right-hand panel
|
farmbuyer@1
|
1758 local rhs_width = 0.20
|
farmbuyer@1
|
1759 local control = GUI:Create("SimpleGroup")
|
farmbuyer@1
|
1760 control:SetLayout("Flow")
|
farmbuyer@1
|
1761 control:SetRelativeWidth(rhs_width)
|
farmbuyer@1
|
1762 control.alignoffset = 25
|
farmbuyer@1
|
1763 control:PauseLayout()
|
farmbuyer@1
|
1764 local h,b
|
farmbuyer@1
|
1765
|
farmbuyer@1
|
1766 --- Main ---
|
farmbuyer@1
|
1767 h = GUI:Create("Heading")
|
farmbuyer@1
|
1768 h:SetFullWidth(true)
|
farmbuyer@1
|
1769 h:SetText("Main")
|
farmbuyer@1
|
1770 control:AddChild(h)
|
farmbuyer@1
|
1771
|
farmbuyer@1
|
1772 do
|
farmbuyer@1
|
1773 b = mkbutton("Dropdown", nil, "",
|
farmbuyer@1
|
1774 [[Enable full tracking, only rebroadcasting, or disable activity altogether.]])
|
farmbuyer@1
|
1775 b:SetFullWidth(true)
|
farmbuyer@1
|
1776 b:SetLabel("On/Off:")
|
farmbuyer@1
|
1777 b:SetList{"Full Tracking", "Broadcasting", "Disabled"}
|
farmbuyer@1
|
1778 b:SetValue(self.enabled and 1 or (self.rebroadcast and 2 or 3))
|
farmbuyer@1
|
1779 b:SetCallback("OnValueChanged", function(_w,event,choice)
|
farmbuyer@1
|
1780 if choice == 1 then self:Activate()
|
farmbuyer@1
|
1781 elseif choice == 2 then self:Activate(nil,true)
|
farmbuyer@1
|
1782 else self:Deactivate()
|
farmbuyer@1
|
1783 end
|
farmbuyer@1
|
1784 _w = display:GetUserData('comm_ident')
|
farmbuyer@1
|
1785 if _w and _w:IsVisible() then
|
farmbuyer@1
|
1786 _w:SetDisabled(self.enabled or self.rebroadcast)
|
farmbuyer@1
|
1787 end
|
farmbuyer@1
|
1788 _w = display:GetUserData('eoi_bcast_req')
|
farmbuyer@1
|
1789 if _w and _w:IsVisible() then
|
farmbuyer@1
|
1790 _w:SetDisabled(not self.enabled)
|
farmbuyer@1
|
1791 end
|
farmbuyer@1
|
1792 end)
|
farmbuyer@1
|
1793 control:AddChild(b)
|
farmbuyer@1
|
1794 end
|
farmbuyer@1
|
1795
|
farmbuyer@1
|
1796 b = mkbutton("Dropdown", 'threshold', "",
|
farmbuyer@1
|
1797 [[Items greater than or equal to this quality will be tracked/rebroadcast.]])
|
farmbuyer@1
|
1798 b:SetFullWidth(true)
|
farmbuyer@1
|
1799 b:SetLabel("Threshold:")
|
farmbuyer@1
|
1800 b:SetList(self.thresholds)
|
farmbuyer@1
|
1801 b:SetValue(self.threshold)
|
farmbuyer@1
|
1802 b:SetCallback("OnValueChanged", function(_dd,event,choice)
|
farmbuyer@1
|
1803 self:SetThreshold(choice)
|
farmbuyer@1
|
1804 end)
|
farmbuyer@1
|
1805 control:AddChild(b)
|
farmbuyer@1
|
1806
|
farmbuyer@4
|
1807 b = mkbutton("Clear Loot",
|
farmbuyer@1
|
1808 [[+Erases> all current loot information and generated text (but not saved texts).]])
|
farmbuyer@1
|
1809 b:SetFullWidth(true)
|
farmbuyer@1
|
1810 b:SetCallback("OnClick", function()
|
farmbuyer@1
|
1811 StaticPopup_Show("OUROL_CLEAR").data = self
|
farmbuyer@1
|
1812 end)
|
farmbuyer@1
|
1813 control:AddChild(b)
|
farmbuyer@1
|
1814
|
farmbuyer@1
|
1815 b = GUI:Create("Spacer")
|
farmbuyer@1
|
1816 b:SetFullWidth(true)
|
farmbuyer@16
|
1817 b:SetHeight(10)
|
farmbuyer@1
|
1818 control:AddChild(b)
|
farmbuyer@1
|
1819
|
farmbuyer@1
|
1820 --[[
|
farmbuyer@1
|
1821 --- Saved Texts ---
|
farmbuyer@1
|
1822 [ Save Current As... ]
|
farmbuyer@1
|
1823 saved1
|
farmbuyer@1
|
1824 saved2
|
farmbuyer@1
|
1825 ...
|
farmbuyer@1
|
1826 [ Load ] [ Delete ]
|
farmbuyer@1
|
1827 ]]
|
farmbuyer@1
|
1828 h = GUI:Create("Heading")
|
farmbuyer@1
|
1829 h:SetFullWidth(true)
|
farmbuyer@1
|
1830 h:SetText("Saved Texts")
|
farmbuyer@1
|
1831 control:AddChild(h)
|
farmbuyer@1
|
1832 b = mkbutton("Save Current As...",
|
farmbuyer@1
|
1833 [[Save forum/attendance/etc texts for later retrieval. Main loot information not included.]])
|
farmbuyer@1
|
1834 b:SetFullWidth(true)
|
farmbuyer@1
|
1835 b:SetCallback("OnClick", function()
|
farmbuyer@1
|
1836 StaticPopup_Show "OUROL_SAVE_SAVEAS"
|
farmbuyer@1
|
1837 _d:Hide()
|
farmbuyer@1
|
1838 end)
|
farmbuyer@1
|
1839 control:AddChild(b)
|
farmbuyer@1
|
1840
|
farmbuyer@16
|
1841 do
|
farmbuyer@16
|
1842 local scontainer = GUI:Create("SimpleGroup")
|
farmbuyer@16
|
1843 scontainer:SetFullWidth(true)
|
farmbuyer@16
|
1844 scontainer:SetFullHeight(false)
|
farmbuyer@16
|
1845 scontainer:SetAutoAdjustHeight(false)
|
farmbuyer@16
|
1846 scontainer:SetHeight(40) -- no relative height available anymore
|
farmbuyer@16
|
1847 scontainer:SetLayout("Fill")
|
farmbuyer@16
|
1848 local scroll = GUI:Create("ScrollFrame")
|
farmbuyer@16
|
1849 scroll:SetLayout("List")
|
farmbuyer@16
|
1850 local saved = self:check_saved_table(--[[silent_on_empty=]]true)
|
farmbuyer@16
|
1851 if saved then for i,s in ipairs(saved) do
|
farmbuyer@16
|
1852 local il = GUI:Create("InteractiveLabel")
|
farmbuyer@16
|
1853 il:SetFullWidth(true)
|
farmbuyer@16
|
1854 il:SetText(s.name)
|
farmbuyer@16
|
1855 il:SetUserData("num",i)
|
farmbuyer@16
|
1856 il:SetHighlight(1,1,1,0.4)
|
farmbuyer@16
|
1857 local str = ("%s %d entries %s"):format(s.date,s.count,s.name)
|
farmbuyer@16
|
1858 il:SetCallback("OnEnter", function() setstatus(str) end)
|
farmbuyer@16
|
1859 il:SetCallback("OnLeave", statusy_OnLeave)
|
farmbuyer@16
|
1860 il:SetCallback("OnClick", function(_il)
|
farmbuyer@16
|
1861 local prev = _d:GetUserData("saved selection")
|
farmbuyer@16
|
1862 if prev then
|
farmbuyer@16
|
1863 prev.highlight:Hide()
|
farmbuyer@16
|
1864 prev:SetColor()
|
farmbuyer@16
|
1865 end
|
farmbuyer@16
|
1866 _il:SetColor(0,1,0)
|
farmbuyer@16
|
1867 _il.highlight:Show()
|
farmbuyer@16
|
1868 _d:SetUserData("saved selection",_il)
|
farmbuyer@16
|
1869 _d:GetUserData("Load"):SetDisabled(false)
|
farmbuyer@16
|
1870 _d:GetUserData("Delete"):SetDisabled(false)
|
farmbuyer@16
|
1871 end)
|
farmbuyer@16
|
1872 scroll:AddChild(il)
|
farmbuyer@16
|
1873 end end
|
farmbuyer@16
|
1874 scontainer:AddChild(scroll)
|
farmbuyer@16
|
1875 control:AddChild(scontainer)
|
farmbuyer@16
|
1876 end
|
farmbuyer@1
|
1877
|
farmbuyer@1
|
1878 b = mkbutton("Load",
|
farmbuyer@1
|
1879 [[Load previously saved text. +REPLACES> all current loot information!]])
|
farmbuyer@1
|
1880 b:SetRelativeWidth(0.5)
|
farmbuyer@1
|
1881 b:SetCallback("OnClick", function()
|
farmbuyer@1
|
1882 local num = _d:GetUserData("saved selection"):GetUserData("num")
|
farmbuyer@1
|
1883 self:save_restore(num)
|
farmbuyer@1
|
1884 self:BuildMainDisplay()
|
farmbuyer@1
|
1885 end)
|
farmbuyer@1
|
1886 b:SetDisabled(true)
|
farmbuyer@1
|
1887 control:AddChild(b)
|
farmbuyer@1
|
1888 b = mkbutton("Delete",
|
farmbuyer@1
|
1889 [[Delete previously saved text.]])
|
farmbuyer@1
|
1890 b:SetRelativeWidth(0.5)
|
farmbuyer@1
|
1891 b:SetCallback("OnClick", function()
|
farmbuyer@1
|
1892 local num = _d:GetUserData("saved selection"):GetUserData("num")
|
farmbuyer@1
|
1893 self:save_delete(num)
|
farmbuyer@1
|
1894 self:BuildMainDisplay()
|
farmbuyer@1
|
1895 end)
|
farmbuyer@1
|
1896 b:SetDisabled(true)
|
farmbuyer@1
|
1897 control:AddChild(b)
|
farmbuyer@1
|
1898
|
farmbuyer@1
|
1899 b = GUI:Create("Spacer")
|
farmbuyer@1
|
1900 b:SetFullWidth(true)
|
farmbuyer@16
|
1901 b:SetHeight(10)
|
farmbuyer@1
|
1902 control:AddChild(b)
|
farmbuyer@1
|
1903
|
farmbuyer@1
|
1904 -- Other stuff on right-hand side
|
farmbuyer@1
|
1905 local tab_specials = GUI:Create("SimpleGroup")
|
farmbuyer@1
|
1906 tab_specials:SetLayout("Flow")
|
farmbuyer@1
|
1907 tab_specials:SetFullWidth(true)
|
farmbuyer@1
|
1908 control:AddChild(tab_specials)
|
farmbuyer@1
|
1909 control:ResumeLayout()
|
farmbuyer@1
|
1910
|
farmbuyer@1
|
1911 ----- Left-hand group
|
farmbuyer@1
|
1912 local tabs = GUI:Create("TabGroup")
|
farmbuyer@1
|
1913 tabs:SetLayout("Flow")
|
farmbuyer@1
|
1914 tabs.alignoffset = 25
|
farmbuyer@1
|
1915 tabs.titletext:SetFontObject(GameFontNormalSmall) -- XXX
|
farmbuyer@1
|
1916 do
|
farmbuyer@1
|
1917 self.sender_list.sort()
|
farmbuyer@1
|
1918 tabs.titletext:SetFormattedText("Received broadcast data from %d |4player:players;.",
|
farmbuyer@1
|
1919 self.sender_list.activeI)
|
farmbuyer@1
|
1920 end
|
farmbuyer@1
|
1921 tabs:SetRelativeWidth(0.99-rhs_width)
|
farmbuyer@1
|
1922 tabs:SetFullHeight(true)
|
farmbuyer@1
|
1923 tabs:SetTabs(tabgroup_tabs)
|
farmbuyer@1
|
1924 tabs:SetCallback("OnGroupSelected", tabs_OnGroupSelected_func)
|
farmbuyer@1
|
1925 tabs:SetCallback("OnTabEnter", function(_tabs,event,value,tab)
|
farmbuyer@1
|
1926 setstatus(_tabtexts[value].desc)
|
farmbuyer@1
|
1927 end)
|
farmbuyer@1
|
1928 tabs:SetCallback("OnTabLeave", statusy_OnLeave)
|
farmbuyer@1
|
1929 tabs:SetUserData("special buttons group",tab_specials)
|
farmbuyer@1
|
1930 tabs:SelectTab(opt_tabselect or "eoi")
|
farmbuyer@1
|
1931
|
farmbuyer@1
|
1932 display:AddChildren (tabs, control)
|
farmbuyer@1
|
1933 display:ApplyStatus()
|
farmbuyer@1
|
1934
|
farmbuyer@1
|
1935 display:Show() -- without this, only appears every *other* function call
|
farmbuyer@1
|
1936 return display
|
farmbuyer@1
|
1937 end
|
farmbuyer@1
|
1938
|
farmbuyer@1
|
1939 function addon:OpenMainDisplayToTab (text)
|
farmbuyer@1
|
1940 text = '^'..text
|
farmbuyer@1
|
1941 for tab,v in pairs(_tabtexts) do
|
farmbuyer@1
|
1942 if v.title:lower():find(text) then
|
farmbuyer@1
|
1943 self:BuildMainDisplay(tab)
|
farmbuyer@1
|
1944 return true
|
farmbuyer@1
|
1945 end
|
farmbuyer@1
|
1946 end
|
farmbuyer@1
|
1947 end
|
farmbuyer@1
|
1948
|
farmbuyer@1
|
1949 -- Essentially a re-click on the current tab (if the current tab were clickable).
|
farmbuyer@1
|
1950 function addon:redisplay ()
|
farmbuyer@1
|
1951 tabs_OnGroupSelected_func (unpack(tabs_OnGroupSelected_func_args))
|
farmbuyer@1
|
1952 end
|
farmbuyer@1
|
1953
|
farmbuyer@1
|
1954 end -- local 'do' scope
|
farmbuyer@1
|
1955
|
farmbuyer@1
|
1956
|
farmbuyer@1
|
1957 ------ Popup dialogs
|
farmbuyer@1
|
1958 -- Callback for each Next/Accept stage of inserting a new loot row via dropdown
|
farmbuyer@1
|
1959 local function eoi_st_insert_OnAccept_boss (dialog, data)
|
farmbuyer@1
|
1960 if data.all_done then
|
farmbuyer@1
|
1961 -- It'll probably be the final entry in the table, but there might have
|
farmbuyer@1
|
1962 -- been real loot happening at the same time.
|
farmbuyer@1
|
1963 local boss_index = addon._addLootEntry{
|
farmbuyer@1
|
1964 kind = 'boss',
|
farmbuyer@1
|
1965 bosskill = (OuroLootSV_opts.snarky_boss and addon.boss_abbrev[data.name] or data.name) or data.name,
|
farmbuyer@1
|
1966 reason = 'kill',
|
farmbuyer@1
|
1967 instance = data.instance,
|
farmbuyer@1
|
1968 duration = 0,
|
farmbuyer@1
|
1969 }
|
farmbuyer@1
|
1970 local entry = tremove(g_loot,boss_index)
|
farmbuyer@1
|
1971 tinsert(g_loot,data.rowindex,entry)
|
farmbuyer@1
|
1972 addon:_mark_boss_kill(data.rowindex)
|
farmbuyer@1
|
1973 data.display:GetUserData("eoiST"):OuroLoot_Refresh(data.rowindex)
|
farmbuyer@1
|
1974 dialog.data = nil -- free up memory
|
farmbuyer@1
|
1975 addon:Print("Inserted %s %s (entry %d).", data.kind, data.name, data.rowindex)
|
farmbuyer@1
|
1976 return
|
farmbuyer@1
|
1977 end
|
farmbuyer@1
|
1978
|
farmbuyer@16
|
1979 local text = dialog.editBox:GetText()
|
farmbuyer@1
|
1980
|
farmbuyer@1
|
1981 -- second click
|
farmbuyer@1
|
1982 if data.name and text then
|
farmbuyer@1
|
1983 data.instance = text
|
farmbuyer@1
|
1984 data.all_done = true
|
farmbuyer@1
|
1985 -- in future do one more thing, for now just jump to the check
|
farmbuyer@1
|
1986 return eoi_st_insert_OnAccept_boss (dialog, data)
|
farmbuyer@1
|
1987 end
|
farmbuyer@1
|
1988
|
farmbuyer@1
|
1989 -- first click
|
farmbuyer@1
|
1990 if text then
|
farmbuyer@1
|
1991 data.name = text
|
farmbuyer@1
|
1992 local getinstance = StaticPopup_Show("OUROL_EOI_INSERT","instance")
|
farmbuyer@1
|
1993 getinstance.data = data
|
farmbuyer@16
|
1994 getinstance.editBox:SetText(addon.instance_tag())
|
farmbuyer@1
|
1995 -- This suppresses auto-hide (which would case the getinstance dialog
|
farmbuyer@1
|
1996 -- to go away), but only when mouse clicking. OnEnter is on its own.
|
farmbuyer@1
|
1997 return true
|
farmbuyer@1
|
1998 end
|
farmbuyer@1
|
1999 end
|
farmbuyer@1
|
2000
|
farmbuyer@1
|
2001 local function eoi_st_insert_OnAccept_loot (dialog, data)
|
farmbuyer@1
|
2002 if data.all_done then
|
farmbuyer@1
|
2003 --local real_rebroadcast, real_enabled = addon.rebroadcast, addon.enabled
|
farmbuyer@1
|
2004 --g_rebroadcast, g_enabled = false, true
|
farmbuyer@1
|
2005 data.display:Hide()
|
farmbuyer@1
|
2006 local loot_index = addon:CHAT_MSG_LOOT ("manual", data.recipient, data.name, data.notes)
|
farmbuyer@1
|
2007 --g_rebroadcast, g_enabled = real_g_rebroadcast, real_g_enabled
|
farmbuyer@1
|
2008 local entry = tremove(g_loot,loot_index)
|
farmbuyer@1
|
2009 tinsert(g_loot,data.rowindex,entry)
|
farmbuyer@1
|
2010 --data.display:GetUserData("eoiST"):OuroLoot_Refresh(data.rowindex)
|
farmbuyer@1
|
2011 addon:_fill_out_eoi_data(data.rowindex)
|
farmbuyer@1
|
2012 addon:BuildMainDisplay()
|
farmbuyer@1
|
2013 dialog.data = nil
|
farmbuyer@1
|
2014 addon:Print("Inserted %s %s (entry %d).", data.kind, data.name, data.rowindex)
|
farmbuyer@1
|
2015 return
|
farmbuyer@1
|
2016 end
|
farmbuyer@1
|
2017
|
farmbuyer@16
|
2018 local text = dialog.editBox:GetText():trim()
|
farmbuyer@1
|
2019
|
farmbuyer@1
|
2020 -- third click
|
farmbuyer@1
|
2021 if data.name and data.recipient and text then
|
farmbuyer@1
|
2022 data.notes = (text ~= "<none>") and text or nil
|
farmbuyer@1
|
2023 data.all_done = true
|
farmbuyer@1
|
2024 return eoi_st_insert_OnAccept_loot (dialog, data)
|
farmbuyer@1
|
2025 end
|
farmbuyer@1
|
2026
|
farmbuyer@1
|
2027 -- second click
|
farmbuyer@1
|
2028 if data.name and text then
|
farmbuyer@1
|
2029 data.recipient = text
|
farmbuyer@1
|
2030 local getnotes = StaticPopup_Show("OUROL_EOI_INSERT","notes")
|
farmbuyer@1
|
2031 getnotes.data = data
|
farmbuyer@16
|
2032 getnotes.editBox:SetText("<none>")
|
farmbuyer@16
|
2033 getnotes.editBox:HighlightText()
|
farmbuyer@1
|
2034 return true
|
farmbuyer@1
|
2035 end
|
farmbuyer@1
|
2036
|
farmbuyer@1
|
2037 -- first click
|
farmbuyer@1
|
2038 if text then
|
farmbuyer@1
|
2039 data.name = text
|
farmbuyer@1
|
2040 dialog:Hide() -- technically a "different" one about to be shown
|
farmbuyer@1
|
2041 local getrecipient = StaticPopup_Show("OUROL_EOI_INSERT","recipient")
|
farmbuyer@1
|
2042 getrecipient.data = data
|
farmbuyer@16
|
2043 getrecipient.editBox:SetText("")
|
farmbuyer@1
|
2044 return true
|
farmbuyer@1
|
2045 end
|
farmbuyer@1
|
2046 end
|
farmbuyer@1
|
2047
|
farmbuyer@1
|
2048 local function eoi_st_insert_OnAccept (dialog, data)
|
farmbuyer@1
|
2049 if data.kind == 'boss' then
|
farmbuyer@1
|
2050 return eoi_st_insert_OnAccept_boss (dialog, data)
|
farmbuyer@1
|
2051 elseif data.kind == 'loot' then
|
farmbuyer@1
|
2052 return eoi_st_insert_OnAccept_loot (dialog, data)
|
farmbuyer@1
|
2053 end
|
farmbuyer@1
|
2054 end
|
farmbuyer@1
|
2055
|
farmbuyer@1
|
2056 StaticPopupDialogs["OUROL_CLEAR"] = flib.StaticPopup{
|
farmbuyer@1
|
2057 text = "Clear current loot information and text?",
|
farmbuyer@16
|
2058 button1 = YES,
|
farmbuyer@16
|
2059 button2 = NO,
|
farmbuyer@1
|
2060 OnAccept = function (dialog, addon)
|
farmbuyer@1
|
2061 addon:Clear(--[[verbose_p=]]true)
|
farmbuyer@1
|
2062 end,
|
farmbuyer@1
|
2063 }
|
farmbuyer@1
|
2064
|
farmbuyer@16
|
2065 StaticPopupDialogs["OUROL_HIST_CLEAR"] = flib.StaticPopup{
|
farmbuyer@16
|
2066 text = "Erase all history entries from %s?",
|
farmbuyer@16
|
2067 button1 = YES,
|
farmbuyer@16
|
2068 button2 = NO,
|
farmbuyer@16
|
2069 OnAccept = function (dialog, addon, data2)
|
farmbuyer@16
|
2070 data2(addon)
|
farmbuyer@16
|
2071 addon:Print("Stimpy, you eeediot, you've pushed the history erase button!")
|
farmbuyer@16
|
2072 addon:redisplay()
|
farmbuyer@16
|
2073 end,
|
farmbuyer@16
|
2074 }
|
farmbuyer@16
|
2075
|
farmbuyer@16
|
2076 StaticPopupDialogs["OUROL_HIST_PREEN"] = flib.StaticPopup{
|
farmbuyer@16
|
2077 text = "Erase all but the latest entry for players on %s?",
|
farmbuyer@16
|
2078 button1 = YES,
|
farmbuyer@16
|
2079 button2 = NO,
|
farmbuyer@16
|
2080 OnAccept = function (dialog, addon, data2)
|
farmbuyer@16
|
2081 data2(addon)
|
farmbuyer@16
|
2082 addon:Print("All loot prior to the most recent entries has been erased.")
|
farmbuyer@16
|
2083 addon:redisplay()
|
farmbuyer@16
|
2084 end,
|
farmbuyer@16
|
2085 }
|
farmbuyer@16
|
2086
|
farmbuyer@1
|
2087 StaticPopupDialogs["OUROL_REMIND"] = flib.StaticPopup{
|
farmbuyer@1
|
2088 text = "Do you wish to activate Ouro Loot?\n\n(Hit the Escape key to close this window without clicking)",
|
farmbuyer@1
|
2089 button1 = "Activate recording", -- "accept", left
|
farmbuyer@1
|
2090 button3 = "Broadcast only", -- "alt", middle
|
farmbuyer@1
|
2091 button2 = "Help", -- "cancel", right
|
farmbuyer@1
|
2092 OnAccept = function (dialog, addon)
|
farmbuyer@1
|
2093 addon:Activate()
|
farmbuyer@1
|
2094 end,
|
farmbuyer@1
|
2095 OnAlt = function (dialog, addon)
|
farmbuyer@1
|
2096 addon:Activate(nil,true)
|
farmbuyer@1
|
2097 end,
|
farmbuyer@1
|
2098 OnCancel = function (dialog, addon)
|
farmbuyer@1
|
2099 -- hitting escape also calls this, but the 3rd arg would be "clicked"
|
farmbuyer@1
|
2100 -- in both cases, not useful here.
|
farmbuyer@1
|
2101 local helpbutton = dialog.button2
|
farmbuyer@1
|
2102 local ismousing = MouseIsOver(helpbutton)
|
farmbuyer@1
|
2103 if ismousing then
|
farmbuyer@1
|
2104 -- they actually clicked the button (or at least the mouse was over "Help"
|
farmbuyer@1
|
2105 -- when they hit escape... sigh)
|
farmbuyer@1
|
2106 addon:BuildMainDisplay('help')
|
farmbuyer@1
|
2107 else
|
farmbuyer@1
|
2108 addon.popped = true
|
farmbuyer@1
|
2109 end
|
farmbuyer@1
|
2110 end,
|
farmbuyer@1
|
2111 }
|
farmbuyer@1
|
2112
|
farmbuyer@1
|
2113 -- The data member here is a table built with:
|
farmbuyer@1
|
2114 -- {rowindex=<GUI row receiving click>, display=_d, kind=<loot/boss>}
|
farmbuyer@1
|
2115 do
|
farmbuyer@1
|
2116 local t = flib.StaticPopup{
|
farmbuyer@1
|
2117 text = "Enter name of new %s, then click Next or press Enter:",
|
farmbuyer@1
|
2118 button1 = "Next >",
|
farmbuyer@1
|
2119 button2 = CANCEL,
|
farmbuyer@1
|
2120 hasEditBox = true,
|
farmbuyer@16
|
2121 editBoxWidth = 350,
|
farmbuyer@1
|
2122 maxLetters = 50,
|
farmbuyer@1
|
2123 noCancelOnReuse = true,
|
farmbuyer@1
|
2124 --[[ XXX still needed?
|
farmbuyer@1
|
2125 OnShow = function(dialog)
|
farmbuyer@1
|
2126 dialog.wideEditBox:SetText("")
|
farmbuyer@1
|
2127 dialog.wideEditBox:SetFocus()
|
farmbuyer@1
|
2128 end,]]
|
farmbuyer@1
|
2129 }
|
farmbuyer@1
|
2130 t.EditBoxOnEnterPressed = function(editbox)
|
farmbuyer@1
|
2131 local dialog = editbox:GetParent()
|
farmbuyer@1
|
2132 if not eoi_st_insert_OnAccept (dialog, dialog.data) then
|
farmbuyer@1
|
2133 dialog:Hide() -- replicate OnAccept click behavior
|
farmbuyer@1
|
2134 end
|
farmbuyer@1
|
2135 end
|
farmbuyer@1
|
2136 t.enterClicksFirstButton = nil -- no effect with editbox focused
|
farmbuyer@1
|
2137 t.OnAccept = eoi_st_insert_OnAccept
|
farmbuyer@1
|
2138 StaticPopupDialogs["OUROL_EOI_INSERT"] = t
|
farmbuyer@1
|
2139 end
|
farmbuyer@1
|
2140
|
farmbuyer@1
|
2141 -- This seems to be gratuitous use of metatables, really.
|
farmbuyer@1
|
2142 do
|
farmbuyer@1
|
2143 local OEIL = {
|
farmbuyer@1
|
2144 text = "Paste the new item into here, then click Next or press Enter:",
|
farmbuyer@1
|
2145 __index = StaticPopupDialogs["OUROL_EOI_INSERT"]
|
farmbuyer@1
|
2146 }
|
farmbuyer@1
|
2147 StaticPopupDialogs["OUROL_EOI_INSERT_LOOT"] = setmetatable(OEIL,OEIL)
|
farmbuyer@1
|
2148
|
farmbuyer@1
|
2149 hooksecurefunc("ChatEdit_InsertLink", function (link,...)
|
farmbuyer@1
|
2150 local dialogname = StaticPopup_Visible "OUROL_EOI_INSERT_LOOT"
|
farmbuyer@1
|
2151 if dialogname then
|
farmbuyer@16
|
2152 _G[dialogname.."EditBox"]:SetText(link)
|
farmbuyer@1
|
2153 return true
|
farmbuyer@1
|
2154 end
|
farmbuyer@1
|
2155 end)
|
farmbuyer@1
|
2156 end
|
farmbuyer@1
|
2157
|
farmbuyer@1
|
2158 StaticPopupDialogs["OUROL_REASSIGN_ENTER"] = flib.StaticPopup{
|
farmbuyer@1
|
2159 text = "Enter the player name:",
|
farmbuyer@1
|
2160 button1 = ACCEPT,
|
farmbuyer@1
|
2161 button2 = CANCEL,
|
farmbuyer@1
|
2162 hasEditBox = true,
|
farmbuyer@1
|
2163 --[[ XXX needed?
|
farmbuyer@1
|
2164 OnShow = function(dialog)
|
farmbuyer@1
|
2165 dialog.editBox:SetText("")
|
farmbuyer@1
|
2166 dialog.editBox:SetFocus()
|
farmbuyer@1
|
2167 end,]]
|
farmbuyer@1
|
2168 OnAccept = function(dialog, data)
|
farmbuyer@1
|
2169 local name = dialog.usertext --editBox:GetText()
|
farmbuyer@1
|
2170 g_loot[data.index].person = name
|
farmbuyer@1
|
2171 g_loot[data.index].person_class = select(2,UnitClass(name))
|
farmbuyer@16
|
2172 -- FIXME also update history
|
farmbuyer@1
|
2173 addon:Print("Reassigned entry %d to '%s'.", data.index, name)
|
farmbuyer@1
|
2174 data.display:GetUserData("eoiST"):OuroLoot_Refresh(data.index)
|
farmbuyer@1
|
2175 end,
|
farmbuyer@1
|
2176 }
|
farmbuyer@1
|
2177
|
farmbuyer@1
|
2178 StaticPopupDialogs["OUROL_SAVE_SAVEAS"] = flib.StaticPopup{
|
farmbuyer@1
|
2179 text = "Enter a name for the loot collection:",
|
farmbuyer@1
|
2180 button1 = ACCEPT,
|
farmbuyer@1
|
2181 button2 = CANCEL,
|
farmbuyer@1
|
2182 hasEditBox = true,
|
farmbuyer@1
|
2183 maxLetters = 30,
|
farmbuyer@1
|
2184 --[[ XXX
|
farmbuyer@1
|
2185 OnShow = function(dialog)
|
farmbuyer@1
|
2186 dialog.editBox:SetText("")
|
farmbuyer@1
|
2187 dialog.editBox:SetFocus()
|
farmbuyer@1
|
2188 end,]]
|
farmbuyer@1
|
2189 OnAccept = function(dialog)--, data)
|
farmbuyer@1
|
2190 local name = dialog.usertext --editBox:GetText()
|
farmbuyer@1
|
2191 addon:save_saveas(name)
|
farmbuyer@1
|
2192 addon:BuildMainDisplay()
|
farmbuyer@1
|
2193 end,
|
farmbuyer@1
|
2194 OnCancel = function(dialog)--, data, reason)
|
farmbuyer@1
|
2195 addon:BuildMainDisplay()
|
farmbuyer@1
|
2196 end,
|
farmbuyer@1
|
2197 --[[XXX
|
farmbuyer@1
|
2198 EditBoxOnEnterPressed = function(editbox)
|
farmbuyer@1
|
2199 local dialog = editbox:GetParent()
|
farmbuyer@1
|
2200 StaticPopupDialogs["OUROL_SAVE_SAVEAS"].OnAccept (dialog, dialog.data)
|
farmbuyer@1
|
2201 dialog:Hide()
|
farmbuyer@1
|
2202 end,]]
|
farmbuyer@1
|
2203 }
|
farmbuyer@1
|
2204
|
farmbuyer@1
|
2205 -- vim:noet
|