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