Asa@58
|
1 local addonName, addonTable = ...;
|
Asa@58
|
2 local addon = _G[addonName]
|
Asa@58
|
3
|
Asa@58
|
4 local AceGUI = LibStub("AceGUI-3.0")
|
Asa@58
|
5
|
Asa@58
|
6 local tabs = {}
|
Asa@58
|
7
|
Asa@58
|
8 function addon:RegisterTab(text, value, width, callback)
|
Asa@58
|
9 tabs[value] = {text=text, callback=callback, width=width}
|
Asa@58
|
10 end
|
Asa@58
|
11
|
Asa@58
|
12 local displayFrame = false
|
Asa@58
|
13 local currentContent = false
|
Asa@58
|
14 local function switchTab(container, event, group)
|
Asa@58
|
15 if tabs[group] == nil then
|
Asa@58
|
16 error(format("Invaid tab name: %s", tostring(group)))
|
Asa@58
|
17 end
|
Asa@58
|
18 local cb = tabs[group].callback
|
Asa@58
|
19
|
Asa@58
|
20 container:ReleaseChildren()
|
Asa@58
|
21
|
Asa@58
|
22 if currentContent then
|
Asa@58
|
23 currentContent:Hide()
|
Asa@58
|
24 if displayFrame then
|
Asa@58
|
25 displayFrame:SetStatusText('')
|
Asa@58
|
26 end
|
Asa@58
|
27 end
|
Asa@58
|
28
|
Asa@58
|
29 currentContent = cb(container)
|
Asa@58
|
30 end
|
Asa@58
|
31
|
Asa@58
|
32
|
Asa@58
|
33 function addon:CreateFrame(selectedTab)
|
Asa@58
|
34 --@debug@
|
Asa@58
|
35 -- This is here so I can verify that all of the callbacks and tab switching works.
|
Asa@58
|
36 -- The real crafting tab will become its own module.
|
Asa@58
|
37 -- addon:RegisterTab('Placeholder Crafting', 'tab_crafting', 400, function() addon:Print('crafting') end)
|
Asa@58
|
38 --@end-debug@
|
Asa@58
|
39
|
Asa@58
|
40 if not displayFrame then
|
Asa@58
|
41 -- Create the frame container
|
Asa@58
|
42 displayFrame = AceGUI:Create("Frame")
|
Asa@58
|
43 ItemAuditor:RegisterFrame(displayFrame)
|
Asa@58
|
44 local window = displayFrame.frame;
|
Asa@58
|
45 -- I have no idea why AceGUI insists on using FULLSCREEN_DIALOG by default.
|
Asa@58
|
46 window:SetFrameStrata("MEDIUM")
|
Asa@58
|
47 displayFrame:SetTitle("ItemAuditor")
|
Asa@58
|
48 displayFrame:SetStatusText("")
|
Asa@58
|
49
|
Asa@58
|
50 displayFrame:SetLayout("Fill")
|
Asa@58
|
51
|
Asa@58
|
52 window:SetHeight(500);
|
Asa@58
|
53
|
Asa@58
|
54 local tabSet = {}
|
Asa@58
|
55 for key, data in pairs(tabs) do
|
Asa@58
|
56 tinsert(tabSet, {text=data['text'], value=key})
|
Asa@58
|
57 -- Default to the first tab.
|
Asa@58
|
58 if not selectedTab then
|
Asa@58
|
59 selectedTab = key
|
Asa@58
|
60 end
|
Asa@58
|
61 end
|
Asa@58
|
62 -- Each tab can adjust the width as needed.
|
Asa@58
|
63 window:SetWidth(300);
|
Asa@58
|
64
|
Asa@58
|
65 displayFrame.tab = AceGUI:Create("TabGroup")
|
Asa@58
|
66 displayFrame.tab:SetLayout("Flow")
|
Asa@58
|
67 displayFrame.tab:SetTabs(tabSet)
|
Asa@58
|
68 displayFrame.tab:SetCallback("OnGroupSelected", switchTab)
|
Asa@58
|
69
|
Asa@58
|
70
|
Asa@58
|
71 displayFrame:AddChild(displayFrame.tab)
|
Asa@58
|
72 end
|
Asa@58
|
73
|
Asa@58
|
74 if not selectedTab then
|
Asa@58
|
75 for key in pairs(tabs) do
|
Asa@58
|
76 selectedTab = key
|
Asa@58
|
77 break
|
Asa@58
|
78 end
|
Asa@58
|
79 end
|
Asa@58
|
80
|
Asa@58
|
81 displayFrame.tab:SelectTab(selectedTab)
|
Asa@58
|
82 displayFrame:Show()
|
Asa@58
|
83 end
|
Asa@58
|
84
|
Asa@58
|
85 function addon:UpdateStatusText(message)
|
Asa@58
|
86 if displayFrame then
|
Asa@58
|
87 displayFrame:SetStatusText(message)
|
Asa@58
|
88 end
|
Asa@58
|
89 end |