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 |