|
farmbuyer@1
|
1 local nametag, addon = ...
|
|
farmbuyer@3
|
2 local L = LibStub("AceLocale-3.0"):GetLocale(nametag)
|
|
farmbuyer@1
|
3
|
|
farmbuyer@1
|
4 addon.defaults = {
|
|
farmbuyer@1
|
5 profile = {
|
|
farmbuyer@1
|
6 enable = true,
|
|
farmbuyer@1
|
7 guildcontrol = true,
|
|
farmbuyer@1
|
8 },
|
|
farmbuyer@1
|
9 }
|
|
farmbuyer@1
|
10
|
|
farmbuyer@1
|
11
|
|
farmbuyer@1
|
12 addon.options = {
|
|
farmbuyer@1
|
13 name = "",
|
|
farmbuyer@1
|
14 type = 'group',
|
|
farmbuyer@1
|
15 childGroups = 'tab',
|
|
farmbuyer@1
|
16 handler = addon, -- functions listed as strings called as addon:func
|
|
farmbuyer@1
|
17 get = "GetOption",
|
|
farmbuyer@1
|
18 set = "SetOption",
|
|
farmbuyer@1
|
19 args = {
|
|
farmbuyer@1
|
20 general = {
|
|
farmbuyer@3
|
21 name = GENERAL,
|
|
farmbuyer@3
|
22 desc = L["General options"],
|
|
farmbuyer@1
|
23 type = 'group',
|
|
farmbuyer@1
|
24 order = 10,
|
|
farmbuyer@1
|
25 args = {
|
|
farmbuyer@1
|
26 version = {
|
|
farmbuyer@1
|
27 --name = filled in during OnInit
|
|
farmbuyer@1
|
28 type = 'description',
|
|
farmbuyer@1
|
29 fontSize = "large",
|
|
farmbuyer@1
|
30 cmdHidden = true,
|
|
farmbuyer@1
|
31 width = 'full',
|
|
farmbuyer@1
|
32 order = 1,
|
|
farmbuyer@1
|
33 },
|
|
farmbuyer@1
|
34 enable = {
|
|
farmbuyer@3
|
35 name = ENABLE,
|
|
farmbuyer@3
|
36 desc = L["Use this addon"],
|
|
farmbuyer@1
|
37 type = 'toggle',
|
|
farmbuyer@1
|
38 arg = "ToggleEnable",
|
|
farmbuyer@1
|
39 order = 5,
|
|
farmbuyer@1
|
40 },
|
|
farmbuyer@1
|
41 guildcontrol = {
|
|
farmbuyer@3
|
42 name = L["Guild Control for non-GMs"],
|
|
farmbuyer@3
|
43 desc = L["Make the grayed-out Guild Control button activate this addon instead."],
|
|
farmbuyer@1
|
44 type = 'toggle',
|
|
farmbuyer@1
|
45 order = 10,
|
|
farmbuyer@1
|
46 },
|
|
farmbuyer@1
|
47 break1 = {
|
|
farmbuyer@1
|
48 name = '',
|
|
farmbuyer@1
|
49 type = 'description',
|
|
farmbuyer@1
|
50 cmdHidden = true,
|
|
farmbuyer@1
|
51 width = 'full',
|
|
farmbuyer@1
|
52 order = 14,
|
|
farmbuyer@1
|
53 },
|
|
farmbuyer@1
|
54 popup = {
|
|
farmbuyer@1
|
55 name = "/wrdw",
|
|
farmbuyer@3
|
56 desc = L["Toggle WRDW window"],
|
|
farmbuyer@1
|
57 type = 'execute',
|
|
farmbuyer@1
|
58 func = function()
|
|
farmbuyer@1
|
59 InterfaceOptionsFrameCancel:Click()
|
|
farmbuyer@1
|
60 HideUIPanel(GameMenuFrame)
|
|
farmbuyer@1
|
61 addon:BuildWindow()
|
|
farmbuyer@1
|
62 end,
|
|
farmbuyer@1
|
63 order = 15,
|
|
farmbuyer@1
|
64 },
|
|
farmbuyer@1
|
65 },
|
|
farmbuyer@1
|
66 },
|
|
farmbuyer@1
|
67 --profiles = filled in OnInit
|
|
farmbuyer@1
|
68 },
|
|
farmbuyer@1
|
69 }
|
|
farmbuyer@1
|
70
|
|
farmbuyer@1
|
71
|
|
farmbuyer@1
|
72 -----------------------------------------------------------------------------
|
|
farmbuyer@1
|
73 -- other locals
|
|
farmbuyer@1
|
74 local AceGUI = LibStub("AceGUI-3.0")
|
|
farmbuyer@1
|
75 local st_rowheight = 25
|
|
farmbuyer@1
|
76 local st_displayed_rows = 15 --math.floor(366/st_rowheight)
|
|
farmbuyer@4
|
77 local st_colwidth = 65
|
|
farmbuyer@1
|
78 local sidetabs
|
|
farmbuyer@1
|
79 local incomplete
|
|
farmbuyer@1
|
80
|
|
farmbuyer@1
|
81 -- Remove children widgets without explicitly Release()'ing them.
|
|
farmbuyer@1
|
82 local function DisownChildren (container)
|
|
farmbuyer@1
|
83 for i,v in ipairs(container.children) do
|
|
farmbuyer@1
|
84 container.children[i] = nil
|
|
farmbuyer@1
|
85 v.frame:Hide()
|
|
farmbuyer@1
|
86 v.frame:ClearAllPoints()
|
|
farmbuyer@1
|
87 end
|
|
farmbuyer@1
|
88 end
|
|
farmbuyer@1
|
89
|
|
farmbuyer@1
|
90
|
|
farmbuyer@1
|
91 -----------------------------------------------------------------------------
|
|
farmbuyer@1
|
92 addon = LibStub("AceAddon-3.0"):NewAddon(addon, nametag,
|
|
farmbuyer@1
|
93 "AceConsole-3.0", "AceEvent-3.0")
|
|
farmbuyer@1
|
94
|
|
farmbuyer@1
|
95 -- Thanks to jerry for the nifty arg idea.
|
|
farmbuyer@1
|
96 function addon:SetOption (info, value)
|
|
farmbuyer@1
|
97 local name = info[#info]
|
|
farmbuyer@1
|
98 self.db.profile[name] = value
|
|
farmbuyer@1
|
99 local arg = info.arg
|
|
farmbuyer@1
|
100 if arg then self[arg](self) end
|
|
farmbuyer@1
|
101 end
|
|
farmbuyer@1
|
102
|
|
farmbuyer@1
|
103 function addon:GetOption (info)
|
|
farmbuyer@1
|
104 local name = info[#info]
|
|
farmbuyer@1
|
105 return self.db.profile[name]
|
|
farmbuyer@1
|
106 end
|
|
farmbuyer@1
|
107
|
|
farmbuyer@1
|
108 function addon:OnInitialize()
|
|
farmbuyer@1
|
109 self.db = LibStub("AceDB-3.0"):New("wrdwDB", self.defaults, --[[Default=]]true)
|
|
farmbuyer@1
|
110
|
|
farmbuyer@1
|
111 local AceDBOptions = LibStub("AceDBOptions-3.0", true)
|
|
farmbuyer@1
|
112 if AceDBOptions then
|
|
farmbuyer@1
|
113 self.options.args.profiles = AceDBOptions:GetOptionsTable(self.db)
|
|
farmbuyer@1
|
114 self.options.args.profiles.order = 200
|
|
farmbuyer@1
|
115 end
|
|
farmbuyer@1
|
116
|
|
farmbuyer@1
|
117 self.options.args.general.args.version.name =
|
|
farmbuyer@1
|
118 "|cff30adffVersion " .. (GetAddOnMetadata(nametag, "Version") or "?") .. "|r"
|
|
farmbuyer@1
|
119 LibStub("AceConfig-3.0"):RegisterOptionsTable(nametag, self.options)
|
|
farmbuyer@1
|
120 self.optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions(nametag, "WhichRankDoesWhat")
|
|
farmbuyer@1
|
121 --self.optionsFrame.okay = function() pattern_editing_safe = false end
|
|
farmbuyer@1
|
122 --self.optionsFrame.refresh = self.optionsFrame.okay
|
|
farmbuyer@1
|
123 --self.optionsFrame.cancel = self.optionsFrame.okay
|
|
farmbuyer@1
|
124
|
|
farmbuyer@1
|
125 self:SetEnabledState(self.db.profile.enable)
|
|
farmbuyer@1
|
126 self.OnInitialize = nil
|
|
farmbuyer@1
|
127 end
|
|
farmbuyer@1
|
128
|
|
farmbuyer@1
|
129
|
|
farmbuyer@1
|
130 function addon:OnEnable()
|
|
farmbuyer@1
|
131 self:RegisterEvent("GUILD_RANKS_UPDATE")
|
|
farmbuyer@1
|
132 self:RegisterChatCommand("wrdw", "OnChatCommand")
|
|
farmbuyer@1
|
133
|
|
farmbuyer@7
|
134 -- Ideally, most of this stuff wouldn't be done at load time at all; this
|
|
farmbuyer@7
|
135 -- whole addon should be LoD.
|
|
farmbuyer@1
|
136 if (not IsGuildLeader()) and self.db.profile.guildcontrol then
|
|
farmbuyer@1
|
137 local function onclick() addon:BuildWindow() end
|
|
farmbuyer@1
|
138 local function onenter(this) GameTooltip_AddNewbieTip(this, GUILDCONTROL, 1.0, 1.0, 1.0, "/wrdw", 1) end
|
|
farmbuyer@1
|
139 GuildFrame_LoadUI()
|
|
farmbuyer@4
|
140 if not NUM_RANK_FLAGS then
|
|
farmbuyer@4
|
141 UIParentLoadAddOn("Blizzard_GuildControlUI")
|
|
farmbuyer@4
|
142 end
|
|
farmbuyer@1
|
143 hooksecurefunc("GuildFrame_CheckPermissions", function()
|
|
farmbuyer@1
|
144 GuildControlButton:Enable()
|
|
farmbuyer@1
|
145 GuildControlButton:SetScript("OnClick", onclick)
|
|
farmbuyer@1
|
146 GuildControlButton:SetScript("OnEnter", onenter)
|
|
farmbuyer@1
|
147 end)
|
|
farmbuyer@1
|
148 end
|
|
farmbuyer@1
|
149 end
|
|
farmbuyer@1
|
150
|
|
farmbuyer@1
|
151 function addon:OnDisable()
|
|
farmbuyer@3
|
152 self:Print(L["You will need to relog or /reload to fully disable this addon."])
|
|
farmbuyer@1
|
153 end
|
|
farmbuyer@1
|
154
|
|
farmbuyer@1
|
155 function addon:ToggleEnable()
|
|
farmbuyer@1
|
156 if self.db.profile.enable then
|
|
farmbuyer@1
|
157 self:Enable()
|
|
farmbuyer@1
|
158 else
|
|
farmbuyer@1
|
159 self:Disable()
|
|
farmbuyer@1
|
160 end
|
|
farmbuyer@1
|
161 end
|
|
farmbuyer@1
|
162
|
|
farmbuyer@1
|
163 function addon:OnChatCommand (input)
|
|
farmbuyer@7
|
164 if not NUM_RANK_FLAGS then -- in case a GM didn't get it loaded earlier
|
|
farmbuyer@7
|
165 GuildFrame_LoadUI()
|
|
farmbuyer@7
|
166 UIParentLoadAddOn("Blizzard_GuildControlUI")
|
|
farmbuyer@7
|
167 end
|
|
farmbuyer@1
|
168 if not input or input:trim() == "" then
|
|
farmbuyer@1
|
169 if self.display and self.display:IsShown() then
|
|
farmbuyer@1
|
170 self.display:Hide()
|
|
farmbuyer@1
|
171 else
|
|
farmbuyer@1
|
172 self:BuildWindow()
|
|
farmbuyer@1
|
173 end
|
|
farmbuyer@1
|
174 else
|
|
farmbuyer@1
|
175 --LibStub("AceConfigCmd-3.0").HandleCommand(self, "wrdw", nametag, input)
|
|
farmbuyer@1
|
176 LibStub("AceConfigDialog-3.0"):Open(nametag)
|
|
farmbuyer@1
|
177 end
|
|
farmbuyer@1
|
178 end
|
|
farmbuyer@1
|
179
|
|
farmbuyer@1
|
180
|
|
farmbuyer@1
|
181 -- Something somewhere has changed, redo the cache
|
|
farmbuyer@3
|
182 do
|
|
farmbuyer@3
|
183 local text = '|cffff1010' .. L["Guild flags have changed!"] .. '|r' ..
|
|
farmbuyer@3
|
184 L["You must close and reopen this window to display the changes."]
|
|
farmbuyer@3
|
185 function addon:GUILD_RANKS_UPDATE()
|
|
farmbuyer@3
|
186 self.perms = nil
|
|
farmbuyer@3
|
187 if (not incomplete) and self.display and self.display:IsVisible() then
|
|
farmbuyer@3
|
188 self.display:SetStatusText(text)
|
|
farmbuyer@3
|
189 end
|
|
farmbuyer@1
|
190 end
|
|
farmbuyer@1
|
191 end
|
|
farmbuyer@1
|
192
|
|
farmbuyer@1
|
193
|
|
farmbuyer@1
|
194 function addon:BuildPerms()
|
|
farmbuyer@1
|
195 assert(UIParentLoadAddOn("Blizzard_GuildControlUI"))
|
|
farmbuyer@2
|
196 local check = "|TInterface\\Buttons\\UI-CheckBox-Check:"..(st_rowheight+5).."|t"
|
|
farmbuyer@1
|
197
|
|
farmbuyer@1
|
198 -- http://www.wowace.com/addons/lib-st/pages/set-data/minimal-dataset-format/
|
|
farmbuyer@1
|
199 local p,v = {}, {}
|
|
farmbuyer@1
|
200 for r = 1, GuildControlGetNumRanks() do
|
|
farmbuyer@1
|
201 GuildControlSetRank(r)
|
|
farmbuyer@1
|
202
|
|
farmbuyer@1
|
203 -- permissions
|
|
farmbuyer@1
|
204 local flags = { GuildControlGetRankFlags() }
|
|
farmbuyer@1
|
205 local row = { GuildControlGetRankName(r) }
|
|
farmbuyer@1
|
206 for c = 1, NUM_RANK_FLAGS do if c ~= 14 then
|
|
farmbuyer@1
|
207 local newcol = #row + 1
|
|
farmbuyer@1
|
208 if c == 15 or c == 16 then
|
|
farmbuyer@1
|
209 local val = GetGuildBankWithdrawGoldLimit()
|
|
farmbuyer@1
|
210 row[newcol] = flags[c] and ((val == -1) and check or val) or ""
|
|
farmbuyer@1
|
211 else
|
|
farmbuyer@1
|
212 row[newcol] = flags[c] and check or ""
|
|
farmbuyer@1
|
213 end
|
|
farmbuyer@1
|
214 end end
|
|
farmbuyer@1
|
215 p[r] = row
|
|
farmbuyer@1
|
216
|
|
farmbuyer@1
|
217 -- guild vault
|
|
farmbuyer@1
|
218 local banktabs = {}
|
|
farmbuyer@1
|
219 for t = 1, GetNumGuildBankTabs() do
|
|
farmbuyer@1
|
220 -- isViewable, canDeposit, editText, numWithdrawals
|
|
farmbuyer@1
|
221 banktabs[t] = { row[1], GetGuildBankTabPermissions(t) }
|
|
farmbuyer@1
|
222 banktabs[t][2] = banktabs[t][2] and check or ""
|
|
farmbuyer@1
|
223 banktabs[t][3] = banktabs[t][3] and check or ""
|
|
farmbuyer@1
|
224 banktabs[t][4] = banktabs[t][4] and check or ""
|
|
farmbuyer@1
|
225 local withdraw = banktabs[t][5]
|
|
farmbuyer@1
|
226 banktabs[t][5] = (withdraw == -1) and check or (withdraw == 0) and "" or withdraw
|
|
farmbuyer@1
|
227 end
|
|
farmbuyer@1
|
228 v[r] = banktabs
|
|
farmbuyer@1
|
229 end
|
|
farmbuyer@1
|
230 self.perms = p
|
|
farmbuyer@1
|
231 -- This one needs to be turned inside-out to match the data requirements
|
|
farmbuyer@1
|
232 self.vault = {}
|
|
farmbuyer@1
|
233 for t = 1, GetNumGuildBankTabs() do
|
|
farmbuyer@1
|
234 self.vault[t] = {}
|
|
farmbuyer@1
|
235 for r = 1, #v do
|
|
farmbuyer@1
|
236 self.vault[t][r] = v[r][t]
|
|
farmbuyer@1
|
237 end
|
|
farmbuyer@1
|
238 end
|
|
farmbuyer@1
|
239 end
|
|
farmbuyer@1
|
240
|
|
farmbuyer@1
|
241
|
|
farmbuyer@1
|
242 local function setstatus(txt) addon.display:SetStatusText(txt) end
|
|
farmbuyer@1
|
243
|
|
farmbuyer@1
|
244 local make_sidetab
|
|
farmbuyer@1
|
245 do
|
|
farmbuyer@1
|
246 local lastclicked
|
|
farmbuyer@1
|
247 local function OnClick (thistab)
|
|
farmbuyer@1
|
248 if thistab == lastclicked then return end
|
|
farmbuyer@1
|
249 for i = 1, #sidetabs do
|
|
farmbuyer@1
|
250 sidetabs[i]:SetChecked(false)
|
|
farmbuyer@1
|
251 end
|
|
farmbuyer@1
|
252 thistab:SetChecked(true) -- should be redundant, but just in case
|
|
farmbuyer@1
|
253 lastclicked = thistab
|
|
farmbuyer@1
|
254 if thistab.callback then
|
|
farmbuyer@1
|
255 thistab:callback(thistab:GetID())
|
|
farmbuyer@1
|
256 end
|
|
farmbuyer@1
|
257 end
|
|
farmbuyer@1
|
258
|
|
farmbuyer@1
|
259 -- Some magic numbers here wrt the index
|
|
farmbuyer@1
|
260 function make_sidetab (index, callback)
|
|
farmbuyer@1
|
261 if not sidetabs then
|
|
farmbuyer@1
|
262 sidetabs = {}
|
|
farmbuyer@1
|
263 end
|
|
farmbuyer@1
|
264
|
|
farmbuyer@1
|
265 local tab = CreateFrame("CheckButton", "WRDWTab"..index, addon.display.frame, "SpellBookSkillLineTabTemplate", index)
|
|
farmbuyer@1
|
266 if index > 1 then
|
|
farmbuyer@1
|
267 tab:SetPoint("TOPLEFT", sidetabs[index-1], "BOTTOMLEFT", 0, -17)
|
|
farmbuyer@1
|
268 else
|
|
farmbuyer@1
|
269 tab:SetNormalTexture("Interface\\SpellBook\\GuildSpellbooktabBG")
|
|
farmbuyer@1
|
270 tab.TabardEmblem:Show()
|
|
farmbuyer@1
|
271 tab.TabardIconFrame:Show()
|
|
farmbuyer@1
|
272 SetLargeGuildTabardTextures("player", tab.TabardEmblem, tab:GetNormalTexture(), tab.TabardIconFrame)
|
|
farmbuyer@1
|
273 tab:SetPoint("TOPLEFT", addon.display.frame, "TOPRIGHT", 0, -17)
|
|
farmbuyer@1
|
274 end
|
|
farmbuyer@1
|
275 tab:SetScript("OnClick", OnClick)
|
|
farmbuyer@1
|
276 --tab:SetChecked(false) -- is default
|
|
farmbuyer@1
|
277 tab:Show()
|
|
farmbuyer@1
|
278 tab.callback = callback
|
|
farmbuyer@1
|
279 sidetabs[index] = tab
|
|
farmbuyer@1
|
280 return tab
|
|
farmbuyer@1
|
281 end
|
|
farmbuyer@1
|
282
|
|
farmbuyer@1
|
283 function addon:BuildVaultTabs()
|
|
farmbuyer@1
|
284 incomplete = nil
|
|
farmbuyer@1
|
285 local offset = 1 -- number of tabs already made
|
|
farmbuyer@1
|
286 local function pick_a_tab (tab, id)
|
|
farmbuyer@1
|
287 DisownChildren(self.display)
|
|
farmbuyer@1
|
288 self.display:AddChild(self.vault_sts[id-offset])
|
|
farmbuyer@1
|
289 end
|
|
farmbuyer@1
|
290 for t = 1, GetNumGuildBankTabs() do
|
|
farmbuyer@1
|
291 local name, icon = GetGuildBankTabInfo(t)
|
|
farmbuyer@1
|
292 incomplete = incomplete or icon == [[Interface\Icons\INV_Misc_QuestionMark]]
|
|
farmbuyer@1
|
293 local tab = make_sidetab(t+offset, pick_a_tab)
|
|
farmbuyer@1
|
294 tab:SetNormalTexture(icon)
|
|
farmbuyer@1
|
295 tab.tooltip = name
|
|
farmbuyer@1
|
296 end
|
|
farmbuyer@1
|
297 if incomplete then
|
|
farmbuyer@3
|
298 setstatus(L["Guild vault information is incomplete. Be closer to a vault, and give it some time. You may need to relog and/or open the guild roster/vault to force a client update."])
|
|
farmbuyer@1
|
299 end
|
|
farmbuyer@1
|
300 end
|
|
farmbuyer@1
|
301 end
|
|
farmbuyer@1
|
302
|
|
farmbuyer@1
|
303
|
|
farmbuyer@1
|
304 local function st_OnEnter (rowFrame, cellFrame, data, cols, row, realrow, column, sttable, button, ...)
|
|
farmbuyer@1
|
305 if (row == nil) or (realrow == nil) then -- mouseover column header
|
|
farmbuyer@1
|
306 setstatus(cellFrame:GetText():gsub('\n',' '))
|
|
farmbuyer@1
|
307 return true
|
|
farmbuyer@1
|
308 end
|
|
farmbuyer@1
|
309 return false -- continue with default highlighting behavior
|
|
farmbuyer@1
|
310 end
|
|
farmbuyer@1
|
311 local function st_OnLeave (rowFrame, cellFrame, data, cols, row, realrow, column, sttable, button, ...)
|
|
farmbuyer@1
|
312 setstatus("")
|
|
farmbuyer@1
|
313 return false -- continue with default un-highlighting behavior
|
|
farmbuyer@1
|
314 end
|
|
farmbuyer@1
|
315 local function st_OnClick (rowFrame, cellFrame, data, cols, row, realrow, column, sttable, button, ...)
|
|
farmbuyer@1
|
316 if (row == nil) or (realrow == nil) then return true end -- click column header, suppress reordering
|
|
farmbuyer@1
|
317 -- more here?
|
|
farmbuyer@1
|
318 return true -- do not do anything further
|
|
farmbuyer@1
|
319 end
|
|
farmbuyer@1
|
320
|
|
farmbuyer@1
|
321
|
|
farmbuyer@1
|
322 function addon:BuildMainST (permissions, parent_frame)
|
|
farmbuyer@1
|
323 -- if this language uses a trailing colon, strip it
|
|
farmbuyer@1
|
324 local tmp = GUILDCONTROL_RANKLABEL:gsub(":$","")
|
|
farmbuyer@1
|
325 local cols = {{
|
|
farmbuyer@1
|
326 name = tmp,
|
|
farmbuyer@1
|
327 width = 10 * #tmp,
|
|
farmbuyer@1
|
328 }}
|
|
farmbuyer@1
|
329 for i = 1, NUM_RANK_FLAGS do if i ~= 14 then
|
|
farmbuyer@1
|
330 table.insert(cols,{
|
|
farmbuyer@1
|
331 name = _G['GUILDCONTROL_OPTION'..i],
|
|
farmbuyer@4
|
332 width = st_colwidth,
|
|
farmbuyer@1
|
333 })
|
|
farmbuyer@1
|
334 end end
|
|
farmbuyer@1
|
335
|
|
farmbuyer@1
|
336 local ST = LibStub("ScrollingTable"):CreateST (cols, st_displayed_rows, st_rowheight, nil, parent_frame)
|
|
farmbuyer@1
|
337 ST:Hide()
|
|
farmbuyer@1
|
338
|
|
farmbuyer@1
|
339 ST:SetData(permissions, --[[minimal format=]]true)
|
|
farmbuyer@1
|
340 ST:RegisterEvents{
|
|
farmbuyer@1
|
341 OnEnter = st_OnEnter,
|
|
farmbuyer@1
|
342 OnLeave = st_OnLeave,
|
|
farmbuyer@1
|
343 OnClick = st_OnClick,
|
|
farmbuyer@1
|
344 OnDoubleClick = st_OnClick,
|
|
farmbuyer@1
|
345 }
|
|
farmbuyer@1
|
346
|
|
farmbuyer@1
|
347 return ST
|
|
farmbuyer@1
|
348 end
|
|
farmbuyer@1
|
349
|
|
farmbuyer@1
|
350 function addon:BuildVaultSTs (permissions, parent_frame)
|
|
farmbuyer@1
|
351 self.vault_sts = {}
|
|
farmbuyer@1
|
352 local cols = {
|
|
farmbuyer@1
|
353 self.main_st.st.cols[1],
|
|
farmbuyer@1
|
354 { name = GUILDCONTROL_VIEW_TAB, width = 80 },
|
|
farmbuyer@1
|
355 { name = GUILDCONTROL_DEPOSIT_ITEMS, width = 80 },
|
|
farmbuyer@1
|
356 { name = GUILDCONTROL_UPDATE_TEXT, width = 80 },
|
|
farmbuyer@1
|
357 { name = GUILDCONTROL_WITHDRAW_ITEMS, width = 150 },
|
|
farmbuyer@1
|
358 }
|
|
farmbuyer@1
|
359
|
|
farmbuyer@1
|
360 for tab = 1, #permissions do
|
|
farmbuyer@1
|
361 local ST = LibStub("ScrollingTable"):CreateST (cols, st_displayed_rows, st_rowheight, nil, parent_frame)
|
|
farmbuyer@1
|
362 ST:Hide()
|
|
farmbuyer@1
|
363 ST:SetData(permissions[tab], --[[minimal format=]]true)
|
|
farmbuyer@1
|
364 ST:RegisterEvents{
|
|
farmbuyer@1
|
365 OnEnter = st_OnEnter,
|
|
farmbuyer@1
|
366 OnLeave = st_OnLeave,
|
|
farmbuyer@1
|
367 OnClick = st_OnClick,
|
|
farmbuyer@1
|
368 OnDoubleClick = st_OnClick,
|
|
farmbuyer@1
|
369 }
|
|
farmbuyer@1
|
370 self.vault_sts[tab] = ST
|
|
farmbuyer@1
|
371 end
|
|
farmbuyer@1
|
372 end
|
|
farmbuyer@1
|
373
|
|
farmbuyer@1
|
374
|
|
farmbuyer@1
|
375 function addon:BuildWindow()
|
|
farmbuyer@1
|
376 local need_tabs
|
|
farmbuyer@1
|
377 if self.display then
|
|
farmbuyer@1
|
378 self.display:Hide()
|
|
farmbuyer@1
|
379 else
|
|
farmbuyer@1
|
380 self.display = AceGUI:Create("Frame")
|
|
farmbuyer@1
|
381 self.display:SetTitle("Which Rank Does What")
|
|
farmbuyer@1
|
382 self.display:SetLayout("Fill")
|
|
farmbuyer@1
|
383 self.display:SetStatusTable{
|
|
farmbuyer@4
|
384 width = (st_colwidth+4) * (NUM_RANK_FLAGS-1) -- flag columns
|
|
farmbuyer@4
|
385 + 105, -- rank label column
|
|
farmbuyer@1
|
386 height = 500,
|
|
farmbuyer@1
|
387 }
|
|
farmbuyer@1
|
388 self.display:ApplyStatus()
|
|
farmbuyer@1
|
389 self.display:SetCallback("OnClose", function(_d)
|
|
farmbuyer@1
|
390 if incomplete or (not self.perms) then
|
|
farmbuyer@1
|
391 -- stuff changed while open
|
|
farmbuyer@1
|
392 self.perms = nil
|
|
farmbuyer@1
|
393 self.display = nil
|
|
farmbuyer@1
|
394 sidetabs = nil
|
|
farmbuyer@1
|
395 AceGUI:Release(_d)
|
|
farmbuyer@1
|
396 end
|
|
farmbuyer@1
|
397 end)
|
|
farmbuyer@1
|
398 if self.display.EnableResize then
|
|
farmbuyer@1
|
399 self.display:EnableResize(false)
|
|
farmbuyer@1
|
400 end
|
|
farmbuyer@1
|
401 need_tabs = true
|
|
farmbuyer@1
|
402 end
|
|
farmbuyer@1
|
403
|
|
farmbuyer@1
|
404 if not self.perms then
|
|
farmbuyer@1
|
405 need_tabs = true
|
|
farmbuyer@1
|
406 self:BuildPerms() -- creates self.perms and self.vault
|
|
farmbuyer@1
|
407 DisownChildren(self.display)
|
|
farmbuyer@1
|
408 -- Could be new rows, fewer rows, changed tickboxes... ugh, trying to
|
|
farmbuyer@1
|
409 -- update the scrolltable is a pain. Throw it out and start over.
|
|
farmbuyer@1
|
410 if self.main_st and self.main_st.st then
|
|
farmbuyer@1
|
411 self.main_st:Release()
|
|
farmbuyer@1
|
412 end
|
|
farmbuyer@1
|
413 if self.vault_sts then for i = 1, #self.vault_sts do
|
|
farmbuyer@1
|
414 if self.vault_sts[i] and self.vault_sts[i].st then
|
|
farmbuyer@1
|
415 self.vault_sts[i]:Release()
|
|
farmbuyer@1
|
416 end
|
|
farmbuyer@1
|
417 end end
|
|
farmbuyer@1
|
418 self.main_st = nil
|
|
farmbuyer@1
|
419 self.vault_sts = nil
|
|
farmbuyer@1
|
420 end
|
|
farmbuyer@1
|
421 if not self.main_st then
|
|
farmbuyer@1
|
422 local st = self:BuildMainST (self.perms, self.display.content)
|
|
farmbuyer@1
|
423 self.main_st = AceGUI:Create("lib-st"):WrapST(st)
|
|
farmbuyer@1
|
424 self.main_st.head_offset = 20
|
|
farmbuyer@1
|
425 --st_widget.tail_offset = 5
|
|
farmbuyer@1
|
426 self.display:AddChild(self.main_st)
|
|
farmbuyer@1
|
427
|
|
farmbuyer@1
|
428 self:BuildVaultSTs (self.vault, self.display.content)
|
|
farmbuyer@1
|
429 for i,st in ipairs(self.vault_sts) do
|
|
farmbuyer@1
|
430 self.vault_sts[i] = AceGUI:Create("lib-st"):WrapST(st)
|
|
farmbuyer@1
|
431 self.vault_sts[i].head_offset = 20
|
|
farmbuyer@1
|
432 end
|
|
farmbuyer@1
|
433 end
|
|
farmbuyer@1
|
434
|
|
farmbuyer@1
|
435 if need_tabs or incomplete then
|
|
farmbuyer@1
|
436 local maintab = make_sidetab(1, function (this, id)
|
|
farmbuyer@1
|
437 DisownChildren(self.display)
|
|
farmbuyer@1
|
438 self.display:AddChild(self.main_st)
|
|
farmbuyer@1
|
439 end)
|
|
farmbuyer@1
|
440 maintab.tooltip = [[Rank permissions]]
|
|
farmbuyer@1
|
441 maintab:SetChecked(true)
|
|
farmbuyer@1
|
442 self:BuildVaultTabs()
|
|
farmbuyer@1
|
443 end
|
|
farmbuyer@1
|
444
|
|
farmbuyer@1
|
445 self.display:Show()
|
|
farmbuyer@1
|
446 return self.display
|
|
farmbuyer@1
|
447 end
|
|
farmbuyer@1
|
448
|
|
farmbuyer@1
|
449 -- vim:noet
|