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