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