1 local AceGUI
= LibStub("AceGUI-3.0")
4 local pairs
, assert, type = pairs
, assert, type
7 local CreateFrame
, UIParent
= CreateFrame
, UIParent
9 -- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
10 -- List them here for Mikk's FindGlobals script
25 local FrameBackdrop
= {
26 bgFile
="Interface\\DialogFrame\\UI-DialogBox-Background",
27 edgeFile
="Interface\\DialogFrame\\UI-DialogBox-Border",
28 tile
= true, tileSize
= 32, edgeSize
= 32,
29 insets
= { left
= 8, right
= 8, top
= 8, bottom
= 8 }
32 local PaneBackdrop
= {
33 bgFile
= "Interface\\ChatFrame\\ChatFrameBackground",
34 edgeFile
= "Interface\\Tooltips\\UI-Tooltip-Border",
35 tile
= true, tileSize
= 16, edgeSize
= 16,
36 insets
= { left
= 3, right
= 3, top
= 5, bottom
= 3 }
39 local function frameOnClose(this
)
40 this
.obj
:Fire("OnClose")
43 local function closeOnClick(this
)
47 local function frameOnMouseDown(this
)
51 local function titleOnMouseDown(this
)
52 this
:GetParent():StartMoving()
56 local function frameOnMouseUp(this
)
57 local frame
= this
:GetParent()
58 frame
:StopMovingOrSizing()
59 local self
= frame
.obj
60 local status
= self
.status
or self
.localstatus
61 status
.width
= frame
:GetWidth()
62 status
.height
= frame
:GetHeight()
63 status
.top
= frame
:GetTop()
64 status
.left
= frame
:GetLeft()
67 local function sizerseOnMouseDown(this
)
68 this
:GetParent():StartSizing("BOTTOMRIGHT")
72 local function sizersOnMouseDown(this
)
73 this
:GetParent():StartSizing("BOTTOM")
77 local function sizereOnMouseDown(this
)
78 this
:GetParent():StartSizing("RIGHT")
82 local function SetTitle(self
,title
)
83 self
.titletext
:SetText(title
)
86 local function SetStatusText(self
,text
)
87 self
.statustext
:SetText(text
)
90 local function Hide(self
)
94 local function Show(self
)
98 local function OnAcquire(self
)
99 self
.frame
:SetParent(UIParent
)
100 self
.frame
:SetFrameStrata("FULLSCREEN_DIALOG")
104 local function OnRelease(self
)
106 for k
in pairs(self
.localstatus
) do
107 self
.localstatus
[k
] = nil
111 -- called to set an external table to store status in
112 local function SetStatusTable(self
, status
)
113 assert(type(status
) == "table")
118 local function ApplyStatus(self
)
119 local status
= self
.status
or self
.localstatus
120 local frame
= self
.frame
121 self
:SetWidth(status
.width
or 700)
122 self
:SetHeight(status
.height
or 500)
123 if status
.top
and status
.left
then
124 frame
:SetPoint("TOP",UIParent
,"BOTTOM",0,status
.top
)
125 frame
:SetPoint("LEFT",UIParent
,"LEFT",status
.left
,0)
127 frame
:SetPoint("CENTER",UIParent
,"CENTER")
131 local function OnWidthSet(self
, width
)
132 local content
= self
.content
133 local contentwidth
= width
- 34
134 if contentwidth
< 0 then
137 content
:SetWidth(contentwidth
)
138 content
.width
= contentwidth
142 local function OnHeightSet(self
, height
)
143 local content
= self
.content
144 local contentheight
= height
- 57
145 if contentheight
< 0 then
148 content
:SetHeight(contentheight
)
149 content
.height
= contentheight
152 local function Constructor()
153 local frame
= CreateFrame("Frame",nil,UIParent
)
159 self
.SetTitle
= SetTitle
160 self
.OnRelease
= OnRelease
161 self
.OnAcquire
= OnAcquire
162 self
.SetStatusText
= SetStatusText
163 self
.SetStatusTable
= SetStatusTable
164 self
.ApplyStatus
= ApplyStatus
165 self
.OnWidthSet
= OnWidthSet
166 self
.OnHeightSet
= OnHeightSet
168 self
.localstatus
= {}
174 frame
:SetPoint("CENTER",UIParent
,"CENTER",0,0)
176 frame
:SetMovable(true)
177 frame
:SetResizable(true)
178 frame
:SetFrameStrata("FULLSCREEN_DIALOG")
179 frame
:SetScript("OnMouseDown", frameOnMouseDown
)
181 frame
:SetBackdrop(FrameBackdrop
)
182 frame
:SetBackdropColor(0,0,0,1)
183 frame
:SetScript("OnHide",frameOnClose
)
184 frame
:SetMinResize(400,200)
185 frame
:SetToplevel(true)
187 local closebutton
= CreateFrame("Button",nil,frame
,"UIPanelButtonTemplate")
188 closebutton
:SetScript("OnClick", closeOnClick
)
189 closebutton
:SetPoint("BOTTOMRIGHT",frame
,"BOTTOMRIGHT",-27,17)
190 closebutton
:SetHeight(20)
191 closebutton
:SetWidth(100)
192 closebutton
:SetText(CLOSE
)
194 self
.closebutton
= closebutton
195 closebutton
.obj
= self
197 local statusbg
= CreateFrame("Frame",nil,frame
)
198 statusbg
:SetPoint("BOTTOMLEFT",frame
,"BOTTOMLEFT",15,15)
199 statusbg
:SetPoint("BOTTOMRIGHT",frame
,"BOTTOMRIGHT",-132,15)
200 statusbg
:SetHeight(24)
201 statusbg
:SetBackdrop(PaneBackdrop
)
202 statusbg
:SetBackdropColor(0.1,0.1,0.1)
203 statusbg
:SetBackdropBorderColor(0.4,0.4,0.4)
204 self
.statusbg
= statusbg
206 local statustext
= statusbg
:CreateFontString(nil,"OVERLAY","GameFontNormal")
207 self
.statustext
= statustext
208 statustext
:SetPoint("TOPLEFT",statusbg
,"TOPLEFT",7,-2)
209 statustext
:SetPoint("BOTTOMRIGHT",statusbg
,"BOTTOMRIGHT",-7,2)
210 statustext
:SetHeight(20)
211 statustext
:SetJustifyH("LEFT")
212 statustext
:SetText("")
214 local title
= CreateFrame("Frame",nil,frame
)
217 title
:SetScript("OnMouseDown",titleOnMouseDown
)
218 title
:SetScript("OnMouseUp", frameOnMouseUp
)
221 local titlebg
= frame
:CreateTexture(nil,"OVERLAY")
222 titlebg
:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header")
223 titlebg
:SetTexCoord(0.31,0.67,0,0.63)
224 titlebg
:SetPoint("TOP",frame
,"TOP",0,12)
225 titlebg
:SetWidth(100)
226 titlebg
:SetHeight(40)
228 local titlebg_l
= frame
:CreateTexture(nil,"OVERLAY")
229 titlebg_l
:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header")
230 titlebg_l
:SetTexCoord(0.21,0.31,0,0.63)
231 titlebg_l
:SetPoint("RIGHT",titlebg
,"LEFT",0,0)
232 titlebg_l
:SetWidth(30)
233 titlebg_l
:SetHeight(40)
235 local titlebg_right
= frame
:CreateTexture(nil,"OVERLAY")
236 titlebg_right
:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header")
237 titlebg_right
:SetTexCoord(0.67,0.77,0,0.63)
238 titlebg_right
:SetPoint("LEFT",titlebg
,"RIGHT",0,0)
239 titlebg_right
:SetWidth(30)
240 titlebg_right
:SetHeight(40)
242 title
:SetAllPoints(titlebg
)
243 local titletext
= title
:CreateFontString(nil,"OVERLAY","GameFontNormal")
244 titletext
:SetPoint("TOP",titlebg
,"TOP",0,-14)
246 self
.titletext
= titletext
248 local sizer_se
= CreateFrame("Frame",nil,frame
)
249 sizer_se
:SetPoint("BOTTOMRIGHT",frame
,"BOTTOMRIGHT",0,0)
250 sizer_se
:SetWidth(25)
251 sizer_se
:SetHeight(25)
252 sizer_se
:EnableMouse()
253 sizer_se
:SetScript("OnMouseDown",sizerseOnMouseDown
)
254 sizer_se
:SetScript("OnMouseUp", frameOnMouseUp
)
255 self
.sizer_se
= sizer_se
257 local line1
= sizer_se
:CreateTexture(nil, "BACKGROUND")
261 line1
:SetPoint("BOTTOMRIGHT", -8, 8)
262 line1
:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border")
263 local x
= 0.1 * 14/17
264 line1
:SetTexCoord(0.05 - x
, 0.5, 0.05, 0.5 + x
, 0.05, 0.5 - x
, 0.5 + x
, 0.5)
266 local line2
= sizer_se
:CreateTexture(nil, "BACKGROUND")
270 line2
:SetPoint("BOTTOMRIGHT", -8, 8)
271 line2
:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border")
273 line2
:SetTexCoord(0.05 - x
, 0.5, 0.05, 0.5 + x
, 0.05, 0.5 - x
, 0.5 + x
, 0.5)
275 local sizer_s
= CreateFrame("Frame",nil,frame
)
276 sizer_s
:SetPoint("BOTTOMRIGHT",frame
,"BOTTOMRIGHT",-25,0)
277 sizer_s
:SetPoint("BOTTOMLEFT",frame
,"BOTTOMLEFT",0,0)
278 sizer_s
:SetHeight(25)
279 sizer_s
:EnableMouse()
280 sizer_s
:SetScript("OnMouseDown",sizersOnMouseDown
)
281 sizer_s
:SetScript("OnMouseUp", frameOnMouseUp
)
282 self
.sizer_s
= sizer_s
284 local sizer_e
= CreateFrame("Frame",nil,frame
)
285 sizer_e
:SetPoint("BOTTOMRIGHT",frame
,"BOTTOMRIGHT",0,25)
286 sizer_e
:SetPoint("TOPRIGHT",frame
,"TOPRIGHT",0,0)
288 sizer_e
:EnableMouse()
289 sizer_e
:SetScript("OnMouseDown",sizereOnMouseDown
)
290 sizer_e
:SetScript("OnMouseUp", frameOnMouseUp
)
291 self
.sizer_e
= sizer_e
294 local content
= CreateFrame("Frame",nil,frame
)
295 self
.content
= content
297 content
:SetPoint("TOPLEFT",frame
,"TOPLEFT",17,-27)
298 content
:SetPoint("BOTTOMRIGHT",frame
,"BOTTOMRIGHT",-17,40)
300 AceGUI
:RegisterAsContainer(self
)
304 AceGUI
:RegisterWidgetType(Type
,Constructor
,Version
)