Asa@63
|
1 local ItemAuditor = select(2, ...)
|
Asa@63
|
2 local Frames = ItemAuditor:NewModule("Frames")
|
Asa@58
|
3
|
Asa@58
|
4 local AceGUI = LibStub("AceGUI-3.0")
|
Asa@58
|
5
|
Asa@58
|
6 local tabs = {}
|
Asa@58
|
7
|
Asa@65
|
8 function Frames.RegisterTab(text, value, callback)
|
Asa@59
|
9 tabs[value] = {text=text, callback=callback}
|
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@59
|
28
|
Asa@58
|
29 currentContent = cb(container)
|
Asa@159
|
30 assert(currentContent, format("The callback for %s must return a frame in order for tab switching to work.", tostring(group)))
|
Asa@58
|
31 end
|
Asa@58
|
32
|
Asa@65
|
33 function Frames.CreateFrame(selectedTab)
|
Asa@59
|
34
|
Asa@58
|
35 if not displayFrame then
|
Asa@58
|
36 -- Create the frame container
|
Asa@58
|
37 displayFrame = AceGUI:Create("Frame")
|
Asa@58
|
38 ItemAuditor:RegisterFrame(displayFrame)
|
Asa@58
|
39 local window = displayFrame.frame;
|
Asa@58
|
40 -- I have no idea why AceGUI insists on using FULLSCREEN_DIALOG by default.
|
Asa@58
|
41 window:SetFrameStrata("MEDIUM")
|
Asa@58
|
42 displayFrame:SetTitle("ItemAuditor")
|
Asa@58
|
43 displayFrame:SetStatusText("")
|
Asa@58
|
44
|
Asa@58
|
45 displayFrame:SetLayout("Fill")
|
Asa@58
|
46
|
Asa@58
|
47 window:SetHeight(500);
|
Asa@58
|
48
|
Asa@58
|
49 local tabSet = {}
|
Asa@58
|
50 for key, data in pairs(tabs) do
|
Asa@58
|
51 tinsert(tabSet, {text=data['text'], value=key})
|
Asa@58
|
52 -- Default to the first tab.
|
Asa@58
|
53 if not selectedTab then
|
Asa@58
|
54 selectedTab = key
|
Asa@58
|
55 end
|
Asa@58
|
56 end
|
Asa@58
|
57 -- Each tab can adjust the width as needed.
|
Asa@58
|
58 window:SetWidth(300);
|
Asa@58
|
59
|
Asa@58
|
60 displayFrame.tab = AceGUI:Create("TabGroup")
|
Asa@58
|
61 displayFrame.tab:SetLayout("Flow")
|
Asa@58
|
62 displayFrame.tab:SetTabs(tabSet)
|
Asa@58
|
63 displayFrame.tab:SetCallback("OnGroupSelected", switchTab)
|
Asa@58
|
64
|
Asa@58
|
65
|
Asa@58
|
66 displayFrame:AddChild(displayFrame.tab)
|
Asa@58
|
67 end
|
Asa@130
|
68
|
Asa@130
|
69 displayFrame.frame:Raise()
|
Asa@58
|
70
|
Asa@58
|
71 if not selectedTab then
|
Asa@58
|
72 for key in pairs(tabs) do
|
Asa@58
|
73 selectedTab = key
|
Asa@58
|
74 break
|
Asa@58
|
75 end
|
Asa@58
|
76 end
|
Asa@58
|
77
|
Asa@58
|
78 displayFrame.tab:SelectTab(selectedTab)
|
Asa@58
|
79 displayFrame:Show()
|
Asa@58
|
80 end
|
Asa@58
|
81
|
Asa@65
|
82 function Frames.UpdateStatusText(message)
|
Asa@58
|
83 if displayFrame then
|
Asa@58
|
84 displayFrame:SetStatusText(message)
|
Asa@58
|
85 end
|
Asa@65
|
86 end
|
Asa@65
|
87
|
Asa@65
|
88 function ItemAuditor:UpdateStatusText(message)
|
Asa@65
|
89 return Frames.UpdateStatusText(message)
|
Asa@65
|
90 end
|
Asa@65
|
91
|
Asa@65
|
92 function ItemAuditor:RegisterTab(text, value, callback)
|
Asa@65
|
93 return Frames.RegisterTab(text, value, callback)
|
Asa@65
|
94 end
|
Asa@65
|
95
|
Asa@65
|
96 function ItemAuditor:CreateFrame(selectedTab)
|
Asa@65
|
97 Frames.CreateFrame(selectedTab)
|
Asa@65
|
98 end
|