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