-- AKA |
-- Author: Lon Koenig |
-- License: Creative Commons Attribution-Noncommercial 3.0 Unported License (see Readme.txt) |
|
--[[ |
The code in this file mostly replicates functions from the Blizzard_Calendar addon. |
In order to replicate the look of the default tooltip, it was neceassary to replicate a huge chunk of code and constants. |
]]-- |
|
|
|
|
-- calendar constants: |
-- ------------------------------- |
|
|
|
local CALENDAR_MAX_DAYS_PER_MONTH = 42; -- 6 weeks |
local CALENDAR_MAX_DARKDAYS_PER_MONTH = 14; -- max days from the previous and next months when viewing the current month |
|
-- Event Types |
local CALENDAR_EVENTTYPE_RAID = 1; |
local CALENDAR_EVENTTYPE_DUNGEON = 2; |
local CALENDAR_EVENTTYPE_PVP = 3; |
local CALENDAR_EVENTTYPE_MEETING = 4; |
local CALENDAR_EVENTTYPE_OTHER = 5; |
|
-- Invite Statuses |
local CALENDAR_INVITESTATUS_INVITED = 1; |
local CALENDAR_INVITESTATUS_ACCEPTED = 2; |
local CALENDAR_INVITESTATUS_DECLINED = 3; |
local CALENDAR_INVITESTATUS_CONFIRMED = 4; |
local CALENDAR_INVITESTATUS_OUT = 5; |
local CALENDAR_INVITESTATUS_STANDBY = 6; |
|
|
|
local CALENDAR_MONTH_NAMES = { |
MONTH_JANUARY, |
MONTH_FEBRUARY, |
MONTH_MARCH, |
MONTH_APRIL, |
MONTH_MAY, |
MONTH_JUNE, |
MONTH_JULY, |
MONTH_AUGUST, |
MONTH_SEPTEMBER, |
MONTH_OCTOBER, |
MONTH_NOVEMBER, |
MONTH_DECEMBER, |
}; |
|
-- month names show up differently for full date displays in some languages |
local CALENDAR_FULLDATE_MONTH_NAMES = { |
FULLDATE_MONTH_JANUARY, |
FULLDATE_MONTH_FEBRUARY, |
FULLDATE_MONTH_MARCH, |
FULLDATE_MONTH_APRIL, |
FULLDATE_MONTH_MAY, |
FULLDATE_MONTH_JUNE, |
FULLDATE_MONTH_JULY, |
FULLDATE_MONTH_AUGUST, |
FULLDATE_MONTH_SEPTEMBER, |
FULLDATE_MONTH_OCTOBER, |
FULLDATE_MONTH_NOVEMBER, |
FULLDATE_MONTH_DECEMBER, |
}; |
|
local CALENDAR_WEEKDAY_NAMES = { |
WEEKDAY_SUNDAY, |
WEEKDAY_MONDAY, |
WEEKDAY_TUESDAY, |
WEEKDAY_WEDNESDAY, |
WEEKDAY_THURSDAY, |
WEEKDAY_FRIDAY, |
WEEKDAY_SATURDAY, |
}; |
|
local CALENDAR_EVENTCOLOR_MODERATOR = {r=0.54, g=0.75, b=1.0}; |
|
local CALENDAR_CALENDARTYPE_COLORS = { |
-- ["PLAYER"] = , |
-- ["GUILD"] = , |
["SYSTEM"] = {r=1.0, g=1.0, b=0.6}, |
["HOLIDAY"] = HIGHLIGHT_FONT_COLOR, |
["RAID_LOCKOUT"] = NORMAL_FONT_COLOR, |
["RAID_RESET"] = HIGHLIGHT_FONT_COLOR, |
-- ["ARENA"] = "", |
}; |
|
|
local CALENDAR_INVITESTATUS_NAMES = { |
[CALENDAR_INVITESTATUS_CONFIRMED] = CALENDAR_STATUS_CONFIRMED, |
[CALENDAR_INVITESTATUS_ACCEPTED] = CALENDAR_STATUS_ACCEPTED, |
[CALENDAR_INVITESTATUS_DECLINED] = CALENDAR_STATUS_DECLINED, |
[CALENDAR_INVITESTATUS_OUT] = CALENDAR_STATUS_OUT, |
[CALENDAR_INVITESTATUS_STANDBY] = CALENDAR_STATUS_STANDBY, |
[CALENDAR_INVITESTATUS_INVITED] = CALENDAR_STATUS_INVITED, |
}; |
local CALENDAR_INVITESTATUS_COLORS = { |
[CALENDAR_INVITESTATUS_CONFIRMED] = GREEN_FONT_COLOR, |
[CALENDAR_INVITESTATUS_ACCEPTED] = GREEN_FONT_COLOR, |
[CALENDAR_INVITESTATUS_DECLINED] = RED_FONT_COLOR, |
[CALENDAR_INVITESTATUS_OUT] = RED_FONT_COLOR, |
[CALENDAR_INVITESTATUS_STANDBY] = GREEN_FONT_COLOR, |
[CALENDAR_INVITESTATUS_INVITED] = NORMAL_FONT_COLOR, |
}; |
|
local CALENDAR_CALENDARTYPE_NAMEFORMAT = { |
["PLAYER"] = { |
[""] = "%s", |
}, |
["GUILD"] = { |
[""] = "%s", |
}, |
["SYSTEM"] = { |
[""] = "%s", |
}, |
["HOLIDAY"] = { |
["START"] = CALENDAR_EVENTNAME_FORMAT_START, |
["END"] = CALENDAR_EVENTNAME_FORMAT_END, |
[""] = "%s", |
}, |
["RAID_LOCKOUT"] = { |
[""] = CALENDAR_EVENTNAME_FORMAT_RAID_LOCKOUT, |
}, |
["RAID_RESET"] = { |
[""] = CALENDAR_EVENTNAME_FORMAT_RAID_RESET, |
}, |
["ARENA"] = { |
[""] = "%s", |
}, |
}; |
-- My local functions: |
-- ==================== |
|
|
|
|
-- ick - gotta dupe the whole pop-upn |
local function _CalendarFrame_GetFullDateFromDay(dayButton) |
-- hacked up version that rolls all the local calendar functions into one call |
local weekday = mod((dayButton:GetID()) - 2 + CALENDAR_FIRST_WEEKDAY, 7) + 1; |
local month, year = CalendarGetMonth(dayButton.monthOffset); |
local day = dayButton.day; |
local weekdayName = CALENDAR_WEEKDAY_NAMES[weekday]; |
local monthName = CALENDAR_FULLDATE_MONTH_NAMES[month]; |
return weekdayName, monthName, day, year, month; |
|
end |
|
|
local function _CalendarFrame_GetEventColor(calendarType, modStatus, inviteStatus) |
-- unmodified version |
if ( calendarType == "PLAYER" or calendarType == "GUILD" or calendarType == "ARENA" ) then |
if ( modStatus == "MODERATOR" or modStatus == "CREATOR" ) then |
return CALENDAR_EVENTCOLOR_MODERATOR; |
elseif ( inviteStatus ) then |
return CALENDAR_INVITESTATUS_COLORS[inviteStatus]; |
end |
elseif ( CALENDAR_CALENDARTYPE_COLORS[calendarType] ) then |
return CALENDAR_CALENDARTYPE_COLORS[calendarType]; |
end |
-- default to normal color |
return NORMAL_FONT_COLOR; |
end |
|
|
function AKA_CalendarDayButton_OnEnter(self) |
if ( not self.day ) then |
-- not yet updated |
return; |
end |
|
local monthOffset = self.monthOffset; |
local day = self.day; |
local numEvents = CalendarGetNumDayEvents(monthOffset, day); |
if ( numEvents <= 0 ) then |
return; |
end |
|
-- add events |
local title, hour, minute, calendarType, sequenceType, eventType, texture, modStatus, invitedBy, difficulty; |
local eventTime, eventColor; |
local numShownEvents = 0; |
for i = 1, numEvents do |
title, hour, minute, calendarType, sequenceType, eventType, texture, |
modStatus, inviteStatus, invitedBy, difficulty = CalendarGetDayEvent(monthOffset, day, i); |
if ( title and sequenceType ~= "ONGOING" ) then |
if ( numShownEvents == 0 ) then |
GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); |
GameTooltip:ClearLines(); |
|
-- add date if we hit our first viewable event |
local fullDate = format(FULLDATE, _CalendarFrame_GetFullDateFromDay(self)); |
GameTooltip:AddLine(fullDate, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b); |
GameTooltip:AddLine(" "); |
else |
GameTooltip:AddLine(" "); |
end |
|
eventTime = GameTime_GetFormattedTime(hour, minute, true); |
eventColor = _CalendarFrame_GetEventColor(calendarType, modStatus, inviteStatus); |
if ( calendarType == "RAID_RESET" or calendarType == "RAID_LOCKOUT" ) then |
if ( difficulty > 1 ) then |
title = format(DUNGEON_NAME_WITH_DIFFICULTY, title, _G["DUNGEON_DIFFICULTY"..difficulty]); |
end |
end |
GameTooltip:AddDoubleLine( |
format(CALENDAR_CALENDARTYPE_NAMEFORMAT[calendarType][sequenceType], title), |
eventTime, |
eventColor.r, eventColor.g, eventColor.b, |
HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b, |
1 |
); |
if ( calendarType == "PLAYER" or calendarType == "GUILD" or calendarType == "ARENA" ) then |
local isGuildWide = CalendarContextEventIsGuildWide(monthOffset, day, i); |
if ( UnitIsUnit("player", invitedBy) ) then |
if ( isGuildWide ) then |
GameTooltip:AddLine( |
CALENDAR_ANNOUNCEMENT_CREATEDBY_YOURSELF, |
NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b); |
else |
GameTooltip:AddLine( |
CALENDAR_INVITEDBY_YOURSELF, |
NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b); |
end |
elseif ( invitedBy ~= "" ) then |
if ( isGuildWide ) then |
GameTooltip:AddLine( |
format(CALENDAR_ANNOUNCEMENT_CREATEDBY_PLAYER, AKA_ExpandNickname(invitedBy)), |
NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b); |
else |
GameTooltip:AddLine( |
format(CALENDAR_INVITEDBY_PLAYER, AKA_ExpandNickname(invitedBy)), |
NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b); |
end |
end |
end |
|
numShownEvents = numShownEvents + 1; |
end |
end |
if ( numShownEvents > 0 ) then |
GameTooltip:Show(); |
end |
|
end |