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