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