vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1  
2 assert( oRA, "oRA not found!")
3  
4 ------------------------------
5 -- Are you local? --
6 ------------------------------
7  
8 local L = AceLibrary("AceLocale-2.2"):new("oRAOZone")
9  
10 local compost = AceLibrary:HasInstance("Compost-2.0") and AceLibrary("Compost-2.0")
11 local function getnewtable() return compost and compost:Acquire() or {} end
12 local function reclaimtable(t) if compost then compost:Reclaim(t) end end
13  
14 ----------------------------
15 -- Localization --
16 ----------------------------
17  
18 L:RegisterTranslations("enUS", function() return {
19 ["zoneoptional"] = true,
20 ["zone"] = true,
21 ["Zone"] = true,
22 ["Options for zone checks."] = true,
23 ["Refresh"] = true,
24 ["Close"] = true,
25 ["Unknown"] = true,
26 ["Name"] = true,
27 ["Optional/Zone"] = true,
28 ["check"] = true,
29 ["Perform zone check"] = true,
30 ["Check the raid's location."] = true,
31 } end )
32  
33 L:RegisterTranslations("koKR", function() return {
34  
35 ["Zone"] = "지역",
36 ["Options for zone checks."] = "지역 확인 설정",
37 ["Refresh"] = "갱신",
38 ["Close"] = "닫기",
39 ["Unknown"] = "알수없음",
40 ["Name"] = "이름",
41 ["Optional/Zone"] = "부가/지역",
42 ["Perform zone check"] = "지역 확인 실시",
43 ["Check the raid's location."] = "공격대원의 위치를 확인합니다.",
44 } end )
45  
46 L:RegisterTranslations("zhCN", function() return {
47 ["zoneoptional"] = "zoneoptional",
48 ["zone"] = "区域",
49 ["Zone"] = "区域",
50 ["Options for zone checks."] = "区域检查选项",
51 ["Refresh"] = "刷新",
52 ["Close"] = "关闭",
53 ["Unknown"] = "未知",
54 ["Name"] = "姓名",
55 ["Optional/Zone"] = "Optional/Zone",
56 ["check"] = "检查",
57 ["Perform zone check"] = "区域检查",
58 ["Check the raid's location."] = "检查团队所在区域",
59 } end )
60  
61 L:RegisterTranslations("zhTW", function() return {
62 ["zoneoptional"] = "zoneoptional",
63 ["zone"] = "區域",
64 ["Zone"] = "區域",
65 ["Options for zone checks."] = "區域檢查選項",
66 ["Refresh"] = "更新",
67 ["Close"] = "關閉",
68 ["Unknown"] = "未知",
69 ["Name"] = "姓名",
70 ["Optional/Zone"] = "可選/區域",
71 ["check"] = "檢查",
72 ["Perform zone check"] = "區域檢查",
73 ["Check the raid's location."] = "檢查團隊所在區域",
74 } end )
75  
76 L:RegisterTranslations("frFR", function() return {
77 --["zoneoptional"] = true,
78 --["zone"] = true,
79 --["Zone"] = true,
80 ["Options for zone checks."] = "Options concernant les v\195\169rifications de zone.",
81 ["Refresh"] = "Rafra\195\174chir",
82 ["Close"] = "Fermer",
83 ["Unknown"] = "Inconnu",
84 ["Name"] = "Nom",
85 ["Optional/Zone"] = "Optionnel/Zone",
86 --["check"] = true,
87 ["Perform zone check"] = "V\195\169rifier les zones",
88 ["Check the raid's location."] = "V\195\169rifie la position des membres du raid.",
89 } end )
90  
91 ----------------------------------
92 -- Module Declaration --
93 ----------------------------------
94  
95 oRAOZone = oRA:NewModule(L["zoneoptional"])
96 oRAOZone.defaults = {
97 }
98 oRAOZone.participant = true
99 oRAOZone.name = L["Optional/Zone"]
100 oRAOZone.consoleCmd = L["zone"]
101 oRAOZone.consoleOptions = {
102 type = "group",
103 desc = L["Options for zone checks."],
104 name = L["Zone"],
105 args = {
106 [L["check"]] = {
107 type="execute", name = L["Perform zone check"],
108 desc = L["Check the raid's location."],
109 func = function()
110 oRAOZone:PerformZoneCheck()
111 end,
112 disabled = function() return not oRA:IsModuleActive(oRAOZone) end,
113 },
114 }
115 }
116  
117 ------------------------------
118 -- Initialization --
119 ------------------------------
120  
121 function oRAOZone:OnEnable()
122 self.players = getnewtable()
123 self.sorting = getnewtable()
124  
125 self.sorting[1] = L["Name"]
126 self.sorting[2] = L["Zone"]
127  
128 self:SetupFrames()
129 self:RegisterShorthand("razone", function() self:PerformZoneCheck() end )
130 end
131  
132 function oRAOZone:OnDisable()
133 self:UnregisterAllEvents()
134  
135 self:UnregisterShorthand("razone")
136  
137 reclaimtable( self.players )
138 self.players = nil
139 reclaimtable( self.sorting )
140 self.sorting = nil
141 end
142  
143  
144 -----------------------
145 -- Command Handlers --
146 -----------------------
147  
148 function oRAOZone:PerformZoneCheck()
149 local playerzone = GetRealZoneText()
150 local playername = UnitName("player")
151  
152 reclaimtable( self.players )
153 self.players = nil
154 self.players = getnewtable()
155  
156 for i = 1, GetNumRaidMembers() do
157 local name, _, _, _, _, class, zone, _, _ = GetRaidRosterInfo(i)
158 zone = zone or L["Unknown"]
159 if name ~= playername and zone ~= playerzone then
160 table.insert(self.players, {name, zone})
161 end
162 end
163 self.frames.main:Show()
164 self:UpdateScrollBar()
165  
166 end
167  
168 ---------------------------
169 -- Utility Functions --
170 ---------------------------
171  
172 function oRAOZone:SetupFrames()
173 local f, t, sframe, i, j
174  
175 f, _, _ = GameFontNormal:GetFont()
176  
177 self.frames = {}
178  
179 self.frames.main = CreateFrame("Frame", "oRAZoneReportFrame", UIParent)
180 self.frames.main:Hide()
181 self.frames.main:SetWidth(325)
182 self.frames.main:SetHeight(350)
183 self.frames.main:EnableMouse(true)
184 self.frames.main:SetMovable(true)
185 self.frames.main:RegisterForDrag("LeftButton")
186 self.frames.main:SetScript("OnDragStart", function() this:StartMoving() end)
187 self.frames.main:SetScript("OnDragStop", function() this:StopMovingOrSizing() end)
188 self.frames.main:SetBackdrop({
189 bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", tile = true, tileSize = 16,
190 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", edgeSize = 16,
191 insets = {left = 4, right = 4, top = 4, bottom = 4},
192 })
193 self.frames.main:SetBackdropBorderColor(.5, .5, .5)
194 self.frames.main:SetBackdropColor(0,0,0)
195 self.frames.main:ClearAllPoints()
196 self.frames.main:SetPoint("CENTER", WorldFrame, "CENTER", 0, 0)
197  
198 self.frames.fade = self.frames.main:CreateTexture(nil, "BORDER")
199 self.frames.fade:SetWidth(319)
200 self.frames.fade:SetHeight(25)
201 self.frames.fade:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
202 self.frames.fade:SetPoint("TOP", self.frames.main, "TOP", 0, -4)
203 self.frames.fade:SetBlendMode("ADD")
204 self.frames.fade:SetGradientAlpha("VERTICAL", .1, .1, .1, 0, .25, .25, .25, 1)
205 self.frames.main.Fade = self.frames.fade
206  
207 self.frames.header = self.frames.main:CreateFontString(nil,"OVERLAY")
208 self.frames.header:SetFont(f, 14)
209 self.frames.header:SetWidth(300)
210 self.frames.header:SetText(L["Zone"])
211 self.frames.header:SetTextColor(1, .8, 0)
212 self.frames.header:ClearAllPoints()
213 self.frames.header:SetPoint("TOP", self.frames.main, "TOP", 0, -10)
214  
215 self.frames.headername = CreateFrame("Button", nil, self.frames.main)
216 self.frames.headername.owner = self
217 self.frames.headername:SetWidth(125)
218 self.frames.headername:SetHeight(16)
219 self.frames.headername:SetPoint("TOPLEFT", self.frames.main, "TOPLEFT", 10, -35)
220 self.frames.headername:SetScript("OnClick",
221 function()
222 this.owner:Sort(self.players, 1)
223 this.owner:UpdateScrollBar()
224 end)
225  
226 self.frames.headernamehigh = self.frames.headername:CreateTexture(nil, "BORDER")
227 self.frames.headernamehigh:SetWidth(125)
228 self.frames.headernamehigh:SetHeight(16)
229 self.frames.headernamehigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
230 self.frames.headernamehigh:SetAllPoints(self.frames.headername)
231 self.frames.headernamehigh:SetBlendMode("ADD")
232 self.frames.headernamehigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
233 self.frames.headername:SetHighlightTexture(self.frames.headernamehigh)
234  
235 self.frames.headernametext = self.frames.headername:CreateFontString(nil,"OVERLAY")
236 self.frames.headernametext.owner = self
237 self.frames.headernametext:SetFont(f, 14)
238 self.frames.headernametext:SetWidth(125)
239 self.frames.headernametext:SetText(L["Name"])
240 self.frames.headernametext:SetTextColor(1, .8, 0)
241 self.frames.headernametext:ClearAllPoints()
242 self.frames.headernametext:SetJustifyH("LEFT")
243 self.frames.headernametext:SetAllPoints(self.frames.headername)
244  
245 self.frames.headerzone = CreateFrame("Button", nil, self.frames.main)
246 self.frames.headerzone.owner = self
247 self.frames.headerzone:SetWidth(155)
248 self.frames.headerzone:SetHeight(16)
249 self.frames.headerzone:SetPoint("LEFT", self.frames.headername, "RIGHT")
250 self.frames.headerzone:SetScript("OnClick",
251 function()
252 this.owner:Sort(self.players, 2)
253 this.owner:UpdateScrollBar()
254 end)
255  
256 self.frames.headerzonehigh = self.frames.headerzone:CreateTexture(nil, "BORDER")
257 self.frames.headerzonehigh:SetWidth(155)
258 self.frames.headerzonehigh:SetHeight(16)
259 self.frames.headerzonehigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
260 self.frames.headerzonehigh:SetAllPoints(self.frames.headerzone)
261 self.frames.headerzonehigh:SetBlendMode("ADD")
262 self.frames.headerzonehigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
263 self.frames.headerzone:SetHighlightTexture(self.frames.headerzonehigh)
264  
265  
266 self.frames.headerzonetext = self.frames.main:CreateFontString(nil,"OVERLAY")
267 self.frames.headerzonetext:SetFont(f, 14)
268 self.frames.headerzonetext:SetWidth(155)
269 self.frames.headerzonetext:SetText(L["Zone"])
270 self.frames.headerzonetext:SetTextColor(1, .8, 0)
271 self.frames.headerzonetext:ClearAllPoints()
272 self.frames.headerzonetext:SetJustifyH("LEFT")
273 self.frames.headerzonetext:SetAllPoints(self.frames.headerzone)
274  
275 self.frames.leftbutton = CreateFrame("Button", nil, self.frames.main)
276 self.frames.leftbutton.owner = self
277 self.frames.leftbutton:SetWidth(125)
278 self.frames.leftbutton:SetHeight(32)
279 self.frames.leftbutton:SetPoint("BOTTOMRIGHT", self.frames.main, "BOTTOM", -10, 10)
280  
281 t = self.frames.leftbutton:CreateTexture()
282 t:SetWidth(125)
283 t:SetHeight(32)
284 t:SetPoint("CENTER", self.frames.leftbutton, "CENTER")
285 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Up")
286 t:SetTexCoord(0, 0.625, 0, 0.6875)
287 self.frames.leftbutton:SetNormalTexture(t)
288  
289 t = self.frames.leftbutton:CreateTexture(nil, "BACKGROUND")
290 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Down")
291 t:SetTexCoord(0, 0.625, 0, 0.6875)
292 t:SetAllPoints(self.frames.leftbutton)
293 self.frames.leftbutton:SetPushedTexture(t)
294  
295 t = self.frames.leftbutton:CreateTexture()
296 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight")
297 t:SetTexCoord(0, 0.625, 0, 0.6875)
298 t:SetAllPoints(self.frames.leftbutton)
299 t:SetBlendMode("ADD")
300 self.frames.leftbutton:SetHighlightTexture(t)
301 self.frames.leftbuttontext = self.frames.leftbutton:CreateFontString(nil,"OVERLAY")
302 self.frames.leftbuttontext:SetFontObject(GameFontHighlight)
303 self.frames.leftbuttontext:SetText(L["Refresh"])
304 self.frames.leftbuttontext:SetAllPoints(self.frames.leftbutton)
305  
306 self.frames.leftbutton:SetScript("OnClick",
307 function()
308 this.owner:PerformZoneCheck()
309 end)
310  
311 self.frames.rightbutton = CreateFrame("Button", nil, self.frames.main)
312 self.frames.rightbutton.owner = self
313 self.frames.rightbutton:SetWidth(125)
314 self.frames.rightbutton:SetHeight(32)
315 self.frames.rightbutton:SetPoint("BOTTOMLEFT", self.frames.main, "BOTTOM", 10, 10)
316  
317 t = self.frames.rightbutton:CreateTexture()
318 t:SetWidth(125)
319 t:SetHeight(32)
320 t:SetPoint("CENTER", self.frames.rightbutton, "CENTER")
321 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Up")
322 t:SetTexCoord(0, 0.625, 0, 0.6875)
323 self.frames.rightbutton:SetNormalTexture(t)
324  
325 t = self.frames.rightbutton:CreateTexture(nil, "BACKGROUND")
326 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Down")
327 t:SetTexCoord(0, 0.625, 0, 0.6875)
328 t:SetAllPoints(self.frames.rightbutton)
329 self.frames.rightbutton:SetPushedTexture(t)
330  
331 t = self.frames.rightbutton:CreateTexture()
332 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight")
333 t:SetTexCoord(0, 0.625, 0, 0.6875)
334 t:SetAllPoints(self.frames.rightbutton)
335 t:SetBlendMode("ADD")
336 self.frames.rightbutton:SetHighlightTexture(t)
337 self.frames.rightbuttontext = self.frames.rightbutton:CreateFontString(nil,"OVERLAY")
338 self.frames.rightbuttontext:SetFontObject(GameFontHighlight)
339 self.frames.rightbuttontext:SetText(L["Close"])
340 self.frames.rightbuttontext:SetAllPoints(self.frames.rightbutton)
341  
342 self.frames.rightbutton:SetScript("OnClick",
343 function()
344 this.owner.frames.main:Hide()
345 end)
346  
347  
348 self.frames.entry = {}
349 self.frames.entry[1] = self:ScrollEntryFrame(1)
350 self.frames.entry[1]:SetPoint("TOPLEFT", self.frames.main, "TOPLEFT", 10, -55 )
351  
352 for i=2, 15 do
353 j = i - 1
354 self.frames.entry[i] = self:ScrollEntryFrame()
355 self.frames.entry[i]:SetPoint("TOPLEFT", self.frames.entry[j], "BOTTOMLEFT")
356 end
357  
358  
359 self.frames.sframe = CreateFrame("ScrollFrame", "oRAOZoneScrollFrame", self.frames.main, "FauxScrollFrameTemplate")
360 self.frames.sframe.owner = self
361 self.frames.sframe:SetWidth(285)
362 self.frames.sframe:SetHeight(240)
363 self.frames.sframe:SetPoint("TOPLEFT", self.frames.main, "TOPLEFT", 5, -55)
364  
365 self.frames.sframe:SetScript("OnVerticalScroll",
366 function()
367 FauxScrollFrame_OnVerticalScroll(16, function() this.owner:UpdateScrollBar() end)
368 end )
369  
370 end
371  
372 function oRAOZone:ScrollEntryFrame()
373 local f = CreateFrame("Button", nil, self.frames.main )
374 f:SetWidth(240)
375 f:SetHeight(16)
376  
377 f.textname = f:CreateFontString(nil,"ARTWORK")
378 f.textname:SetFontObject(GameFontHighlight)
379 f.textname:SetWidth(125)
380 f.textname:SetHeight(16)
381 f.textname:SetJustifyH("LEFT")
382 f.textname:SetNonSpaceWrap(false)
383 f.textname:ClearAllPoints()
384 f.textname:SetPoint( "LEFT", f, "LEFT")
385 f.textname:SetTextColor(1,1,1)
386 f.textname:SetText(L["Name"])
387  
388 f.textzone = f:CreateFontString(nil,"ARTWORK")
389 f.textzone:SetFontObject(GameFontHighlight)
390 f.textzone:SetWidth(155)
391 f.textzone:SetHeight(16)
392 f.textzone:SetJustifyH("LEFT")
393 f.textzone:SetNonSpaceWrap(false)
394 f.textzone:ClearAllPoints()
395 f.textzone:SetPoint("LEFT", f.textname, "RIGHT")
396 f.textzone:SetTextColor(1,1,1)
397 f.textzone:SetText(L["Zone"])
398  
399 return f
400 end
401  
402 function oRAOZone:UpdateScrollBar()
403 local i,j
404 local entries = table.getn(self.players)
405 FauxScrollFrame_Update(self.frames.sframe, entries, 15, 16)
406  
407 for i = 1, 15 do
408 j = i + FauxScrollFrame_GetOffset(self.frames.sframe)
409  
410 if j <= entries then
411 self.frames.entry[i].textname:SetText(self.players[j][1])
412 self.frames.entry[i].textzone:SetText(self.players[j][2])
413 self.frames.entry[i]:Show()
414 else
415 self.frames.entry[i]:Hide()
416 end
417 end
418 end
419  
420 function oRAOZone:Sort( tbl, sortBy )
421 table.sort(tbl,
422 function(t1, t2)
423 if (t1[sortBy] == t2[sortBy] ) then
424 return t1[1] < t2[1]
425 else
426 return t1[sortBy] > t2[sortBy]
427 end
428 end
429 )
430 end
431