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