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