Asa@0
|
1 local AceGUI = LibStub("AceGUI-3.0")
|
Asa@0
|
2
|
Asa@0
|
3 -- Lua APIs
|
Asa@0
|
4 local pairs, assert, type = pairs, assert, type
|
Asa@0
|
5
|
Asa@0
|
6 -- WoW APIs
|
Asa@0
|
7 local CreateFrame, UIParent = CreateFrame, UIParent
|
Asa@0
|
8
|
Asa@0
|
9 -- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
|
Asa@0
|
10 -- List them here for Mikk's FindGlobals script
|
Asa@0
|
11 -- GLOBALS: CLOSE
|
Asa@0
|
12
|
Asa@0
|
13 ----------------
|
Asa@0
|
14 -- Main Frame --
|
Asa@0
|
15 ----------------
|
Asa@0
|
16 --[[
|
Asa@0
|
17 Events :
|
Asa@0
|
18 OnClose
|
Asa@0
|
19
|
Asa@0
|
20 ]]
|
Asa@0
|
21 do
|
Asa@0
|
22 local Type = "Frame"
|
Asa@0
|
23 local Version = 9
|
Asa@0
|
24
|
Asa@0
|
25 local FrameBackdrop = {
|
Asa@0
|
26 bgFile="Interface\\DialogFrame\\UI-DialogBox-Background",
|
Asa@0
|
27 edgeFile="Interface\\DialogFrame\\UI-DialogBox-Border",
|
Asa@0
|
28 tile = true, tileSize = 32, edgeSize = 32,
|
Asa@0
|
29 insets = { left = 8, right = 8, top = 8, bottom = 8 }
|
Asa@0
|
30 }
|
Asa@0
|
31
|
Asa@0
|
32 local PaneBackdrop = {
|
Asa@0
|
33 bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
|
Asa@0
|
34 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
|
Asa@0
|
35 tile = true, tileSize = 16, edgeSize = 16,
|
Asa@0
|
36 insets = { left = 3, right = 3, top = 5, bottom = 3 }
|
Asa@0
|
37 }
|
Asa@0
|
38
|
Asa@0
|
39 local function frameOnClose(this)
|
Asa@0
|
40 this.obj:Fire("OnClose")
|
Asa@0
|
41 end
|
Asa@0
|
42
|
Asa@0
|
43 local function closeOnClick(this)
|
Asa@0
|
44 this.obj:Hide()
|
Asa@0
|
45 end
|
Asa@0
|
46
|
Asa@0
|
47 local function frameOnMouseDown(this)
|
Asa@0
|
48 AceGUI:ClearFocus()
|
Asa@0
|
49 end
|
Asa@0
|
50
|
Asa@0
|
51 local function titleOnMouseDown(this)
|
Asa@0
|
52 this:GetParent():StartMoving()
|
Asa@0
|
53 AceGUI:ClearFocus()
|
Asa@0
|
54 end
|
Asa@0
|
55
|
Asa@0
|
56 local function frameOnMouseUp(this)
|
Asa@0
|
57 local frame = this:GetParent()
|
Asa@0
|
58 frame:StopMovingOrSizing()
|
Asa@0
|
59 local self = frame.obj
|
Asa@0
|
60 local status = self.status or self.localstatus
|
Asa@0
|
61 status.width = frame:GetWidth()
|
Asa@0
|
62 status.height = frame:GetHeight()
|
Asa@0
|
63 status.top = frame:GetTop()
|
Asa@0
|
64 status.left = frame:GetLeft()
|
Asa@0
|
65 end
|
Asa@0
|
66
|
Asa@0
|
67 local function sizerseOnMouseDown(this)
|
Asa@0
|
68 this:GetParent():StartSizing("BOTTOMRIGHT")
|
Asa@0
|
69 AceGUI:ClearFocus()
|
Asa@0
|
70 end
|
Asa@0
|
71
|
Asa@0
|
72 local function sizersOnMouseDown(this)
|
Asa@0
|
73 this:GetParent():StartSizing("BOTTOM")
|
Asa@0
|
74 AceGUI:ClearFocus()
|
Asa@0
|
75 end
|
Asa@0
|
76
|
Asa@0
|
77 local function sizereOnMouseDown(this)
|
Asa@0
|
78 this:GetParent():StartSizing("RIGHT")
|
Asa@0
|
79 AceGUI:ClearFocus()
|
Asa@0
|
80 end
|
Asa@0
|
81
|
Asa@0
|
82 local function SetTitle(self,title)
|
Asa@0
|
83 self.titletext:SetText(title)
|
Asa@0
|
84 end
|
Asa@0
|
85
|
Asa@0
|
86 local function SetStatusText(self,text)
|
Asa@0
|
87 self.statustext:SetText(text)
|
Asa@0
|
88 end
|
Asa@0
|
89
|
Asa@0
|
90 local function Hide(self)
|
Asa@0
|
91 self.frame:Hide()
|
Asa@0
|
92 end
|
Asa@0
|
93
|
Asa@0
|
94 local function Show(self)
|
Asa@0
|
95 self.frame:Show()
|
Asa@0
|
96 end
|
Asa@0
|
97
|
Asa@0
|
98 local function OnAcquire(self)
|
Asa@0
|
99 self.frame:SetParent(UIParent)
|
Asa@0
|
100 self.frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
Asa@0
|
101 self:ApplyStatus()
|
Asa@0
|
102 end
|
Asa@0
|
103
|
Asa@0
|
104 local function OnRelease(self)
|
Asa@0
|
105 self.status = nil
|
Asa@0
|
106 for k in pairs(self.localstatus) do
|
Asa@0
|
107 self.localstatus[k] = nil
|
Asa@0
|
108 end
|
Asa@0
|
109 end
|
Asa@0
|
110
|
Asa@0
|
111 -- called to set an external table to store status in
|
Asa@0
|
112 local function SetStatusTable(self, status)
|
Asa@0
|
113 assert(type(status) == "table")
|
Asa@0
|
114 self.status = status
|
Asa@0
|
115 self:ApplyStatus()
|
Asa@0
|
116 end
|
Asa@0
|
117
|
Asa@0
|
118 local function ApplyStatus(self)
|
Asa@0
|
119 local status = self.status or self.localstatus
|
Asa@0
|
120 local frame = self.frame
|
Asa@0
|
121 self:SetWidth(status.width or 700)
|
Asa@0
|
122 self:SetHeight(status.height or 500)
|
Asa@0
|
123 if status.top and status.left then
|
Asa@0
|
124 frame:SetPoint("TOP",UIParent,"BOTTOM",0,status.top)
|
Asa@0
|
125 frame:SetPoint("LEFT",UIParent,"LEFT",status.left,0)
|
Asa@0
|
126 else
|
Asa@0
|
127 frame:SetPoint("CENTER",UIParent,"CENTER")
|
Asa@0
|
128 end
|
Asa@0
|
129 end
|
Asa@0
|
130
|
Asa@0
|
131 local function OnWidthSet(self, width)
|
Asa@0
|
132 local content = self.content
|
Asa@0
|
133 local contentwidth = width - 34
|
Asa@0
|
134 if contentwidth < 0 then
|
Asa@0
|
135 contentwidth = 0
|
Asa@0
|
136 end
|
Asa@0
|
137 content:SetWidth(contentwidth)
|
Asa@0
|
138 content.width = contentwidth
|
Asa@0
|
139 end
|
Asa@0
|
140
|
Asa@0
|
141
|
Asa@0
|
142 local function OnHeightSet(self, height)
|
Asa@0
|
143 local content = self.content
|
Asa@0
|
144 local contentheight = height - 57
|
Asa@0
|
145 if contentheight < 0 then
|
Asa@0
|
146 contentheight = 0
|
Asa@0
|
147 end
|
Asa@0
|
148 content:SetHeight(contentheight)
|
Asa@0
|
149 content.height = contentheight
|
Asa@0
|
150 end
|
Asa@0
|
151
|
Asa@0
|
152 local function Constructor()
|
Asa@0
|
153 local frame = CreateFrame("Frame",nil,UIParent)
|
Asa@0
|
154 local self = {}
|
Asa@0
|
155 self.type = "Frame"
|
Asa@0
|
156
|
Asa@0
|
157 self.Hide = Hide
|
Asa@0
|
158 self.Show = Show
|
Asa@0
|
159 self.SetTitle = SetTitle
|
Asa@0
|
160 self.OnRelease = OnRelease
|
Asa@0
|
161 self.OnAcquire = OnAcquire
|
Asa@0
|
162 self.SetStatusText = SetStatusText
|
Asa@0
|
163 self.SetStatusTable = SetStatusTable
|
Asa@0
|
164 self.ApplyStatus = ApplyStatus
|
Asa@0
|
165 self.OnWidthSet = OnWidthSet
|
Asa@0
|
166 self.OnHeightSet = OnHeightSet
|
Asa@0
|
167
|
Asa@0
|
168 self.localstatus = {}
|
Asa@0
|
169
|
Asa@0
|
170 self.frame = frame
|
Asa@0
|
171 frame.obj = self
|
Asa@0
|
172 frame:SetWidth(700)
|
Asa@0
|
173 frame:SetHeight(500)
|
Asa@0
|
174 frame:SetPoint("CENTER",UIParent,"CENTER",0,0)
|
Asa@0
|
175 frame:EnableMouse()
|
Asa@0
|
176 frame:SetMovable(true)
|
Asa@0
|
177 frame:SetResizable(true)
|
Asa@0
|
178 frame:SetFrameStrata("FULLSCREEN_DIALOG")
|
Asa@0
|
179 frame:SetScript("OnMouseDown", frameOnMouseDown)
|
Asa@0
|
180
|
Asa@0
|
181 frame:SetBackdrop(FrameBackdrop)
|
Asa@0
|
182 frame:SetBackdropColor(0,0,0,1)
|
Asa@0
|
183 frame:SetScript("OnHide",frameOnClose)
|
Asa@0
|
184 frame:SetMinResize(400,200)
|
Asa@0
|
185 frame:SetToplevel(true)
|
Asa@0
|
186
|
Asa@0
|
187 local closebutton = CreateFrame("Button",nil,frame,"UIPanelButtonTemplate")
|
Asa@0
|
188 closebutton:SetScript("OnClick", closeOnClick)
|
Asa@0
|
189 closebutton:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-27,17)
|
Asa@0
|
190 closebutton:SetHeight(20)
|
Asa@0
|
191 closebutton:SetWidth(100)
|
Asa@0
|
192 closebutton:SetText(CLOSE)
|
Asa@0
|
193
|
Asa@0
|
194 self.closebutton = closebutton
|
Asa@0
|
195 closebutton.obj = self
|
Asa@0
|
196
|
Asa@0
|
197 local statusbg = CreateFrame("Frame",nil,frame)
|
Asa@0
|
198 statusbg:SetPoint("BOTTOMLEFT",frame,"BOTTOMLEFT",15,15)
|
Asa@0
|
199 statusbg:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-132,15)
|
Asa@0
|
200 statusbg:SetHeight(24)
|
Asa@0
|
201 statusbg:SetBackdrop(PaneBackdrop)
|
Asa@0
|
202 statusbg:SetBackdropColor(0.1,0.1,0.1)
|
Asa@0
|
203 statusbg:SetBackdropBorderColor(0.4,0.4,0.4)
|
Asa@0
|
204 self.statusbg = statusbg
|
Asa@0
|
205
|
Asa@0
|
206 local statustext = statusbg:CreateFontString(nil,"OVERLAY","GameFontNormal")
|
Asa@0
|
207 self.statustext = statustext
|
Asa@0
|
208 statustext:SetPoint("TOPLEFT",statusbg,"TOPLEFT",7,-2)
|
Asa@0
|
209 statustext:SetPoint("BOTTOMRIGHT",statusbg,"BOTTOMRIGHT",-7,2)
|
Asa@0
|
210 statustext:SetHeight(20)
|
Asa@0
|
211 statustext:SetJustifyH("LEFT")
|
Asa@0
|
212 statustext:SetText("")
|
Asa@0
|
213
|
Asa@0
|
214 local title = CreateFrame("Frame",nil,frame)
|
Asa@0
|
215 self.title = title
|
Asa@0
|
216 title:EnableMouse()
|
Asa@0
|
217 title:SetScript("OnMouseDown",titleOnMouseDown)
|
Asa@0
|
218 title:SetScript("OnMouseUp", frameOnMouseUp)
|
Asa@0
|
219
|
Asa@0
|
220
|
Asa@0
|
221 local titlebg = frame:CreateTexture(nil,"OVERLAY")
|
Asa@0
|
222 titlebg:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header")
|
Asa@0
|
223 titlebg:SetTexCoord(0.31,0.67,0,0.63)
|
Asa@0
|
224 titlebg:SetPoint("TOP",frame,"TOP",0,12)
|
Asa@0
|
225 titlebg:SetWidth(100)
|
Asa@0
|
226 titlebg:SetHeight(40)
|
Asa@0
|
227
|
Asa@0
|
228 local titlebg_l = frame:CreateTexture(nil,"OVERLAY")
|
Asa@0
|
229 titlebg_l:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header")
|
Asa@0
|
230 titlebg_l:SetTexCoord(0.21,0.31,0,0.63)
|
Asa@0
|
231 titlebg_l:SetPoint("RIGHT",titlebg,"LEFT",0,0)
|
Asa@0
|
232 titlebg_l:SetWidth(30)
|
Asa@0
|
233 titlebg_l:SetHeight(40)
|
Asa@0
|
234
|
Asa@0
|
235 local titlebg_right = frame:CreateTexture(nil,"OVERLAY")
|
Asa@0
|
236 titlebg_right:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header")
|
Asa@0
|
237 titlebg_right:SetTexCoord(0.67,0.77,0,0.63)
|
Asa@0
|
238 titlebg_right:SetPoint("LEFT",titlebg,"RIGHT",0,0)
|
Asa@0
|
239 titlebg_right:SetWidth(30)
|
Asa@0
|
240 titlebg_right:SetHeight(40)
|
Asa@0
|
241
|
Asa@0
|
242 title:SetAllPoints(titlebg)
|
Asa@0
|
243 local titletext = title:CreateFontString(nil,"OVERLAY","GameFontNormal")
|
Asa@0
|
244 titletext:SetPoint("TOP",titlebg,"TOP",0,-14)
|
Asa@0
|
245
|
Asa@0
|
246 self.titletext = titletext
|
Asa@0
|
247
|
Asa@0
|
248 local sizer_se = CreateFrame("Frame",nil,frame)
|
Asa@0
|
249 sizer_se:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",0,0)
|
Asa@0
|
250 sizer_se:SetWidth(25)
|
Asa@0
|
251 sizer_se:SetHeight(25)
|
Asa@0
|
252 sizer_se:EnableMouse()
|
Asa@0
|
253 sizer_se:SetScript("OnMouseDown",sizerseOnMouseDown)
|
Asa@0
|
254 sizer_se:SetScript("OnMouseUp", frameOnMouseUp)
|
Asa@0
|
255 self.sizer_se = sizer_se
|
Asa@0
|
256
|
Asa@0
|
257 local line1 = sizer_se:CreateTexture(nil, "BACKGROUND")
|
Asa@0
|
258 self.line1 = line1
|
Asa@0
|
259 line1:SetWidth(14)
|
Asa@0
|
260 line1:SetHeight(14)
|
Asa@0
|
261 line1:SetPoint("BOTTOMRIGHT", -8, 8)
|
Asa@0
|
262 line1:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border")
|
Asa@0
|
263 local x = 0.1 * 14/17
|
Asa@0
|
264 line1:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5)
|
Asa@0
|
265
|
Asa@0
|
266 local line2 = sizer_se:CreateTexture(nil, "BACKGROUND")
|
Asa@0
|
267 self.line2 = line2
|
Asa@0
|
268 line2:SetWidth(8)
|
Asa@0
|
269 line2:SetHeight(8)
|
Asa@0
|
270 line2:SetPoint("BOTTOMRIGHT", -8, 8)
|
Asa@0
|
271 line2:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border")
|
Asa@0
|
272 local x = 0.1 * 8/17
|
Asa@0
|
273 line2:SetTexCoord(0.05 - x, 0.5, 0.05, 0.5 + x, 0.05, 0.5 - x, 0.5 + x, 0.5)
|
Asa@0
|
274
|
Asa@0
|
275 local sizer_s = CreateFrame("Frame",nil,frame)
|
Asa@0
|
276 sizer_s:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-25,0)
|
Asa@0
|
277 sizer_s:SetPoint("BOTTOMLEFT",frame,"BOTTOMLEFT",0,0)
|
Asa@0
|
278 sizer_s:SetHeight(25)
|
Asa@0
|
279 sizer_s:EnableMouse()
|
Asa@0
|
280 sizer_s:SetScript("OnMouseDown",sizersOnMouseDown)
|
Asa@0
|
281 sizer_s:SetScript("OnMouseUp", frameOnMouseUp)
|
Asa@0
|
282 self.sizer_s = sizer_s
|
Asa@0
|
283
|
Asa@0
|
284 local sizer_e = CreateFrame("Frame",nil,frame)
|
Asa@0
|
285 sizer_e:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",0,25)
|
Asa@0
|
286 sizer_e:SetPoint("TOPRIGHT",frame,"TOPRIGHT",0,0)
|
Asa@0
|
287 sizer_e:SetWidth(25)
|
Asa@0
|
288 sizer_e:EnableMouse()
|
Asa@0
|
289 sizer_e:SetScript("OnMouseDown",sizereOnMouseDown)
|
Asa@0
|
290 sizer_e:SetScript("OnMouseUp", frameOnMouseUp)
|
Asa@0
|
291 self.sizer_e = sizer_e
|
Asa@0
|
292
|
Asa@0
|
293 --Container Support
|
Asa@0
|
294 local content = CreateFrame("Frame",nil,frame)
|
Asa@0
|
295 self.content = content
|
Asa@0
|
296 content.obj = self
|
Asa@0
|
297 content:SetPoint("TOPLEFT",frame,"TOPLEFT",17,-27)
|
Asa@0
|
298 content:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-17,40)
|
Asa@0
|
299
|
Asa@0
|
300 AceGUI:RegisterAsContainer(self)
|
Asa@0
|
301 return self
|
Asa@0
|
302 end
|
Asa@0
|
303
|
Asa@0
|
304 AceGUI:RegisterWidgetType(Type,Constructor,Version)
|
Asa@0
|
305 end
|