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