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("oRALItem")
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 -- DO NOT translate these, use the locale tables below
15 local reagents = {
16 ["PRIEST"] = "SacredCandle",
17 ["MAGE"] = "ArcanePowder",
18 ["DRUID"] = "WildThornroot",
19 ["WARLOCK"] = "SoulShard",
20 ["SHAMAN"] = "Ankh",
21 ["PALADIN"] = "SymbolofDivinity",
22 ["ROGUE"] = "FlashPowder",
23 }
24  
25 ----------------------------
26 -- Localization --
27 ----------------------------
28  
29 L:RegisterTranslations("enUS", function() return {
30 ["itemleader"] = true,
31 ["item"] = true,
32 ["Options for item checks."] = true,
33 ["SacredCandle"] = "Sacred Candle",
34 ["ArcanePowder"] = "Arcane Powder",
35 ["WildThornroot"] = "Wild Thornroot",
36 ["Ankh"] = "Ankh",
37 ["SymbolofDivinity"] = "Symbol of Divinity",
38 ["FlashPowder"] = "Flash Powder",
39 ["SoulShard"] = "Soul Shard",
40 ["Checks Disabled"] = true,
41 ["Items"] = true,
42 ["Reagents"] = true,
43 ["Close"] = true,
44 ["Refresh"] = true,
45 ["Name"] = true,
46 ["Item"] = true,
47 ["Amount"] = true,
48 ["Nr"] = true,
49 ["Perform item check"] = true,
50 ["Check the raid for an item."] = true,
51 ["<item>"] = true,
52 ["Perform reagent check"] = true,
53 ["Check the raid for reagents."] = true,
54 ["check"] = true,
55 ["reagent"] = true,
56 ["Leader/Item"] = true,
57 } end )
58  
59 L:RegisterTranslations("koKR", function() return {
60  
61 ["Options for item checks."] = "아이템 확인 설정",
62 ["SacredCandle"] = "성스러운 양초",
63 ["ArcanePowder"] = "불가사의한 가루",
64 ["WildThornroot"] = "야생 가시",
65 ["Ankh"] = "십자가",
66 ["SymbolofDivinity"] = "신앙의 징표",
67 ["FlashPowder"] = "섬광 화약",
68 ["SoulShard"] = "영혼의 조각",
69 ["Checks Disabled"] = "확인 사용안함",
70 ["Items"] = "아이템",
71 ["Reagents"] = "재료",
72 ["Close"] = "닫기",
73 ["Refresh"] = "갱신",
74 ["Name"] = "이름",
75 ["Item"] = "아이템",
76 ["Amount"] = "수량",
77 ["Nr"] = "갯수",
78 ["Perform item check"] = "아이템 확인 실시",
79 ["Check the raid for an item."] = "공격대원의 아이템을 확인합니다.",
80 ["<item>"] = "<아이템>",
81 ["Perform reagent check"] = "재료 확인 실시",
82 ["Check the raid for reagents."] = "공격대원의 재료를 확인합니다.",
83 ["Leader/Item"] = "공격대장/아이템",
84 } end )
85  
86 L:RegisterTranslations("zhCN", function() return {
87 ["itemleader"] = "itemleader",
88 ["item"] = "物品",
89 ["Options for item checks."] = "物品检查选项",
90 ["SacredCandle"] = "神圣蜡烛",
91 ["ArcanePowder"] = "魔粉",
92 ["WildThornroot"] = "野生棘根草",
93 ["Ankh"] = "十字章",
94 ["SymbolofDivinity"] = "神圣符印",
95 ["FlashPowder"] = "闪光粉",
96 ["SoulShard"] = "灵魂碎片",
97 ["Checks Disabled"] = "禁止检查",
98 ["Items"] = "物品",
99 ["Reagents"] = "施法材料",
100 ["Close"] = "关闭",
101 ["Refresh"] = "刷新",
102 ["Name"] = "姓名",
103 ["Item"] = "物品",
104 ["Amount"] = "数量",
105 ["Nr"] = "数量",
106 ["Perform item check"] = "进行物品检查",
107 ["Check the raid for an item."] = "对团队进行物品检查",
108 ["<item>"] = "<物品>",
109 ["Perform reagent check"] = "进行施法材料检查",
110 ["Check the raid for reagents."] = "对团队进行施法材料检查",
111 ["check"] = "检查",
112 ["reagent"] = "施法材料",
113 ["Leader/Item"] = "Leader/Item",
114 } end )
115  
116 L:RegisterTranslations("zhTW", function() return {
117 ["itemleader"] = "itemleader",
118 ["item"] = "物品",
119 ["Options for item checks."] = "物品檢查選項",
120 ["SacredCandle"] = "神聖蠟燭",
121 ["ArcanePowder"] = "魔粉",
122 ["WildThornroot"] = "野生棘根草",
123 ["Ankh"] = "十字章",
124 ["SymbolofDivinity"] = "神聖符印",
125 ["FlashPowder"] = "閃光粉",
126 ["SoulShard"] = "靈魂碎片",
127 ["Checks Disabled"] = "檢查已停用",
128 ["Items"] = "物品",
129 ["Reagents"] = "施法材料",
130 ["Close"] = "關閉",
131 ["Refresh"] = "更新",
132 ["Name"] = "姓名",
133 ["Item"] = "物品",
134 ["Amount"] = "數量",
135 ["Nr"] = "數量",
136 ["Perform item check"] = "進行物品檢查",
137 ["Check the raid for an item."] = "對團隊進行物品檢查",
138 ["<item>"] = "<物品>",
139 ["Perform reagent check"] = "進行施法材料檢查",
140 ["Check the raid for reagents."] = "對團隊進行施法材料檢查",
141 ["check"] = "檢查",
142 ["reagent"] = "施法材料",
143 ["Leader/Item"] = "Leader/Item",
144 } end )
145  
146 L:RegisterTranslations("deDE", function() return {
147 ["SacredCandle"] = "Hochheilige Kerze",
148 ["ArcanePowder"] = "Arkanes Pulver",
149 ["WildThornroot"] = "Wilder Dornwurz",
150 ["Ankh"] = "Ankh",
151 ["SymbolofDivinity"] = "Symbol der Offenbarung",
152 ["FlashPowder"] = "Blitzstrahlpulver",
153 ["SoulShard"] = "Seelensplitter",
154 } end )
155  
156 L:RegisterTranslations("frFR", function() return {
157 --["itemleader"] = true,
158 --["item"] = true,
159 ["Options for item checks."] = "Options concernant les v\195\169rifications des objets.",
160 ["SacredCandle"] = "Bougie sacr\195\169e",
161 ["ArcanePowder"] = "Poudre des arcanes",
162 ["WildThornroot"] = "Ronceterre sauvage",
163 ["Ankh"] = "Ankh",
164 ["SymbolofDivinity"] = "Symbole de divinit\195\169",
165 ["FlashPowder"] = "Poudre aveuglante",
166 ["SoulShard"] = "Fragment d'\195\162me",
167 ["Checks Disabled"] = "V\195\169rifications d\195\169sactiv\195\169es.",
168 ["Items"] = "Objets",
169 ["Reagents"] = "Composants",
170 ["Close"] = "Fermer",
171 ["Refresh"] = "Rafra\195\174chir",
172 ["Name"] = "Nom",
173 ["Item"] = "Objet",
174 ["Amount"] = "Quantit\195\169",
175 ["Nr"] = "N\194\176",
176 ["Perform item check"] = "V\195\169rifier un objet",
177 ["Check the raid for an item."] = "V\195\169rifie la disponibilit\195\169 d'un objet dans le raid.",
178 ["<item>"] = "<objet>",
179 ["Perform reagent check"] = "V\195\169rifier les composants",
180 ["Check the raid for reagents."] = "V\195\169rifie les composants du raid.",
181 --["check"] = true,
182 --["reagent"] = true,
183 ["Leader/Item"] = "Chef/Objet",
184 } end )
185  
186 ----------------------------------
187 -- Module Declaration --
188 ----------------------------------
189  
190 oRALItem = oRA:NewModule(L["itemleader"])
191 oRALItem.defaults = {
192 }
193 oRALItem.leader = true
194 oRALItem.name = L["Leader/Item"]
195 oRALItem.consoleCmd = L["item"]
196 oRALItem.consoleOptions = {
197 type = "group",
198 desc = L["Options for item checks."],
199 name = L["Item"],
200 args = {
201 [L["check"]] = {
202 type="text", name = L["Perform item check"],
203 desc = L["Check the raid for an item."],
204 get = false,
205 set = function(v)
206 oRALItem:PerformItemCheck(v)
207 end,
208 validate = function(v)
209 return string.find(v, "(.+)")
210 end,
211 usage = L["<item>"],
212 disabled = function() return not oRA:IsModuleActive(oRALItem) or not oRALItem:IsValidRequest() end,
213 },
214 [L["reagent"]] = {
215 type="execute", name = L["Perform reagent check"],
216 desc = L["Check the raid for reagents."],
217 func = function()
218 oRALItem:PerformReagentCheck()
219 end,
220 disabled = function() return not oRA:IsModuleActive(oRALItem) or not oRALItem:IsValidRequest() end,
221 },
222  
223 }
224 }
225  
226 ------------------------------
227 -- Initialization --
228 ------------------------------
229  
230 function oRALItem:OnEnable()
231 self.items = getnewtable()
232 self.sorting = getnewtable()
233  
234 self.sorting[1] = L["Name"]
235 self.sorting[2] = L["Item"]
236 self.sorting[3] = L["Amount"]
237  
238 self:SetupFrames()
239 self:RegisterCheck("ITM", "oRA_ItemResponse")
240 self:RegisterCheck("REA", "oRA_ReagentResponse")
241  
242 self:RegisterShorthand("raitem", function(item) self:PerformItemCheck(item) end )
243 self:RegisterShorthand("rareg", function() self:PerformReagentCheck() end )
244 end
245  
246 function oRALItem:OnDisable()
247 self:UnregisterAllEvents()
248  
249 self:UnregisterCheck("ITM")
250 self:UnregisterCheck("REA")
251  
252 self:UnregisterShorthand("raitem")
253 self:UnregisterShorthand("rareg")
254  
255 reclaimtable( self.items )
256 self.items = nil
257 reclaimtable( self.sorting )
258 self.sorting = nil
259 end
260  
261  
262 function oRALItem:oRA_ItemResponse( msg, author)
263 if not self:IsValidRequest(author, true) then return end
264 msg = self:CleanMessage(msg)
265 local _,_,numitems,itemname,requestby = string.find(msg, "^ITM ([-%d]+) (.+) ([^%s]+)$")
266 if numitems and itemname and requestby and requestby == UnitName("player") then
267 numitems = tonumber(numitems)
268 if numitems == -1 then
269 self:AddPlayer( author, L["Checks Disabled"], 0 )
270 else
271 self:AddPlayer( author, itemname, numitems )
272 end
273 self:UpdateScrollBar()
274 end
275  
276 end
277  
278 function oRALItem:oRA_ReagentResponse( msg, author)
279 msg = self:CleanMessage(msg)
280 local _,_,numitems,requestby = string.find(msg, "^REA ([^%s]+) ([^%s]+)$")
281 if numitems and requestby and requestby == UnitName("player") then
282 numitems = tonumber(numitems)
283 for i = 1, GetNumRaidMembers(), 1 do
284 local rostername, _, _, _, _, _, _, _, _ = GetRaidRosterInfo(i)
285 if rostername==author then
286 if UnitClass("raid"..i) then
287 local _,class = UnitClass("raid"..i)
288 if reagents[class] then
289 self:AddPlayer( author, L[reagents[class]], numitems )
290 self:UpdateScrollBar()
291 end
292 end
293 end
294 end
295  
296 end
297 end
298  
299 ---------------------------
300 -- Utility Functions --
301 ---------------------------
302  
303 function oRALItem:AddPlayer( nick, item, amount )
304 local update, i
305 for i=1, 40, 1 do
306 if (self.items[i] and self.items[i][1] == nick) then
307 update = i
308 end
309 end
310 if (update) then
311 self.items[update][3] = amount or 0
312 else
313 table.insert(self.items,{nick, item, amount or 0})
314 end
315 end
316  
317 function oRALItem:SetupFrames()
318 local f, t, sframe, i, j
319  
320 f, _, _ = GameFontNormal:GetFont()
321  
322 self.frames = {}
323  
324 self.frames.main = CreateFrame("Frame", "oRAItemReportFrame", UIParent)
325 self.frames.main:Hide()
326 self.frames.main:SetWidth(325)
327 self.frames.main:SetHeight(350)
328 self.frames.main:EnableMouse(true)
329 self.frames.main:SetMovable(true)
330 self.frames.main:RegisterForDrag("LeftButton")
331 self.frames.main:SetScript("OnDragStart", function() this:StartMoving() end)
332 self.frames.main:SetScript("OnDragStop", function() this:StopMovingOrSizing() end)
333 self.frames.main:SetBackdrop({
334 bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", tile = true, tileSize = 16,
335 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", edgeSize = 16,
336 insets = {left = 4, right = 4, top = 4, bottom = 4},
337 })
338 self.frames.main:SetBackdropBorderColor(.5, .5, .5)
339 self.frames.main:SetBackdropColor(0,0,0)
340 self.frames.main:ClearAllPoints()
341 self.frames.main:SetPoint("CENTER", WorldFrame, "CENTER", 0, 0)
342  
343 self.frames.fade = self.frames.main:CreateTexture(nil, "BORDER")
344 self.frames.fade:SetWidth(319)
345 self.frames.fade:SetHeight(25)
346 self.frames.fade:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
347 self.frames.fade:SetPoint("TOP", self.frames.main, "TOP", 0, -4)
348 self.frames.fade:SetBlendMode("ADD")
349 self.frames.fade:SetGradientAlpha("VERTICAL", .1, .1, .1, 0, .25, .25, .25, 1)
350 self.frames.main.Fade = self.frames.fade
351  
352 self.frames.header = self.frames.main:CreateFontString(nil,"OVERLAY")
353 self.frames.header:SetFont(f, 14)
354 self.frames.header:SetWidth(300)
355 self.frames.header:SetText("Durability")
356 self.frames.header:SetTextColor(1, .8, 0)
357 self.frames.header:ClearAllPoints()
358 self.frames.header:SetPoint("TOP", self.frames.main, "TOP", 0, -10)
359  
360 self.frames.headername = CreateFrame("Button", nil, self.frames.main)
361 self.frames.headername.owner = self
362 self.frames.headername:SetWidth(125)
363 self.frames.headername:SetHeight(16)
364 self.frames.headername:SetPoint("TOPLEFT", self.frames.main, "TOPLEFT", 10, -35)
365 self.frames.headername:SetScript("OnClick",
366 function()
367 this.owner:Sort(self.items, 1)
368 this.owner:UpdateScrollBar()
369 end)
370  
371 self.frames.headernamehigh = self.frames.headername:CreateTexture(nil, "BORDER")
372 self.frames.headernamehigh:SetWidth(125)
373 self.frames.headernamehigh:SetHeight(16)
374 self.frames.headernamehigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
375 self.frames.headernamehigh:SetAllPoints(self.frames.headername)
376 self.frames.headernamehigh:SetBlendMode("ADD")
377 self.frames.headernamehigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
378 self.frames.headername:SetHighlightTexture(self.frames.headernamehigh)
379  
380 self.frames.headernametext = self.frames.headername:CreateFontString(nil,"OVERLAY")
381 self.frames.headernametext.owner = self
382 self.frames.headernametext:SetFont(f, 14)
383 self.frames.headernametext:SetWidth(125)
384 self.frames.headernametext:SetText(L["Name"])
385 self.frames.headernametext:SetTextColor(1, .8, 0)
386 self.frames.headernametext:ClearAllPoints()
387 self.frames.headernametext:SetJustifyH("LEFT")
388 self.frames.headernametext:SetAllPoints(self.frames.headername)
389  
390 self.frames.headeritem = CreateFrame("Button", nil, self.frames.main)
391 self.frames.headeritem.owner = self
392 self.frames.headeritem:SetWidth(125)
393 self.frames.headeritem:SetHeight(16)
394 self.frames.headeritem:SetPoint("LEFT", self.frames.headername, "RIGHT")
395 self.frames.headeritem:SetScript("OnClick",
396 function()
397 this.owner:Sort(self.items, 2)
398 this.owner:UpdateScrollBar()
399 end)
400  
401 self.frames.headeritemhigh = self.frames.headeritem:CreateTexture(nil, "BORDER")
402 self.frames.headeritemhigh:SetWidth(125)
403 self.frames.headeritemhigh:SetHeight(16)
404 self.frames.headeritemhigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
405 self.frames.headeritemhigh:SetAllPoints(self.frames.headeritem)
406 self.frames.headeritemhigh:SetBlendMode("ADD")
407 self.frames.headeritemhigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
408 self.frames.headeritem:SetHighlightTexture(self.frames.headeritemhigh)
409  
410  
411 self.frames.headeritemtext = self.frames.main:CreateFontString(nil,"OVERLAY")
412 self.frames.headeritemtext:SetFont(f, 14)
413 self.frames.headeritemtext:SetWidth(125)
414 self.frames.headeritemtext:SetText(L["Item"])
415 self.frames.headeritemtext:SetTextColor(1, .8, 0)
416 self.frames.headeritemtext:ClearAllPoints()
417 self.frames.headeritemtext:SetJustifyH("LEFT")
418 self.frames.headeritemtext:SetAllPoints(self.frames.headeritem)
419  
420 self.frames.headeramount = CreateFrame("Button", nil, self.frames.main)
421 self.frames.headeramount.owner = self
422 self.frames.headeramount:SetWidth(30)
423 self.frames.headeramount:SetHeight(16)
424 self.frames.headeramount:SetPoint("LEFT", self.frames.headeritem, "RIGHT")
425 self.frames.headeramount:SetScript("OnClick",
426 function()
427 this.owner:Sort(self.items, 3)
428 this.owner:UpdateScrollBar()
429 end)
430  
431 self.frames.headeramounthigh = self.frames.headeramount:CreateTexture(nil, "BORDER")
432 self.frames.headeramounthigh:SetWidth(30)
433 self.frames.headeramounthigh:SetHeight(16)
434 self.frames.headeramounthigh:SetTexture("Interface\\ChatFrame\\ChatFrameBackground")
435 self.frames.headeramounthigh:SetAllPoints(self.frames.headeramount)
436 self.frames.headeramounthigh:SetBlendMode("ADD")
437 self.frames.headeramounthigh:SetGradientAlpha("VERTICAL", .1, .08, 0, 0, .2, .16, 0, 1)
438 self.frames.headeramount:SetHighlightTexture(self.frames.headeramounthigh)
439  
440  
441 self.frames.headeramounttext = self.frames.main:CreateFontString(nil,"OVERLAY")
442 self.frames.headeramounttext.owner = self
443 self.frames.headeramounttext:SetFont(f, 14)
444 self.frames.headeramounttext:SetWidth(30)
445 self.frames.headeramounttext:SetText(L["Nr"])
446 self.frames.headeramounttext:SetTextColor(1, .8, 0)
447 self.frames.headeramounttext:ClearAllPoints()
448 self.frames.headeramounttext:SetJustifyH("LEFT")
449 self.frames.headeramounttext:SetAllPoints(self.frames.headeramount)
450  
451  
452  
453  
454 self.frames.leftbutton = CreateFrame("Button", nil, self.frames.main)
455 self.frames.leftbutton.owner = self
456 self.frames.leftbutton:SetWidth(125)
457 self.frames.leftbutton:SetHeight(32)
458 self.frames.leftbutton:SetPoint("BOTTOMRIGHT", self.frames.main, "BOTTOM", -10, 10)
459  
460 t = self.frames.leftbutton:CreateTexture()
461 t:SetWidth(125)
462 t:SetHeight(32)
463 t:SetPoint("CENTER", self.frames.leftbutton, "CENTER")
464 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Up")
465 t:SetTexCoord(0, 0.625, 0, 0.6875)
466 self.frames.leftbutton:SetNormalTexture(t)
467  
468 t = self.frames.leftbutton:CreateTexture(nil, "BACKGROUND")
469 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Down")
470 t:SetTexCoord(0, 0.625, 0, 0.6875)
471 t:SetAllPoints(self.frames.leftbutton)
472 self.frames.leftbutton:SetPushedTexture(t)
473  
474 t = self.frames.leftbutton:CreateTexture()
475 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight")
476 t:SetTexCoord(0, 0.625, 0, 0.6875)
477 t:SetAllPoints(self.frames.leftbutton)
478 t:SetBlendMode("ADD")
479 self.frames.leftbutton:SetHighlightTexture(t)
480 self.frames.leftbuttontext = self.frames.leftbutton:CreateFontString(nil,"OVERLAY")
481 self.frames.leftbuttontext:SetFontObject(GameFontHighlight)
482 self.frames.leftbuttontext:SetText(L["Refresh"])
483 self.frames.leftbuttontext:SetAllPoints(self.frames.leftbutton)
484  
485 self.frames.leftbutton:SetScript("OnClick",
486 function()
487 this.owner:PerformItemCheck()
488 end)
489  
490 self.frames.rightbutton = CreateFrame("Button", nil, self.frames.main)
491 self.frames.rightbutton.owner = self
492 self.frames.rightbutton:SetWidth(125)
493 self.frames.rightbutton:SetHeight(32)
494 self.frames.rightbutton:SetPoint("BOTTOMLEFT", self.frames.main, "BOTTOM", 10, 10)
495  
496 t = self.frames.rightbutton:CreateTexture()
497 t:SetWidth(125)
498 t:SetHeight(32)
499 t:SetPoint("CENTER", self.frames.rightbutton, "CENTER")
500 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Up")
501 t:SetTexCoord(0, 0.625, 0, 0.6875)
502 self.frames.rightbutton:SetNormalTexture(t)
503  
504 t = self.frames.rightbutton:CreateTexture(nil, "BACKGROUND")
505 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Down")
506 t:SetTexCoord(0, 0.625, 0, 0.6875)
507 t:SetAllPoints(self.frames.rightbutton)
508 self.frames.rightbutton:SetPushedTexture(t)
509  
510 t = self.frames.rightbutton:CreateTexture()
511 t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight")
512 t:SetTexCoord(0, 0.625, 0, 0.6875)
513 t:SetAllPoints(self.frames.rightbutton)
514 t:SetBlendMode("ADD")
515 self.frames.rightbutton:SetHighlightTexture(t)
516 self.frames.rightbuttontext = self.frames.rightbutton:CreateFontString(nil,"OVERLAY")
517 self.frames.rightbuttontext:SetFontObject(GameFontHighlight)
518 self.frames.rightbuttontext:SetText(L["Close"])
519 self.frames.rightbuttontext:SetAllPoints(self.frames.rightbutton)
520  
521 self.frames.rightbutton:SetScript("OnClick",
522 function()
523 this.owner.frames.main:Hide()
524 end)
525  
526  
527 self.frames.entry = {}
528 self.frames.entry[1] = self:ScrollEntryFrame(1)
529 self.frames.entry[1]:SetPoint("TOPLEFT", self.frames.main, "TOPLEFT", 10, -55 )
530  
531 for i=2, 15 do
532 j = i - 1
533 self.frames.entry[i] = self:ScrollEntryFrame()
534 self.frames.entry[i]:SetPoint("TOPLEFT", self.frames.entry[j], "BOTTOMLEFT")
535 end
536  
537  
538 self.frames.sframe = CreateFrame("ScrollFrame", "oRAItemScrollFrame", self.frames.main, "FauxScrollFrameTemplate")
539 self.frames.sframe.owner = self
540 self.frames.sframe:SetWidth(285)
541 self.frames.sframe:SetHeight(240)
542 self.frames.sframe:SetPoint("TOPLEFT", self.frames.main, "TOPLEFT", 5, -55)
543  
544 self.frames.sframe:SetScript("OnVerticalScroll",
545 function()
546 FauxScrollFrame_OnVerticalScroll(16, function() this.owner:UpdateScrollBar() end)
547 end )
548  
549 end
550  
551 function oRALItem:ScrollEntryFrame()
552 local f = CreateFrame("Button", nil, self.frames.main )
553 f:SetWidth(240)
554 f:SetHeight(16)
555  
556 f.textname = f:CreateFontString(nil,"ARTWORK")
557 f.textname:SetFontObject(GameFontHighlight)
558 f.textname:SetWidth(125)
559 f.textname:SetHeight(16)
560 f.textname:SetJustifyH("LEFT")
561 f.textname:SetNonSpaceWrap(false)
562 f.textname:ClearAllPoints()
563 f.textname:SetPoint( "LEFT", f, "LEFT")
564 f.textname:SetTextColor(1,1,1)
565 f.textname:SetText(L["Name"])
566  
567 f.textitem = f:CreateFontString(nil,"ARTWORK")
568 f.textitem:SetFontObject(GameFontHighlight)
569 f.textitem:SetWidth(125)
570 f.textitem:SetHeight(16)
571 f.textitem:SetJustifyH("LEFT")
572 f.textitem:SetNonSpaceWrap(false)
573 f.textitem:ClearAllPoints()
574 f.textitem:SetPoint("LEFT", f.textname, "RIGHT")
575 f.textitem:SetTextColor(1,1,1)
576 f.textitem:SetText("125")
577  
578 f.textamount = f:CreateFontString(nil,"ARTWORK")
579 f.textamount:SetFontObject(GameFontHighlight)
580 f.textamount:SetWidth(30)
581 f.textamount:SetHeight(16)
582 f.textamount:SetJustifyH("RIGHT")
583 f.textamount:SetNonSpaceWrap(false)
584 f.textamount:ClearAllPoints()
585 f.textamount:SetPoint("LEFT", f.textitem, "RIGHT")
586 f.textamount:SetTextColor(1,1,1)
587 f.textamount:SetText("3")
588  
589 return f
590 end
591  
592 function oRALItem:UpdateScrollBar()
593 local i,j
594 local entries = table.getn(self.items)
595 FauxScrollFrame_Update(self.frames.sframe, entries, 15, 16)
596  
597 for i = 1, 15 do
598 j = i + FauxScrollFrame_GetOffset(self.frames.sframe)
599  
600 if j <= entries then
601 self.frames.entry[i].textname:SetText(self.items[j][1])
602 self.frames.entry[i].textitem:SetText(self.items[j][2])
603 self.frames.entry[i].textamount:SetText(self.items[j][3])
604 self.frames.entry[i]:Show()
605 else
606 self.frames.entry[i]:Hide()
607 end
608 end
609 end
610  
611 --------------------------
612 -- Command Handlers --
613 --------------------------
614  
615 function oRALItem:PerformItemCheck( item )
616 if not self:IsPromoted() then return end
617 local _, _, linkName = string.find(item, "%[(.+)%]")
618 if ( linkName ) then
619 item = linkName
620 end
621 self.item = item
622  
623 reclaimtable(self.items)
624 self.items = nil
625 self.items = getnewtable()
626  
627 self:SendMessage( "ITMC "..item )
628  
629 self.frames.header:SetText(L["Items"])
630 self.frames.leftbutton:SetScript("OnClick",
631 function()
632 this.owner:PerformItemCheck( self.item )
633 end)
634 local i
635 for i=1, 40 do
636 if UnitExists("raid" .. i) then
637 self:AddPlayer(UnitName("raid" .. i), item)
638 end
639 end
640  
641 self.frames.main:Show()
642 self:UpdateScrollBar()
643 end
644  
645 function oRALItem:PerformReagentCheck()
646 if not self:IsPromoted() then return end
647  
648 reclaimtable(self.items)
649 self.items = nil
650 self.items = getnewtable()
651  
652 self:SendMessage( "REAC" )
653 self.frames.header:SetText(L["Reagents"])
654 self.frames.leftbutton:SetScript("OnClick",
655 function()
656 this.owner:PerformReagentCheck()
657 end)
658 self.frames.main:Show()
659 self:UpdateScrollBar()
660 end
661  
662  
663 function oRALItem:Sort( tbl, sortBy )
664 table.sort(tbl,
665 function(t1, t2)
666 if (t1[sortBy] == t2[sortBy] ) then
667 return t1[1] < t2[1]
668 else
669 return t1[sortBy] > t2[sortBy]
670 end
671 end
672 )
673 end
674