Xiiph@0
|
1 --[[-----------------------------------------------------------------------------
|
Xiiph@0
|
2 DropdownGroup Container
|
Xiiph@0
|
3 Container controlled by a dropdown on the top.
|
Xiiph@0
|
4 -------------------------------------------------------------------------------]]
|
Xiiph@0
|
5 local Type, Version = "DropdownGroup", 21
|
Xiiph@0
|
6 local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
|
Xiiph@0
|
7 if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
|
Xiiph@0
|
8
|
Xiiph@0
|
9 -- Lua APIs
|
Xiiph@0
|
10 local assert, pairs, type = assert, pairs, type
|
Xiiph@0
|
11
|
Xiiph@0
|
12 -- WoW APIs
|
Xiiph@0
|
13 local CreateFrame = CreateFrame
|
Xiiph@0
|
14
|
Xiiph@0
|
15 --[[-----------------------------------------------------------------------------
|
Xiiph@0
|
16 Scripts
|
Xiiph@0
|
17 -------------------------------------------------------------------------------]]
|
Xiiph@0
|
18 local function SelectedGroup(self, event, value)
|
Xiiph@0
|
19 local group = self.parentgroup
|
Xiiph@0
|
20 local status = group.status or group.localstatus
|
Xiiph@0
|
21 status.selected = value
|
Xiiph@0
|
22 self.parentgroup:Fire("OnGroupSelected", value)
|
Xiiph@0
|
23 end
|
Xiiph@0
|
24
|
Xiiph@0
|
25 --[[-----------------------------------------------------------------------------
|
Xiiph@0
|
26 Methods
|
Xiiph@0
|
27 -------------------------------------------------------------------------------]]
|
Xiiph@0
|
28 local methods = {
|
Xiiph@0
|
29 ["OnAcquire"] = function(self)
|
Xiiph@0
|
30 self.dropdown:SetText("")
|
Xiiph@0
|
31 self:SetDropdownWidth(200)
|
Xiiph@0
|
32 self:SetTitle("")
|
Xiiph@0
|
33 end,
|
Xiiph@0
|
34
|
Xiiph@0
|
35 ["OnRelease"] = function(self)
|
Xiiph@0
|
36 self.dropdown.list = nil
|
Xiiph@0
|
37 self.status = nil
|
Xiiph@0
|
38 for k in pairs(self.localstatus) do
|
Xiiph@0
|
39 self.localstatus[k] = nil
|
Xiiph@0
|
40 end
|
Xiiph@0
|
41 end,
|
Xiiph@0
|
42
|
Xiiph@0
|
43 ["SetTitle"] = function(self, title)
|
Xiiph@0
|
44 self.titletext:SetText(title)
|
Xiiph@0
|
45 self.dropdown.frame:ClearAllPoints()
|
Xiiph@0
|
46 if title and title ~= "" then
|
Xiiph@0
|
47 self.dropdown.frame:SetPoint("TOPRIGHT", -2, 0)
|
Xiiph@0
|
48 else
|
Xiiph@0
|
49 self.dropdown.frame:SetPoint("TOPLEFT", -1, 0)
|
Xiiph@0
|
50 end
|
Xiiph@0
|
51 end,
|
Xiiph@0
|
52
|
Xiiph@0
|
53 ["SetGroupList"] = function(self,list,order)
|
Xiiph@0
|
54 self.dropdown:SetList(list,order)
|
Xiiph@0
|
55 end,
|
Xiiph@0
|
56
|
Xiiph@0
|
57 ["SetStatusTable"] = function(self, status)
|
Xiiph@0
|
58 assert(type(status) == "table")
|
Xiiph@0
|
59 self.status = status
|
Xiiph@0
|
60 end,
|
Xiiph@0
|
61
|
Xiiph@0
|
62 ["SetGroup"] = function(self,group)
|
Xiiph@0
|
63 self.dropdown:SetValue(group)
|
Xiiph@0
|
64 local status = self.status or self.localstatus
|
Xiiph@0
|
65 status.selected = group
|
Xiiph@0
|
66 self:Fire("OnGroupSelected", group)
|
Xiiph@0
|
67 end,
|
Xiiph@0
|
68
|
Xiiph@0
|
69 ["OnWidthSet"] = function(self, width)
|
Xiiph@0
|
70 local content = self.content
|
Xiiph@0
|
71 local contentwidth = width - 26
|
Xiiph@0
|
72 if contentwidth < 0 then
|
Xiiph@0
|
73 contentwidth = 0
|
Xiiph@0
|
74 end
|
Xiiph@0
|
75 content:SetWidth(contentwidth)
|
Xiiph@0
|
76 content.width = contentwidth
|
Xiiph@0
|
77 end,
|
Xiiph@0
|
78
|
Xiiph@0
|
79 ["OnHeightSet"] = function(self, height)
|
Xiiph@0
|
80 local content = self.content
|
Xiiph@0
|
81 local contentheight = height - 63
|
Xiiph@0
|
82 if contentheight < 0 then
|
Xiiph@0
|
83 contentheight = 0
|
Xiiph@0
|
84 end
|
Xiiph@0
|
85 content:SetHeight(contentheight)
|
Xiiph@0
|
86 content.height = contentheight
|
Xiiph@0
|
87 end,
|
Xiiph@0
|
88
|
Xiiph@0
|
89 ["LayoutFinished"] = function(self, width, height)
|
Xiiph@0
|
90 self:SetHeight((height or 0) + 63)
|
Xiiph@0
|
91 end,
|
Xiiph@0
|
92
|
Xiiph@0
|
93 ["SetDropdownWidth"] = function(self, width)
|
Xiiph@0
|
94 self.dropdown:SetWidth(width)
|
Xiiph@0
|
95 end
|
Xiiph@0
|
96 }
|
Xiiph@0
|
97
|
Xiiph@0
|
98 --[[-----------------------------------------------------------------------------
|
Xiiph@0
|
99 Constructor
|
Xiiph@0
|
100 -------------------------------------------------------------------------------]]
|
Xiiph@0
|
101 local PaneBackdrop = {
|
Xiiph@0
|
102 bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
|
Xiiph@0
|
103 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
|
Xiiph@0
|
104 tile = true, tileSize = 16, edgeSize = 16,
|
Xiiph@0
|
105 insets = { left = 3, right = 3, top = 5, bottom = 3 }
|
Xiiph@0
|
106 }
|
Xiiph@0
|
107
|
Xiiph@0
|
108 local function Constructor()
|
Xiiph@0
|
109 local frame = CreateFrame("Frame")
|
Xiiph@0
|
110 frame:SetHeight(100)
|
Xiiph@0
|
111 frame:SetWidth(100)
|
Xiiph@0
|
112 frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
Xiiph@0
|
113
|
Xiiph@0
|
114 local titletext = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
Xiiph@0
|
115 titletext:SetPoint("TOPLEFT", 4, -5)
|
Xiiph@0
|
116 titletext:SetPoint("TOPRIGHT", -4, -5)
|
Xiiph@0
|
117 titletext:SetJustifyH("LEFT")
|
Xiiph@0
|
118 titletext:SetHeight(18)
|
Xiiph@0
|
119
|
Xiiph@0
|
120 local dropdown = AceGUI:Create("Dropdown")
|
Xiiph@0
|
121 dropdown.frame:SetParent(frame)
|
Xiiph@0
|
122 dropdown.frame:SetFrameLevel(dropdown.frame:GetFrameLevel() + 2)
|
Xiiph@0
|
123 dropdown:SetCallback("OnValueChanged", SelectedGroup)
|
Xiiph@0
|
124 dropdown.frame:SetPoint("TOPLEFT", -1, 0)
|
Xiiph@0
|
125 dropdown.frame:Show()
|
Xiiph@0
|
126 dropdown:SetLabel("")
|
Xiiph@0
|
127
|
Xiiph@0
|
128 local border = CreateFrame("Frame", nil, frame)
|
Xiiph@0
|
129 border:SetPoint("TOPLEFT", 0, -26)
|
Xiiph@0
|
130 border:SetPoint("BOTTOMRIGHT", 0, 3)
|
Xiiph@0
|
131 border:SetBackdrop(PaneBackdrop)
|
Xiiph@0
|
132 border:SetBackdropColor(0.1,0.1,0.1,0.5)
|
Xiiph@0
|
133 border:SetBackdropBorderColor(0.4,0.4,0.4)
|
Xiiph@0
|
134
|
Xiiph@0
|
135 --Container Support
|
Xiiph@0
|
136 local content = CreateFrame("Frame", nil, border)
|
Xiiph@0
|
137 content:SetPoint("TOPLEFT", 10, -10)
|
Xiiph@0
|
138 content:SetPoint("BOTTOMRIGHT", -10, 10)
|
Xiiph@0
|
139
|
Xiiph@0
|
140 local widget = {
|
Xiiph@0
|
141 frame = frame,
|
Xiiph@0
|
142 localstatus = {},
|
Xiiph@0
|
143 titletext = titletext,
|
Xiiph@0
|
144 dropdown = dropdown,
|
Xiiph@0
|
145 border = border,
|
Xiiph@0
|
146 content = content,
|
Xiiph@0
|
147 type = Type
|
Xiiph@0
|
148 }
|
Xiiph@0
|
149 for method, func in pairs(methods) do
|
Xiiph@0
|
150 widget[method] = func
|
Xiiph@0
|
151 end
|
Xiiph@0
|
152 dropdown.parentgroup = widget
|
Xiiph@0
|
153
|
Xiiph@0
|
154 return AceGUI:RegisterAsContainer(widget)
|
Xiiph@0
|
155 end
|
Xiiph@0
|
156
|
Xiiph@0
|
157 AceGUI:RegisterWidgetType(Type, Constructor, Version)
|