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