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