vanilla-wow-addons – Rev 1
?pathlinks?
gCalendarEventViewer_ShowScheduleEditor = false;
gCalendarEventViewer_Active = false;
gCalendarEventViewer_Database = nil;
gCalendarEventViewer_Event = nil;
gCalendarEventViewer_SelectedPlayerDatabase = nil;
gCalendarEventViewer_PanelFrames =
{
"CalendarEventViewerEventFrame",
"CalendarEventViewerAttendanceFrame",
};
gCalendarEventViewer_CurrentPanel = 1;
function CalendarEventViewer_ViewEvent(pDatabase, pEvent)
gCalendarEventViewer_Database = pDatabase;
gCalendarEventViewer_Event = pEvent;
gCalendarEventViewer_SelectedPlayerDatabase = gGroupCalendar_UserDatabase;
CalendarAttendanceList_SetEvent(CalendarEventViewerAttendance, pDatabase, pEvent);
CalendarEventViewer_UpdateControlsFromEvent(gCalendarEventViewer_Event, false);
ShowUIPanel(CalendarEventViewerFrame);
CalendarEventTitle:SetFocus();
CalendarEventTitle:HighlightText(0, 100);
gCalendarEventViewer_ShowScheduleEditor = false;
gCalendarEventViewer_Active = true;
end
function CalendarEventViewer_DoneViewing()
if not gCalendarEventViewer_Active then
return;
end
CalendarEventViewer_Close(true);
end
function CalendarEventViewer_ScheduleChanged(pDate)
if gCalendarEventViewer_Active
and gCalendarEventViewer_Event.mDate == pDate then
CalendarAttendanceList_EventChanged(CalendarEventViewerAttendance, gCalendarEventViewer_Database, gCalendarEventViewer_Event);
CalendarEventViewer_UpdateControlsFromEvent(gCalendarEventViewer_Event, true);
end
end
function CalendarEventViewer_MajorDatabaseChange()
if gCalendarEventViewer_Active then
CalendarAttendanceList_EventChanged(CalendarEventViewerAttendance, gCalendarEventViewer_Database, gCalendarEventViewer_Event);
CalendarEventViewer_UpdateControlsFromEvent(gCalendarEventViewer_Event, true);
end
end
function CalendarEventViewer_Save()
-- Save attendance feedback
if EventDatabase_EventTypeUsesAttendance(gCalendarEventViewer_Event.mType)
and EventDatabase_PlayerIsQualifiedForEvent(gCalendarEventViewer_Event, gCalendarEventViewer_SelectedPlayerDatabase.PlayerLevel) then
local vPendingRSVP = EventDatabase_FindRSVPRequestData(gCalendarEventViewer_SelectedPlayerDatabase, gCalendarEventViewer_Database.UserName, gCalendarEventViewer_Event.mID);
local vEventRSVP = EventDatabase_FindEventRSVP(gCalendarEventViewer_Database.UserName, gCalendarEventViewer_Event, gCalendarEventViewer_SelectedPlayerDatabase.UserName);
local vChanged = false;
local vHasResponse = false;
local vStatus;
local vComment;
if not vPendingRSVP then
if vEventRSVP then
vStatus = vEventRSVP.mStatus;
vComment = vEventRSVP.mComment;
else
vStatus = nil;
vComment = "";
end
else
vStatus = vPendingRSVP.mStatus;
vComment = vPendingRSVP.mComment;
end
if not vComment then
vComment = "";
end
-- Update the status
if CalendarEventViewerYes:GetChecked() then
vHasResponse = true;
if vStatus ~= "Y" then
vStatus = "Y";
vChanged = true;
end
elseif CalendarEventViewerNo:GetChecked() then
vHasResponse = true;
if vStatus ~= "N" then
vStatus = "N";
vChanged = true;
end
--[[
elseif vStatus ~= nil
and vStatus ~= "-" then
vStatus = "-";
vChanged = true;
]]
end
-- Update the comment
if vHasResponse then
local vNewComment = Calendar_EscapeString(CalendarEventViewerComment:GetText());
if vComment ~= vNewComment then
vComment = vNewComment;
vChanged = true;
end
end
-- Add a new RSVP if it's changed
if vChanged then
local vRSVP = EventDatabase_CreatePlayerRSVP(
gCalendarEventViewer_Database,
gCalendarEventViewer_Event,
gCalendarEventViewer_SelectedPlayerDatabase.UserName,
gCalendarEventViewer_SelectedPlayerDatabase.PlayerRaceCode,
gCalendarEventViewer_SelectedPlayerDatabase.PlayerClassCode,
gCalendarEventViewer_SelectedPlayerDatabase.PlayerLevel,
vStatus,
vComment,
gGroupCalendar_PlayerGuild,
gGroupCalendar_PlayerGuildRank,
gGroupCalendar_PlayerCharacters);
EventDatabase_AddRSVP(gCalendarEventViewer_SelectedPlayerDatabase, vRSVP);
-- Update the UI
CalendarAttendanceList_EventChanged(CalendarEventViewerAttendance, gCalendarEventViewer_Database, gCalendarEventViewer_Event);
CalendarEventViewer_UpdateControlsFromEvent(gCalendarEventViewer_Event, false);
end
end
end
function CalendarEventViewer_Close(pShowScheduleEditor)
gCalendarEventViewer_ShowScheduleEditor = pShowScheduleEditor;
HideUIPanel(CalendarEventViewerFrame);
end
function CalendarEventViewer_OnLoad()
-- Tabs
PanelTemplates_SetNumTabs(this, table.getn(gCalendarEventViewer_PanelFrames));
CalendarEventViewerFrame.selectedTab = gCalendarEventViewer_CurrentPanel;
PanelTemplates_UpdateTabs(this);
CalendarEventViewerCharacterMenu.ChangedValueFunc = CalendarEventViewer_SelectedCharacterChanged;
end
function CalendarEventViewer_OnShow()
PlaySound("igCharacterInfoOpen");
CalendarEventViewer_ShowPanel(1); -- Always switch to the event view when showing the window
end
function CalendarEventViewer_OnHide()
PlaySound("igCharacterInfoClose");
CalendarEventViewer_Save();
if not gCalendarEventViewer_ShowScheduleEditor then
HideUIPanel(CalendarEditorFrame);
end
gCalendarEventViewer_Database = nil;
gCalendarEventViewer_Event = nil;
gCalendarEventViewer_Active = false;
end
function CalendarEventViewer_SelectedCharacterChanged(pMenuFrame, pValue)
gCalendarEventViewer_SelectedPlayerDatabase = EventDatabase_GetDatabase(pValue, false);
CalendarEventViewer_UpdateControlsFromEvent(gCalendarEventViewer_Event, false);
end
function CalendarEventViewer_UpdateControlsFromEvent(pEvent, pSkipAttendanceFields)
-- Update the title
CalendarEventViewerEventFrameEventTitle:SetText(EventDatabase_GetEventDisplayName(pEvent));
-- Update the date and time
if pEvent.mTime ~= nil then
local vTime;
local vDate = pEvent.mDate;
if gGroupCalendar_Settings.ShowEventsInLocalTime then
vDate, vTime = Calendar_GetLocalDateTimeFromServerDateTime(pEvent.mDate, pEvent.mTime);
else
vTime = pEvent.mTime;
end
-- Set the date
CalendarEventViewerEventFrameDate:SetText(Calendar_GetLongDateString(vDate));
--
local vTimeString;
if pEvent.mDuration ~= nil
and pEvent.mDuration ~= 0 then
local vEndTime = math.mod(vTime + pEvent.mDuration, 1440);
vTimeString = string.format(
GroupCalendar_cTimeRangeFormat,
Calendar_GetShortTimeString(vTime),
Calendar_GetShortTimeString(vEndTime));
else
vTimeString = Calendar_GetShortTimeString(vTime);
end
CalendarEventViewerEventFrameTime:SetText(vTimeString);
CalendarEventViewerEventFrameTime:Show();
else
CalendarEventViewerEventFrameDate:SetText(Calendar_GetLongDateString(pEvent.mDate));
CalendarEventViewerEventFrameTime:Hide();
end
-- Update the level range
if EventDatabase_EventTypeUsesLevelLimits(pEvent.mType) then
if pEvent.mMinLevel ~= nil then
if pEvent.mMaxLevel ~= nil then
if pEvent.mMinLevel == pEvent.mMaxLevel then
CalendarEventViewerEventFrameLevels:SetText(string.format(CalendarEventViewer_cSingleLevel, pEvent.mMinLevel));
else
CalendarEventViewerEventFrameLevels:SetText(string.format(CalendarEventViewer_cLevelRangeFormat, pEvent.mMinLevel, pEvent.mMaxLevel));
end
else
if pEvent.mMinLevel == 60 then
CalendarEventViewerEventFrameLevels:SetText(string.format(CalendarEventViewer_cSingleLevel, pEvent.mMinLevel));
else
CalendarEventViewerEventFrameLevels:SetText(string.format(CalendarEventViewer_cMinLevelFormat, pEvent.mMinLevel));
end
end
CalendarEventViewerEventFrameLevels:Show();
else
if pEvent.mMaxLevel ~= nil then
CalendarEventViewerEventFrameLevels:SetText(string.format(CalendarEventViewer_cMaxLevelFormat, pEvent.mMaxLevel));
else
CalendarEventViewerEventFrameLevels:SetText(CalendarEventViewer_cAllLevels);
end
CalendarEventViewerEventFrameLevels:Show();
end
if EventDatabase_PlayerIsQualifiedForEvent(gCalendarEventViewer_Event, gCalendarEventViewer_SelectedPlayerDatabase.PlayerLevel) then
CalendarEventViewerEventFrameLevels:SetTextColor(1.0, 0.82, 0);
else
CalendarEventViewerEventFrameLevels:SetTextColor(1.0, 0.2, 0.2);
end
else
CalendarEventViewerEventFrameLevels:Hide();
end
-- Update the description
if pEvent.mDescription then
CalendarEventViewerDescText:SetText(Calendar_UnescapeString(pEvent.mDescription));
CalendarEventViewerDescText:Show();
else
CalendarEventViewerDescText:Hide();
end
-- Update the attendance
if EventDatabase_EventTypeUsesAttendance(pEvent.mType) then
local vIsAttending = false;
local vIsNotAttending = false;
local vAttendanceComment = "";
CalendarEventViewer_SetAttendanceVisible(true);
if not pSkipAttendanceFields then
CalendarDropDown_SetSelectedValue(CalendarEventViewerCharacterMenu, gCalendarEventViewer_SelectedPlayerDatabase.UserName);
if EventDatabase_PlayerIsQualifiedForEvent(gCalendarEventViewer_Event, gCalendarEventViewer_SelectedPlayerDatabase.PlayerLevel) then
CalendarEventViewer_SetAttendanceEnabled(true);
local vPendingRSVP = EventDatabase_FindRSVPRequestData(gCalendarEventViewer_SelectedPlayerDatabase, gCalendarEventViewer_Database.UserName, gCalendarEventViewer_Event.mID);
local vEventRSVP = EventDatabase_FindEventRSVP(gCalendarEventViewer_Database.UserName, gCalendarEventViewer_Event, gCalendarEventViewer_SelectedPlayerDatabase.UserName);
local vRSVP;
if vPendingRSVP then
vRSVP = vPendingRSVP;
else
vRSVP = vEventRSVP;
end
if vRSVP then
vIsAttending = vRSVP.mStatus == "Y" or vRSVP.mStatus == "S";
vIsNotAttending = vRSVP.mStatus == "N";
if vRSVP.mComment then
vAttendanceComment = Calendar_UnescapeString(vRSVP.mComment);
end
end
CalendarEventViewer_SetResponseStatus(vPendingRSVP, vEventRSVP);
else
CalendarEventViewer_SetAttendanceEnabled(false);
end
CalendarEventViewerYes:SetChecked(vIsAttending);
CalendarEventViewerNo:SetChecked(vIsNotAttending);
CalendarEventViewerComment:SetText(vAttendanceComment);
CalendarEventViewer_UpdateCommentEnable();
end -- if not skipAttendance
else
CalendarEventViewer_SetAttendanceVisible(false);
end
if pEvent.mType ~= nil then
CalendarEventViewerEventBackground:SetTexture(Calendar_GetEventTypeIconPath(pEvent.mType));
if pEvent.mType == "Birth" then
CalendarEventViewerEventBackground:SetVertexColor(1, 1, 1, 0.8);
else
CalendarEventViewerEventBackground:SetVertexColor(1, 1, 1, 0.19);
end
else
CalendarEventViewerEventBackground:SetTexture("");
end
end
function CalendarEventViewer_UpdateCommentEnable()
local vEnable = CalendarEventViewerYes:GetChecked() or CalendarEventViewerNo:GetChecked();
Calendar_SetEditBoxEnable(CalendarEventViewerComment, vEnable);
end
function CalendarEventViewer_SetAttendanceEnabled(pEnable)
Calendar_SetCheckButtonEnable(CalendarEventViewerYes, pEnable);
Calendar_SetCheckButtonEnable(CalendarEventViewerNo, pEnable);
Calendar_SetEditBoxEnable(CalendarEventViewerComment, pEnable);
if pEnable then
CalendarEventViewerEventFrameStatus:Show();
else
CalendarEventViewerEventFrameStatus:Hide();
end
end
function CalendarEventViewer_SetAttendanceVisible(pVisible)
if pVisible then
CalendarEventViewerCharacter:Show();
CalendarEventViewerYes:Show();
CalendarEventViewerNo:Show();
CalendarEventViewerComment:Show();
CalendarEventViewerEventFrameStatus:Show();
CalendarEventViewerFrameTab2:Show();
else
CalendarEventViewerCharacter:Hide();
CalendarEventViewerYes:Hide();
CalendarEventViewerNo:Hide();
CalendarEventViewerComment:Hide();
CalendarEventViewerEventFrameStatus:Hide();
CalendarEventViewerFrameTab2:Hide();
end
end
function CalendarEventViewer_CalculateResponseStatus(pPendingRSVP, pEventRSVP)
if pPendingRSVP then
return 2;
elseif pEventRSVP then
return 3;
else
return 1;
end
end
function CalendarEventViewer_SetResponseStatus(pPendingRSVP, pEventRSVP)
local vStatus = CalendarEventViewer_CalculateResponseStatus(pPendingRSVP, pEventRSVP);
CalendarEventViewerEventFrameStatus:SetText(CalendarEventViewer_cResponseMessage[vStatus]);
end
function CalendarEventViewer_ShowPanel(pPanelIndex)
if gCalendarEventViewer_CurrentPanel > 0
and gCalendarEventViewer_CurrentPanel ~= pPanelIndex then
CalendarEventViewer_HidePanel(gCalendarEventViewer_CurrentPanel);
end
-- NOTE: Don't check for redundant calls since this function
-- will be called to reset the field values as well as to
-- actuall show the panel when it's hidden
gCalendarEventViewer_CurrentPanel = pPanelIndex;
-- Update the control values
if pPanelIndex == 1 then
-- Event panel
CalendarEventViewerParchment:Show();
elseif pPanelIndex == 2 then
-- Attendance panel
CalendarEventViewerParchment:Hide();
if EventDatabase_IsQuestingEventType(gCalendarEventViewer_Event.mType) then
CalendarAttendanceList_SetClassTotalsVisible(CalendarEventViewerAttendance, true, false);
else
CalendarAttendanceList_SetClassTotalsVisible(CalendarEventViewerAttendance, false, false);
end
else
Calendar_DebugMessage("CalendarEventViewer_ShowPanel: Unknown index ("..pPanelIndex..")");
end
getglobal(gCalendarEventViewer_PanelFrames[pPanelIndex]):Show();
PanelTemplates_SetTab(CalendarEventViewerFrame, pPanelIndex);
end
function CalendarEventViewer_HidePanel(pFrameIndex)
if gCalendarEventViewer_CurrentPanel ~= pFrameIndex then
return;
end
CalendarEventViewer_Save();
getglobal(gCalendarEventViewer_PanelFrames[pFrameIndex]):Hide();
gCalendarEventViewer_CurrentPanel = 0;
end