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