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