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@1
|
1176 _populate_text_specials (box, specials, mkbutton, text_kind)
|
farmbuyer@1
|
1177 end
|
farmbuyer@1
|
1178
|
farmbuyer@37
|
1179
|
farmbuyer@1
|
1180 -- Tab 4: History
|
farmbuyer@1
|
1181 -- Much of the implementation here follows a similar desgin for the first
|
farmbuyer@4
|
1182 -- tab's handling of ST objects. We will even reuse its controlling tables
|
farmbuyer@4
|
1183 -- when feasible.
|
farmbuyer@37
|
1184 local histST, hist_dropdownfuncs
|
farmbuyer@1
|
1185
|
farmbuyer@37
|
1186 hist_dropdownfuncs = dropdownfuncs{
|
farmbuyer@37
|
1187 ["Delete this loot history"] = function(rowi)
|
farmbuyer@37
|
1188 --local gone = tremove(g_loot,rowi)
|
farmbuyer@37
|
1189 --addon:Print("Removed %s.",
|
farmbuyer@55
|
1190 --gone.itemlink or gone.bossname or gone.startday.text)
|
farmbuyer@37
|
1191 end,
|
farmbuyer@37
|
1192 }
|
farmbuyer@37
|
1193 local hist_dropdown = gen_easymenu_table(
|
farmbuyer@37
|
1194 {{
|
farmbuyer@37
|
1195 -- this is the dropdown title, text filled in on the fly
|
farmbuyer@37
|
1196 notClickable = true,
|
farmbuyer@37
|
1197 notCheckable = true,
|
farmbuyer@37
|
1198 }},
|
farmbuyer@37
|
1199 {
|
farmbuyer@37
|
1200 "Delete this loot history|Permanent, no going back!",
|
farmbuyer@37
|
1201 --"Delete remaining entries for this boss%boss|Erases everything from here down until a new boss/day",
|
farmbuyer@37
|
1202 "--",
|
farmbuyer@37
|
1203 CLOSE
|
farmbuyer@37
|
1204 }, hist_dropdownfuncs)
|
farmbuyer@6
|
1205
|
farmbuyer@37
|
1206 local hist_st_cols = {
|
farmbuyer@37
|
1207 { -- col 1
|
farmbuyer@37
|
1208 name = "Player",
|
farmbuyer@37
|
1209 width = 130,
|
farmbuyer@37
|
1210 DoCellUpdate = eoi_st_col2_DoCellUpdate,
|
farmbuyer@37
|
1211 },
|
farmbuyer@37
|
1212 { -- col 2
|
farmbuyer@37
|
1213 name = "Most Recent Loot",
|
farmbuyer@37
|
1214 width = 250,
|
farmbuyer@37
|
1215 DoCellUpdate = hist_st_col2_DoCellUpdate,
|
farmbuyer@37
|
1216 },
|
farmbuyer@37
|
1217 { -- col 3
|
farmbuyer@37
|
1218 name = "When",
|
farmbuyer@37
|
1219 width = 250,
|
farmbuyer@37
|
1220 DoCellUpdate = hist_st_col3_DoCellUpdate,
|
farmbuyer@37
|
1221 defaultsort = "asc",
|
farmbuyer@37
|
1222 sort = "asc",
|
farmbuyer@37
|
1223 sortnext = 1,
|
farmbuyer@37
|
1224 },
|
farmbuyer@37
|
1225 }
|
farmbuyer@37
|
1226
|
farmbuyer@37
|
1227 local hist_normal_status =
|
farmbuyer@37
|
1228 [[Click on a row to view all history for that player only. (Click column headers to re-sort.)]]
|
farmbuyer@37
|
1229 local hist_name_status =
|
farmbuyer@37
|
1230 [[Right-click on any row to return to normal history display.]]
|
farmbuyer@37
|
1231
|
farmbuyer@37
|
1232 local history_filter_by_recent = function (st, e)
|
farmbuyer@37
|
1233 if e.kind ~= 'history' then return true end
|
farmbuyer@37
|
1234 return e.cols[2].OLi == 1
|
farmbuyer@37
|
1235 end
|
farmbuyer@37
|
1236
|
farmbuyer@37
|
1237 local history_filter_who
|
farmbuyer@37
|
1238 local history_filter_by_name = function (st, e)
|
farmbuyer@37
|
1239 if e.kind ~= 'history' then return true end
|
farmbuyer@37
|
1240 return e.OLwho == history_filter_who
|
farmbuyer@37
|
1241 end
|
farmbuyer@37
|
1242
|
farmbuyer@37
|
1243 -- Loot column
|
farmbuyer@37
|
1244 local function hist_st_col2_DoCellUpdate (rowFrame, cellFrame, data, cols, row, realrow, column, fShow, stable, ...)
|
farmbuyer@37
|
1245 print("col2 DCU", realrow)
|
farmbuyer@37
|
1246 end
|
farmbuyer@37
|
1247
|
farmbuyer@37
|
1248 -- Formatted timestamp column
|
farmbuyer@37
|
1249 local function hist_st_col3_DoCellUpdate (rowFrame, cellFrame, data, cols, row, realrow, column, fShow, stable, ...)
|
farmbuyer@37
|
1250 print("col3 DCU", realrow)
|
farmbuyer@37
|
1251 if not fShow then
|
farmbuyer@37
|
1252 cellFrame.text:SetText("")
|
farmbuyer@37
|
1253 return
|
farmbuyer@6
|
1254 end
|
farmbuyer@6
|
1255
|
farmbuyer@37
|
1256 local d = data[realrow]
|
farmbuyer@37
|
1257 local cell = d.cols[column]
|
farmbuyer@37
|
1258
|
farmbuyer@37
|
1259 cellFrame.text:SetText(cell.value)
|
farmbuyer@37
|
1260 cellFrame.text:SetTextColor(1,1,1,1)
|
farmbuyer@37
|
1261
|
farmbuyer@37
|
1262 --if d.kind ~= 'loot' then
|
farmbuyer@37
|
1263 stable:SetHighLightColor (rowFrame, eoi_st_otherrow_bgcolortable[d.kind])
|
farmbuyer@37
|
1264 --else
|
farmbuyer@37
|
1265 -- table:SetHighLightColor (rowFrame, table:GetDefaultHighlightBlank())
|
farmbuyer@37
|
1266 --end
|
farmbuyer@37
|
1267 end
|
farmbuyer@37
|
1268
|
farmbuyer@37
|
1269 local function hist_st_OnClick (rowFrame, cellFrame, data, cols, row, realrow, column, stable, button, ...)
|
farmbuyer@37
|
1270 if (row == nil) or (realrow == nil) then return false end -- click column header, do default resorting
|
farmbuyer@37
|
1271 local h = data[realrow]
|
farmbuyer@37
|
1272 local kind = h.kind
|
farmbuyer@37
|
1273
|
farmbuyer@37
|
1274 if history_filter_who and button == "RightButton" then -- now filtering and wanting not to
|
farmbuyer@37
|
1275 history_filter_who = nil
|
farmbuyer@37
|
1276 stable:SetFilter(history_filter_by_recent)
|
farmbuyer@37
|
1277 setstatus(hist_normal_status)
|
farmbuyer@37
|
1278 elseif (not history_filter_who) and button == "LeftButton" then -- not filtering and wanting to
|
farmbuyer@37
|
1279 history_filter_who = h.OLwho
|
farmbuyer@37
|
1280 stable:SetFilter(history_filter_by_name)
|
farmbuyer@37
|
1281 setstatus(hist_name_status)
|
farmbuyer@6
|
1282 end
|
farmbuyer@6
|
1283
|
farmbuyer@37
|
1284 return true -- do not do anything further
|
farmbuyer@37
|
1285 end
|
farmbuyer@37
|
1286
|
farmbuyer@37
|
1287 --[[
|
farmbuyer@37
|
1288 local function hist_st_OnDoubleClick (rowFrame, cellFrame, data, cols, row, realrow, column, stable, button, ...)
|
farmbuyer@37
|
1289 if (row == nil) or (realrow == nil) then return true end -- they clicked on column header, suppress reordering
|
farmbuyer@37
|
1290 local h = data[realrow]
|
farmbuyer@37
|
1291 local kind = h.kind
|
farmbuyer@37
|
1292
|
farmbuyer@37
|
1293 return true -- do not do anything further
|
farmbuyer@37
|
1294 end]]
|
farmbuyer@37
|
1295
|
farmbuyer@37
|
1296 -- Tab 4: History (implementation)
|
farmbuyer@37
|
1297 tabs_OnGroupSelected["hist"] = function(container,specials)
|
farmbuyer@37
|
1298 histST = LibStub("ScrollingTable"):CreateST(hist_st_cols,eoi_st_displayed_rows,eoi_st_rowheight)
|
farmbuyer@37
|
1299 _d:SetUserData("histST",histST)
|
farmbuyer@37
|
1300 if addon.author_debug then
|
farmbuyer@37
|
1301 _G.OLHST = histST
|
farmbuyer@1
|
1302 end
|
farmbuyer@1
|
1303
|
farmbuyer@37
|
1304 if not eoi_st_otherrow_bgcolortable_default then
|
farmbuyer@37
|
1305 eoi_st_otherrow_bgcolortable_default = histST:GetDefaultHighlightBlank()
|
farmbuyer@37
|
1306 setmetatable(eoi_st_otherrow_bgcolortable, {__index = function (bg, key)
|
farmbuyer@37
|
1307 return eoi_st_otherrow_bgcolortable_default
|
farmbuyer@37
|
1308 end})
|
farmbuyer@1
|
1309 end
|
farmbuyer@1
|
1310
|
farmbuyer@37
|
1311 addon:_build_history_names()
|
farmbuyer@37
|
1312 addon:_fill_out_hist_data(1)
|
farmbuyer@37
|
1313 histST:SetData(addon.history.st)
|
farmbuyer@37
|
1314 histST:RegisterEvents{
|
farmbuyer@37
|
1315 OnEnter = eoi_st_OnEnter,
|
farmbuyer@37
|
1316 OnLeave = eoi_st_OnLeave,
|
farmbuyer@37
|
1317 OnClick = hist_st_OnClick,
|
farmbuyer@37
|
1318 --OnDoubleClick = hist_st_OnDoubleClick,
|
farmbuyer@37
|
1319 }
|
farmbuyer@37
|
1320 local oldrefresh = histST.Refresh
|
farmbuyer@37
|
1321 histST.Refresh = function (self, opt_index)
|
farmbuyer@37
|
1322 addon:_fill_out_hist_data(opt_index)
|
farmbuyer@37
|
1323 return oldrefresh(self)
|
farmbuyer@37
|
1324 end
|
farmbuyer@37
|
1325 histST.OuroLoot_Refresh = function (self, opt_index)
|
farmbuyer@37
|
1326 addon:_fill_out_hist_data(opt_index)
|
farmbuyer@37
|
1327 self:SortData() -- calls hooked refresh
|
farmbuyer@6
|
1328 end
|
farmbuyer@6
|
1329
|
farmbuyer@37
|
1330 histST:SetFilter(history_filter_by_recent)
|
farmbuyer@6
|
1331
|
farmbuyer@37
|
1332 -- Zaps history for the given realm, or the current (current-playing
|
farmbuyer@37
|
1333 -- realm, not currently-displayed realm) one if not specified.
|
farmbuyer@37
|
1334 local function reset_current_realm (opt_realmname)
|
farmbuyer@37
|
1335 local r = assert(opt_realmname or GetRealmName())
|
farmbuyer@37
|
1336 -- new .history table:
|
farmbuyer@37
|
1337 addon.history_all[r] = addon:_prep_new_history_category (nil, r)
|
farmbuyer@37
|
1338 addon.history = addon.history_all[r]
|
farmbuyer@37
|
1339 addon.hist_clean = nil
|
farmbuyer@37
|
1340 -- new .history.st table:
|
farmbuyer@37
|
1341 histST:OuroLoot_Refresh()
|
farmbuyer@37
|
1342 histST:SetData(addon.history.st)
|
farmbuyer@37
|
1343 end
|
farmbuyer@6
|
1344
|
farmbuyer@1
|
1345 tabs_OnGroupSelected["hist"] = function(container,specials)
|
farmbuyer@37
|
1346 local st_widget = GUI:Create("lib-st")
|
farmbuyer@37
|
1347 -- don't need _d:GetUserData("histST") here, as it's already a local
|
farmbuyer@37
|
1348 histST:OuroLoot_Refresh()
|
farmbuyer@37
|
1349 st_widget:WrapST(histST)
|
farmbuyer@37
|
1350 st_widget.head_offset = 15
|
farmbuyer@37
|
1351 st_widget.tail_offset = 0
|
farmbuyer@37
|
1352 container:SetLayout("Fill")
|
farmbuyer@37
|
1353 container:AddChild(st_widget)
|
farmbuyer@37
|
1354 setstatus(hist_normal_status)
|
farmbuyer@1
|
1355
|
farmbuyer@37
|
1356 local b
|
farmbuyer@37
|
1357 do
|
farmbuyer@37
|
1358 local realms,current = {},1
|
farmbuyer@37
|
1359 for realmname,histtable in pairs(addon.history_all) do
|
farmbuyer@37
|
1360 if type(histtable) == 'table' then
|
farmbuyer@37
|
1361 tinsert(realms,realmname)
|
farmbuyer@37
|
1362 if addon.history == histtable then current = #realms end
|
farmbuyer@4
|
1363 end
|
farmbuyer@4
|
1364 end
|
farmbuyer@37
|
1365 b = mkbutton("Dropdown", nil, "", [[Which realm to display]])
|
farmbuyer@1
|
1366 b:SetFullWidth(true)
|
farmbuyer@37
|
1367 b:SetLabel() -- required even when empty, see ace3 ticket #234
|
farmbuyer@37
|
1368 b:SetList(realms)
|
farmbuyer@37
|
1369 b:SetValue(current)
|
farmbuyer@37
|
1370 b:SetCallback("OnValueChanged", function(_dd,event,choice)
|
farmbuyer@37
|
1371 local r = realms[choice]
|
farmbuyer@37
|
1372 addon.history = addon:_prep_new_history_category (addon.history_all[r], r)
|
farmbuyer@37
|
1373 addon.hist_clean = nil
|
farmbuyer@6
|
1374 histST:OuroLoot_Refresh()
|
farmbuyer@6
|
1375 histST:SetData(addon.history.st)
|
farmbuyer@37
|
1376 -- Reset filters to normal
|
farmbuyer@37
|
1377 history_filter_who = nil
|
farmbuyer@37
|
1378 histST:SetFilter(history_filter_by_recent)
|
farmbuyer@37
|
1379 setstatus(hist_normal_status)
|
farmbuyer@1
|
1380 return addon:redisplay()
|
farmbuyer@1
|
1381 end)
|
farmbuyer@1
|
1382 specials:AddChild(b)
|
farmbuyer@37
|
1383 end
|
farmbuyer@1
|
1384
|
farmbuyer@37
|
1385 --[[ b = GUI:Create("Spacer") b:SetFullWidth(true) b:SetHeight(10) specials:AddChild(b) ]]
|
farmbuyer@4
|
1386
|
farmbuyer@37
|
1387 b = mkbutton("Regenerate",
|
farmbuyer@37
|
1388 [[Erases all history entries from the displayed realm, and regenerates it from current loot information.]])
|
farmbuyer@37
|
1389 b:SetFullWidth(true)
|
farmbuyer@37
|
1390 b:SetDisabled (#addon.history == 0)
|
farmbuyer@37
|
1391 b:SetCallback("OnClick", function(_b)
|
farmbuyer@37
|
1392 local dialog = StaticPopup_Show("OUROL_HIST_REGEN", addon.history.realm)
|
farmbuyer@37
|
1393 dialog.data = addon
|
farmbuyer@37
|
1394 dialog.data2 = function(_addon)
|
farmbuyer@37
|
1395 _addon:rewrite_history (_addon.history.realm)
|
farmbuyer@37
|
1396 histST:OuroLoot_Refresh()
|
farmbuyer@37
|
1397 histST:SetData(_addon.history.st)
|
farmbuyer@37
|
1398 end
|
farmbuyer@37
|
1399 end)
|
farmbuyer@37
|
1400 specials:AddChild(b)
|
farmbuyer@1
|
1401
|
farmbuyer@37
|
1402 b = mkbutton('hist_clear', "Clear Realm History",
|
farmbuyer@37
|
1403 [[|cffff1010Erases absolutely all> history entries from the displayed realm.]])
|
farmbuyer@37
|
1404 b:SetFullWidth(true)
|
farmbuyer@37
|
1405 b:SetCallback("OnClick", function (_b)
|
farmbuyer@37
|
1406 local dialog = StaticPopup_Show("OUROL_HIST_CLEAR", addon.history.realm)
|
farmbuyer@37
|
1407 dialog.data = addon
|
farmbuyer@37
|
1408 dialog.data2 = function(_addon)
|
farmbuyer@37
|
1409 reset_current_realm(_addon.history.realm)
|
farmbuyer@37
|
1410 end
|
farmbuyer@37
|
1411 end)
|
farmbuyer@37
|
1412 specials:AddChild(b)
|
farmbuyer@37
|
1413
|
farmbuyer@37
|
1414 b = mkbutton('hist_clear_all', "Clear All History",
|
farmbuyer@37
|
1415 [[|cffff1010Erases absolutely all> history entries from ALL realms.]])
|
farmbuyer@37
|
1416 b:SetFullWidth(true)
|
farmbuyer@37
|
1417 b:SetCallback("OnClick", function (_b)
|
farmbuyer@37
|
1418 local dialog = StaticPopup_Show("OUROL_HIST_CLEAR", "ALL realms")
|
farmbuyer@37
|
1419 dialog.data = addon
|
farmbuyer@37
|
1420 dialog.data2 = function(_addon)
|
farmbuyer@37
|
1421 _addon.history_all = {}
|
farmbuyer@37
|
1422 reset_current_realm()
|
farmbuyer@37
|
1423 end
|
farmbuyer@37
|
1424 end)
|
farmbuyer@37
|
1425 specials:AddChild(b)
|
farmbuyer@37
|
1426
|
farmbuyer@37
|
1427 b = mkbutton('hist_clear_old', "Clear Older",
|
farmbuyer@37
|
1428 [[Preserves only the latest loot entry for each player on the displayed realm, removing all earlier ones.]])
|
farmbuyer@37
|
1429 b:SetFullWidth(true)
|
farmbuyer@37
|
1430 b:SetCallback("OnClick", function (_b)
|
farmbuyer@37
|
1431 local dialog = StaticPopup_Show("OUROL_HIST_PREEN", addon.history.realm)
|
farmbuyer@37
|
1432 dialog.data = addon
|
farmbuyer@37
|
1433 dialog.data2 = function(_addon)
|
farmbuyer@37
|
1434 _addon:preen_history(_addon.history.realm)
|
farmbuyer@37
|
1435 _addon.hist_clean = nil
|
farmbuyer@37
|
1436 histST:OuroLoot_Refresh()
|
farmbuyer@37
|
1437 end
|
farmbuyer@37
|
1438 end)
|
farmbuyer@37
|
1439 specials:AddChild(b)
|
farmbuyer@1
|
1440 end
|
farmbuyer@37
|
1441 return tabs_OnGroupSelected["hist"](container,specials)
|
farmbuyer@1
|
1442 end
|
farmbuyer@1
|
1443
|
farmbuyer@37
|
1444
|
farmbuyer@6
|
1445 -- Tab 5: Help (content in verbage.lua)
|
farmbuyer@1
|
1446 do
|
farmbuyer@1
|
1447 local tabs_help_OnGroupSelected_func = function (treeg,event,category)
|
farmbuyer@1
|
1448 treeg:ReleaseChildren()
|
farmbuyer@1
|
1449 local txt = GUI:Create("Label")
|
farmbuyer@1
|
1450 txt:SetFullWidth(true)
|
farmbuyer@1
|
1451 txt:SetFontObject(GameFontNormal)--Highlight)
|
farmbuyer@1
|
1452 txt:SetText(addon.helptext[category])
|
farmbuyer@1
|
1453 local sf = GUI:Create("ScrollFrame")
|
farmbuyer@1
|
1454 local sfstat = _d:GetUserData("help tab scroll status") or {}
|
farmbuyer@1
|
1455 sf:SetStatusTable(sfstat)
|
farmbuyer@1
|
1456 _d:SetUserData("help tab scroll status",sfstat)
|
farmbuyer@1
|
1457 sf:SetLayout("Fill")
|
farmbuyer@1
|
1458 -- This forces the scrolling area to be bigger than the visible area; else
|
farmbuyer@1
|
1459 -- some of the text gets cut off.
|
farmbuyer@1
|
1460 sf.content:SetHeight(700)
|
farmbuyer@1
|
1461 sf:AddChild(txt)
|
farmbuyer@1
|
1462 treeg:AddChild(sf)
|
farmbuyer@1
|
1463 if treeg:GetUserData("help restore scroll") then
|
farmbuyer@1
|
1464 sfstat = sfstat.scrollvalue
|
farmbuyer@1
|
1465 if sfstat then sf:SetScroll(sfstat) end
|
farmbuyer@1
|
1466 treeg:SetUserData("help restore scroll", false)
|
farmbuyer@1
|
1467 else
|
farmbuyer@1
|
1468 sf:SetScroll(0)
|
farmbuyer@1
|
1469 end
|
farmbuyer@1
|
1470 end
|
farmbuyer@1
|
1471 tabs_OnGroupSelected["help"] = function(container,specials)
|
farmbuyer@1
|
1472 container:SetLayout("Fill")
|
farmbuyer@1
|
1473 local left = GUI:Create("TreeGroup")
|
farmbuyer@1
|
1474 local leftstat = _d:GetUserData("help tab select status")
|
farmbuyer@1
|
1475 or {treewidth=145}
|
farmbuyer@1
|
1476 left:SetStatusTable(leftstat)
|
farmbuyer@1
|
1477 _d:SetUserData("help tab select status",leftstat)
|
farmbuyer@1
|
1478 left:SetLayout("Fill")
|
farmbuyer@1
|
1479 left:SetFullWidth(true)
|
farmbuyer@1
|
1480 left:SetFullHeight(true)
|
farmbuyer@1
|
1481 left:EnableButtonTooltips(false)
|
farmbuyer@1
|
1482 left:SetTree(addon.helptree)
|
farmbuyer@1
|
1483 left:SetCallback("OnGroupSelected", tabs_help_OnGroupSelected_func)
|
farmbuyer@1
|
1484 container:AddChild(left)
|
farmbuyer@1
|
1485 leftstat = leftstat.selected
|
farmbuyer@1
|
1486 if leftstat then
|
farmbuyer@1
|
1487 left:SetUserData("help restore scroll", true)
|
farmbuyer@1
|
1488 left:SelectByValue(leftstat)
|
farmbuyer@1
|
1489 else
|
farmbuyer@1
|
1490 left:SelectByValue("basic")
|
farmbuyer@1
|
1491 end
|
farmbuyer@1
|
1492 end
|
farmbuyer@1
|
1493 end
|
farmbuyer@1
|
1494
|
farmbuyer@37
|
1495
|
farmbuyer@1
|
1496 -- Tab 6: Options / Advanced
|
farmbuyer@1
|
1497 do
|
farmbuyer@1
|
1498 local function mkoption (opt, label, width, desc, opt_func)
|
farmbuyer@1
|
1499 local w = mkbutton("CheckBoxSmallLabel", nil, "", desc)
|
farmbuyer@1
|
1500 w:SetRelativeWidth(width)
|
farmbuyer@1
|
1501 w:SetType("checkbox")
|
farmbuyer@1
|
1502 w:SetLabel(label)
|
farmbuyer@1
|
1503 if opt then
|
farmbuyer@1
|
1504 w:SetValue(OuroLootSV_opts[opt])
|
farmbuyer@1
|
1505 w:SetCallback("OnValueChanged", opt_func or (function(_w,event,value)
|
farmbuyer@1
|
1506 OuroLootSV_opts[opt] = value
|
farmbuyer@1
|
1507 end))
|
farmbuyer@1
|
1508 end
|
farmbuyer@1
|
1509 return w
|
farmbuyer@1
|
1510 end
|
farmbuyer@1
|
1511
|
farmbuyer@1
|
1512 local function adv_careful_OnTextChanged (ebox,event,value)
|
farmbuyer@1
|
1513 -- The EditBox widget's code will call an internal ShowButton routine
|
farmbuyer@1
|
1514 -- after this callback returns. ShowButton will test for this flag:
|
farmbuyer@1
|
1515 ebox:DisableButton (value == "")
|
farmbuyer@1
|
1516 end
|
farmbuyer@1
|
1517
|
farmbuyer@1
|
1518 -- Like the first tab, we use a pair of functions; first and repeating.
|
farmbuyer@1
|
1519 local function adv_real (container, specials)
|
farmbuyer@1
|
1520 local grp, w
|
farmbuyer@1
|
1521
|
farmbuyer@1
|
1522 grp = GUI:Create("InlineGroup")
|
farmbuyer@1
|
1523 grp:SetLayout("Flow")
|
farmbuyer@1
|
1524 grp:PauseLayout()
|
farmbuyer@1
|
1525 grp:SetFullWidth(true)
|
farmbuyer@1
|
1526 grp:SetTitle("Debugging/Testing Options [not saved across sessions]")
|
farmbuyer@1
|
1527
|
farmbuyer@1
|
1528 w = mkbutton("EditBox", 'comm_ident', addon.ident,
|
farmbuyer@1
|
1529 [[Disable the addon, change this field (click Okay or press Enter), then re-enable the addon.]])
|
farmbuyer@1
|
1530 w:SetRelativeWidth(0.2)
|
farmbuyer@1
|
1531 w:SetLabel("Addon channel ID")
|
farmbuyer@1
|
1532 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@1
|
1533 w:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@1
|
1534 -- if they set it to blank spaces, they're boned. oh well.
|
farmbuyer@1
|
1535 -- Re-enabling will take care of propogating this new value.
|
farmbuyer@1
|
1536 addon.ident = (value == "") and "OuroLoot2" or value
|
farmbuyer@1
|
1537 _w:SetText(addon.ident)
|
farmbuyer@1
|
1538 addon:Print("Addon channel ID set to '".. addon.ident.. "' for rebroadcasting and listening.")
|
farmbuyer@1
|
1539 end)
|
farmbuyer@1
|
1540 w:SetDisabled(addon.enabled or addon.rebroadcast)
|
farmbuyer@1
|
1541 grp:AddChild(w)
|
farmbuyer@1
|
1542
|
farmbuyer@40
|
1543 w = mkbutton("EditBox", nil, addon.recent_messages.ttl, [[comm cache TTL]])
|
farmbuyer@1
|
1544 w:SetRelativeWidth(0.05)
|
farmbuyer@1
|
1545 w:SetLabel("ttl")
|
farmbuyer@1
|
1546 w:SetCallback("OnTextChanged", adv_careful_OnTextChanged)
|
farmbuyer@1
|
1547 w:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@1
|
1548 value = tonumber(value) or addon.recent_messages.ttl
|
farmbuyer@1
|
1549 addon.recent_messages.ttl = value
|
farmbuyer@1
|
1550 _w:SetText(tostring(value))
|
farmbuyer@1
|
1551 end)
|
farmbuyer@1
|
1552 grp:AddChild(w)
|
farmbuyer@1
|
1553
|
farmbuyer@1
|
1554 w = mkbutton("load nsaab1548", [[Cursed Darkhound]])
|
farmbuyer@1
|
1555 w:SetRelativeWidth(0.25)
|
farmbuyer@1
|
1556 w:SetCallback("OnClick", function()
|
farmbuyer@1
|
1557 for i, v in ipairs(DBM.AddOns) do
|
farmbuyer@1
|
1558 if v.modId == "DBM-NotScaryAtAll" then
|
farmbuyer@1
|
1559 DBM:LoadMod(v)
|
farmbuyer@1
|
1560 break
|
farmbuyer@1
|
1561 end
|
farmbuyer@1
|
1562 end
|
farmbuyer@1
|
1563 local mod = DBM:GetModByName("NotScaryAtAll")
|
farmbuyer@1
|
1564 if mod then
|
farmbuyer@1
|
1565 mod:EnableMod()
|
farmbuyer@1
|
1566 addon:Print("Now tracking ID",mod.creatureId)
|
farmbuyer@1
|
1567 else addon:Print("Can do nothing; DBM testing mod wasn't loaded.") end
|
farmbuyer@1
|
1568 end)
|
farmbuyer@5
|
1569 w:SetDisabled(addon.bossmod_registered ~= 'DBM')
|
farmbuyer@1
|
1570 grp:AddChild(w)
|
farmbuyer@1
|
1571
|
farmbuyer@1
|
1572 w = mkbutton("GC", [[full GC cycle]])
|
farmbuyer@1
|
1573 w:SetRelativeWidth(0.1)
|
farmbuyer@1
|
1574 w:SetCallback("OnClick", function() collectgarbage() end)
|
farmbuyer@1
|
1575 grp:AddChild(w)
|
farmbuyer@1
|
1576
|
farmbuyer@20
|
1577 --[==[ this has been well and truly debugged by now
|
farmbuyer@1
|
1578 w = mkbutton("EditBox", nil, addon.loot_pattern:sub(17), [[]])
|
farmbuyer@1
|
1579 w:SetRelativeWidth(0.35)
|
farmbuyer@1
|
1580 w:SetLabel("CML pattern suffix")
|
farmbuyer@1
|
1581 w:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@1
|
1582 addon.loot_pattern = addon.loot_pattern:sub(1,16) .. value
|
farmbuyer@1
|
1583 end)
|
farmbuyer@20
|
1584 grp:AddChild(w) ]==]
|
farmbuyer@20
|
1585
|
farmbuyer@20
|
1586 w = GUI:Create("Spacer") w:SetFullWidth(true) w:SetHeight(1) grp:AddChild(w)
|
farmbuyer@1
|
1587
|
farmbuyer@1
|
1588 local simple = GUI:Create("SimpleGroup")
|
farmbuyer@1
|
1589 simple:SetLayout("List")
|
farmbuyer@1
|
1590 simple:SetRelativeWidth(0.3)
|
farmbuyer@1
|
1591 w = GUI:Create("CheckBoxSmallLabel")
|
farmbuyer@1
|
1592 w:SetFullWidth(true)
|
farmbuyer@1
|
1593 w:SetType("checkbox")
|
farmbuyer@19
|
1594 w:SetLabel("debug toggle")
|
farmbuyer@1
|
1595 w:SetValue(addon.DEBUG_PRINT)
|
farmbuyer@19
|
1596 w:SetCallback("OnValueChanged", function(_w,event,value)
|
farmbuyer@19
|
1597 addon.DEBUG_PRINT = value
|
farmbuyer@19
|
1598 addon:redisplay()
|
farmbuyer@19
|
1599 end)
|
farmbuyer@19
|
1600 simple:AddChild(w)
|
farmbuyer@19
|
1601 w = GUI:Create("CheckBoxSmallLabel")
|
farmbuyer@19
|
1602 w:SetFullWidth(true)
|
farmbuyer@19
|
1603 w:SetType("checkbox")
|
farmbuyer@19
|
1604 w:SetLabel("GOP history mode")
|
farmbuyer@19
|
1605 w:SetValue(false)
|
farmbuyer@19
|
1606 w:SetCallback("OnValueChanged", function(_w,event,value) addon.history_suppress = value end)
|
farmbuyer@1
|
1607 simple:AddChild(w)
|
farmbuyer@1
|
1608 w = mkbutton("Clear All & Reload",
|
farmbuyer@1
|
1609 [[No confirmation! |cffff1010Erases absolutely all> Ouro Loot saved variables and reloads the UI.]])
|
farmbuyer@1
|
1610 w:SetFullWidth(true)
|
farmbuyer@1
|
1611 w:SetCallback("OnClick", function()
|
farmbuyer@8
|
1612 addon:_clear_SVs() -- reloads
|
farmbuyer@1
|
1613 end)
|
farmbuyer@1
|
1614 simple:AddChild(w)
|
farmbuyer@1
|
1615 grp:AddChild(simple)
|
farmbuyer@1
|
1616
|
farmbuyer@1
|
1617 simple = GUI:Create("SimpleGroup")
|
farmbuyer@1
|
1618 simple:SetLayout("List")
|
farmbuyer@1
|
1619 simple:SetRelativeWidth(0.5)
|
farmbuyer@1
|
1620 for d,v in pairs(addon.debug) do
|
farmbuyer@1
|
1621 w = GUI:Create("CheckBoxSmallLabel")
|
farmbuyer@1
|
1622 w:SetFullWidth(true)
|
farmbuyer@1
|
1623 w:SetType("checkbox")
|
farmbuyer@1
|
1624 w:SetLabel(d)
|
farmbuyer@1
|
1625 if d == "notraid" then
|
farmbuyer@39
|
1626 w:SetDescription[[Tick this before enabling to make the addon work outside of raid groups]]
|
farmbuyer@19
|
1627 else
|
farmbuyer@40
|
1628 if d == "alsolog" then
|
farmbuyer@40
|
1629 w:SetDescription[[Also log all debug messages to disk. See print_log.lua in the addon folder for later viewing.]]
|
farmbuyer@40
|
1630 end
|
farmbuyer@19
|
1631 w:SetDisabled(not addon.DEBUG_PRINT)
|
farmbuyer@1
|
1632 end
|
farmbuyer@1
|
1633 w:SetValue(v)
|
farmbuyer@1
|
1634 w:SetCallback("OnValueChanged", function(_w,event,value) addon.debug[d] = value end)
|
farmbuyer@1
|
1635 simple:AddChild(w)
|
farmbuyer@1
|
1636 end
|
farmbuyer@1
|
1637 grp:AddChild(simple)
|
farmbuyer@10
|
1638
|
farmbuyer@10
|
1639 simple = GUI:Create("SimpleGroup")
|
farmbuyer@10
|
1640 simple:SetLayout("Flow")
|
farmbuyer@10
|
1641 simple:SetRelativeWidth(0.85)
|
farmbuyer@10
|
1642 w = mkbutton("MidS-H", [[not exactly an Easter egg, with sound]])
|
farmbuyer@10
|
1643 w:SetRelativeWidth(0.15)
|
farmbuyer@10
|
1644 w:SetCallback("OnClick", function()
|
farmbuyer@10
|
1645 PlaySoundFile[[Sound\Music\WorldEvents\HordeFirepole.mp3]]
|
farmbuyer@10
|
1646 end)
|
farmbuyer@10
|
1647 simple:AddChild(w)
|
farmbuyer@10
|
1648 w = mkbutton("MidS-A", [[not exactly an Easter egg, with sound]])
|
farmbuyer@10
|
1649 w:SetRelativeWidth(0.15)
|
farmbuyer@10
|
1650 w:SetCallback("OnClick", function()
|
farmbuyer@10
|
1651 PlaySoundFile[[Sound\Music\WorldEvents\AllianceFirepole.mp3]]
|
farmbuyer@10
|
1652 end)
|
farmbuyer@10
|
1653 simple:AddChild(w)
|
farmbuyer@10
|
1654 grp:AddChild(simple)
|
farmbuyer@10
|
1655
|
farmbuyer@1
|
1656 grp:ResumeLayout()
|
farmbuyer@1
|
1657 container:AddChild(grp)
|
farmbuyer@1
|
1658 GUI:ClearFocus()
|
farmbuyer@1
|
1659 end
|
farmbuyer@1
|
1660
|
farmbuyer@1
|
1661 -- Initial lower panel function
|
farmbuyer@1
|
1662 local function adv_lower (container, specials)
|
farmbuyer@1
|
1663 local speedbump = GUI:Create("InteractiveLabel")
|
farmbuyer@1
|
1664 speedbump:SetFullWidth(true)
|
farmbuyer@1
|
1665 speedbump:SetFontObject(GameFontHighlightLarge)
|
farmbuyer@1
|
1666 speedbump:SetImage("Interface\\DialogFrame\\DialogAlertIcon")
|
farmbuyer@1
|
1667 speedbump:SetImageSize(50,50)
|
farmbuyer@1
|
1668 speedbump:SetText("The debugging/testing settings on the rest of this panel can"
|
farmbuyer@1
|
1669 .." seriously bork up the addon if you make a mistake. If you're okay"
|
farmbuyer@1
|
1670 .." with the possibility of losing data, click this warning to load the panel.")
|
farmbuyer@1
|
1671 speedbump:SetCallback("OnClick", function (_sb)
|
farmbuyer@1
|
1672 adv_lower = adv_real
|
farmbuyer@1
|
1673 return addon:redisplay()
|
farmbuyer@1
|
1674 --return tabs_OnGroupSelected_func(container.parent,"OnGroupSelected","opt")
|
farmbuyer@1
|
1675 end)
|
farmbuyer@1
|
1676 container:AddChild(speedbump)
|
farmbuyer@1
|
1677 end
|
farmbuyer@1
|
1678
|
farmbuyer@1
|
1679 tabs_OnGroupSelected["opt"] = function(container,specials)
|
farmbuyer@1
|
1680 --container:SetLayout("List")
|
farmbuyer@1
|
1681 container:SetLayout("Fill")
|
farmbuyer@1
|
1682 local scroll, grp, w
|
farmbuyer@1
|
1683
|
farmbuyer@1
|
1684 scroll = GUI:Create("ScrollFrame")
|
farmbuyer@1
|
1685 scroll:SetLayout("Flow")
|
farmbuyer@1
|
1686
|
farmbuyer@1
|
1687 grp = GUI:Create("InlineGroup")
|
farmbuyer@1
|
1688 grp:SetLayout("Flow")
|
farmbuyer@1
|
1689 grp:SetFullWidth(true)
|
farmbuyer@1
|
1690 grp:SetTitle("User Options [these are saved across sessions]")
|
farmbuyer@1
|
1691
|
farmbuyer@10
|
1692 -- The relative width fields used to be done to take up less vertical space, but
|
farmbuyer@10
|
1693 -- that turned out to look messy. Now they're just a straight line for the most part.
|
farmbuyer@10
|
1694
|
farmbuyer@1
|
1695 -- reminder popup
|
farmbuyer@16
|
1696 w = mkoption ('popup_on_join', "Show reminder popup", 0.49,
|
farmbuyer@1
|
1697 [[When joining a raid and not already tracking, display a dialog asking for instructions.]])
|
farmbuyer@1
|
1698 grp:AddChild(w)
|
farmbuyer@1
|
1699
|
farmbuyer@1
|
1700 -- toggle scroll-to-bottom on first tab
|
farmbuyer@16
|
1701 w = mkoption('scroll_to_bottom', "Scroll to bottom when opening display", 0.49,
|
farmbuyer@1
|
1702 [[Scroll to the bottom of the loot window (most recent entries) when displaying the GUI.]])
|
farmbuyer@1
|
1703 grp:AddChild(w)
|
farmbuyer@1
|
1704
|
farmbuyer@1
|
1705 -- /loot option
|
farmbuyer@16
|
1706 w = mkoption('register_slashloot', "Register /loot slash command on login", 0.49,
|
farmbuyer@1
|
1707 [[Register "/loot" as a slash command in addition to the normal "/ouroloot". Relog to take effect.]])
|
farmbuyer@1
|
1708 grp:AddChild(w)
|
farmbuyer@1
|
1709
|
farmbuyer@1
|
1710 -- chatty mode
|
farmbuyer@16
|
1711 w = mkoption('chatty_on_kill', "Be chatty on boss kill", 0.49,
|
farmbuyer@1
|
1712 [[Print something to chat output when DBM tells Ouro Loot about a successful boss kill.]])
|
farmbuyer@1
|
1713 grp:AddChild(w)
|
farmbuyer@1
|
1714
|
farmbuyer@1
|
1715 -- less noise in main panel
|
farmbuyer@16
|
1716 w = mkoption('no_tracking_wipes', "Do not track wipes", 0.49,
|
farmbuyer@1
|
1717 [[Do not add 'wipe' entries on the main loot grid, or generate any text for them.]])
|
farmbuyer@1
|
1718 grp:AddChild(w)
|
farmbuyer@1
|
1719
|
farmbuyer@1
|
1720 -- cutesy abbrevs
|
farmbuyer@16
|
1721 w = mkoption('snarky_boss', "Use snarky boss names", 0.49,
|
farmbuyer@1
|
1722 [[Irreverent replacement names for boss events.]])
|
farmbuyer@1
|
1723 grp:AddChild(w)
|
farmbuyer@1
|
1724
|
farmbuyer@57
|
1725 -- LOD plugins in all cases
|
farmbuyer@57
|
1726 w = mkoption('display_disabled_LODs', "Include disabled plugins", 0.49,
|
farmbuyer@57
|
1727 [[Show loadable plugins even if they've been disabled (and offer to enable them). Relog to take effect.]])
|
farmbuyer@57
|
1728 grp:AddChild(w)
|
farmbuyer@57
|
1729
|
farmbuyer@1
|
1730 -- possible keybindings
|
farmbuyer@1
|
1731 do
|
farmbuyer@1
|
1732 local pair = GUI:Create("SimpleGroup")
|
farmbuyer@1
|
1733 pair:SetLayout("Flow")
|
farmbuyer@10
|
1734 pair:SetRelativeWidth(0.95)
|
farmbuyer@1
|
1735 local editbox, checkbox
|
farmbuyer@1
|
1736 editbox = mkbutton("EditBox", nil, OuroLootSV_opts.keybinding_text,
|
farmbuyer@1
|
1737 [[Keybinding text format is fragile! Relog to take effect.]])
|
farmbuyer@1
|
1738 editbox:SetRelativeWidth(0.5)
|
farmbuyer@1
|
1739 editbox:SetLabel("Keybinding text")
|
farmbuyer@1
|
1740 editbox:SetCallback("OnEnterPressed", function(_w,event,value)
|
farmbuyer@1
|
1741 OuroLootSV_opts.keybinding_text = value
|
farmbuyer@1
|
1742 end)
|
farmbuyer@1
|
1743 editbox:SetDisabled(not OuroLootSV_opts.keybinding)
|
farmbuyer@1
|
1744 checkbox = mkoption('keybinding', "Register keybinding", 0.5,
|
farmbuyer@1
|
1745 [[Register a keybinding to toggle the loot display. Relog to take effect.]],
|
farmbuyer@1
|
1746 function (_w,_,value)
|
farmbuyer@1
|
1747 OuroLootSV_opts.keybinding = value
|
farmbuyer@1
|
1748 editbox:SetDisabled(not OuroLootSV_opts.keybinding)
|
farmbuyer@1
|
1749 end)
|
farmbuyer@1
|
1750 pair:AddChild(checkbox)
|
farmbuyer@1
|
1751 pair:AddChild(editbox)
|
farmbuyer@1
|
1752 grp:AddChild(pair)
|
farmbuyer@1
|
1753 end
|
farmbuyer@1
|
1754
|
farmbuyer@3
|
1755 -- boss mod selection
|
farmbuyer@3
|
1756 w = GUI:Create("Spacer")
|
farmbuyer@3
|
1757 w:SetFullWidth(true)
|
farmbuyer@3
|
1758 w:SetHeight(20)
|
farmbuyer@3
|
1759 grp:AddChild(w)
|
farmbuyer@3
|
1760 do
|
farmbuyer@3
|
1761 local list = {}
|
farmbuyer@3
|
1762 local current
|
farmbuyer@3
|
1763 for k,v in ipairs(addon.bossmods) do
|
farmbuyer@3
|
1764 list[k] = v.n
|
farmbuyer@3
|
1765 if v.n == OuroLootSV_opts.bossmod then
|
farmbuyer@3
|
1766 current = k
|
farmbuyer@3
|
1767 end
|
farmbuyer@3
|
1768 end
|
farmbuyer@3
|
1769 w = mkbutton("Dropdown", nil, "", [[Which 'boss mod' to use.]])
|
farmbuyer@3
|
1770 w:SetRelativeWidth(0.2)
|
farmbuyer@3
|
1771 w:SetLabel("Boss Mod:")
|
farmbuyer@3
|
1772 w:SetList(list)
|
farmbuyer@3
|
1773 w:SetValue(current)
|
farmbuyer@3
|
1774 w:SetCallback("OnValueChanged", function(_w,event,choice)
|
farmbuyer@3
|
1775 OuroLootSV_opts.bossmod = list[choice]
|
farmbuyer@3
|
1776 end)
|
farmbuyer@3
|
1777 grp:AddChild(w)
|
farmbuyer@3
|
1778 end
|
farmbuyer@3
|
1779
|
farmbuyer@1
|
1780 -- item filter
|
farmbuyer@1
|
1781 w = GUI:Create("Spacer")
|
farmbuyer@1
|
1782 w:SetFullWidth(true)
|
farmbuyer@1
|
1783 w:SetHeight(20)
|
farmbuyer@1
|
1784 grp:AddChild(w)
|
farmbuyer@1
|
1785 do
|
farmbuyer@1
|
1786 local list = {}
|
farmbuyer@54
|
1787 local cache_warn, cache_warned = false, false
|
farmbuyer@1
|
1788 for id in pairs(OuroLootSV_opts.itemfilter) do
|
farmbuyer@1
|
1789 local iname, _, iquality = GetItemInfo(id)
|
farmbuyer@2
|
1790 if iname then
|
farmbuyer@11
|
1791 list[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@54
|
1792 else
|
farmbuyer@54
|
1793 cache_warn = true
|
farmbuyer@2
|
1794 end
|
farmbuyer@1
|
1795 end
|
farmbuyer@1
|
1796 w = GUI:Create("EditBoxDropDown")
|
farmbuyer@1
|
1797 w:SetRelativeWidth(0.4)
|
farmbuyer@1
|
1798 w:SetText("Item filter")
|
farmbuyer@1
|
1799 w:SetEditBoxTooltip("Link items which should no longer be tracked.")
|
farmbuyer@1
|
1800 w:SetList(list)
|
farmbuyer@1
|
1801 w:SetCallback("OnTextEnterPressed", function(_w, _, text)
|
farmbuyer@1
|
1802 local iname, ilink, iquality = GetItemInfo(strtrim(text))
|
farmbuyer@1
|
1803 if not iname then
|
farmbuyer@1
|
1804 return addon:Print("Error: %s is not a valid item name/link!", text)
|
farmbuyer@1
|
1805 end
|
farmbuyer@1
|
1806 local id = tonumber(ilink:match("item:(%d+)"))
|
farmbuyer@11
|
1807 list[id] = ITEM_QUALITY_COLORS[iquality].hex .. iname .. "|r"
|
farmbuyer@1
|
1808 OuroLootSV_opts.itemfilter[id] = true
|
farmbuyer@1
|
1809 addon:Print("Now filtering out", ilink)
|
farmbuyer@1
|
1810 end)
|
farmbuyer@1
|
1811 w:SetCallback("OnListItemClicked", function(_w, _, key_id, val_name)
|
farmbuyer@1
|
1812 --local ilink = select(2,GetItemInfo(key_id))
|
farmbuyer@1
|
1813 OuroLootSV_opts.itemfilter[tonumber(key_id)] = nil
|
farmbuyer@1
|
1814 --addon:Print("No longer filtering out", ilink)
|
farmbuyer@1
|
1815 addon:Print("No longer filtering out", val_name)
|
farmbuyer@1
|
1816 end)
|
farmbuyer@54
|
1817 w:SetCallback("OnDropdownShown", function()
|
farmbuyer@54
|
1818 if cache_warn and not cache_warned then
|
farmbuyer@54
|
1819 cache_warned = true
|
farmbuyer@54
|
1820 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
|
1821 end
|
farmbuyer@54
|
1822 end)
|
farmbuyer@1
|
1823 grp:AddChild(w)
|
farmbuyer@1
|
1824 end
|
farmbuyer@1
|
1825
|
farmbuyer@1
|
1826 addon.sender_list.sort()
|
farmbuyer@1
|
1827 if #addon.sender_list.namesI > 0 then
|
farmbuyer@1
|
1828 local senders = table.concat(addon.sender_list.namesI,'\n') -- sigh
|
farmbuyer@1
|
1829 -- If 39 other people in the raid are running this, the label will
|
farmbuyer@1
|
1830 -- explode... is it likely enough to care about? No.
|
farmbuyer@1
|
1831 w = GUI:Create("Spacer")
|
farmbuyer@1
|
1832 w:SetFullWidth(true)
|
farmbuyer@1
|
1833 w:SetHeight(20)
|
farmbuyer@1
|
1834 grp:AddChild(w)
|
farmbuyer@1
|
1835 w = GUI:Create("Label")
|
farmbuyer@1
|
1836 w:SetRelativeWidth(0.4)
|
farmbuyer@11
|
1837 w:SetText(ITEM_QUALITY_COLORS[3].hex .."Echo from latest ping:|r\n"..senders)
|
farmbuyer@1
|
1838 grp:AddChild(w)
|
farmbuyer@1
|
1839 end
|
farmbuyer@1
|
1840
|
farmbuyer@6
|
1841 scroll:AddChild(grp)
|
farmbuyer@6
|
1842
|
farmbuyer@1
|
1843 w = mkbutton("ReloadUI", [[Does what you think it does. Loot information is written out and restored.]])
|
farmbuyer@1
|
1844 w:SetFullWidth(true)
|
farmbuyer@1
|
1845 w:SetCallback("OnClick", ReloadUI)
|
farmbuyer@1
|
1846 specials:AddChild(w)
|
farmbuyer@1
|
1847
|
farmbuyer@1
|
1848 w = mkbutton("Ping!",
|
farmbuyer@1
|
1849 [[Asks other raid users for their addon version and current status. Results displayed on User Options panel.]])
|
farmbuyer@1
|
1850 w:SetFullWidth(true)
|
farmbuyer@1
|
1851 w:SetCallback("OnClick", function(_w)
|
farmbuyer@1
|
1852 _w:SetText("5... 4... 3...")
|
farmbuyer@1
|
1853 _w:SetDisabled(true)
|
farmbuyer@23
|
1854 addon:DoPing()
|
farmbuyer@1
|
1855 addon:ScheduleTimer(function(b)
|
farmbuyer@1
|
1856 if b:IsVisible() then
|
farmbuyer@1
|
1857 return addon:redisplay()
|
farmbuyer@1
|
1858 --return tabs_OnGroupSelected_func(container,"OnGroupSelected","opt")
|
farmbuyer@1
|
1859 end
|
farmbuyer@1
|
1860 end, 5, _w)
|
farmbuyer@1
|
1861 end)
|
farmbuyer@1
|
1862 specials:AddChild(w)
|
farmbuyer@1
|
1863
|
farmbuyer@1
|
1864 -- Add appropriate lower panel
|
farmbuyer@1
|
1865 adv_lower (scroll, specials)
|
farmbuyer@1
|
1866
|
farmbuyer@1
|
1867 -- Finish up
|
farmbuyer@1
|
1868 container:AddChild(scroll)
|
farmbuyer@1
|
1869 end
|
farmbuyer@1
|
1870 end
|
farmbuyer@1
|
1871
|
farmbuyer@1
|
1872
|
farmbuyer@1
|
1873 -- Simply to avoid recreating the same function over and over
|
farmbuyer@1
|
1874 local tabs_OnGroupSelected_func_args = { [2] = "OnGroupSelected" }
|
farmbuyer@1
|
1875 tabs_OnGroupSelected_func = function (tabs,event,group)
|
farmbuyer@1
|
1876 tabs_OnGroupSelected_func_args[1] = tabs
|
farmbuyer@1
|
1877 tabs_OnGroupSelected_func_args[3] = group
|
farmbuyer@1
|
1878 tabs:ReleaseChildren()
|
farmbuyer@1
|
1879 local spec = tabs:GetUserData("special buttons group")
|
farmbuyer@1
|
1880 spec:ReleaseChildren()
|
farmbuyer@1
|
1881 local h = GUI:Create("Heading")
|
farmbuyer@1
|
1882 h:SetFullWidth(true)
|
farmbuyer@1
|
1883 h:SetText(_tabtexts[group].title)
|
farmbuyer@1
|
1884 spec:AddChild(h)
|
farmbuyer@1
|
1885 return tabs_OnGroupSelected[group](tabs,spec,group)
|
farmbuyer@1
|
1886 --[====[
|
farmbuyer@1
|
1887 Unfortunately, :GetHeight() called on anything useful out of a TabGroup
|
farmbuyer@1
|
1888 returns the static default size (about 50 pixels) until the refresh
|
farmbuyer@1
|
1889 cycle *after* all the frames are shown. Trying to fix it up after a
|
farmbuyer@1
|
1890 single OnUpdate doesn't work either. So for now it's all hardcoded.
|
farmbuyer@1
|
1891
|
farmbuyer@1
|
1892 Using this to determine the actual height of the usable area.
|
farmbuyer@1
|
1893 366 pixels
|
farmbuyer@1
|
1894 if group == "eoi" then
|
farmbuyer@1
|
1895 local stframe = tabs.children[1].frame
|
farmbuyer@1
|
1896 print(stframe:GetTop(),"-",stframe:GetBottom(),"=",
|
farmbuyer@1
|
1897 stframe:GetTop()-stframe:GetBottom())
|
farmbuyer@1
|
1898 print(stframe:GetRight(),"-",stframe:GetLeft(),"=",
|
farmbuyer@1
|
1899 stframe:GetRight()-stframe:GetLeft())
|
farmbuyer@1
|
1900 end
|
farmbuyer@1
|
1901 ]====]
|
farmbuyer@1
|
1902 end
|
farmbuyer@1
|
1903
|
farmbuyer@1
|
1904 --[[
|
farmbuyer@1
|
1905 mkbutton ("WidgetType", 'display key', "Text On Widget", "the mouseover display text")
|
farmbuyer@1
|
1906 mkbutton ( [Button] 'display key', "Text On Widget", "the mouseover display text")
|
farmbuyer@1
|
1907 mkbutton ( [Button] [text] "Text On Widget", "the mouseover display text")
|
farmbuyer@1
|
1908 ]]
|
farmbuyer@1
|
1909 do
|
farmbuyer@1
|
1910 local replacement_colors = { ["+"]="|cffffffff", ["<"]="|cff00ff00", [">"]="|r" }
|
farmbuyer@1
|
1911 function mkbutton (opt_widget_type, opt_key, label, status)
|
farmbuyer@1
|
1912 if not label then
|
farmbuyer@1
|
1913 opt_widget_type, opt_key, label, status = "Button", opt_widget_type, opt_widget_type, opt_key
|
farmbuyer@1
|
1914 elseif not status then
|
farmbuyer@1
|
1915 opt_widget_type, opt_key, label, status = "Button", opt_widget_type, opt_key, label
|
farmbuyer@1
|
1916 end
|
farmbuyer@47
|
1917 local button = assert(GUI:Create(opt_widget_type))
|
farmbuyer@1
|
1918 if button.SetText then button:SetText(tostring(label)) end
|
farmbuyer@1
|
1919 status = status:gsub("[%+<>]",replacement_colors)
|
farmbuyer@1
|
1920 button:SetCallback("OnEnter", function() setstatus(status) end) -- maybe factor that closure out
|
farmbuyer@1
|
1921 button:SetCallback("OnLeave", statusy_OnLeave)
|
farmbuyer@1
|
1922 -- retrieval key may be specified as nil if all the parameters are given
|
farmbuyer@1
|
1923 if opt_key then _d:SetUserData (opt_key, button) end
|
farmbuyer@1
|
1924 return button
|
farmbuyer@1
|
1925 end
|
farmbuyer@1
|
1926 end
|
farmbuyer@1
|
1927
|
farmbuyer@1
|
1928 --[[
|
farmbuyer@1
|
1929 Creates the main window.
|
farmbuyer@1
|
1930 ]]
|
farmbuyer@1
|
1931 function addon:BuildMainDisplay (opt_tabselect)
|
farmbuyer@1
|
1932 if self.display then
|
farmbuyer@1
|
1933 -- try to get everything to update, rebuild, refresh... ugh, no
|
farmbuyer@1
|
1934 self.display:Hide()
|
farmbuyer@1
|
1935 end
|
farmbuyer@1
|
1936
|
farmbuyer@25
|
1937 -- This probably causes taint... hm.
|
farmbuyer@25
|
1938 local prev_fade_time = UIDROPDOWNMENU_SHOW_TIME
|
farmbuyer@25
|
1939 UIDROPDOWNMENU_SHOW_TIME = 4
|
farmbuyer@25
|
1940
|
farmbuyer@47
|
1941 if dirty_tabs then
|
farmbuyer@47
|
1942 self:gui_init(g_loot) -- pointer known to be good by now
|
farmbuyer@47
|
1943 self:zero_printed_fenceposts()
|
farmbuyer@47
|
1944 end
|
farmbuyer@47
|
1945
|
farmbuyer@1
|
1946 local display = GUI:Create("Frame")
|
farmbuyer@1
|
1947 if _d then
|
farmbuyer@1
|
1948 display:SetUserData("eoiST",_d) -- warning! warning! kludge detected!
|
farmbuyer@1
|
1949 end
|
farmbuyer@1
|
1950 _d = display
|
farmbuyer@1
|
1951 self.display = display
|
farmbuyer@17
|
1952 display:SetTitle(window_title)
|
farmbuyer@1
|
1953 display:SetStatusText(self.status_text)
|
farmbuyer@1
|
1954 display:SetLayout("Flow")
|
farmbuyer@16
|
1955 display:SetStatusTable{width=900,height=550} -- default height is 500
|
farmbuyer@47
|
1956 display:EnableResize(false)
|
farmbuyer@1
|
1957 display:SetCallback("OnClose", function(_display)
|
farmbuyer@25
|
1958 UIDROPDOWNMENU_SHOW_TIME = prev_fade_time
|
farmbuyer@1
|
1959 _d = _display:GetUserData("eoiST")
|
farmbuyer@1
|
1960 self.display = nil
|
farmbuyer@1
|
1961 GUI:Release(_display)
|
farmbuyer@6
|
1962 flib.clear()
|
farmbuyer@1
|
1963 collectgarbage()
|
farmbuyer@1
|
1964 end)
|
farmbuyer@1
|
1965
|
farmbuyer@1
|
1966 ----- Right-hand panel
|
farmbuyer@1
|
1967 local rhs_width = 0.20
|
farmbuyer@1
|
1968 local control = GUI:Create("SimpleGroup")
|
farmbuyer@1
|
1969 control:SetLayout("Flow")
|
farmbuyer@1
|
1970 control:SetRelativeWidth(rhs_width)
|
farmbuyer@1
|
1971 control.alignoffset = 25
|
farmbuyer@1
|
1972 control:PauseLayout()
|
farmbuyer@1
|
1973 local h,b
|
farmbuyer@1
|
1974
|
farmbuyer@1
|
1975 --- Main ---
|
farmbuyer@1
|
1976 h = GUI:Create("Heading")
|
farmbuyer@1
|
1977 h:SetFullWidth(true)
|
farmbuyer@1
|
1978 h:SetText("Main")
|
farmbuyer@1
|
1979 control:AddChild(h)
|
farmbuyer@1
|
1980
|
farmbuyer@1
|
1981 do
|
farmbuyer@1
|
1982 b = mkbutton("Dropdown", nil, "",
|
farmbuyer@1
|
1983 [[Enable full tracking, only rebroadcasting, or disable activity altogether.]])
|
farmbuyer@1
|
1984 b:SetFullWidth(true)
|
farmbuyer@1
|
1985 b:SetLabel("On/Off:")
|
farmbuyer@1
|
1986 b:SetList{"Full Tracking", "Broadcasting", "Disabled"}
|
farmbuyer@1
|
1987 b:SetValue(self.enabled and 1 or (self.rebroadcast and 2 or 3))
|
farmbuyer@1
|
1988 b:SetCallback("OnValueChanged", function(_w,event,choice)
|
farmbuyer@1
|
1989 if choice == 1 then self:Activate()
|
farmbuyer@1
|
1990 elseif choice == 2 then self:Activate(nil,true)
|
farmbuyer@1
|
1991 else self:Deactivate()
|
farmbuyer@1
|
1992 end
|
farmbuyer@1
|
1993 _w = display:GetUserData('comm_ident')
|
farmbuyer@1
|
1994 if _w and _w:IsVisible() then
|
farmbuyer@1
|
1995 _w:SetDisabled(self.enabled or self.rebroadcast)
|
farmbuyer@1
|
1996 end
|
farmbuyer@1
|
1997 _w = display:GetUserData('eoi_bcast_req')
|
farmbuyer@1
|
1998 if _w and _w:IsVisible() then
|
farmbuyer@1
|
1999 _w:SetDisabled(not self.enabled)
|
farmbuyer@1
|
2000 end
|
farmbuyer@1
|
2001 end)
|
farmbuyer@1
|
2002 control:AddChild(b)
|
farmbuyer@1
|
2003 end
|
farmbuyer@1
|
2004
|
farmbuyer@1
|
2005 b = mkbutton("Dropdown", 'threshold', "",
|
farmbuyer@1
|
2006 [[Items greater than or equal to this quality will be tracked/rebroadcast.]])
|
farmbuyer@1
|
2007 b:SetFullWidth(true)
|
farmbuyer@1
|
2008 b:SetLabel("Threshold:")
|
farmbuyer@1
|
2009 b:SetList(self.thresholds)
|
farmbuyer@1
|
2010 b:SetValue(self.threshold)
|
farmbuyer@1
|
2011 b:SetCallback("OnValueChanged", function(_dd,event,choice)
|
farmbuyer@1
|
2012 self:SetThreshold(choice)
|
farmbuyer@1
|
2013 end)
|
farmbuyer@1
|
2014 control:AddChild(b)
|
farmbuyer@1
|
2015
|
farmbuyer@4
|
2016 b = mkbutton("Clear Loot",
|
farmbuyer@1
|
2017 [[+Erases> all current loot information and generated text (but not saved texts).]])
|
farmbuyer@1
|
2018 b:SetFullWidth(true)
|
farmbuyer@1
|
2019 b:SetCallback("OnClick", function()
|
farmbuyer@1
|
2020 StaticPopup_Show("OUROL_CLEAR").data = self
|
farmbuyer@1
|
2021 end)
|
farmbuyer@1
|
2022 control:AddChild(b)
|
farmbuyer@1
|
2023
|
farmbuyer@1
|
2024 b = GUI:Create("Spacer")
|
farmbuyer@1
|
2025 b:SetFullWidth(true)
|
farmbuyer@16
|
2026 b:SetHeight(10)
|
farmbuyer@1
|
2027 control:AddChild(b)
|
farmbuyer@1
|
2028
|
farmbuyer@1
|
2029 --[[
|
farmbuyer@1
|
2030 --- Saved Texts ---
|
farmbuyer@1
|
2031 [ Save Current As... ]
|
farmbuyer@1
|
2032 saved1
|
farmbuyer@1
|
2033 saved2
|
farmbuyer@1
|
2034 ...
|
farmbuyer@1
|
2035 [ Load ] [ Delete ]
|
farmbuyer@1
|
2036 ]]
|
farmbuyer@1
|
2037 h = GUI:Create("Heading")
|
farmbuyer@1
|
2038 h:SetFullWidth(true)
|
farmbuyer@1
|
2039 h:SetText("Saved Texts")
|
farmbuyer@1
|
2040 control:AddChild(h)
|
farmbuyer@1
|
2041 b = mkbutton("Save Current As...",
|
farmbuyer@1
|
2042 [[Save forum/attendance/etc texts for later retrieval. Main loot information not included.]])
|
farmbuyer@1
|
2043 b:SetFullWidth(true)
|
farmbuyer@1
|
2044 b:SetCallback("OnClick", function()
|
farmbuyer@1
|
2045 StaticPopup_Show "OUROL_SAVE_SAVEAS"
|
farmbuyer@1
|
2046 _d:Hide()
|
farmbuyer@1
|
2047 end)
|
farmbuyer@1
|
2048 control:AddChild(b)
|
farmbuyer@1
|
2049
|
farmbuyer@16
|
2050 do
|
farmbuyer@16
|
2051 local scontainer = GUI:Create("SimpleGroup")
|
farmbuyer@16
|
2052 scontainer:SetFullWidth(true)
|
farmbuyer@16
|
2053 scontainer:SetFullHeight(false)
|
farmbuyer@16
|
2054 scontainer:SetAutoAdjustHeight(false)
|
farmbuyer@16
|
2055 scontainer:SetHeight(40) -- no relative height available anymore
|
farmbuyer@16
|
2056 scontainer:SetLayout("Fill")
|
farmbuyer@16
|
2057 local scroll = GUI:Create("ScrollFrame")
|
farmbuyer@16
|
2058 scroll:SetLayout("List")
|
farmbuyer@16
|
2059 local saved = self:check_saved_table(--[[silent_on_empty=]]true)
|
farmbuyer@16
|
2060 if saved then for i,s in ipairs(saved) do
|
farmbuyer@16
|
2061 local il = GUI:Create("InteractiveLabel")
|
farmbuyer@16
|
2062 il:SetFullWidth(true)
|
farmbuyer@16
|
2063 il:SetText(s.name)
|
farmbuyer@16
|
2064 il:SetUserData("num",i)
|
farmbuyer@16
|
2065 il:SetHighlight(1,1,1,0.4)
|
farmbuyer@16
|
2066 local str = ("%s %d entries %s"):format(s.date,s.count,s.name)
|
farmbuyer@16
|
2067 il:SetCallback("OnEnter", function() setstatus(str) end)
|
farmbuyer@16
|
2068 il:SetCallback("OnLeave", statusy_OnLeave)
|
farmbuyer@16
|
2069 il:SetCallback("OnClick", function(_il)
|
farmbuyer@16
|
2070 local prev = _d:GetUserData("saved selection")
|
farmbuyer@16
|
2071 if prev then
|
farmbuyer@16
|
2072 prev.highlight:Hide()
|
farmbuyer@16
|
2073 prev:SetColor()
|
farmbuyer@16
|
2074 end
|
farmbuyer@16
|
2075 _il:SetColor(0,1,0)
|
farmbuyer@16
|
2076 _il.highlight:Show()
|
farmbuyer@16
|
2077 _d:SetUserData("saved selection",_il)
|
farmbuyer@16
|
2078 _d:GetUserData("Load"):SetDisabled(false)
|
farmbuyer@16
|
2079 _d:GetUserData("Delete"):SetDisabled(false)
|
farmbuyer@16
|
2080 end)
|
farmbuyer@16
|
2081 scroll:AddChild(il)
|
farmbuyer@16
|
2082 end end
|
farmbuyer@16
|
2083 scontainer:AddChild(scroll)
|
farmbuyer@16
|
2084 control:AddChild(scontainer)
|
farmbuyer@16
|
2085 end
|
farmbuyer@1
|
2086
|
farmbuyer@1
|
2087 b = mkbutton("Load",
|
farmbuyer@1
|
2088 [[Load previously saved text. +REPLACES> all current loot information!]])
|
farmbuyer@1
|
2089 b:SetRelativeWidth(0.5)
|
farmbuyer@1
|
2090 b:SetCallback("OnClick", function()
|
farmbuyer@1
|
2091 local num = _d:GetUserData("saved selection"):GetUserData("num")
|
farmbuyer@1
|
2092 self:save_restore(num)
|
farmbuyer@1
|
2093 self:BuildMainDisplay()
|
farmbuyer@1
|
2094 end)
|
farmbuyer@1
|
2095 b:SetDisabled(true)
|
farmbuyer@1
|
2096 control:AddChild(b)
|
farmbuyer@1
|
2097 b = mkbutton("Delete",
|
farmbuyer@1
|
2098 [[Delete previously saved text.]])
|
farmbuyer@1
|
2099 b:SetRelativeWidth(0.5)
|
farmbuyer@1
|
2100 b:SetCallback("OnClick", function()
|
farmbuyer@1
|
2101 local num = _d:GetUserData("saved selection"):GetUserData("num")
|
farmbuyer@1
|
2102 self:save_delete(num)
|
farmbuyer@1
|
2103 self:BuildMainDisplay()
|
farmbuyer@1
|
2104 end)
|
farmbuyer@1
|
2105 b:SetDisabled(true)
|
farmbuyer@1
|
2106 control:AddChild(b)
|
farmbuyer@1
|
2107
|
farmbuyer@1
|
2108 b = GUI:Create("Spacer")
|
farmbuyer@1
|
2109 b:SetFullWidth(true)
|
farmbuyer@16
|
2110 b:SetHeight(10)
|
farmbuyer@1
|
2111 control:AddChild(b)
|
farmbuyer@1
|
2112
|
farmbuyer@1
|
2113 -- Other stuff on right-hand side
|
farmbuyer@1
|
2114 local tab_specials = GUI:Create("SimpleGroup")
|
farmbuyer@1
|
2115 tab_specials:SetLayout("Flow")
|
farmbuyer@1
|
2116 tab_specials:SetFullWidth(true)
|
farmbuyer@1
|
2117 control:AddChild(tab_specials)
|
farmbuyer@1
|
2118 control:ResumeLayout()
|
farmbuyer@1
|
2119
|
farmbuyer@1
|
2120 ----- Left-hand group
|
farmbuyer@1
|
2121 local tabs = GUI:Create("TabGroup")
|
farmbuyer@1
|
2122 tabs:SetLayout("Flow")
|
farmbuyer@1
|
2123 tabs.alignoffset = 25
|
farmbuyer@49
|
2124 local titletext_orig_fo = tabs.titletext:GetFontObject()
|
farmbuyer@49
|
2125 tabs.titletext:SetFontObject(GameFontNormalSmall)
|
farmbuyer@49
|
2126 tabs:SetCallback("OnRelease", function(_tabs)
|
farmbuyer@49
|
2127 tabs.titletext:SetFontObject(titletext_orig_fo)
|
farmbuyer@49
|
2128 end)
|
farmbuyer@1
|
2129 do
|
farmbuyer@1
|
2130 self.sender_list.sort()
|
farmbuyer@1
|
2131 tabs.titletext:SetFormattedText("Received broadcast data from %d |4player:players;.",
|
farmbuyer@1
|
2132 self.sender_list.activeI)
|
farmbuyer@1
|
2133 end
|
farmbuyer@1
|
2134 tabs:SetRelativeWidth(0.99-rhs_width)
|
farmbuyer@1
|
2135 tabs:SetFullHeight(true)
|
farmbuyer@1
|
2136 tabs:SetTabs(tabgroup_tabs)
|
farmbuyer@1
|
2137 tabs:SetCallback("OnGroupSelected", tabs_OnGroupSelected_func)
|
farmbuyer@1
|
2138 tabs:SetCallback("OnTabEnter", function(_tabs,event,value,tab)
|
farmbuyer@1
|
2139 setstatus(_tabtexts[value].desc)
|
farmbuyer@1
|
2140 end)
|
farmbuyer@1
|
2141 tabs:SetCallback("OnTabLeave", statusy_OnLeave)
|
farmbuyer@1
|
2142 tabs:SetUserData("special buttons group",tab_specials)
|
farmbuyer@1
|
2143 tabs:SelectTab(opt_tabselect or "eoi")
|
farmbuyer@1
|
2144
|
farmbuyer@1
|
2145 display:AddChildren (tabs, control)
|
farmbuyer@1
|
2146 display:ApplyStatus()
|
farmbuyer@1
|
2147
|
farmbuyer@1
|
2148 display:Show() -- without this, only appears every *other* function call
|
farmbuyer@1
|
2149 return display
|
farmbuyer@1
|
2150 end
|
farmbuyer@1
|
2151
|
farmbuyer@1
|
2152 function addon:OpenMainDisplayToTab (text)
|
farmbuyer@44
|
2153 text = '^'..text:lower()
|
farmbuyer@1
|
2154 for tab,v in pairs(_tabtexts) do
|
farmbuyer@1
|
2155 if v.title:lower():find(text) then
|
farmbuyer@1
|
2156 self:BuildMainDisplay(tab)
|
farmbuyer@1
|
2157 return true
|
farmbuyer@1
|
2158 end
|
farmbuyer@1
|
2159 end
|
farmbuyer@1
|
2160 end
|
farmbuyer@1
|
2161
|
farmbuyer@1
|
2162 -- Essentially a re-click on the current tab (if the current tab were clickable).
|
farmbuyer@1
|
2163 function addon:redisplay ()
|
farmbuyer@1
|
2164 tabs_OnGroupSelected_func (unpack(tabs_OnGroupSelected_func_args))
|
farmbuyer@1
|
2165 end
|
farmbuyer@1
|
2166
|
farmbuyer@1
|
2167
|
farmbuyer@1
|
2168 ------ Popup dialogs
|
farmbuyer@1
|
2169 -- Callback for each Next/Accept stage of inserting a new loot row via dropdown
|
farmbuyer@1
|
2170 local function eoi_st_insert_OnAccept_boss (dialog, data)
|
farmbuyer@1
|
2171 if data.all_done then
|
farmbuyer@1
|
2172 -- It'll probably be the final entry in the table, but there might have
|
farmbuyer@1
|
2173 -- been real loot happening at the same time.
|
farmbuyer@1
|
2174 local boss_index = addon._addLootEntry{
|
farmbuyer@1
|
2175 kind = 'boss',
|
farmbuyer@55
|
2176 bossname = (OuroLootSV_opts.snarky_boss and addon.boss_abbrev[data.name] or data.name) or data.name,
|
farmbuyer@1
|
2177 reason = 'kill',
|
farmbuyer@1
|
2178 instance = data.instance,
|
farmbuyer@1
|
2179 duration = 0,
|
farmbuyer@1
|
2180 }
|
farmbuyer@1
|
2181 local entry = tremove(g_loot,boss_index)
|
farmbuyer@1
|
2182 tinsert(g_loot,data.rowindex,entry)
|
farmbuyer@1
|
2183 addon:_mark_boss_kill(data.rowindex)
|
farmbuyer@1
|
2184 data.display:GetUserData("eoiST"):OuroLoot_Refresh(data.rowindex)
|
farmbuyer@1
|
2185 dialog.data = nil -- free up memory
|
farmbuyer@1
|
2186 addon:Print("Inserted %s %s (entry %d).", data.kind, data.name, data.rowindex)
|
farmbuyer@1
|
2187 return
|
farmbuyer@1
|
2188 end
|
farmbuyer@1
|
2189
|
farmbuyer@16
|
2190 local text = dialog.editBox:GetText()
|
farmbuyer@1
|
2191
|
farmbuyer@1
|
2192 -- second click
|
farmbuyer@1
|
2193 if data.name and text then
|
farmbuyer@1
|
2194 data.instance = text
|
farmbuyer@1
|
2195 data.all_done = true
|
farmbuyer@1
|
2196 -- in future do one more thing, for now just jump to the check
|
farmbuyer@1
|
2197 return eoi_st_insert_OnAccept_boss (dialog, data)
|
farmbuyer@1
|
2198 end
|
farmbuyer@1
|
2199
|
farmbuyer@1
|
2200 -- first click
|
farmbuyer@1
|
2201 if text then
|
farmbuyer@1
|
2202 data.name = text
|
farmbuyer@1
|
2203 local getinstance = StaticPopup_Show("OUROL_EOI_INSERT","instance")
|
farmbuyer@1
|
2204 getinstance.data = data
|
farmbuyer@56
|
2205 getinstance.editBox:SetText((addon.instance_tag()))
|
farmbuyer@1
|
2206 -- This suppresses auto-hide (which would case the getinstance dialog
|
farmbuyer@1
|
2207 -- to go away), but only when mouse clicking. OnEnter is on its own.
|
farmbuyer@1
|
2208 return true
|
farmbuyer@1
|
2209 end
|
farmbuyer@1
|
2210 end
|
farmbuyer@1
|
2211
|
farmbuyer@1
|
2212 local function eoi_st_insert_OnAccept_loot (dialog, data)
|
farmbuyer@1
|
2213 if data.all_done then
|
farmbuyer@1
|
2214 --local real_rebroadcast, real_enabled = addon.rebroadcast, addon.enabled
|
farmbuyer@1
|
2215 --g_rebroadcast, g_enabled = false, true
|
farmbuyer@1
|
2216 data.display:Hide()
|
farmbuyer@1
|
2217 local loot_index = addon:CHAT_MSG_LOOT ("manual", data.recipient, data.name, data.notes)
|
farmbuyer@1
|
2218 --g_rebroadcast, g_enabled = real_g_rebroadcast, real_g_enabled
|
farmbuyer@1
|
2219 local entry = tremove(g_loot,loot_index)
|
farmbuyer@1
|
2220 tinsert(g_loot,data.rowindex,entry)
|
farmbuyer@1
|
2221 --data.display:GetUserData("eoiST"):OuroLoot_Refresh(data.rowindex)
|
farmbuyer@1
|
2222 addon:_fill_out_eoi_data(data.rowindex)
|
farmbuyer@1
|
2223 addon:BuildMainDisplay()
|
farmbuyer@1
|
2224 dialog.data = nil
|
farmbuyer@1
|
2225 addon:Print("Inserted %s %s (entry %d).", data.kind, data.name, data.rowindex)
|
farmbuyer@1
|
2226 return
|
farmbuyer@1
|
2227 end
|
farmbuyer@1
|
2228
|
farmbuyer@16
|
2229 local text = dialog.editBox:GetText():trim()
|
farmbuyer@1
|
2230
|
farmbuyer@1
|
2231 -- third click
|
farmbuyer@1
|
2232 if data.name and data.recipient and text then
|
farmbuyer@1
|
2233 data.notes = (text ~= "<none>") and text or nil
|
farmbuyer@1
|
2234 data.all_done = true
|
farmbuyer@1
|
2235 return eoi_st_insert_OnAccept_loot (dialog, data)
|
farmbuyer@1
|
2236 end
|
farmbuyer@1
|
2237
|
farmbuyer@1
|
2238 -- second click
|
farmbuyer@1
|
2239 if data.name and text then
|
farmbuyer@1
|
2240 data.recipient = text
|
farmbuyer@1
|
2241 local getnotes = StaticPopup_Show("OUROL_EOI_INSERT","notes")
|
farmbuyer@1
|
2242 getnotes.data = data
|
farmbuyer@16
|
2243 getnotes.editBox:SetText("<none>")
|
farmbuyer@16
|
2244 getnotes.editBox:HighlightText()
|
farmbuyer@1
|
2245 return true
|
farmbuyer@1
|
2246 end
|
farmbuyer@1
|
2247
|
farmbuyer@1
|
2248 -- first click
|
farmbuyer@1
|
2249 if text then
|
farmbuyer@1
|
2250 data.name = text
|
farmbuyer@1
|
2251 dialog:Hide() -- technically a "different" one about to be shown
|
farmbuyer@1
|
2252 local getrecipient = StaticPopup_Show("OUROL_EOI_INSERT","recipient")
|
farmbuyer@1
|
2253 getrecipient.data = data
|
farmbuyer@16
|
2254 getrecipient.editBox:SetText("")
|
farmbuyer@1
|
2255 return true
|
farmbuyer@1
|
2256 end
|
farmbuyer@1
|
2257 end
|
farmbuyer@1
|
2258
|
farmbuyer@1
|
2259 local function eoi_st_insert_OnAccept (dialog, data)
|
farmbuyer@1
|
2260 if data.kind == 'boss' then
|
farmbuyer@1
|
2261 return eoi_st_insert_OnAccept_boss (dialog, data)
|
farmbuyer@1
|
2262 elseif data.kind == 'loot' then
|
farmbuyer@1
|
2263 return eoi_st_insert_OnAccept_loot (dialog, data)
|
farmbuyer@1
|
2264 end
|
farmbuyer@1
|
2265 end
|
farmbuyer@1
|
2266
|
farmbuyer@1
|
2267 StaticPopupDialogs["OUROL_CLEAR"] = flib.StaticPopup{
|
farmbuyer@1
|
2268 text = "Clear current loot information and text?",
|
farmbuyer@16
|
2269 button1 = YES,
|
farmbuyer@16
|
2270 button2 = NO,
|
farmbuyer@1
|
2271 OnAccept = function (dialog, addon)
|
farmbuyer@1
|
2272 addon:Clear(--[[verbose_p=]]true)
|
farmbuyer@1
|
2273 end,
|
farmbuyer@1
|
2274 }
|
farmbuyer@1
|
2275
|
farmbuyer@37
|
2276 StaticPopupDialogs["OUROL_HIST_REGEN"] = flib.StaticPopup{
|
farmbuyer@37
|
2277 -- Concatenate this once at load time. There is no ITEM_QUALITY_LEGENDARY constant.
|
farmbuyer@37
|
2278 text = "Erase all history entries from " .. ITEM_QUALITY_COLORS[5].hex .. "%s|r, and generate it anew from current loot?",
|
farmbuyer@37
|
2279 button1 = YES,
|
farmbuyer@37
|
2280 button2 = NO,
|
farmbuyer@37
|
2281 OnAccept = function (dialog, addon, data2)
|
farmbuyer@37
|
2282 data2(addon)
|
farmbuyer@37
|
2283 addon:Print("%s history has been regenerated.", addon.history.realm)
|
farmbuyer@37
|
2284 addon:redisplay()
|
farmbuyer@37
|
2285 end,
|
farmbuyer@37
|
2286 }
|
farmbuyer@37
|
2287
|
farmbuyer@16
|
2288 StaticPopupDialogs["OUROL_HIST_CLEAR"] = flib.StaticPopup{
|
farmbuyer@37
|
2289 -- Concatenate this once at load time. There is no ITEM_QUALITY_LEGENDARY constant.
|
farmbuyer@37
|
2290 text = "Erase all history entries from " .. ITEM_QUALITY_COLORS[5].hex .. "%s|r?",
|
farmbuyer@16
|
2291 button1 = YES,
|
farmbuyer@16
|
2292 button2 = NO,
|
farmbuyer@16
|
2293 OnAccept = function (dialog, addon, data2)
|
farmbuyer@16
|
2294 data2(addon)
|
farmbuyer@16
|
2295 addon:Print("Stimpy, you eeediot, you've pushed the history erase button!")
|
farmbuyer@16
|
2296 addon:redisplay()
|
farmbuyer@16
|
2297 end,
|
farmbuyer@16
|
2298 }
|
farmbuyer@16
|
2299
|
farmbuyer@16
|
2300 StaticPopupDialogs["OUROL_HIST_PREEN"] = flib.StaticPopup{
|
farmbuyer@37
|
2301 -- Concatenate this once at load time. There is no ITEM_QUALITY_LEGENDARY constant.
|
farmbuyer@37
|
2302 text = "Erase all but the latest entry for players on " .. ITEM_QUALITY_COLORS[5].hex .. "%s|r?",
|
farmbuyer@16
|
2303 button1 = YES,
|
farmbuyer@16
|
2304 button2 = NO,
|
farmbuyer@16
|
2305 OnAccept = function (dialog, addon, data2)
|
farmbuyer@16
|
2306 data2(addon)
|
farmbuyer@16
|
2307 addon:Print("All loot prior to the most recent entries has been erased.")
|
farmbuyer@16
|
2308 addon:redisplay()
|
farmbuyer@16
|
2309 end,
|
farmbuyer@16
|
2310 }
|
farmbuyer@16
|
2311
|
farmbuyer@27
|
2312 StaticPopupDialogs["OUROL_URL"] = { --flib.StaticPopup{
|
farmbuyer@27
|
2313 text = "Use Control-C or equivalent to copy this URL to your system clipboard:",
|
farmbuyer@27
|
2314 button1 = OKAY,
|
farmbuyer@27
|
2315 timeout = 0,
|
farmbuyer@27
|
2316 whileDead = true,
|
farmbuyer@27
|
2317 hideOnEscape = true,
|
farmbuyer@27
|
2318 enterClicksFirstButton = true,
|
farmbuyer@27
|
2319 hasEditBox = true,
|
farmbuyer@27
|
2320 editBoxWidth = 350,
|
farmbuyer@53
|
2321 preferredIndex = 3,
|
farmbuyer@27
|
2322 OnShow = function (dialog, url)
|
farmbuyer@27
|
2323 dialog.editBox:SetText(url)
|
farmbuyer@27
|
2324 dialog.editBox:SetFocus()
|
farmbuyer@27
|
2325 dialog.editBox:HighlightText()
|
farmbuyer@27
|
2326 end,
|
farmbuyer@27
|
2327 }
|
farmbuyer@27
|
2328
|
farmbuyer@1
|
2329 StaticPopupDialogs["OUROL_REMIND"] = flib.StaticPopup{
|
farmbuyer@1
|
2330 text = "Do you wish to activate Ouro Loot?\n\n(Hit the Escape key to close this window without clicking)",
|
farmbuyer@1
|
2331 button1 = "Activate recording", -- "accept", left
|
farmbuyer@1
|
2332 button3 = "Broadcast only", -- "alt", middle
|
farmbuyer@1
|
2333 button2 = "Help", -- "cancel", right
|
farmbuyer@1
|
2334 OnAccept = function (dialog, addon)
|
farmbuyer@1
|
2335 addon:Activate()
|
farmbuyer@1
|
2336 end,
|
farmbuyer@1
|
2337 OnAlt = function (dialog, addon)
|
farmbuyer@1
|
2338 addon:Activate(nil,true)
|
farmbuyer@1
|
2339 end,
|
farmbuyer@1
|
2340 OnCancel = function (dialog, addon)
|
farmbuyer@1
|
2341 -- hitting escape also calls this, but the 3rd arg would be "clicked"
|
farmbuyer@1
|
2342 -- in both cases, not useful here.
|
farmbuyer@1
|
2343 local helpbutton = dialog.button2
|
farmbuyer@1
|
2344 local ismousing = MouseIsOver(helpbutton)
|
farmbuyer@1
|
2345 if ismousing then
|
farmbuyer@1
|
2346 -- they actually clicked the button (or at least the mouse was over "Help"
|
farmbuyer@1
|
2347 -- when they hit escape... sigh)
|
farmbuyer@1
|
2348 addon:BuildMainDisplay('help')
|
farmbuyer@1
|
2349 else
|
farmbuyer@1
|
2350 addon.popped = true
|
farmbuyer@1
|
2351 end
|
farmbuyer@1
|
2352 end,
|
farmbuyer@1
|
2353 }
|
farmbuyer@1
|
2354
|
farmbuyer@1
|
2355 -- The data member here is a table built with:
|
farmbuyer@1
|
2356 -- {rowindex=<GUI row receiving click>, display=_d, kind=<loot/boss>}
|
farmbuyer@1
|
2357 do
|
farmbuyer@1
|
2358 local t = flib.StaticPopup{
|
farmbuyer@1
|
2359 text = "Enter name of new %s, then click Next or press Enter:",
|
farmbuyer@1
|
2360 button1 = "Next >",
|
farmbuyer@1
|
2361 button2 = CANCEL,
|
farmbuyer@1
|
2362 hasEditBox = true,
|
farmbuyer@16
|
2363 editBoxWidth = 350,
|
farmbuyer@1
|
2364 maxLetters = 50,
|
farmbuyer@1
|
2365 noCancelOnReuse = true,
|
farmbuyer@1
|
2366 --[[ XXX still needed?
|
farmbuyer@1
|
2367 OnShow = function(dialog)
|
farmbuyer@1
|
2368 dialog.wideEditBox:SetText("")
|
farmbuyer@1
|
2369 dialog.wideEditBox:SetFocus()
|
farmbuyer@1
|
2370 end,]]
|
farmbuyer@1
|
2371 }
|
farmbuyer@1
|
2372 t.EditBoxOnEnterPressed = function(editbox)
|
farmbuyer@39
|
2373 if editbox:GetText() == "" then return end
|
farmbuyer@1
|
2374 local dialog = editbox:GetParent()
|
farmbuyer@1
|
2375 if not eoi_st_insert_OnAccept (dialog, dialog.data) then
|
farmbuyer@1
|
2376 dialog:Hide() -- replicate OnAccept click behavior
|
farmbuyer@1
|
2377 end
|
farmbuyer@1
|
2378 end
|
farmbuyer@1
|
2379 t.enterClicksFirstButton = nil -- no effect with editbox focused
|
farmbuyer@1
|
2380 t.OnAccept = eoi_st_insert_OnAccept
|
farmbuyer@1
|
2381 StaticPopupDialogs["OUROL_EOI_INSERT"] = t
|
farmbuyer@1
|
2382 end
|
farmbuyer@1
|
2383
|
farmbuyer@1
|
2384 -- This seems to be gratuitous use of metatables, really.
|
farmbuyer@1
|
2385 do
|
farmbuyer@1
|
2386 local OEIL = {
|
farmbuyer@1
|
2387 text = "Paste the new item into here, then click Next or press Enter:",
|
farmbuyer@1
|
2388 __index = StaticPopupDialogs["OUROL_EOI_INSERT"]
|
farmbuyer@1
|
2389 }
|
farmbuyer@1
|
2390 StaticPopupDialogs["OUROL_EOI_INSERT_LOOT"] = setmetatable(OEIL,OEIL)
|
farmbuyer@1
|
2391
|
farmbuyer@1
|
2392 hooksecurefunc("ChatEdit_InsertLink", function (link,...)
|
farmbuyer@1
|
2393 local dialogname = StaticPopup_Visible "OUROL_EOI_INSERT_LOOT"
|
farmbuyer@1
|
2394 if dialogname then
|
farmbuyer@16
|
2395 _G[dialogname.."EditBox"]:SetText(link)
|
farmbuyer@1
|
2396 return true
|
farmbuyer@1
|
2397 end
|
farmbuyer@1
|
2398 end)
|
farmbuyer@1
|
2399 end
|
farmbuyer@1
|
2400
|
farmbuyer@1
|
2401 StaticPopupDialogs["OUROL_REASSIGN_ENTER"] = flib.StaticPopup{
|
farmbuyer@1
|
2402 text = "Enter the player name:",
|
farmbuyer@1
|
2403 button1 = ACCEPT,
|
farmbuyer@1
|
2404 button2 = CANCEL,
|
farmbuyer@1
|
2405 hasEditBox = true,
|
farmbuyer@1
|
2406 --[[ XXX needed?
|
farmbuyer@1
|
2407 OnShow = function(dialog)
|
farmbuyer@1
|
2408 dialog.editBox:SetText("")
|
farmbuyer@1
|
2409 dialog.editBox:SetFocus()
|
farmbuyer@1
|
2410 end,]]
|
farmbuyer@1
|
2411 OnAccept = function(dialog, data)
|
farmbuyer@1
|
2412 local name = dialog.usertext --editBox:GetText()
|
farmbuyer@24
|
2413 addon:reassign_loot (data.index, name)
|
farmbuyer@1
|
2414 data.display:GetUserData("eoiST"):OuroLoot_Refresh(data.index)
|
farmbuyer@1
|
2415 end,
|
farmbuyer@1
|
2416 }
|
farmbuyer@1
|
2417
|
farmbuyer@1
|
2418 StaticPopupDialogs["OUROL_SAVE_SAVEAS"] = flib.StaticPopup{
|
farmbuyer@1
|
2419 text = "Enter a name for the loot collection:",
|
farmbuyer@1
|
2420 button1 = ACCEPT,
|
farmbuyer@1
|
2421 button2 = CANCEL,
|
farmbuyer@1
|
2422 hasEditBox = true,
|
farmbuyer@1
|
2423 maxLetters = 30,
|
farmbuyer@1
|
2424 --[[ XXX
|
farmbuyer@1
|
2425 OnShow = function(dialog)
|
farmbuyer@1
|
2426 dialog.editBox:SetText("")
|
farmbuyer@1
|
2427 dialog.editBox:SetFocus()
|
farmbuyer@1
|
2428 end,]]
|
farmbuyer@1
|
2429 OnAccept = function(dialog)--, data)
|
farmbuyer@1
|
2430 local name = dialog.usertext --editBox:GetText()
|
farmbuyer@1
|
2431 addon:save_saveas(name)
|
farmbuyer@1
|
2432 addon:BuildMainDisplay()
|
farmbuyer@1
|
2433 end,
|
farmbuyer@1
|
2434 OnCancel = function(dialog)--, data, reason)
|
farmbuyer@1
|
2435 addon:BuildMainDisplay()
|
farmbuyer@1
|
2436 end,
|
farmbuyer@1
|
2437 --[[XXX
|
farmbuyer@1
|
2438 EditBoxOnEnterPressed = function(editbox)
|
farmbuyer@1
|
2439 local dialog = editbox:GetParent()
|
farmbuyer@1
|
2440 StaticPopupDialogs["OUROL_SAVE_SAVEAS"].OnAccept (dialog, dialog.data)
|
farmbuyer@1
|
2441 dialog:Hide()
|
farmbuyer@1
|
2442 end,]]
|
farmbuyer@1
|
2443 }
|
farmbuyer@1
|
2444
|
farmbuyer@25
|
2445
|
farmbuyer@25
|
2446 -- Workaround this bug: http://us.battle.net/wow/en/forum/topic/3278901991
|
farmbuyer@25
|
2447 if true then
|
farmbuyer@25
|
2448 -- Verbatim copy of UIDropDownMenuTemplates.xml:155 or so, except as
|
farmbuyer@25
|
2449 -- tagged with CHANGE.
|
farmbuyer@25
|
2450 local function onenter (self, motion)
|
farmbuyer@25
|
2451 if ( self.hasArrow ) then
|
farmbuyer@25
|
2452 local level = self:GetParent():GetID() + 1;
|
farmbuyer@25
|
2453 local listFrame = _G["DropDownList"..level];
|
farmbuyer@25
|
2454 if ( not listFrame or not listFrame:IsShown() or select(2, listFrame:GetPoint()) ~= self ) then
|
farmbuyer@25
|
2455 ToggleDropDownMenu(self:GetParent():GetID() + 1, self.value, nil, nil, nil, nil, self.menuList, self);
|
farmbuyer@25
|
2456 end
|
farmbuyer@25
|
2457 else
|
farmbuyer@25
|
2458 CloseDropDownMenus(self:GetParent():GetID() + 1);
|
farmbuyer@25
|
2459 end
|
farmbuyer@25
|
2460 _G[self:GetName().."Highlight"]:Show();
|
farmbuyer@25
|
2461 UIDropDownMenu_StopCounting(self:GetParent());
|
farmbuyer@25
|
2462 if ( self.tooltipTitle ) then
|
farmbuyer@25
|
2463 if ( self.tooltipOnButton ) then
|
farmbuyer@25
|
2464 GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
|
farmbuyer@25
|
2465 GameTooltip:AddLine(self.tooltipTitle, 1.0, 1.0, 1.0);
|
farmbuyer@25
|
2466 GameTooltip:AddLine(self.tooltipText, nil,nil,nil,1); -- CHANGE added nil->1 arguments
|
farmbuyer@25
|
2467 GameTooltip:Show();
|
farmbuyer@25
|
2468 else
|
farmbuyer@25
|
2469 GameTooltip_AddNewbieTip(self, self.tooltipTitle, 1.0, 1.0, 1.0, self.tooltipText, 1);
|
farmbuyer@25
|
2470 end
|
farmbuyer@25
|
2471 end
|
farmbuyer@25
|
2472 end
|
farmbuyer@25
|
2473 -- end verbatime copy
|
farmbuyer@25
|
2474
|
farmbuyer@25
|
2475 for i = 1, UIDROPDOWNMENU_MAXLEVELS do
|
farmbuyer@25
|
2476 local list = _G["DropDownList"..i]
|
farmbuyer@25
|
2477 if list then
|
farmbuyer@25
|
2478 for j = 1, UIDROPDOWNMENU_MAXBUTTONS do
|
farmbuyer@25
|
2479 local button = _G["DropDownList"..i.."Button"..j]
|
farmbuyer@25
|
2480 if button then
|
farmbuyer@25
|
2481 --print("button fixup",i,j)
|
farmbuyer@25
|
2482 button:SetScript("OnEnter",onenter)
|
farmbuyer@25
|
2483 end
|
farmbuyer@25
|
2484 end
|
farmbuyer@25
|
2485 end
|
farmbuyer@25
|
2486 end
|
farmbuyer@25
|
2487 end
|
farmbuyer@25
|
2488
|
farmbuyer@1
|
2489 -- vim:noet
|