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