vanilla-wow-addons – Rev 1
?pathlinks?
local Tablet = AceLibrary("Tablet-2.0")
local L = AceLibrary("AceLocale-2.0"):new("FuBar_ClockFu")
ClockFu = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceConsole-2.0", "AceDB-2.0", "FuBarPlugin-2.0")
ClockFu:RegisterDB("ClockFuDB")
ClockFu:RegisterDefaults('profile', {
twentyFour = false,
showSeconds = false,
localTime = false,
bothTimes = false,
bubble = false,
r = 1,
g = 1,
b = 1,
})
ClockFu.version = "2.0." .. string.sub("$Revision: 9785 $", 12, -3)
ClockFu.date = string.sub("$Date: 2006-09-01 15:25:39 -1000 (Fri, 01 Sep 2006) $", 8, 17)
ClockFu.hasIcon = false
ClockFu.defaultPosition = 'RIGHT'
ClockFu.hideWithoutStandby = true
ClockFu.independantProfile = true
function ClockFu:OnInitialize()
if GroupCalendar_OnLoad then
self.db.profile.bubble = true
end
end
function ClockFu:OnEnable()
self.timeSinceLastUpdate = 0
self.secondsDifference = 0
_,self.lastMinute = GetGameTime()
if not self:IsShowingBubble() then
self.db.profile.bubble = true
self:ToggleShowingBubble()
end
self:ScheduleRepeatingEvent(self.Update, 1, self)
end
function ClockFu:OnDisable()
if not self:IsShowingBubble() then
self:ToggleShowingBubble()
self.db.profile.bubble = not self.db.profile.bubble
end
end
function ClockFu:GetColor()
return self.db.profile.r, self.db.profile.g, self.db.profile.b
end
function ClockFu:GetHexColor()
return string.format("%02x%02x%02x", self.db.profile.r * 255, self.db.profile.g * 255, self.db.profile.b * 255)
end
function ClockFu:SetColor(r, g, b)
self.db.profile.r = r
self.db.profile.g = g
self.db.profile.b = b
self:UpdateText()
end
function ClockFu:IsTwentyFour()
return self.db.profile.twentyFour
end
function ClockFu:ToggleTwentyFour()
self.db.profile.twentyFour = not self.db.profile.twentyFour
self:Update()
return self.db.profile.twentyFour
end
function ClockFu:IsShowingSeconds()
return self.db.profile.showSeconds
end
function ClockFu:ToggleShowingSeconds()
self.db.profile.showSeconds = not self.db.profile.showSeconds
self:Update()
return self.db.profile.showSeconds
end
function ClockFu:IsLocalTime()
return self.db.profile.localTime
end
function ClockFu:ToggleLocalTime()
self.db.profile.localTime = not self.db.profile.localTime
self:Update()
return self.db.profile.localTime
end
function ClockFu:IsBothTimes()
return self.db.profile.bothTimes
end
function ClockFu:ToggleBothTimes()
self.db.profile.bothTimes = not self.db.profile.bothTimes
self:Update()
return self.db.profile.bothTimes
end
function ClockFu:IsShowingBubble()
return self.db.profile.bubble
end
function ClockFu:ToggleShowingBubble()
self.db.profile.bubble = not self.db.profile.bubble
if not self.db.profile.bubble then
GameTimeFrame:Hide()
else
GameTimeFrame:Show()
end
return self.db.profile.bubble
end
function ClockFu:GetLocalOffset()
if self.localOffset ~= nil then
return self.localOffset
end
local localHour = tonumber(date("%H"))
local localMinute = tonumber(date("%M"))
local utcHour = tonumber(date("!%H"))
local utcMinute = tonumber(date("!%M"))
local loc = localHour + localMinute / 60
local utc = utcHour + utcMinute / 60
self.localOffset = floor((loc - utc) * 2 + 0.5) / 2
if self.localOffset >= 12 then
self.localOffset = self.localOffset - 24
end
return self.localOffset
end
function ClockFu:GetServerOffset()
if self.serverOffset ~= nil then
return self.serverOffset
end
local serverHour, serverMinute = GetGameTime()
local utcHour = tonumber(date("!%H"))
local utcMinute = tonumber(date("!%M"))
local ser = serverHour + serverMinute / 60
local utc = utcHour + utcMinute / 60
self.serverOffset = floor((ser - utc) * 2 + 0.5) / 2
if self.serverOffset >= 12 then
self.serverOffset = self.serverOffset - 24
elseif self.serverOffset < -12 then
self.serverOffset = self.serverOffset + 24
end
return self.serverOffset
end
local optionsTable = {
handler = ClockFu,
type = 'group',
args = {
twentyFour = {
type = 'toggle',
name = L["24-hour format"],
desc = L["Toggle between 12-hour and 24-hour format"],
get = "IsTwentyFour",
set = "ToggleTwentyFour",
},
seconds = {
type = 'toggle',
name = L["Show seconds"],
desc = L["Show seconds"],
get = "IsShowingSeconds",
set = "ToggleShowingSeconds",
},
["local"] = {
type = 'toggle',
name = L["Local time"],
desc = L["Toggle between local time and server time"],
get = "IsLocalTime",
set = "ToggleLocalTime",
},
both = {
type = 'toggle',
name = L["Both times"],
desc = L["Toggle between showing two times or just one"],
get = "IsBothTimes",
set = "ToggleBothTimes",
},
bubble = {
type = 'toggle',
name = L["Show day/night bubble"],
desc = L["Show the day/night bubble on the upper-right corner of the minimap"],
get = "IsShowingBubble",
set = "ToggleShowingBubble",
},
color = {
type = 'color',
name = COLOR,
desc = L["Set the color of the text"],
get = "GetColor",
set = "SetColor",
disabled = function()
return not ClockFu:IsTextColored()
end
}
}
}
ClockFu:RegisterChatCommand(L:GetTable("AceConsole-commands"), optionsTable)
ClockFu.OnMenuRequest = optionsTable
function ClockFu:FormatTime(hour, minute, second, colorize)
if self:IsTwentyFour() then
if not colorize then
if self:IsShowingSeconds() then
return string.format("%d:%02d:%02d", hour, minute, second)
else
return string.format("%d:%02d", hour, minute)
end
else
local color = self:GetHexColor()
if self:IsShowingSeconds() then
return string.format("|cff%s%d|r:|cff%s%02d|r:|cff%s%02d|r", color, hour, color, minute, color, second)
else
return string.format("|cff%s%d|r:|cff%s%02d|r", color, hour, color, minute)
end
end
else
pm = floor(hour / 12) == 1
hour = mod(hour, 12)
if hour == 0 then
hour = 12
end
if not colorize then
if self:IsShowingSeconds() then
return string.format("%d:%02d:%02d %s", hour, minute, second, pm and " PM" or " AM")
else
return string.format("%d:%02d %s", hour, minute, pm and " PM" or " AM")
end
else
local color = self:GetHexColor()
if self:IsShowingSeconds() then
return string.format("|cff%s%d|r:|cff%s%02d|r:|cff%s%02d|r %s", color, hour, color, minute, color, second, pm and " PM" or " AM")
else
return string.format("|cff%s%d|r:|cff%s%02d|r %s", color, hour, color, minute, pm and " PM" or " AM")
end
end
end
end
function ClockFu:GetServerTime(colorize)
local hour, minute = GetGameTime()
if self.lastMinute ~= minute then
_,self.lastMinute = GetGameTime()
self.secondsDifference = mod(time(), 60)
end
local second = mod(time() - self.secondsDifference, 60)
return self:FormatTime(hour, minute, second, colorize)
end
function ClockFu:GetLocalTime(colorize)
local hour = tonumber(date("%H"))
local minute = tonumber(date("%M"))
local second = tonumber(date("%S"))
return self:FormatTime(hour, minute, second, colorize)
end
function ClockFu:GetUtcTime()
local hour = tonumber(date("!%H"))
local minute = tonumber(date("!%M"))
local second = tonumber(date("!%S"))
return self:FormatTime(hour, minute, second)
end
function ClockFu:OnTextUpdate()
local hour, minute = GetGameTime()
if self.lastMinute ~= minute then
_,self.lastMinute = GetGameTime()
self.secondsDifference = mod(time(), 60)
end
if self:IsBothTimes() then
if self:IsLocalTime() then
self:SetText(string.format("%s || %s", self:GetLocalTime(true), self:GetServerTime(true)))
else
self:SetText(string.format("%s || %s", self:GetServerTime(true), self:GetLocalTime(true)))
end
elseif self:IsLocalTime() then
self:SetText(self:GetLocalTime(true))
else
self:SetText(self:GetServerTime(true))
end
end
function ClockFu:OnTooltipUpdate()
local s = self:GetServerOffset()
local l = self:GetLocalOffset()
local cat = Tablet:AddCategory(
'columns', 2,
'child_textR', 1,
'child_textG', 1,
'child_textB', 0,
'child_text2R', 1,
'child_text2G', 1,
'child_text2B', 1
)
cat:AddLine(
'text', string.format(L["Local time"] .. " (%+03d:%02d)", l, mod(l * 60, 60)),
'text2', self:GetLocalTime()
)
cat:AddLine(
'text', string.format(L["Server time"] .. " (%+03d:%02d)", s, mod(s * 60, 60)),
'text2', self:GetServerTime()
)
cat:AddLine(
'text', L["UTC"],
'text2', self:GetUtcTime()
)
Tablet:AddCategory():AddLine(
'text', date("%A, %B %d, %Y"),
'textR', 1,
'textG', 1,
'textB', 1,
'justify', "CENTER"
)
end
Generated by GNU Enscript 1.6.5.90.