From c03d27f72309f33fdf389062556b733eab26c6a6 Mon Sep 17 00:00:00 2001 From: Darthpred Date: Tue, 5 Mar 2013 08:51:25 +0400 Subject: [PATCH] catchup --- ElvUI_SLE/modules/datatexts/time.lua | 456 +++++++++++++++++----------------- 1 file changed, 229 insertions(+), 227 deletions(-) diff --git a/ElvUI_SLE/modules/datatexts/time.lua b/ElvUI_SLE/modules/datatexts/time.lua index 06d66e5..9c62134 100644 --- a/ElvUI_SLE/modules/datatexts/time.lua +++ b/ElvUI_SLE/modules/datatexts/time.lua @@ -1,228 +1,230 @@ ---Replacement of Elv's time datatext with some additions -local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore -local DT = E:GetModule('DataTexts') - -local format = string.format -local join = string.join -local floor = math.floor -local wipe = table.wipe - -local APM = { TIMEMANAGER_PM, TIMEMANAGER_AM } -local europeDisplayFormat = ''; -local ukDisplayFormat = ''; -local europeDisplayFormat_nocolor = join("", "%02d", ":|r%02d") -local ukDisplayFormat_nocolor = join("", "", "%d", ":|r%02d", " %s|r") -local timerLongFormat = "%d:%02d:%02d" -local timerShortFormat = "%d:%02d" -local lockoutInfoFormat = "%s%s |cffaaaaaa(%s, %s/%s)" -local lockoutInfoFormatNoEnc = "%s%s |cffaaaaaa(%s)" -local formatBattleGroundInfo = "%s: " -local lockoutColorExtended, lockoutColorNormal = { r=0.3,g=1,b=0.3 }, { r=.8,g=.8,b=.8 } -local lockoutFormatString = { "%dd %02dh %02dm", "%dd %dh %02dm", "%02dh %02dm", "%dh %02dm", "%dh %02dm", "%dm" } -local curHr, curMin, curAmPm -local enteredFrame = false; - -local Update, lastPanel; -- UpValue -local localizedName, isActive, canQueue, startTime, canEnter -local name, reset, locked, extended, isRaid, maxPlayers, difficulty, numEncounters, encounterProgress -local quests = {} -local updateQuestTable = false - -local function ValueColorUpdate(hex, r, g, b) - europeDisplayFormat = join("", "%02d", hex, ":|r%02d") - ukDisplayFormat = join("", "", "%d", hex, ":|r%02d", hex, " %s|r") - - if lastPanel ~= nil then - Update(lastPanel, 20000) - end -end -E['valueColorUpdateFuncs'][ValueColorUpdate] = true - -local function ConvertTime(h, m) - local AmPm - if E.db.datatexts.time24 == true then - return h, m, -1 - else - if h >= 12 then - if h > 12 then h = h - 12 end - AmPm = 1 - else - if h == 0 then h = 12 end - AmPm = 2 - end - end - return h, m, AmPm -end - -local function CalculateTimeValues(tooltip) - if (tooltip and E.db.datatexts.localtime) or (not tooltip and not E.db.datatexts.localtime) then - return ConvertTime(GetGameTime()) - else - local dateTable = date("*t") - return ConvertTime(dateTable["hour"], dateTable["min"]) - end -end - -local function CalculateTimeLeft(time) - local hour = floor(time / 3600) - local min = floor(time / 60 - (hour*60)) - local sec = time - (hour * 3600) - (min * 60) - - return hour, min, sec -end - -local function formatResetTime(sec) - local d,h,m,s = ChatFrame_TimeBreakDown(floor(sec)) - if not type(d) == 'number' or not type(h)== 'number' or not type(m) == 'number' or not type(s) == 'number' then - return 'N/A' - end - - if d > 0 and lockoutFormatString[h>10 and 1 or 2] then - return format(lockoutFormatString[h>10 and 1 or 2], d, h, m) - end - if h > 0 and lockoutFormatString[h>10 and 3 or 4] then - return format(lockoutFormatString[h>10 and 3 or 4], h, m) - end - if m > 0 and lockoutFormatString[m>10 and 5 or 6] then - return format(lockoutFormatString[m>10 and 5 or 6], m) - end -end - -local function OnEvent(self, event) - if event == "QUEST_COMPLETE" then - updateQuestTable = true - elseif (event == "QUEST_LOG_UPDATE" and updateQuestTable) or event == "ELVUI_FORCE_RUN" then - wipe(quests) - quests = GetQuestsCompleted() - updateQuestTable = false - end -end - -local function Click() - GameTimeFrame:Click(); -end - -local function OnLeave(self) - DT.tooltip:Hide(); - enteredFrame = false; -end - -local function OnEnter(self) - DT:SetupTooltip(self) - enteredFrame = true; - - DT.tooltip:AddLine(VOICE_CHAT_BATTLEGROUND); - for i = 1, GetNumWorldPVPAreas() do - _, localizedName, isActive, canQueue, startTime, canEnter = GetWorldPVPAreaInfo(i) - if canEnter then - if isActive then - startTime = WINTERGRASP_IN_PROGRESS - elseif startTime == nil then - startTime = QUEUE_TIME_UNAVAILABLE - else - local h, m, s = CalculateTimeLeft(startTime) - if h > 0 then - startTime = format(timerLongFormat, h, m, s) - else - startTime = format(timerShortFormat, m, s) - end - end - DT.tooltip:AddDoubleLine(format(formatBattleGroundInfo, localizedName), startTime, 1, 1, 1, lockoutColorNormal.r, lockoutColorNormal.g, lockoutColorNormal.b) - end - end - - --LFR lockout text - if E.db.sle.lfrshow.enabled then - DT:LFRShow() - end - - local oneraid, lockoutColor - for i = 1, GetNumSavedInstances() do - name, _, reset, _, locked, extended, _, isRaid, maxPlayers, difficulty, numEncounters, encounterProgress = GetSavedInstanceInfo(i) - if isRaid and (locked or extended) and name then - local tr,tg,tb,diff - if not oneraid then - DT.tooltip:AddLine(" ") - DT.tooltip:AddLine(L["Saved Raid(s)"]) - oneraid = true - end - if extended then lockoutColor = lockoutColorExtended else lockoutColor = lockoutColorNormal end - - if (numEncounters and numEncounters > 0) and (encounterProgress and encounterProgress > 0) then - DT.tooltip:AddDoubleLine(format(lockoutInfoFormat, maxPlayers, (difficulty:match("Heroic") and "H" or "N"), name, encounterProgress, numEncounters), formatResetTime(reset), 1,1,1, lockoutColor.r,lockoutColor.g,lockoutColor.b) - else - DT.tooltip:AddDoubleLine(format(lockoutInfoFormatNoEnc, maxPlayers, (difficulty:match("Heroic") and "H" or "N"), name), formatResetTime(reset), 1,1,1, lockoutColor.r,lockoutColor.g,lockoutColor.b) - end - end - end - - DT.tooltip:AddLine(" ") - DT.tooltip:AddLine(L["World Boss(s)"]) - DT.tooltip:AddDoubleLine(L['Sha of Anger']..':', quests[32099] and L['Defeated'] or L['Undefeated'], 1, 1, 1, 0.8, 0.8, 0.8) - DT.tooltip:AddDoubleLine(L['Galleon']..':', quests[32098] and L['Defeated'] or L['Undefeated'], 1, 1, 1, 0.8, 0.8, 0.8) - - - local timeText - local Hr, Min, AmPm = CalculateTimeValues(true) - - DT.tooltip:AddLine(" ") - if AmPm == -1 then - DT.tooltip:AddDoubleLine(E.db.datatexts.localtime and TIMEMANAGER_TOOLTIP_REALMTIME or TIMEMANAGER_TOOLTIP_LOCALTIME, - format(europeDisplayFormat_nocolor, Hr, Min), 1, 1, 1, lockoutColorNormal.r, lockoutColorNormal.g, lockoutColorNormal.b) - else - DT.tooltip:AddDoubleLine(E.db.datatexts.localtime and TIMEMANAGER_TOOLTIP_REALMTIME or TIMEMANAGER_TOOLTIP_LOCALTIME, - format(ukDisplayFormat_nocolor, Hr, Min, APM[AmPm]), 1, 1, 1, lockoutColorNormal.r, lockoutColorNormal.g, lockoutColorNormal.b) - end - - DT.tooltip:Show() -end - -local int = 3 -function Update(self, t) - int = int - t - - if enteredFrame then - OnEnter(self) - end - - --[[if GameTimeFrame.flashInvite then - E:Flash(self, 0.53) - else - E:StopFlash(self) - end]] - - if int > 0 then return end - - local Hr, Min, AmPm = CalculateTimeValues(false) - - -- no update quick exit - if (Hr == curHr and Min == curMin and AmPm == curAmPm) and not (int < -15000) then - int = 5 - return - end - - curHr = Hr - curMin = Min - curAmPm = AmPm - - if AmPm == -1 then - self.text:SetFormattedText(europeDisplayFormat, Hr, Min) - else - self.text:SetFormattedText(ukDisplayFormat, Hr, Min, APM[AmPm]) - end - lastPanel = self - int = 5 -end - ---[[ - DT:RegisterDatatext(name, events, eventFunc, updateFunc, clickFunc, onEnterFunc, onLeaveFunc) - - name - name of the datatext (required) - events - must be a table with string values of event names to register - eventFunc - function that gets fired when an event gets triggered - updateFunc - onUpdate script target function - click - function to fire when clicking the datatext - onEnterFunc - function to fire OnEnter - onLeaveFunc - function to fire OnLeave, if not provided one will be set for you that hides the tooltip. -]] +--Replacement of Elv's time datatext with some additions +local E, L, V, P, G, _ = unpack(ElvUI); --Inport: Engine, Locales, PrivateDB, ProfileDB, GlobalDB, Localize Underscore +local DT = E:GetModule('DataTexts') + +local format = string.format +local join = string.join +local floor = math.floor +local wipe = table.wipe + +local APM = { TIMEMANAGER_PM, TIMEMANAGER_AM } +local europeDisplayFormat = ''; +local ukDisplayFormat = ''; +local europeDisplayFormat_nocolor = join("", "%02d", ":|r%02d") +local ukDisplayFormat_nocolor = join("", "", "%d", ":|r%02d", " %s|r") +local timerLongFormat = "%d:%02d:%02d" +local timerShortFormat = "%d:%02d" +local lockoutInfoFormat = "%s%s |cffaaaaaa(%s, %s/%s)" +local lockoutInfoFormatNoEnc = "%s%s |cffaaaaaa(%s)" +local formatBattleGroundInfo = "%s: " +local lockoutColorExtended, lockoutColorNormal = { r=0.3,g=1,b=0.3 }, { r=.8,g=.8,b=.8 } +local lockoutFormatString = { "%dd %02dh %02dm", "%dd %dh %02dm", "%02dh %02dm", "%dh %02dm", "%dh %02dm", "%dm" } +local curHr, curMin, curAmPm +local enteredFrame = false; + +local Update, lastPanel; -- UpValue +local localizedName, isActive, canQueue, startTime, canEnter +local name, reset, locked, extended, isRaid, maxPlayers, difficulty, numEncounters, encounterProgress +local quests = {} +local updateQuestTable = false + +local function ValueColorUpdate(hex, r, g, b) + europeDisplayFormat = join("", "%02d", hex, ":|r%02d") + ukDisplayFormat = join("", "", "%d", hex, ":|r%02d", hex, " %s|r") + + if lastPanel ~= nil then + Update(lastPanel, 20000) + end +end +E['valueColorUpdateFuncs'][ValueColorUpdate] = true + +local function ConvertTime(h, m) + local AmPm + if E.db.datatexts.time24 == true then + return h, m, -1 + else + if h >= 12 then + if h > 12 then h = h - 12 end + AmPm = 1 + else + if h == 0 then h = 12 end + AmPm = 2 + end + end + return h, m, AmPm +end + +local function CalculateTimeValues(tooltip) + if (tooltip and E.db.datatexts.localtime) or (not tooltip and not E.db.datatexts.localtime) then + return ConvertTime(GetGameTime()) + else + local dateTable = date("*t") + return ConvertTime(dateTable["hour"], dateTable["min"]) + end +end + +local function CalculateTimeLeft(time) + local hour = floor(time / 3600) + local min = floor(time / 60 - (hour*60)) + local sec = time - (hour * 3600) - (min * 60) + + return hour, min, sec +end + +local function formatResetTime(sec) + local d,h,m,s = ChatFrame_TimeBreakDown(floor(sec)) + if not type(d) == 'number' or not type(h)== 'number' or not type(m) == 'number' or not type(s) == 'number' then + return 'N/A' + end + + if d > 0 and lockoutFormatString[h>10 and 1 or 2] then + return format(lockoutFormatString[h>10 and 1 or 2], d, h, m) + end + if h > 0 and lockoutFormatString[h>10 and 3 or 4] then + return format(lockoutFormatString[h>10 and 3 or 4], h, m) + end + if m > 0 and lockoutFormatString[m>10 and 5 or 6] then + return format(lockoutFormatString[m>10 and 5 or 6], m) + end +end + +local function OnEvent(self, event) + if event == "QUEST_COMPLETE" then + updateQuestTable = true + elseif (event == "QUEST_LOG_UPDATE" and updateQuestTable) or event == "ELVUI_FORCE_RUN" then + wipe(quests) + quests = GetQuestsCompleted() + updateQuestTable = false + end +end + +local function Click() + GameTimeFrame:Click(); +end + +local function OnLeave(self) + DT.tooltip:Hide(); + enteredFrame = false; +end + +local function OnEnter(self) + DT:SetupTooltip(self) + enteredFrame = true; + + DT.tooltip:AddLine(VOICE_CHAT_BATTLEGROUND); + for i = 1, GetNumWorldPVPAreas() do + _, localizedName, isActive, canQueue, startTime, canEnter = GetWorldPVPAreaInfo(i) + if canEnter then + if isActive then + startTime = WINTERGRASP_IN_PROGRESS + elseif startTime == nil then + startTime = QUEUE_TIME_UNAVAILABLE + else + local h, m, s = CalculateTimeLeft(startTime) + if h > 0 then + startTime = format(timerLongFormat, h, m, s) + else + startTime = format(timerShortFormat, m, s) + end + end + DT.tooltip:AddDoubleLine(format(formatBattleGroundInfo, localizedName), startTime, 1, 1, 1, lockoutColorNormal.r, lockoutColorNormal.g, lockoutColorNormal.b) + end + end + + --LFR lockout text + if E.db.sle.lfrshow.enabled then + DT:LFRShow() + end + + local oneraid, lockoutColor + for i = 1, GetNumSavedInstances() do + name, _, reset, _, locked, extended, _, isRaid, maxPlayers, difficulty, numEncounters, encounterProgress = GetSavedInstanceInfo(i) + if isRaid and (locked or extended) and name then + local tr,tg,tb,diff + if not oneraid then + DT.tooltip:AddLine(" ") + DT.tooltip:AddLine(L["Saved Raid(s)"]) + oneraid = true + end + if extended then lockoutColor = lockoutColorExtended else lockoutColor = lockoutColorNormal end + + if (numEncounters and numEncounters > 0) and (encounterProgress and encounterProgress > 0) then + DT.tooltip:AddDoubleLine(format(lockoutInfoFormat, maxPlayers, (difficulty:match("Heroic") and "H" or "N"), name, encounterProgress, numEncounters), formatResetTime(reset), 1,1,1, lockoutColor.r,lockoutColor.g,lockoutColor.b) + else + DT.tooltip:AddDoubleLine(format(lockoutInfoFormatNoEnc, maxPlayers, (difficulty:match("Heroic") and "H" or "N"), name), formatResetTime(reset), 1,1,1, lockoutColor.r,lockoutColor.g,lockoutColor.b) + end + end + end + + DT.tooltip:AddLine(" ") + DT.tooltip:AddLine(L["World Boss(s)"]) + DT.tooltip:AddDoubleLine(L['Sha of Anger']..':', quests[32099] and L['Defeated'] or L['Undefeated'], 1, 1, 1, 0.8, 0.8, 0.8) + DT.tooltip:AddDoubleLine(L['Galleon']..':', quests[32098] and L['Defeated'] or L['Undefeated'], 1, 1, 1, 0.8, 0.8, 0.8) + + DT.tooltip:AddDoubleLine(L['Oondasta']..':', quests[32519] and L['Defeated'] or L['Undefeated'], 1, 1, 1, 0.8, 0.8, 0.8) + DT.tooltip:AddDoubleLine(L['Nalak']..':', quests[32518] and L['Defeated'] or L['Undefeated'], 1, 1, 1, 0.8, 0.8, 0.8) + + local timeText + local Hr, Min, AmPm = CalculateTimeValues(true) + + DT.tooltip:AddLine(" ") + if AmPm == -1 then + DT.tooltip:AddDoubleLine(E.db.datatexts.localtime and TIMEMANAGER_TOOLTIP_REALMTIME or TIMEMANAGER_TOOLTIP_LOCALTIME, + format(europeDisplayFormat_nocolor, Hr, Min), 1, 1, 1, lockoutColorNormal.r, lockoutColorNormal.g, lockoutColorNormal.b) + else + DT.tooltip:AddDoubleLine(E.db.datatexts.localtime and TIMEMANAGER_TOOLTIP_REALMTIME or TIMEMANAGER_TOOLTIP_LOCALTIME, + format(ukDisplayFormat_nocolor, Hr, Min, APM[AmPm]), 1, 1, 1, lockoutColorNormal.r, lockoutColorNormal.g, lockoutColorNormal.b) + end + + DT.tooltip:Show() +end + +local int = 3 +function Update(self, t) + int = int - t + + if enteredFrame then + OnEnter(self) + end + + --[[if GameTimeFrame.flashInvite then + E:Flash(self, 0.53) + else + E:StopFlash(self) + end]] + + if int > 0 then return end + + local Hr, Min, AmPm = CalculateTimeValues(false) + + -- no update quick exit + if (Hr == curHr and Min == curMin and AmPm == curAmPm) and not (int < -15000) then + int = 5 + return + end + + curHr = Hr + curMin = Min + curAmPm = AmPm + + if AmPm == -1 then + self.text:SetFormattedText(europeDisplayFormat, Hr, Min) + else + self.text:SetFormattedText(ukDisplayFormat, Hr, Min, APM[AmPm]) + end + lastPanel = self + int = 5 +end + +--[[ + DT:RegisterDatatext(name, events, eventFunc, updateFunc, clickFunc, onEnterFunc, onLeaveFunc) + + name - name of the datatext (required) + events - must be a table with string values of event names to register + eventFunc - function that gets fired when an event gets triggered + updateFunc - onUpdate script target function + click - function to fire when clicking the datatext + onEnterFunc - function to fire OnEnter + onLeaveFunc - function to fire OnLeave, if not provided one will be set for you that hides the tooltip. +]] DT:RegisterDatatext('Time', { "QUEST_COMPLETE", "QUEST_LOG_UPDATE" }, OnEvent, Update, Click, OnEnter, OnLeave) \ No newline at end of file -- 1.7.9.5