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