WoWInterface SVN HealMeNow

[/] [trunk/] [Libs/] [AceGUI-3.0/] [widgets/] [AceGUIWidget-Frame.lua] - Blame information for rev 3

Details | Compare with Previous | View Log

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