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