You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

233 lines
7.4 KiB

-- module independent variables --
----------------------------------
local addon, ns = ...
local C, L, I = ns.LC.color, ns.L, ns.I
-- module own local variables and local cached functions --
-----------------------------------------------------------
local name = "Clock"; -- TIMEMANAGER_TITLE L["ModDesc-Clock"]
local ttName,ttColumns, tt, module = name.."TT", 2;
local _dateFormatValues = nil
local IsPlayedTimeRequested = false
-- register icon names and default files --
-------------------------------------------
I[name] = {iconfile="Interface\\Addons\\"..addon.."\\media\\clock"}; --IconName::Clock--
-- some local functions --
--------------------------
local function date(dateStr)
local M = _G["MONTH_".._G.date("%B"):upper()];
if dateStr:find("_mm_") then
dateStr = gsub(dateStr,"_mm_",M);
end
if dateStr:find("_m_") then
dateStr = gsub(dateStr,"_m_",_G.date("%b."));
end
return _G.date(dateStr);
end
local function createTooltip(tt,update)
if not (tt and tt.key and tt.key==ttName) then return end -- don't override other LibQTip tooltips...
local h24 = ns.profile[name].format24;
local dSec = ns.profile[name].showSeconds;
if tt.lines~=nil then tt:Clear(); end
tt:AddHeader(C("dkyellow",TIMEMANAGER_TITLE));
tt:AddSeparator();
if ns.profile[name].showDate then
tt:AddLine(C("ltyellow",L["Date"]), C("white",date(ns.profile[name].dateFormat)));
end
tt:AddLine(C("ltyellow",L["TimeLocal"]), C("white",ns.LT.GetTimeString("LocalTime",h24,dSec)));
tt:AddLine(C("ltyellow",L["TimeRealm"]), C("white",ns.LT.GetTimeString("GameTime",h24,dSec)));
if ns.profile[name].showUTC then
tt:AddLine(C("ltyellow",L["TimeUTC"]), C("white",ns.LT.GetTimeString("UTCTime",h24,dSec)));
end
--tt:AddSeparator(3,0,0,0,0);
--tt:AddLine(C("ltblue",L["Additional time zones"]));
--tt:AddSeparator();
--tt:AddLine(C("gray","coming soon"));
if ns.profile[name].showPlayed then
local pT,pL,pS = ns.LT.GetPlayedTime();
tt:AddSeparator(3,0,0,0,0);
tt:AddLine(C("ltblue",L["Playtime"]));
tt:AddSeparator();
tt:AddLine(C("ltyellow",TOTAL),C(pT and "white" or "gray",pT and SecondsToTime(pT) or "requested..."));
tt:AddLine(C("ltyellow",LEVEL),C(pL and "white" or "gray",pL and SecondsToTime(pL) or "requested..."));
tt:AddLine(C("ltyellow",L["Session"]),C("white",SecondsToTime(pS)));
end
if ns.profile.GeneralOptions.showHints then
tt:AddSeparator(3,0,0,0,0)
ns.ClickOpts.ttAddHints(tt,name);
end
if not update then
ns.roundupTooltip(tt);
end
end
local function updateBroker()
local obj = ns.LDB:GetDataObjectByName(module.ldbName);
local h24 = ns.profile[name].format24;
local dSec = ns.profile[name].showSeconds;
local label = {"",""};
local t={};
if ns.profile[name].timeLabel then
label[1] = L["TimeLabelLocal"].." ";
label[2] = L["TimeLabelRealm"].." ";
end
if ns.profile[name].timeLocal then
tinsert(t,label[1]..ns.LT.GetTimeString("LocalTime",h24,dSec));
end
if ns.profile[name].timeRealm then
tinsert(t,label[2]..ns.LT.GetTimeString("GameTime",h24,dSec));
end
obj.text = table.concat(t,", ");
end
local function dateFormatValues()
if not _dateFormatValues then
_dateFormatValues = {};
for key,value in pairs({
["%Y-%m-%d"] = "yyyy-mm-dd",
["%Y.%m.%d"] = "yyyy.mm.dd",
["%Y.%d.%m"] = "yyyy.dd.mm",
["%d.%m.%Y"] = "dd.mm.yyyy",
["%d/%m/%Y"] = "dd/mm/yyyy",
["%m/%d/%Y"] = "mm/dd/yyyy",
["%d. _mm_ %Y"] = "dd. mmmm yyyy",
["%d. _mm_ %y"] = "dd. mmmm yy",
["%d. _m_ %Y"] = "dd. mmm yyyy",
["%Y _mm_ %d."] = "yyyy mm dd.",
})do
_dateFormatValues[key] = date(key)..C("ltgray"," ("..value..")");
end
end
return _dateFormatValues;
end
-- module functions and variables --
------------------------------------
module = {
events = {},
onupdate_interval = 1,
timeout = 30,
config_defaults = {
enabled = false,
format24 = true,
timeLabel = false,
timeLocal = true,
timeRealm = false,
showSeconds = false,
showDate = true,
showPlayed = true,
showUTC = true,
dateFormat = "%Y-%m-%d"
},
clickOptionsRename = {
["timemanager"] = "1_timemanager",
["time"] = "2_toggle_time",
["calendar"] = "3_calendar",
["hoursmode"] = "4_hours_mode",
["menu"] = "5_open_menu"
},
clickOptions = {
["timemanager"] = {TIMEMANAGER_TITLE,"call","ToggleTimeManager"},
["time"] = {"Switch (local or realm time)","module","switchTime"}, -- L["Switch (local or realm time)"]
["calendar"] = {"Calendar","call","ToggleCalendar"}, -- L["Calendar"]
["hoursmode"] = {"Switch (12 or 24 hours)","module","switchHoursMode"}, -- L["Switch (12 or 24 hours)"]
["stopwatch"] = {STOPWATCH_TITLE,"call","Stopwatch_Toggle"},
["menu"] = "OptionMenu"
}
}
ns.ClickOpts.addDefaults(module,{
timemanager = "_LEFT",
calendar = "SHIFTRIGHT",
hoursmode = "SHIFTLEFT",
time = "_RIGHT",
menu = "__NONE",
stopwatch = "__NONE",
});
function module.switchTime()
if ns.profile[name].timeLocal and ns.profile[name].timeRealm then
-- from both to local
ns.profile[name].timeRealm = false;
elseif ns.profile[name].timeLocal then
-- from local to realm
ns.profile[name].timeLocal = false;
ns.profile[name].timeRealm = true;
else
-- from realm to both
ns.profile[name].timeLocal = true;
end
end
function module.switchHoursMode()
ns.profile[name].format24 = not ns.profile[name].format24;
end
function module.options()
return {
broker = {
timeLabel = { type="toggle", order=1, name=L["TimePrefix"], desc=L["TimePrefixDesc"]},
timeLocal = { type="toggle", order=2, name=L["TimeLocal"], desc=L["TimeLocalDesc"] },
timeRealm = { type="toggle", order=3, name=L["TimeRealm"], desc=L["TimeRealmDesc"] }
},
tooltip = {
showDate={ type="toggle", order=1, name=L["Show date"], desc=L["Display date in tooltip"] },
showUTC={ type="toggle", order=2, name=L["ClockUTC"], desc=L["ClockUTCDesc"]},
showPlayed={ type="toggle", order=3, name=L["ClockPlayedTime"], desc=L["ClockPlayedTimeDesc"]},
},
misc = {
format24={ type="toggle", order=1, name=TIMEMANAGER_24HOURMODE, desc=L["Switch between time format 24 hours and 12 hours with AM/PM"] },
showSeconds={ type="toggle", order=2, name=L["Show seconds"], desc=L["Display the time with seconds in broker button and tooltip"] },
dateFormat={ type="select", order=3, name=L["Date format"], desc=L["Choose your favorite date format"], values=dateFormatValues, width="double" },
},
}
end
-- function module.init() end
function module.onevent(self,event,...)
if event=="BE_UPDATE_CFG" then
ns.ClickOpts.update(name);
end
if ns.profile[name].showPlayed and not IsPlayedTimeRequested then
ns.LT.RequestPlayedTime()
IsPlayedTimeRequested = true
end
end
function module.onupdate()
updateBroker();
if tt~=nil and tt.key==name.."TT" and tt:IsShown() then
createTooltip(tt,true);
end
end
-- function module.optionspanel(panel) end
-- function module.onmousewheel(self,direction) end
-- function module.ontimeout(self)end
-- function module.ontooltip(tt) end
function module.onenter(self)
if (ns.tooltipChkOnShowModifier(false)) then return; end
tt = ns.acquireTooltip({ttName, ttColumns , "LEFT", "RIGHT"},{true},{self})
createTooltip(tt);
end
-- function module.onleave(self) end
-- function module.ondblclick(self,button) end
-- final module registration --
-------------------------------
ns.modules[name] = module;