vanilla-wow-addons – Rev 1
?pathlinks?
gCalendarEventEditor_ShowScheduleEditor = false;
gCalendarEventEditor_Active = false;
gCalendarEventEditor_Database = nil;
gCalendarEventEditor_Event = nil;
gCalendarEventEditor_IsNewEvent = false;
gCalendarEventEditor_NewClassLimits = nil;
gCalendarEventEditor_PreviousEventType = nil;
gCalendarEventEditor_CurrentPanel = 1;
gCalendarEventEditor_UsingLocalTime = false;
gCalendarEventEditor_EventDate = nil;
gCalendarEventEditor_EventTime = nil;
gCalendarEventEditor_EventDateIsLocal = false;
gGroupCalendar_cNumAttendanceItems = 12;
gGroupCalendar_cNumAutoConfirmAttendanceItems = 11;
gGroupCalendar_cNumPlainAttendanceItems = 16;
gGroupCalendar_cAttendanceItemHeight = 16;
gCalendarEventEditor_PanelFrames =
{
"CalendarEventEditorEventFrame",
"CalendarEventEditorAttendanceFrame",
};
StaticPopupDialogs["CONFIRM_CALENDAR_EVENT_DELETE"] = {
text = TEXT(CalendarEventEditor_cConfirmDeleteMsg),
button1 = TEXT(CalendarEventEditor_cDelete),
button2 = TEXT(CANCEL),
OnAccept = function() CalendarEventEditor_DeleteEvent(); end,
timeout = 0,
whileDead = 1,
hideOnEscape = 1
};
StaticPopupDialogs["CONFIRM_CALENDAR_RSVP_DELETE"] = {
text = TEXT(GroupCalendar_cConfrimDeleteRSVP),
button1 = TEXT(CalendarEventEditor_cDelete),
button2 = TEXT(CANCEL),
OnAccept = function() CalendarEventEditor_DeleteRSVP(); end,
timeout = 0,
whileDead = 1,
hideOnEscape = 1
};
StaticPopupDialogs["CONFIRM_CALENDAR_CLEAR_WHISPERS"] = {
text = TEXT(GroupCalendar_cConfirmClearWhispers),
button1 = TEXT(GroupCalendar_cClear),
button2 = TEXT(CANCEL),
OnAccept = function() CalendarWhisperLog_Clear(); end,
timeout = 0,
whileDead = 1,
hideOnEscape = 1
};
function CalendarEventEditor_EditEvent(pDatabase, pEvent, pIsNewEvent)
gCalendarEventEditor_Database = pDatabase;
gCalendarEventEditor_Event = pEvent;
gCalendarEventEditor_IsNewEvent = pIsNewEvent;
gCalendarEventEditor_UsingLocalTime = gGroupCalendar_Settings.ShowEventsInLocalTime;
gCalendarEventEditor_NewClassLimits = nil;
CalendarAttendanceList_SetEvent(CalendarEventEditorAttendance, pDatabase, pEvent);
gCalendarEventEditor_EventDateIsLocal = gCalendarEventEditor_UsingLocalTime;
if pIsNewEvent then
-- New events have their date in whatever time zone is
-- selected for display
gCalendarEventEditor_EventDate = pEvent.mDate;
gCalendarEventEditor_EventTime = pEvent.mTime;
else
-- Existing events have their date in server time so
-- convert to a local date if necessary
if gCalendarEventEditor_EventDateIsLocal then
gCalendarEventEditor_EventDate, gCalendarEventEditor_EventTime = Calendar_GetLocalDateTimeFromServerDateTime(pEvent.mDate, pEvent.mTime);
else
gCalendarEventEditor_EventDate = pEvent.mDate;
gCalendarEventEditor_EventTime = pEvent.mTime;
end
end
CalendarEventEditorFrameSubTitle:SetText(Calendar_GetLongDateString(gCalendarEventEditor_EventDate));
CalendarEventEditor_UpdateControlsFromEvent(pEvent);
ShowUIPanel(CalendarEventEditorFrame);
if pIsNewEvent then
CalendarEventTitle:SetFocus();
CalendarEventTitle:HighlightText();
else
CalendarEventTitle:HighlightText(0, 0);
end
gCalendarEventEditor_ShowScheduleEditor = false;
gCalendarEventEditor_Active = true;
end
function CalendarEventEditor_MajorDatabaseChange()
if not gCalendarEventEditor_Active then
return;
end
if gCalendarEventEditor_UsingLocalTime ~= gGroupCalendar_Settings.ShowEventsInLocalTime then
gCalendarEventEditor_UsingLocalTime = gGroupCalendar_Settings.ShowEventsInLocalTime;
gCalendarEventEditor_EventTime = CalendarEventEditor_GetTimeControlValue(CalendarEventEditorTime);
if gCalendarEventEditor_UsingLocalTime then
gCalendarEventEditor_EventDate, gCalendarEventEditor_EventTime = Calendar_GetLocalDateTimeFromServerDateTime(gCalendarEventEditor_EventDate, gCalendarEventEditor_EventTime);
else
gCalendarEventEditor_EventDate, gCalendarEventEditor_EventTime = Calendar_GetServerDateTimeFromLocalDateTime(gCalendarEventEditor_EventDate, gCalendarEventEditor_EventTime);
end
CalendarEventEditor_SetTimeControlValue(CalendarEventEditorTime, gCalendarEventEditor_EventTime);
end
end
function CalendarEventEditor_EventChanged(pEvent)
if pEvent == gCalendarEventEditor_Event then
CalendarAttendanceList_EventChanged(CalendarEventEditorAttendance, gCalendarEventEditor_Database, pEvent);
-- Don't update the control values since that'll overwrite whatever
-- is currently being set up
-- CalendarEventEditor_UpdateControlsFromEvent(pEvent);
CalendarGroupInvites_EventChanged(pEvent);
end
end
function CalendarEventEditor_OnLoad()
-- Tabs
PanelTemplates_SetNumTabs(this, table.getn(gCalendarEventEditor_PanelFrames));
CalendarEventEditorFrame.selectedTab = gCalendarEventEditor_CurrentPanel;
PanelTemplates_UpdateTabs(this);
end
function CalendarEventEditor_OnShow()
PlaySound("igCharacterInfoOpen");
CalendarEventTypeEventType.ChangedValueFunc = CalendarEventEditor_EventTypeChanged;
CalendarEventEditor_ShowPanel(1); -- Always switch to the event view when showing the window
end
function CalendarEventEditor_OnHide()
PlaySound("igCharacterInfoClose");
CalendarAddPlayer_Cancel(); -- Force the dialog to close if it's open
if not gCalendarEventEditor_ShowScheduleEditor then
CalendarEventEditor_SaveEvent();
HideUIPanel(CalendarEditorFrame);
end
gCalendarEventEditor_Database = nil;
gCalendarEventEditor_Event = nil;
gCalendarEventEditor_Active = false;
end
function CalendarEventEditor_DoneEditing()
if not gCalendarEventEditor_Active then
return;
end
CalendarEventEditor_SaveEvent();
CalendarEventEditor_CloseEditor(true);
end
function CalendarEventEditor_UpdateControlsFromEvent(pEvent, pExistingValuesOnly)
if not pExistingValuesOnly
or pEvent.mType then
CalendarDropDown_SetSelectedValue(CalendarEventTypeEventType, pEvent.mType);
end
if pEvent.mTitle and pEvent.mTitle ~= "" then
CalendarEventTitle:SetText(Calendar_UnescapeString(pEvent.mTitle));
elseif not pExistingValuesOnly
or pEvent.mType then
local vEventName = EventDatabase_GetEventNameByID(pEvent.mType);
if vEventName ~= nil then
CalendarEventTitle:SetText(vEventName);
else
CalendarEventTitle:SetText("");
end
end
if not pExistingValuesOnly
or gCalendarEventEditor_EventTime then
CalendarEventEditor_SetTimeControlValue(CalendarEventEditorTime, gCalendarEventEditor_EventTime);
end
if not pExistingValuesOnly
or pEvent.mDuration then
CalendarDropDown_SetSelectedValue(CalendarEventEditorDurationDuration, pEvent.mDuration);
end
if pEvent.mDescription then
CalendarEventDescription:SetText(Calendar_UnescapeString(pEvent.mDescription));
elseif not pExistingValuesOnly then
CalendarEventDescription:SetText("");
end
if pEvent.mMinLevel then
CalendarEventMinLevel:SetText(pEvent.mMinLevel);
elseif not pExistingValuesOnly then
CalendarEventMinLevel:SetText("");
end
if pEvent.mMaxLevel then
CalendarEventMaxLevel:SetText(pEvent.mMaxLevel);
elseif not pExistingValuesOnly then
CalendarEventMaxLevel:SetText("");
end
if not pExistingValuesOnly
or pEvent.mType then
gCalendarEventEditor_PreviousEventType = pEvent.mType;
CalendarEventEditor_SetEventType(pEvent.mType);
end
end
function CalendarEventEditor_SaveClassLimits(pLimits)
gCalendarEventEditor_NewClassLimits = pLimits;
end
function CalendarEventEditor_UpdateEventFromControls(rEvent, rChangedFields)
local vChanged = false;
local vValue;
-- Type
vValue = UIDropDownMenu_GetSelectedValue(CalendarEventTypeEventType);
if rEvent.mType ~= vValue then
rEvent.mType = vValue;
rChangedFields.mType = {op = "UPD", val = vValue};
vChanged = true;
end
-- Title
vValue = CalendarEventTitle:GetText();
if vValue == EventDatabase_GetEventNameByID(rEvent.mType)
or vValue == "" then
vValue = nil;
else
vValue = Calendar_EscapeString(vValue);
end
if rEvent.mTitle ~= vValue then
rEvent.mTitle = vValue;
rChangedFields.mTitle = "UPD";
vChanged = true;
end
-- Time
local vDate, vTime = nil, nil;
if EventDatabase_EventTypeUsesTime(rEvent.mType) then
vDate, vTime = gCalendarEventEditor_EventDate, CalendarEventEditor_GetTimeControlValue(CalendarEventEditorTime);
if gCalendarEventEditor_UsingLocalTime then
vDate, vTime = Calendar_GetServerDateTimeFromLocalDateTime(vDate, vTime);
end
else
vDate = gCalendarEventEditor_EventDate;
end
if rEvent.mDate ~= vDate then
rEvent.mDate = vDate;
rChangedFields.mDate = "UPD";
vChanged = true;
end
if rEvent.mTime ~= vTime then
rEvent.mTime = vTime;
rChangedFields.mTime = "UPD";
vChanged = true;
end
-- Duration
if EventDatabase_EventTypeUsesTime(rEvent.mType) then
vValue = UIDropDownMenu_GetSelectedValue(CalendarEventEditorDurationDuration);
else
vValue = nil;
end
if vValue == 0 then
vValue = nil;
end
if rEvent.mDuration ~= vValue then
rEvent.mDuration = vValue;
rChangedFields.mDuration = "UPD";
vChanged = true;
end
-- Description
vValue = CalendarEventDescription:GetText();
if vValue == "" then
vValue = nil;
else
vValue = Calendar_EscapeString(vValue);
end
if rEvent.mDescription ~= vValue then
rEvent.mDescription = vValue;
rChangedFields.mDescription = "UPD";
vChanged = true;
end
-- MinLevel
if EventDatabase_EventTypeUsesLevelLimits(rEvent.mType) then
vValue = CalendarEventMinLevel:GetText();
else
vValue = nil;
end
if vValue and vValue ~= "" then
vValue = tonumber(vValue);
if vValue == 0 then
vValue = nil;
end
else
vValue = nil;
end
if rEvent.mMinLevel ~= vValue then
rEvent.mMinLevel = vValue;
rChangedFields.mMinLevel = "UPD";
vChanged = true;
end
-- MaxLevel
if EventDatabase_EventTypeUsesTime(rEvent.mType) then
vValue = CalendarEventMaxLevel:GetText();
else
vValue = nil;
end
if vValue and vValue ~= "" then
vValue = tonumber(vValue);
if vValue == 0 then
vValue = nil;
end
else
vValue = nil;
end
if rEvent.mMaxLevel ~= vValue then
rEvent.mMaxLevel = vValue;
rChangedFields.mMaxLevel = "UPD";
vChanged = true;
end
-- Automatic confirmations
local vManualConfirm;
if EventDatabase_IsQuestingEventType(rEvent.mType) then
vManualConfirm = CalendarAttendanceList_GetManualConfirmEnable(CalendarEventEditorAttendance);
else
-- Non-questing events are always auto-confirm (ie meetings)
vManualConfirm = nil;
end
if vManualConfirm ~= rEvent.mManualConfirm then
rEvent.mManualConfirm = vManualConfirm;
rChangedFields.mManualConfirm = {op = "UPD", val = vManualConfirm};
end
if EventDatabase_IsQuestingEventType(rEvent.mType) then
if gCalendarEventEditor_NewClassLimits
and CalendarClassLimits_ClassLimitsChanged(rEvent.mLimits, gCalendarEventEditor_NewClassLimits) then
rEvent.mLimits = gCalendarEventEditor_NewClassLimits;
rChangedFields.mLimits = {op = "UPD", val = rEvent.mLimits};
end
else
-- No limits on non-questing event types (ie, meetings)
if rEvent.mLimits then
rEvent.mLimits = nil;
rChangedFields.mLimits = {op = "UPD", val = rEvent.mLimits};
end
end
-- Done
return vChanged;
end
function CalendarEventEditor_SetEventType(pEventType)
-- CalendarEventTypeEventType:Show();
-- CalendarEventTitle:Show();
-- CalendarEventDescription:Show();
local vTitleText = CalendarEventTitle:GetText();
local vEventName = EventDatabase_GetEventNameByID(gCalendarEventEditor_PreviousEventType);
local vTitleWasEventName = vTitleText == vEventName;
if EventDatabase_EventTypeUsesTime(pEventType) then
CalendarEventEditorTime:Show();
CalendarEventEditorDuration:Show();
else
CalendarEventEditorTime:Hide();
CalendarEventEditorDuration:Hide();
end
if EventDatabase_EventTypeUsesLevelLimits(pEventType) then
CalendarEventMinLevel:Show();
CalendarEventMaxLevel:Show();
else
CalendarEventMinLevel:Hide();
CalendarEventMaxLevel:Hide();
end
if EventDatabase_EventTypeUsesAttendance(pEventType) then
CalendarEventEditorFrameTab2:Show();
CalendarEventEditorSelfAttend:Show();
else
CalendarEventEditorFrameTab2:Hide();
CalendarEventEditorSelfAttend:Hide();
end
if vTitleWasEventName then
CalendarEventTitle:SetText(EventDatabase_GetEventNameByID(pEventType));
CalendarEventTitle:SetFocus();
CalendarEventTitle:HighlightText();
end
-- Update the sample icon
CalendarEventEditorEventBackground:SetTexture(Calendar_GetEventTypeIconPath(pEventType));
if pEventType == "Birth" then
CalendarEventEditorEventBackground:SetVertexColor(1, 1, 1, 0.4);
else
CalendarEventEditorEventBackground:SetVertexColor(1, 1, 1, 0.19);
end
--
gCalendarEventEditor_PreviousEventType = pEventType;
end
function CalendarEventEditor_DeleteEvent()
if not gCalendarEventEditor_IsNewEvent then
EventDatabase_DeleteEvent(gCalendarEventEditor_Database, gCalendarEventEditor_Event);
end
CalendarEventEditor_CloseEditor(true);
end
function CalendarEventEditor_DeleteRSVP()
if not gGroupCalendar_RSVPToDelete then
return;
end
gGroupCalendar_RSVPToDelete.mStatus = "-";
EventDatabase_AddEventRSVP(
gCalendarEventEditor_Database,
gCalendarEventEditor_Event,
gGroupCalendar_RSVPToDelete.mName,
gGroupCalendar_RSVPToDelete);
gGroupCalendar_RSVPToDelete = nil;
end
function CalendarEventEditor_CloseEditor(pShowScheduleEditor)
gCalendarEventEditor_Active = false;
gCalendarEventEditor_ShowScheduleEditor = pShowScheduleEditor;
HideUIPanel(CalendarEventEditorFrame);
end
function CalendarEventEditor_CopyTemplateFields(pFromEvent, rToEvent)
rToEvent.mTitle = pFromEvent.mTitle;
rToEvent.mDescription = pFromEvent.mDescription;
rToEvent.mTime = pFromEvent.mTime;
rToEvent.mDuration = pFromEvent.mDuration;
rToEvent.mMinLevel = pFromEvent.mMinLevel;
rToEvent.mMaxLevel = pFromEvent.mMaxLevel;
rToEvent.mManualConfirm = pFromEvent.mManualConfirm;
rToEvent.mLimits = pFromEvent.mLimits;
end
function CalendarEventEditor_SaveEvent()
-- Update the event
local vChangedFields = {};
CalendarEventEditor_UpdateEventFromControls(gCalendarEventEditor_Event, vChangedFields);
if Calendar_ArrayIsEmpty(vChangedFields) then
return;
end
-- Save the event if it's new
if gCalendarEventEditor_IsNewEvent then
if (gCalendarEventEditor_Event.mTitle ~= nil and gCalendarEventEditor_Event.mTitle ~= "")
or gCalendarEventEditor_Event.mType ~= nil then
EventDatabase_AddEvent(gCalendarEventEditor_Database, gCalendarEventEditor_Event);
end
else
EventDatabase_EventChanged(gCalendarEventEditor_Database, gCalendarEventEditor_Event, vChangedFields);
end
-- Save a template for the event
if gCalendarEventEditor_Event.mType
and gCalendarEventEditor_Event.mType ~= "Birth" then
if not gGroupCalendar_PlayerSettings.EventTemplates then
gGroupCalendar_PlayerSettings.EventTemplates = {};
end
local vEventTemplate = {};
CalendarEventEditor_CopyTemplateFields(gCalendarEventEditor_Event, vEventTemplate);
vEventTemplate.mSelfAttend = CalendarEventEditor_GetSelfAttend();
gGroupCalendar_PlayerSettings.EventTemplates[gCalendarEventEditor_Event.mType] = vEventTemplate;
end
end
function CalendarEventEditor_SetTimeControlValue(pFrame, pTime)
if pTime == nil then
return;
end
local vFrameName = pFrame:GetName();
local vHourFrame = getglobal(vFrameName.."Hour");
local vMinuteFrame = getglobal(vFrameName.."Minute");
local vAMPMFrame = getglobal(vFrameName.."AMPM");
if TwentyFourHourTime then
local vHour, vMinute = Calendar_ConvertTimeToHM(pTime);
CalendarDropDown_SetSelectedValue(vHourFrame, vHour);
CalendarDropDown_SetSelectedValue(vMinuteFrame, vMinute);
vAMPMFrame:Hide();
else
local vHour, vMinute, vAMPM = Calendar_ConvertTimeToHMAMPM(pTime);
CalendarDropDown_SetSelectedValue(vHourFrame, vHour);
CalendarDropDown_SetSelectedValue(vMinuteFrame, vMinute);
vAMPMFrame:Show();
CalendarDropDown_SetSelectedValue(vAMPMFrame, vAMPM);
end
end
function CalendarEventEditor_GetTimeControlValue(pFrame)
local vFrameName = pFrame:GetName();
local vHourFrame = getglobal(vFrameName.."Hour");
local vMinuteFrame = getglobal(vFrameName.."Minute");
local vAMPMFrame = getglobal(vFrameName.."AMPM");
local vHour = UIDropDownMenu_GetSelectedValue(vHourFrame);
local vMinute = UIDropDownMenu_GetSelectedValue(vMinuteFrame);
if TwentyFourHourTime then
return Calendar_ConvertHMToTime(vHour, vMinute);
else
local vAMPM = UIDropDownMenu_GetSelectedValue(vAMPMFrame);
return Calendar_ConvertHMAMPMToTime(vHour, vMinute, vAMPM);
end
end
function CalendarEventEditor_EventTypeChanged(pMenuFrame, pValue)
CalendarEventEditor_SetEventType(pValue);
-- Set the templated field values if available
if gCalendarEventEditor_IsNewEvent then
-- Set the default limits for this dungeon (the template will
-- override this if it's present)
gCalendarEventEditor_Event.mLimits = EventDatabase_GetStandardLimitsByID(pValue);
-- Copy of template values
if gGroupCalendar_PlayerSettings.EventTemplates then
local vEventTemplate = gGroupCalendar_PlayerSettings.EventTemplates[pValue];
if vEventTemplate then
CalendarEventEditor_CopyTemplateFields(vEventTemplate, gCalendarEventEditor_Event);
CalendarEventEditor_UpdateControlsFromEvent(gCalendarEventEditor_Event, true);
if vEventTemplate.mSelfAttend then
CalendarEventEditor_SetSelfAttend(vEventTemplate.mSelfAttend);
end
end
end
end
end
function CalendarEventEditor_ShowPanel(pPanelIndex)
CalendarAddPlayer_Cancel(); -- Force the dialog to close if it's open
if gCalendarEventEditor_CurrentPanel > 0
and gCalendarEventEditor_CurrentPanel ~= pPanelIndex then
CalendarEventEditor_HidePanel(gCalendarEventEditor_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
gCalendarEventEditor_CurrentPanel = pPanelIndex;
-- Update the control values
if pPanelIndex == 1 then
-- Event panel
CalendarEventEditorSelfAttend:SetChecked(CalendarEventEditor_GetSelfAttend());
CalendarEventEditorSelfAttendText:SetText(string.format(GroupCalendar_cSelfWillAttend, gGroupCalendar_PlayerName));
elseif pPanelIndex == 2 then
-- Attendance panel
if EventDatabase_IsQuestingEventType(gCalendarEventEditor_PreviousEventType) then
CalendarAttendanceList_SetClassTotalsVisible(CalendarEventEditorAttendance, true, true);
else
CalendarAttendanceList_SetClassTotalsVisible(CalendarEventEditorAttendance, false, false);
end
else
Calendar_DebugMessage("CalendarEventEditor_ShowPanel: Unknown index ("..pPanelIndex..")");
end
getglobal(gCalendarEventEditor_PanelFrames[pPanelIndex]):Show();
PanelTemplates_SetTab(CalendarEventEditorFrame, pPanelIndex);
CalendarEventEditor_Update();
end
function CalendarEventEditor_HidePanel(pFrameIndex)
if gCalendarEventEditor_CurrentPanel ~= pFrameIndex then
return;
end
getglobal(gCalendarEventEditor_PanelFrames[pFrameIndex]):Hide();
gCalendarEventEditor_CurrentPanel = 0;
end
function CalendarEventEditor_Update()
-- Event panel
if gCalendarEventEditor_CurrentPanel == 1 then
-- Attendance panel
elseif gCalendarEventEditor_CurrentPanel == 2 then
CalendarAttendanceList_Update(CalendarEventEditorAttendance);
end
end
Calendar_cStatusCodeStrings =
{
N = CalendarEventEditor_cNotAttending,
Y = CalendarEventEditor_cConfirmed,
D = CalendarEventEditor_cDeclined,
S = CalendarEventEditor_cStandby,
P = CalendarEventEditor_cPending,
Q = CalendarEventEditor_cQueued,
};
function CalendarEventEditor_GetStatusString(pStatus)
local vStatus1 = string.sub(pStatus, 1, 1);
local vString = Calendar_cStatusCodeStrings[vStatus1];
if vString then
return vString;
else
return format(CalendarEventEditor_cUnknownStatus, pStatus);
end
end
function CalendarEventEditor_GetSelfAttend()
return EventDatabase_FindEventRSVPString(gCalendarEventEditor_Event, gGroupCalendar_PlayerName) ~= nil;
end
function CalendarEventEditor_SetSelfAttend(pWillAttend)
if pWillAttend then
local vRSVP = EventDatabase_CreatePlayerRSVP(
gCalendarEventEditor_Database,
gCalendarEventEditor_Event,
gGroupCalendar_PlayerName,
EventDatabase_GetRaceCodeByRace(UnitRace("PLAYER")),
EventDatabase_GetClassCodeByClass(UnitClass("PLAYER")),
gGroupCalendar_PlayerLevel,
"Y",
nil,
gGroupCalendar_PlayerGuild,
gGroupCalendar_PlayerGuildRank,
gGroupCalendar_PlayerCharacters);
EventDatabase_AddEventRSVP(
gCalendarEventEditor_Database,
gCalendarEventEditor_Event,
gGroupCalendar_PlayerName,
vRSVP)
else
EventDatabase_RemoveEventRSVP(
gCalendarEventEditor_Database,
gCalendarEventEditor_Event,
gGroupCalendar_PlayerName)
end
end
function CalendarEventEditor_AskDeleteEvent()
-- If it's new just kill it without asking
if gCalendarEventEditor_IsNewEvent then
CalendarEventEditor_DeleteEvent();
else
-- Update an event record so we can display a meaningful name
local vChangedFields = {};
local vEvent = {};
CalendarEventEditor_UpdateEventFromControls(vEvent, vChangedFields);
StaticPopup_Show("CONFIRM_CALENDAR_EVENT_DELETE", EventDatabase_GetEventDisplayName(vEvent));
end
end
function CalendarAttendanceList_AnyItemsCollapsed(pAttendanceList)
if not pAttendanceList.CollapsedCategories then
return false;
end
for vCategory, vCollapsed in pAttendanceList.CollapsedCategories do
return true;
end
return false;
end
local gCalendar_WhisperLog = {mPlayers = {}, mEvent = nil};
function CalendarWhisperLog_AddWhisper(pPlayerName, pMessage)
-- If no event is active then just ignore all whispers
-- NOTE: Disabling this for now, it seems like it's better to have too
-- many than too few whispers. With this feature enabled, the organizer
-- must remember to open the event before receiving whispers or else
-- they'll be lost. That can be a bit of a pain.
--[[
if not gCalendar_WhisperLog.mEvent then
return;
end
]]
-- Ignore whispers which appear to be data from other addons
local vFirstChar = string.sub(pMessage, 1, 1);
if vFirstChar == "<"
or vFirstChar == "["
or vFirstChar == "{" then
return;
end
-- Filter if necessary
if gCalendar_WhisperLog.mWhisperFilterFunc
and not gCalendar_WhisperLog.mWhisperFilterFunc(gCalendar_WhisperLog.mWhisperFilterParam, pPlayerName) then
return;
end
--
local vPlayerLog = gCalendar_WhisperLog.mPlayers[pPlayerName];
if not vPlayerLog then
vPlayerLog = {};
vPlayerLog.mName = pPlayerName;
vPlayerLog.mDate, vPlayerLog.mTime = EventDatabase_GetServerDateTime60Stamp();
vPlayerLog.mWhispers = {};
gCalendar_WhisperLog.mPlayers[pPlayerName] = vPlayerLog;
end
local vLength = table.getn(vPlayerLog.mWhispers);
if vLength > 3 then
table.remove(vPlayerLog.mWhispers, 1);
vLength = vLength - 1;
end
vPlayerLog.mWhispers[vLength + 1] = pMessage;
-- Notify
if gCalendar_WhisperLog.mNotificationFunc then
gCalendar_WhisperLog.mNotificationFunc(gCalendar_WhisperLog.mNotifcationParam);
end
end
function CalendarWhisperLog_AskClear()
StaticPopup_Show("CONFIRM_CALENDAR_CLEAR_WHISPERS");
end
function CalendarWhisperLog_Clear()
gCalendar_WhisperLog.mPlayers = {};
if gCalendar_WhisperLog.mNotificationFunc then
gCalendar_WhisperLog.mNotificationFunc(gCalendar_WhisperLog.mNotifcationParam);
end
end
function CalendarWhisperLog_GetPlayerWhispers(pEvent)
if gCalendar_WhisperLog.mEvent ~= pEvent then
gCalendar_WhisperLog.mEvent = pEvent;
CalendarWhisperLog_Clear();
end
return gCalendar_WhisperLog.mPlayers;
end
function CalendarWhisperLog_SetNotificationFunc(pFunc, pParam)
gCalendar_WhisperLog.mNotificationFunc = pFunc;
gCalendar_WhisperLog.mNotifcationParam = pParam;
end
function CalendarWhisperLog_SetWhisperFilterFunc(pFunc, pParam)
gCalendar_WhisperLog.mWhisperFilterFunc = pFunc;
gCalendar_WhisperLog.mWhisperFilterParam = pParam;
end
function CalendarWhisperLog_RemovePlayer(pPlayerName)
gCalendar_WhisperLog.mPlayers[pPlayerName] = nil;
-- Notify
if gCalendar_WhisperLog.mNotificationFunc then
gCalendar_WhisperLog.mNotificationFunc(gCalendar_WhisperLog.mNotifcationParam);
end
end
function CalendarWhisperLog_GetNextWhisper(pPlayerName)
-- Make an indexed list of the whispers
local vWhispers = {};
for vName, vWhisper in gCalendar_WhisperLog.mPlayers do
table.insert(vWhispers, vWhisper);
end
-- Sort by time
table.sort(vWhispers, EventDatabase_CompareRSVPsByDate);
--
local vLowerName = strlower(pPlayerName);
local vUseNext = false;
for vIndex, vWhisper in vWhispers do
if vUseNext then
return vWhisper;
end
if vLowerName == strlower(vWhisper.mName) then
vUseNext = true;
end
end
return nil;
end
function CalendarAttendanceList_GetManualConfirmEnable(pAttendanceList)
local vAutoConfirmEnable = getglobal(pAttendanceList:GetName().."MainViewAutoConfirmEnable");
local vManualConfirm = not vAutoConfirmEnable:GetChecked();
if not vManualConfirm then
vManualConfirm = nil;
end
return vManualConfirm;
end
gCalendarAttendanceList_VerticalScrollList = nil;
function CalendarAttendanceList_OnLoad()
local vListName = this:GetName();
this.NumItems = gGroupCalendar_cNumAttendanceItems;
this.CollapsedCategories = {};
this.ListViewMode = "Date";
-- Set the text color for the class totals
for vClassID, vClassInfo in gGroupCalendar_ClassInfoByClassCode do
local vLabel = getglobal(vListName.."MainViewTotals"..vClassInfo.element.."sLabel");
local vCount = getglobal(vListName.."MainViewTotals"..vClassInfo.element.."s");
local vColor = RAID_CLASS_COLORS[vClassInfo.color];
vLabel:SetTextColor(vColor.r, vColor.g, vColor.b);
vCount:SetTextColor(vColor.r, vColor.g, vColor.b);
end
CalendarAttendanceList_SetClassTotalsVisible(this, true, true);
end
function CalendarAttendanceList_OnShow()
CalendarAttendanceList_ShowPanel(this, "MainView");
CalendarWhisperLog_SetNotificationFunc(CalendarAttendanceList_UpdateWhispers, this);
CalendarWhisperLog_SetWhisperFilterFunc(CalendarAttendanceList_FilterWhispers, this);
end
function CalendarAttendanceList_OnHide()
CalendarWhisperLog_SetNotificationFunc(nil, nil, nil);
if GetNumPartyMembers() == 0
and GetNumRaidMembers() == 0 then
CalendarGroupInvites_EndEvent(this.Event);
else
CalendarGroupInvites_SetChangedFunc(nil, nil);
end
end
function CalendarAttendanceList_SetEvent(pAttendanceList, pDatabase, pEvent)
pAttendanceList.Database = pDatabase;
pAttendanceList.Event = pEvent;
pAttendanceList.Group = nil;
pAttendanceList.ListViewMode = "Date";
pAttendanceList.EventListInfo = {};
pAttendanceList.CollapsedCategories = {};
-- Update the auto confirm enable
local vAttendanceListName = pAttendanceList:GetName();
local vMainViewName = vAttendanceListName.."MainView";
local vAutoConfirmEnable = getglobal(vMainViewName.."AutoConfirmEnable");
local vAutoConfirmOptions = getglobal(vMainViewName.."AutoConfirmOptions");
vAutoConfirmEnable:SetChecked(not pAttendanceList.Event.mManualConfirm);
Calendar_SetButtonEnable(vAutoConfirmOptions, not pAttendanceList.Event.mManualConfirm);
--
CalendarAttendanceList_UpdateAttendanceCounts(pAttendanceList);
end
function CalendarAttendanceList_SetGroup(pAttendanceList, pGroup)
pAttendanceList.Group = pGroup;
end
function CalendarAttendanceList_EventChanged(pAttendanceList, pDatabase, pEvent)
pAttendanceList.Database = pDatabase;
pAttendanceList.Event = pEvent;
CalendarAttendanceList_UpdateAttendanceCounts(pAttendanceList);
CalendarGroupInvites_EventChanged(pDatabase, pEvent);
CalendarAttendanceList_Update(pAttendanceList);
end
function CalendarAttendanceList_UpdateAttendanceCounts(pAttendanceList)
local vUseClassCategories = EventDatabase_IsQuestingEventType(pAttendanceList.Event.mType);
local vHadWhispers = pAttendanceList.EventListInfo.AttendanceCounts
and pAttendanceList.EventListInfo.AttendanceCounts.Categories["WHISPERS"] ~= nil;
pAttendanceList.EventListInfo.AttendanceCounts =
CalendarEvent_GetAttendanceCounts(
pAttendanceList.Database,
pAttendanceList.Event,
vUseClassCategories);
-- Add in the recent whispers, but only if they're not in the attendance list
-- and only if the event is editable
if not vHadWhispers then
pAttendanceList.CollapsedCategories["WHISPERS"] = true;
end
local vAttendanceList = pAttendanceList.EventListInfo.AttendanceCounts;
local vGroupList = gGroupCalendar_Invites.Group;
if pAttendanceList.mCanEdit then
local vPlayerWhispers = CalendarWhisperLog_GetPlayerWhispers(pAttendanceList.Event);
for vPlayerName, vWhispers in vPlayerWhispers do
CalendarAttendanceList_AddWhisper(
vAttendanceList,
vPlayerName,
vWhispers);
end
end
CalendarEvent_SortAttendanceCounts(pAttendanceList.EventListInfo.AttendanceCounts, pAttendanceList.ListViewMode);
end
function CalendarAttendanceList_FilterWhispers(pAttendanceList, pPlayerName)
local vAttendanceList = pAttendanceList.EventListInfo.AttendanceCounts;
if vAttendanceList.Items
and vAttendanceList.Items[pPlayerName] then
return false;
end
if gGroupCalendar_Invites.Group
and gGroupCalendar_Invites.Group.Items[pPlayerName] then
return false;
end
return true;
end
function CalendarAttendanceList_UpdateWhispers(pAttendanceList)
if not CalendarAttendanceList_RemoveCategory(pAttendanceList.EventListInfo.AttendanceCounts, "WHISPERS") then
-- Collapse the category if this is the first one
pAttendanceList.CollapsedCategories["WHISPERS"] = true;
end
local vAttendanceList = pAttendanceList.EventListInfo.AttendanceCounts;
local vGroupList = gGroupCalendar_Invites.Group;
local vPlayerWhispers = CalendarWhisperLog_GetPlayerWhispers(pAttendanceList.Event);
for vPlayerName, vWhispers in vPlayerWhispers do
CalendarAttendanceList_AddWhisper(
vAttendanceList,
vPlayerName,
vWhispers);
end
CalendarEvent_SortAttendanceCounts(pAttendanceList.EventListInfo.AttendanceCounts, pAttendanceList.ListViewMode);
CalendarAttendanceList_Update(pAttendanceList);
end
function CalendarAttendanceList_SetCanEdit(pAttendanceList, pCanEdit)
pAttendanceList.mCanEdit = pCanEdit;
end
function CalendarScrollbarTrench_SizeChanged(pScrollbarTrench)
local vScrollbarTrenchName = pScrollbarTrench:GetName();
local vScrollbarTrenchMiddle = getglobal(vScrollbarTrenchName.."Middle");
local vMiddleHeight= pScrollbarTrench:GetHeight() - 51;
vScrollbarTrenchMiddle:SetHeight(vMiddleHeight);
end
function CalendarAttendanceList_SetClassTotalsVisible(pAttendanceList, pVisible, pShowAutoConfirm)
pAttendanceList.ShowTotals = pVisible;
pAttendanceList.ShowAutoConfirm = pShowAutoConfirm;
CalendarAttendanceList_AdjustHeight(pAttendanceList);
end
function CalendarAttendanceList_AdjustHeight(pAttendanceList)
local vListName = pAttendanceList:GetName();
local vTotals = getglobal(vListName.."MainViewTotals");
local vAutoConfirm = getglobal(vListName.."MainViewAutoConfirm");
local vScrollFrame = getglobal(vListName.."ScrollFrame");
local vScrollTrench = getglobal(vListName.."ScrollbarTrench");
local vScrollFrameBaseHeight = 254;
local vScrollTrenchBaseHeight = 261;
if pAttendanceList.CurrentPanel == "GroupView"
or pAttendanceList.ShowTotals then
local vFooterHeight;
vTotals:Show();
if pAttendanceList.CurrentPanel ~= "GroupView"
and pAttendanceList.ShowAutoConfirm then
vAutoConfirm:Show();
pAttendanceList.NumItems = gGroupCalendar_cNumAutoConfirmAttendanceItems;
vFooterHeight = vAutoConfirm:GetHeight() + vTotals:GetHeight();
else
vAutoConfirm:Hide();
pAttendanceList.NumItems = gGroupCalendar_cNumAttendanceItems;
vFooterHeight = vTotals:GetHeight();
end
vScrollFrame:SetHeight(vScrollFrameBaseHeight - vFooterHeight);
vScrollTrench:SetHeight(vScrollTrenchBaseHeight - vFooterHeight);
else
vTotals:Hide();
vAutoConfirm:Hide();
pAttendanceList.NumItems = gGroupCalendar_cNumPlainAttendanceItems;
vScrollFrame:SetHeight(vScrollFrameBaseHeight);
vScrollTrench:SetHeight(vScrollTrenchBaseHeight);
end
end
function CalendarAttendanceList_Update(pAttendanceList)
if not pAttendanceList:IsVisible() then
return;
end
local vAttendanceListName = pAttendanceList:GetName();
local vMainViewName = vAttendanceListName.."MainView";
-- Update the view menu
local vListViewMenu = getglobal(vAttendanceListName.."ViewMenu");
CalendarDropDown_SetSelectedValue(vListViewMenu, pAttendanceList.ListViewMode);
if pAttendanceList.CurrentPanel == "MainView" then
-- Update the scroll frame
local vTotalCount = 0;
if pAttendanceList.EventListInfo.AttendanceCounts then
for vCategory, vClassAttendanceInfo in pAttendanceList.EventListInfo.AttendanceCounts.Categories do
vTotalCount = vTotalCount + 1;
if not pAttendanceList.CollapsedCategories[vCategory] then
vTotalCount = vTotalCount + vClassAttendanceInfo.mCount;
end
end
end
FauxScrollFrame_Update(
getglobal(vAttendanceListName.."ScrollFrame"),
vTotalCount,
pAttendanceList.NumItems,
gGroupCalendar_cAttendanceItemHeight,
nil, nil, nil,
nil,
293, 316);
CalendarAttendanceList_UpdateAttendanceList(pAttendanceList);
-- Update the expand/collapse all button
local vExpandAllButton = getglobal(vAttendanceListName.."ExpandAllButton")
if CalendarAttendanceList_AnyItemsCollapsed(pAttendanceList) then
vExpandAllButton:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up");
else
vExpandAllButton:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up");
end
CalendarAttendanceList_UpdateClassTotals(pAttendanceList);
-- Show or hide the add button
local vAddButton = getglobal(vMainViewName.."AddButton");
if pAttendanceList.mCanEdit then
vAddButton:Show();
else
vAddButton:Hide();
end
elseif pAttendanceList.CurrentPanel == "GroupView" then
local vGroupViewName = vAttendanceListName.."GroupView";
local vSelectionInfoText = getglobal(vGroupViewName.."SelectionInfo");
local vStatusText = getglobal(vGroupViewName.."Status");
local vStatusMessage = GroupCalendar_cInviteStatusMessages[gGroupCalendar_Invites.Status];
local vInviteButton = getglobal(vGroupViewName.."Invite");
if vStatusMessage then
vStatusText:SetText(vStatusMessage);
elseif gGroupCalendar_Invites.Status then
vStatusText:SetText("Unknown "..gGroupCalendar_Invites.Status);
else
vStatusText:SetText("Unknown (nil)");
end
local vNumSelected = gGroupCalendar_Invites.NumSelected;
if not vNumSelected
or vNumSelected == 0 then
vSelectionInfoText:SetText(GroupCalendar_cNoSelection);
elseif vNumSelected == 1 then
vSelectionInfoText:SetText(GroupCalendar_cSingleSelection);
else
vSelectionInfoText:SetText(format(GroupCalendar_cMultiSelection, vNumSelected));
end
-- Update the scroll frame
local vTotalCount = 0;
if pAttendanceList.EventListInfo.AttendanceCounts then
for vCategory, vClassAttendanceInfo in gGroupCalendar_Invites.Group.Categories do
vTotalCount = vTotalCount + 1;
if not pAttendanceList.CollapsedCategories[vCategory] then
vTotalCount = vTotalCount + vClassAttendanceInfo.mCount;
end
end
end
FauxScrollFrame_Update(
getglobal(vAttendanceListName.."ScrollFrame"),
vTotalCount,
pAttendanceList.NumItems,
gGroupCalendar_cAttendanceItemHeight,
nil, nil, nil,
nil,
293, 316);
CalendarAttendanceList_UpdateAttendanceList(pAttendanceList);
-- Enable the invite button if the player is the raid or party leader
-- or is not in a raid or pary
local vEnableInvites = false;
local vInParty = GetNumPartyMembers() > 0 or GetNumRaidMembers() > 0;
if not vInParty
or IsPartyLeader()
or IsRaidLeader()
or IsRaidOfficer() then
vEnableInvites = true;
end
Calendar_SetButtonEnable(vInviteButton, vEnableInvites);
else
Calendar_ErrorMessage("CalendarAttendanceList_Update: Unknown panel "..pAttendanceList.CurrentPanel);
end
end
function CalendarAttendanceList_ToggleExpandAll(pAttendanceList)
-- Get the group
local vGroup;
if pAttendanceList.CurrentPanel == "MainView" then
vGroup = pAttendanceList.EventListInfo.AttendanceCounts;
elseif pAttendanceList.CurrentPanel == "GroupView" then
vGroup = gGroupCalendar_Invites.Group;
else
Calendar_ErrorMessage("CalendarAttendanceList_ToggleExpandAll: Unknown view "..pAttendanceList.CurrentPanel);
return;
end
-- Just return if there are no attendance items to toggle
if not pAttendanceList
or not vGroup then
return;
end
if CalendarAttendanceList_AnyItemsCollapsed(pAttendanceList) then
-- Expand all
pAttendanceList.CollapsedCategories = {};
else
-- Collapse all
pAttendanceList.CollapsedCategories = {};
for vCategory, vClassAttendanceInfo in vGroup.Categories do
pAttendanceList.CollapsedCategories[vCategory] = true;
end
end
CalendarAttendanceList_Update(pAttendanceList);
end
function CalendarAttendanceList_UpdateClassTotals(pAttendanceList)
local vListName = pAttendanceList:GetName();
for vClassCode, vClassInfo in gGroupCalendar_ClassInfoByClassCode do
local vClassTotal;
if pAttendanceList.EventListInfo.AttendanceCounts then
vClassTotal = pAttendanceList.EventListInfo.AttendanceCounts.ClassTotals[vClassCode];
else
vClassTotal = nil;
end
local vCountTextItem = getglobal(vListName.."MainViewTotals"..vClassInfo.element.."s");
if not vClassTotal then
vCountTextItem:SetText("0");
vCountTextItem:SetTextColor(0.9, 0.2, 0.2);
else
local vColor = RAID_CLASS_COLORS[vClassInfo.color];
vCountTextItem:SetText(vClassTotal);
vCountTextItem:SetTextColor(vColor.r, vColor.g, vColor.b);
end
end
end
gGroupCalendar_cAttendanceCategories =
{
NO = GroupCalendar_cNotAttending,
YES = GroupCalendar_cAttending,
PENDING = GroupCalendar_cPendingApproval,
STANDBY = GroupCalendar_cStandby,
QUEUED = GroupCalendar_Queued,
WHISPERS = GroupCalendar_cWhispers,
};
function CalendarAttendanceList_GetClassNameColor(pClassName)
if not pClassName then
return NORMAL_FONT_COLOR;
end
local vClassColorName = getglobal("GroupCalendar_c"..pClassName.."ClassColorName");
return RAID_CLASS_COLORS[vClassColorName];
end
function CalendarAttendanceList_SetItem(
pAttendanceList,
pIndex,
pItemInfo,
pLeftFormat,
pRightFormat,
pShowMenu,
pMenuValue,
pColor,
pOffline,
pIconPath,
pChecked,
pTooltipName,
pTooltipText,
pTooltipTextColor)
local vListName = pAttendanceList:GetName();
local vItemName = vListName.."Item"..pIndex;
local vItem = getglobal(vItemName);
local vItemHighlight = getglobal(vItemName.."Highlight");
local vItemCategory = getglobal(vItemName.."Category");
local vItemLeftText = getglobal(vItemName.."Name");
local vItemRightText = getglobal(vItemName.."Status");
local vItemMenu = getglobal(vItemName.."Menu");
local vItemActionButton = getglobal(vItemName.."Action");
--
vItemCategory:Hide();
vItemLeftText:Show();
vItemRightText:Show();
vItemActionButton:Hide();
if pShowMenu then
CalendarDropDown_SetSelectedValue2(vItemMenu, pMenuValue);
vItemMenu:Show();
vItemRightText:SetWidth(112);
else
vItemMenu:Hide();
vItemRightText:SetWidth(130);
end
vItemLeftText:SetText(string.gsub(pLeftFormat, "%$(%w+)", function (pField) return pItemInfo[pField]; end));
vItemRightText:SetText(string.gsub(pRightFormat, "%$(%w+)", function (pField) return pItemInfo[pField]; end));
if pColor then
if pOffline then
vItemLeftText:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
else
vItemLeftText:SetTextColor(pColor.r, pColor.g, pColor.b);
end
vItemRightText:SetTextColor(pColor.r, pColor.g, pColor.b);
else
if pOffline then
vItemLeftText:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
else
vItemLeftText:SetTextColor(1, 1, 1);
end
vItemRightText:SetTextColor(1, 1, 1);
end
if pChecked ~= nil then
vItem.Checkable = true;
vItem:SetNormalTexture("Interface\\Buttons\\UI-CheckBox-Up");
vItem:SetPushedTexture("Interface\\Buttons\\UI-CheckBox-Down");
vItemHighlight:SetTexture("Interface\\Buttons\\UI-CheckBox-Highlight");
vItem:SetCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check");
vItem:SetChecked(pChecked);
else
vItem.Checkable = false;
if pIconPath then
vItem:SetNormalTexture(pIconPath);
else
vItem:SetNormalTexture("");
end
vItem:SetPushedTexture("");
vItem:SetCheckedTexture("");
vItemHighlight:SetTexture("");
vItem:SetChecked(false);
end
vItem.IsCategoryItem = false;
vItem:Show();
vItem.TooltipName = pTooltipName;
vItem.TooltipText = pTooltipText;
vItem.TooltipTextColor = pTooltipTextColor;
return vItem;
end
function CalendarAttendanceList_SetItemToRSVP(pAttendanceList, pIndex, pCategory, pRSVP, pNameFormat, pShowRank)
local vItemInfo =
{
name = pRSVP.mName,
class = EventDatabase_GetClassByClassCode(pRSVP.mClassCode),
race = EventDatabase_GetRaceByRaceCode(pRSVP.mRaceCode),
level = tostring(pRSVP.mLevel),
status = "",
};
-- Set the status
local vShowStatusString = false;
if vShowStatusString then
vItemInfo.status = CalendarEventEditor_GetStatusString(pRSVP.mStatus);
elseif pShowRank then
local vRank = EventDatabase_MapGuildRank(pRSVP.mGuild, pRSVP.mGuildRank);
if vRank then
vItemInfo.status = GuildControlGetRankName(vRank + 1);
else
vItemInfo.status = GroupCalendar_cUnknown;
end
else
local vDate, vTime = EventDatabase_GetRSVPOriginalDateTime(pRSVP);
if vDate and vTime then
vTime = vTime / 60; -- Convert from seconds to minutes
if gGroupCalendar_Settings.ShowEventsInLocalTime then
vDate, vTime = Calendar_GetLocalDateTimeFromServerDateTime(vDate, vTime);
end
local vShortDateString = Calendar_GetShortDateString(vDate);
local vShortTimeString = Calendar_GetShortTimeString(vTime);
vItemInfo.status = vShortDateString.." "..vShortTimeString;
end
end
local vColor = CalendarAttendanceList_GetClassNameColor(vItemInfo.class);
-- Get the icon path
local vIconPath;
local vTooltipName = nil;
local vTooltipText = nil;
local vTooltipTextColor = nil;
if pRSVP.mComment and pRSVP.mComment ~= "" then
vIconPath = "Interface\\Addons\\GroupCalendar\\Textures\\AttendanceNoteIcon";
vTooltipName = pRSVP.mName;
vTooltipText = Calendar_UnescapeString(pRSVP.mComment);
elseif pRSVP.mType == "Whisper" then
vIconPath = "Interface\\Addons\\GroupCalendar\\Textures\\AttendanceNoteIcon";
vTooltipName = pRSVP.mName;
vTooltipText = pRSVP.mWhispers;
vTooltipTextColor = ChatTypeInfo["WHISPER"];
vColor = vTooltipTextColor;
else
vIconPath = "";
end
-- Set the item
local vItem = CalendarAttendanceList_SetItem(
pAttendanceList,
pIndex,
vItemInfo,
pNameFormat,
"$status",
pAttendanceList.mCanEdit,
pRSVP.mStatus,
vColor,
false,
vIconPath,
nil,
vTooltipName,
vTooltipText,
vTooltipTextColor);
vItem.Item = pRSVP;
end
function CalendarAttendanceList_SetItemToCategory(pAttendanceList, pIndex, pCategory, pActionFunc, pActionParam)
local vItemName = pAttendanceList:GetName().."Item"..pIndex;
local vItem = getglobal(vItemName);
local vItemHighlight = getglobal(vItemName.."Highlight");
local vItemCategory = getglobal(vItemName.."Category");
local vItemPlayerName = getglobal(vItemName.."Name");
local vItemPlayerStatus = getglobal(vItemName.."Status");
local vItemMenu = getglobal(vItemName.."Menu");
local vItemActionButton = getglobal(vItemName.."Action");
local vCategoryName;
if type(pCategory) == "number" then
vCategoryName = GuildControlGetRankName(pCategory + 1);
else
vCategoryName = gGroupCalendar_cAttendanceCategories[pCategory];
if not vCategoryName then
vCategoryName = EventDatabase_GetClassByClassCode(pCategory);
end
end
vItemCategory:SetText(vCategoryName);
vItemCategory:SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
vItemCategory:Show();
vItemPlayerName:Hide();
vItemPlayerStatus:Hide();
if pActionFunc then
vItemActionButton.ActionFunc = pActionFunc;
vItemActionButton.ActionParam = pActionParam;
vItemActionButton:Show();
else
vItemActionButton:Hide();
end
vItemMenu:Hide();
vItemPlayerStatus:SetWidth(130);
if pAttendanceList.CollapsedCategories[pCategory] then
vItem:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up");
vItem:SetPushedTexture("Interface\\Buttons\\UI-PlusButton-Down");
else
vItem:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up");
vItem:SetPushedTexture("Interface\\Buttons\\UI-MinusButton-Down");
end
vItemHighlight:SetTexture("Interface\\Buttons\\UI-PlusButton-Hilight");
vItem:SetChecked(false);
vItem.Item = nil;
vItem.IsCategoryItem = true;
vItem.Category = pCategory;
vItem.TooltipName = nil;
vItem.TooltipText = nil;
vItem.TooltipTextColor = nil;
vItem:Show();
end
function CalendarAttendanceList_HideUnusedAttendanceItems(pAttendanceList, pFirstItem)
local vListName = pAttendanceList:GetName();
for vIndex = pFirstItem, gGroupCalendar_cNumPlainAttendanceItems - 1 do
local vItemName = vListName.."Item"..vIndex;
getglobal(vItemName):Hide();
end
end
function CalendarAttendanceList_UpdateAttendanceList(pAttendanceList)
if pAttendanceList.CurrentPanel == "MainView" then
CalendarAttendanceList_UpdateEventAttendance(pAttendanceList);
elseif pAttendanceList.CurrentPanel == "GroupView" then
CalendarAttendanceList_UpdateGroupAttendance(pAttendanceList);
else
Calendar_ErrorMessage("Unknown attendance panel "..pAttendanceList.CurrentPanel);
end
end
function CalendarAttendanceList_UpdateGroupAttendance(pAttendanceList)
local vSortByFlags = GroupCalendar_cSortByFlags[pAttendanceList.ListViewMode];
pAttendanceList.ViewType = "Class";
pAttendanceList.ShowRank = vSortByFlags.Rank;
CalendarAttendanceList_UpdateAttendanceItems(pAttendanceList, gGroupCalendar_Invites.Group, CalendarAttendanceList_SetGroupItem, GroupCalendar_cNumPlayersFormat);
end
function CalendarAttendanceList_UpdateEventAttendance(pAttendanceList)
local vSetItemFunction;
if EventDatabase_IsQuestingEventType(pAttendanceList.Event.mType) then
pAttendanceList.ViewType = "Class";
else
pAttendanceList.ViewType = "Plain";
end
local vSortByFlags = GroupCalendar_cSortByFlags[pAttendanceList.ListViewMode];
pAttendanceList.ShowRank = vSortByFlags.Class and vSortByFlags.Rank;
CalendarAttendanceList_UpdateAttendanceItems(pAttendanceList, pAttendanceList.EventListInfo.AttendanceCounts, CalendarAttendanceList_SetAttendanceItem, GroupCalendar_cNumAttendeesFormat);
end
function CalendarAttendanceList_SetGroupItem(pAttendanceList, pItemIndex, pCategory, pItem)
local vItemInfo = {};
local vToolTipName, vTooltipText;
local vIconPath;
vItemInfo.name = pItem.mName;
vItemInfo.status = GroupCalendar_cGroupStatusMessages[pItem.mGroupStatus];
vItemInfo.class = EventDatabase_GetClassByClassCode(pItem.mClassCode);
vItemInfo.race = EventDatabase_GetRaceByRaceCode(pItem.mRaceCode);
vItemInfo.level = tostring(pItem.mLevel);
vItemInfo.offline = pItem.mOffline;
-- Set the status
local vStatusColumnFormat = "";
if pAttendanceList.ListViewMode == "Rank" then
local vRank = EventDatabase_MapGuildRank(pItem.mGuild, pItem.mGuildRank);
if vRank then
vItemInfo.rank = GuildControlGetRankName(vRank + 1);
else
vItemInfo.rank = GroupCalendar_cUnknown;
end
vStatusColumnFormat = "$rank";
elseif pAttendanceList.ListViewMode == "Date"
or pAttendanceList.ListViewMode == "Name" then
local vDate, vTime = EventDatabase_GetRSVPOriginalDateTime(pItem);
if vDate and vTime then
vTime = vTime / 60; -- Convert from seconds to minutes
if gGroupCalendar_Settings.ShowEventsInLocalTime then
vDate, vTime = Calendar_GetLocalDateTimeFromServerDateTime(vDate, vTime);
end
local vShortDateString = Calendar_GetShortDateString(vDate);
local vShortTimeString = Calendar_GetShortTimeString(vTime);
vItemInfo.date = vShortDateString.." "..vShortTimeString;
vStatusColumnFormat = "$date";
end
end
local vNameColumnFormat;
if pCategory == "STANDBY" then
vNameColumnFormat = GroupCalendar_cMeetingAttendanceNameFormat;
else
vNameColumnFormat = GroupCalendar_cGroupAttendanceNameFormat;
end
local vSelected;
if pItem.mGroupStatus ~= "Joined" then
vSelected = pItem.mSelected == true;
end
local vItem = CalendarAttendanceList_SetItem(
pAttendanceList,
pItemIndex,
vItemInfo,
vNameColumnFormat,
vStatusColumnFormat,
false,
false,
CalendarAttendanceList_GetClassNameColor(vItemInfo.class),
pItem.mOffline,
vIconPath,
vSelected,
vTooltipName,
vTooltipText);
vItem.Item = pItem;
end
function CalendarAttendanceList_SetAttendanceItem(pAttendanceList, pItemIndex, pCategory, pItem)
if pItem.mType == "Whisper" then
CalendarAttendanceList_SetItemToRSVP(pAttendanceList, pItemIndex, pCategory, pItem, GroupCalendar_cMeetingAttendanceNameFormat, pAttendanceList.ShowRank);
elseif pAttendanceList.ViewType == "Questing" then
local vNameFormat;
if pCategory ~= "STANDBY" then
vNameFormat = GroupCalendar_cQuestAttendanceNameFormat;
else
vNameFormat = GroupCalendar_cMeetingAttendanceNameFormat;
end
CalendarAttendanceList_SetItemToRSVP(pAttendanceList, pItemIndex, pCategory, pItem, vNameFormat, pAttendanceList.ShowRank);
else
CalendarAttendanceList_SetItemToRSVP(pAttendanceList, pItemIndex, pCategory, pItem, GroupCalendar_cMeetingAttendanceNameFormat, pAttendanceList.ShowRank);
end
end
function CalendarAttendanceList_UpdateAttendanceItems(pAttendanceList, pAttendanceCounts, pSetItemFunction, pTotalAttendanceFormat)
local vTotalAttendeesItem = getglobal(pAttendanceList:GetName().."Total");
local vFirstItemIndex = FauxScrollFrame_GetOffset(getglobal(pAttendanceList:GetName().."ScrollFrame"));
local vItemIndex = 0;
if not pAttendanceCounts then
CalendarAttendanceList_HideUnusedAttendanceItems(pAttendanceList, vItemIndex);
vTotalAttendeesItem:SetText(string.format(pTotalAttendanceFormat, 0));
return;
end
vTotalAttendeesItem:SetText(string.format(pTotalAttendanceFormat, pAttendanceCounts.NumAttendees));
for vIndex, vCategory in pAttendanceCounts.SortedCategories do
local vClassAttendanceInfo = pAttendanceCounts.Categories[vCategory];
if vFirstItemIndex == 0 then
local vActionFunc = nil;
if vCategory == "WHISPERS" then
vActionFunc = CalendarWhisperLog_AskClear;
end
CalendarAttendanceList_SetItemToCategory(pAttendanceList, vItemIndex, vCategory, vActionFunc, nil);
vItemIndex = vItemIndex + 1;
if vItemIndex >= pAttendanceList.NumItems then
CalendarAttendanceList_HideUnusedAttendanceItems(pAttendanceList, vItemIndex);
return;
end
else
vFirstItemIndex = vFirstItemIndex - 1;
end
if not pAttendanceList.CollapsedCategories[vCategory] then
if vFirstItemIndex >= vClassAttendanceInfo.mCount then
vFirstItemIndex = vFirstItemIndex - vClassAttendanceInfo.mCount;
else
for vIndex, vRSVP in vClassAttendanceInfo.mAttendees do
if vFirstItemIndex == 0 then
pSetItemFunction(pAttendanceList, vItemIndex, vCategory, vRSVP);
vItemIndex = vItemIndex + 1;
if vItemIndex >= pAttendanceList.NumItems then
CalendarAttendanceList_HideUnusedAttendanceItems(pAttendanceList, vItemIndex);
return;
end
else
vFirstItemIndex = vFirstItemIndex - 1;
end
end
end
end
end
CalendarAttendanceList_HideUnusedAttendanceItems(pAttendanceList, vItemIndex);
end
function CalendarAttendanceList_GetIndexedItem(pAttendanceList, pIndex)
local vIndex = pIndex + FauxScrollFrame_GetOffset(getglobal(pAttendanceList:GetName().."ScrollFrame"));
for vCategoryIndex, vCategory in pAttendanceList.EventListInfo.AttendanceCounts.SortedCategories do
local vClassAttendanceInfo = pAttendanceList.EventListInfo.AttendanceCounts.Categories[vCategory];
if vIndex == 0 then
Calendar_DebugMessage("CalendarAttendanceList_GetIndexedItem: Index specifies a header");
return nil;
end
vIndex = vIndex - 1;
if not pAttendanceList.CollapsedCategories[vCategory] then
if vIndex < vClassAttendanceInfo.mCount then
return vClassAttendanceInfo.mAttendees[vIndex + 1];
end
vIndex = vIndex - vClassAttendanceInfo.mCount;
end
end
Calendar_DebugMessage("CalendarAttendanceList_GetIndexedItem: Index too high");
return nil;
end
function CalendarAttendanceList_OnVerticalScroll()
CalendarAttendanceList_Update(gCalendarAttendanceList_VerticalScrollList);
end
function CalendarAttendanceList_OnClick(pButton)
local vAttendanceList = pButton:GetParent();
if pButton.IsCategoryItem then
if not vAttendanceList.CollapsedCategories[pButton.Category] then
vAttendanceList.CollapsedCategories[pButton.Category] = true;
else
vAttendanceList.CollapsedCategories[pButton.Category] = nil;
end
CalendarAttendanceList_Update(vAttendanceList);
return;
end
if not pButton.Checkable then
pButton:SetChecked(false);
return;
end
if pButton.Item then
if vAttendanceList.CurrentPanel == "GroupView" then
CalendarGroupInvites_SetItemSelected(pButton.Item, not pButton.Item.mSelected);
end
end
end
function CalendarAttendanceList_ShowMessageTooltip(pOwner, pName, pMessages, pColor)
if not pName then
return;
end
GameTooltip:SetOwner(pOwner, "ANCHOR_LEFT");
GameTooltip:AddLine(pName);
local vColor = {r = 1, g = 1, b = 1};
if pColor then
vColor = pColor;
end;
if type(pMessages) == "table" then
for vIndex, vText in pMessages do
GameTooltip:AddLine(vText, vColor.r, vColor.g, vColor.b, 1);
end
else
GameTooltip:AddLine(pMessages, vColor.r, vColor.g, vColor.b, 1);
end
GameTooltip:Show();
end
function CalendarAttendanceList_OnEnter()
local vAttendanceList = this:GetParent();
CalendarAttendanceList_ShowMessageTooltip(this, this.TooltipName, this.TooltipText, this.TooltipTextColor);
end
function CalendarAttendanceList_OnLeave()
GameTooltip:Hide();
end
function CalendarAttendanceList_ListViewItemSelected(pMenu, pItem)
local vAttendanceList = pMenu.AttendanceList;
CalendarAttendanceList_SetListView(vAttendanceList, pItem);
end
function CalendarAttendanceList_SetListView(pAttendanceList, pViewMode)
pAttendanceList.ListViewMode = pViewMode;
CalendarAttendanceList_EventChanged(pAttendanceList, pAttendanceList.Database, pAttendanceList.Event);
CalendarGroupInvites_SetSortMode(pViewMode);
end
CalendarAttendanceList_cPanelNames =
{
ExpandAll = "MainView",
GroupTab = "GroupView",
};
function CalendarAttendanceList_GroupListChanged(pAttendanceList)
CalendarAttendanceList_Update(pAttendanceList);
end
function CalendarAttendanceList_ShowPanel(pAttendanceList, pPanelName)
local vAttendanceListName = pAttendanceList:GetName();
for vTabName, vPanelName in CalendarAttendanceList_cPanelNames do
local vPanel = getglobal(vAttendanceListName..vPanelName);
local vTab = getglobal(vAttendanceListName..vTabName);
if vPanelName == pPanelName then
vPanel:Show();
PanelTemplates_SelectTab(vTab);
-- Handle panel-specific show code
if pPanelName == "GroupView" then
local vGroup = CalendarGroupInvites_BeginEvent(pAttendanceList.Database, pAttendanceList.Event);
CalendarAttendanceList_SetGroup(pAttendanceList, vGroup);
CalendarGroupInvites_SetChangedFunc(CalendarAttendanceList_GroupListChanged, pAttendanceList);
end
else
if vPanelName == "GroupView" then
CalendarGroupInvites_SetChangedFunc(nil, nil);
end
vPanel:Hide();
PanelTemplates_DeselectTab(vTab);
end
end
pAttendanceList.CurrentPanel = pPanelName;
CalendarAttendanceList_AdjustHeight(pAttendanceList);
CalendarAttendanceList_Update(pAttendanceList);
end
function CalendarAddPlayer_Open()
CalendarAddPlayer_Reset();
CalendarAddPlayerFrame:Show();
CalendarAddPlayerFrameName:SetFocus();
end
function CalendarAddPlayer_Reset()
CalendarAddPlayerFrame.IsWhisper = false;
CalendarAddPlayerFrame.Guild = nil;
CalendarAddPlayerFrameName:SetText("");
CalendarAddPlayerFrameLevel:SetText("");
CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameGuildRankMenu, nil);
CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameStatusMenu, "Y");
CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameClassMenu, "?");
CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameRaceMenu, "?");
CalendarAddPlayerFrameComment:SetText("");
if IsInGuild() then
CalendarAddPlayerFrameGuildRankMenu:Show();
else
CalendarAddPlayerFrameGuildRankMenu:Hide();
end
CalendarAddPlayerFrameDeleteButton:Hide();
CalendarAddPlayerFrameWhisper:Hide();
CalendarAddPlayerFrame:SetHeight(CalendarAddPlayerFrame.NormalHeight);
end
function CalendarAddPlayer_OpenWhisper(pName, pDate, pTime, pWhispers)
CalendarAddPlayer_Reset();
CalendarAddPlayerFrame.IsWhisper = true;
CalendarAddPlayerFrame.Name = pName;
CalendarAddPlayerFrame.Date = pDate;
CalendarAddPlayerFrame.Time = pTime;
CalendarAddPlayerFrame.Whispers = pWhispers;
CalendarAddPlayerFrameName:SetText(pName);
CalendarAddPlayer_AutoCompletePlayerInfo();
CalendarAddPlayerFrameDeleteButton:Show();
CalendarAddPlayerFrameWhisper:Show();
CalendarAddPlayerFrameWhisperRecent:SetText(pWhispers[table.getn(pWhispers)]);
if gGroupCalendar_PlayerSettings.LastWhisperConfirmMessage then
CalendarAddPlayerFrameWhisperReply:SetText(gGroupCalendar_PlayerSettings.LastWhisperConfirmMessage);
end
if gGroupCalendar_PlayerSettings.LastWhisperStatus then
CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameStatusMenu, gGroupCalendar_PlayerSettings.LastWhisperStatus);
end
local vColor = ChatTypeInfo["WHISPER"];
CalendarAddPlayerFrameWhisperRecent:SetTextColor(vColor.r, vColor.g, vColor.b);
CalendarAddPlayerFrameWhisperReply:SetTextColor(vColor.r, vColor.g, vColor.b);
CalendarAddPlayerFrame:SetHeight(CalendarAddPlayerFrame.NormalHeight + CalendarAddPlayerFrameWhisper:GetHeight());
CalendarAddPlayerFrame:Show();
CalendarAddPlayerFrameName:SetFocus();
end
function CalendarAddPlayer_SaveNext()
if CalendarAddPlayerFrame.IsWhisper then
local vNextWhisper = CalendarWhisperLog_GetNextWhisper(CalendarAddPlayerFrame.Name);
CalendarAddPlayer_Save();
if vNextWhisper then
CalendarAddPlayer_OpenWhisper(vNextWhisper.mName, vNextWhisper.mDate, vNextWhisper.mTime, vNextWhisper.mWhispers);
else
CalendarAddPlayer_Cancel();
end
else
CalendarAddPlayer_Save();
CalendarAddPlayer_Open();
end
end
function CalendarAddPlayer_Delete()
if not CalendarAddPlayerFrame.IsWhisper then
return;
end
local vNextWhisper = CalendarWhisperLog_GetNextWhisper(CalendarAddPlayerFrame.Name);
CalendarWhisperLog_RemovePlayer(CalendarAddPlayerFrame.Name);
if vNextWhisper then
CalendarAddPlayer_OpenWhisper(vNextWhisper.mName, vNextWhisper.mDate, vNextWhisper.mTime, vNextWhisper.mWhispers);
else
CalendarAddPlayer_Cancel();
end
end
function CalendarAddPlayer_EditRSVP(pRSVP)
CalendarAddPlayer_Reset();
CalendarAddPlayerFrame.RSVP = pRSVP;
CalendarAddPlayerFrameName:SetText(pRSVP.mName);
CalendarAddPlayerFrameLevel:SetText(pRSVP.mLevel);
CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameStatusMenu, pRSVP.mStatus);
CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameClassMenu, pRSVP.mClassCode);
CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameRaceMenu, pRSVP.mRaceCode);
local vGuildRank = EventDatabase_MapGuildRank(pRSVP.mGuild, pRSVP.mGuildRank);
CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameGuildRankMenu, vGuildRank);
if pRSVP.mComment then
CalendarAddPlayerFrameComment:SetText(pRSVP.mComment);
end
CalendarAddPlayerFrame:Show();
CalendarAddPlayerFrameName:SetFocus();
end
function CalendarAddPlayer_Done()
CalendarAddPlayer_Save();
CalendarAddPlayerFrame:Hide();
end
function CalendarAddPlayer_Cancel()
CalendarAddPlayerFrame:Hide();
end
function CalendarAddPlayer_Save()
local vName = CalendarAddPlayerFrameName:GetText();
if vName == "" then
return;
end
local vStatusCode = UIDropDownMenu_GetSelectedValue(CalendarAddPlayerFrameStatusMenu);
local vClassCode = UIDropDownMenu_GetSelectedValue(CalendarAddPlayerFrameClassMenu);
local vRaceCode = UIDropDownMenu_GetSelectedValue(CalendarAddPlayerFrameRaceMenu);
local vLevel = tonumber(CalendarAddPlayerFrameLevel:GetText());
local vComment = CalendarAddPlayerFrameComment:GetText();
local vGuild = CalendarAddPlayerFrame.Guild;
local vGuildRank = UIDropDownMenu_GetSelectedValue(CalendarAddPlayerFrameGuildRankMenu);
if not vGuild then
vGuild = gGroupCalendar_PlayerGuild;
end
if not vGuildRank then
vGuild = nil;
end
local vRSVP = EventDatabase_CreatePlayerRSVP(
gCalendarEventEditor_Database,
gCalendarEventEditor_Event,
vName,
vRaceCode,
vClassCode,
vLevel,
vStatusCode,
vComment,
vGuild,
vGuildRank,
nil);
if CalendarAddPlayerFrame.RSVP then
-- if CalendarAddPlayerFrame.RSVP.mGuild then
-- vRSVP.mGuild = CalendarAddPlayerFrame.RSVP.mGuild;
-- vRSVP.mGuildRank = CalendarAddPlayerFrame.RSVP.mGuildRank;
-- end
vRSVP.mDate = CalendarAddPlayerFrame.RSVP.mDate;
vRSVP.mTime = CalendarAddPlayerFrame.RSVP.mTime;
vRSVP.mAlts = CalendarAddPlayerFrame.RSVP.mAlts;
-- Save the guild rank mapping
EventDatabase_SetGuildRankMapping(
CalendarAddPlayerFrame.RSVP.mGuild,
CalendarAddPlayerFrame.RSVP.mGuildRank,
vGuildRank);
end
--
EventDatabase_AddEventRSVP(
gCalendarEventEditor_Database,
gCalendarEventEditor_Event,
vName,
vRSVP)
if CalendarAddPlayerFrame.IsWhisper then
CalendarWhisperLog_RemovePlayer(CalendarAddPlayerFrame.Name);
end
-- Send the reply /w if there is one
if CalendarAddPlayerFrameWhisper:IsVisible() then
local vReplyWhisper = CalendarAddPlayerFrameWhisperReply:GetText();
if vReplyWhisper and vReplyWhisper ~= "" then
gGroupCalendar_PlayerSettings.LastWhisperConfirmMessage = vReplyWhisper;
SendChatMessage(vReplyWhisper, "WHISPER", nil, CalendarAddPlayerFrame.Name);
end
-- Remember what status was used
gGroupCalendar_PlayerSettings.LastWhisperStatus = UIDropDownMenu_GetSelectedValue(CalendarAddPlayerFrameStatusMenu);
end
end
function CalendarAddPlayer_AutoCompletePlayerInfo()
local vName = CalendarAddPlayerFrameName:GetText();
local vUpperName = strupper(vName);
local vGuildMemberIndex = CalendarNetwork_GetGuildMemberIndex(vName);
if vGuildMemberIndex then
local vMemberName, vRank, vRankIndex, vLevel, vClass, vZone, vNote, vOfficerNote, vOnline = GetGuildRosterInfo(vGuildMemberIndex);
CalendarAddPlayerFrameName:SetText(vMemberName);
CalendarAddPlayerFrameLevel:SetText(vLevel);
CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameClassMenu, EventDatabase_GetClassCodeByClass(vClass));
-- CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameRaceMenu, EventDatabase_GetRaceCodeByRace(vRace));
CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameGuildRankMenu, vRankIndex);
CalendarAddPlayerFrame.Guild = gGroupCalendar_PlayerGuild;
return true;
end
local vNumFriends = GetNumFriends();
for vFriendIndex = 1, vNumFriends do
local vFriendName, vLevel, vClass, vArea, vConnected = GetFriendInfo(vFriendIndex);
if strupper(vFriendName) == vUpperName
and vConnected then
CalendarAddPlayerFrameName:SetText(vFriendName);
CalendarAddPlayerFrameLevel:SetText(vLevel);
CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameClassMenu, EventDatabase_GetClassCodeByClass(vClass));
-- CalendarDropDown_SetSelectedValue(CalendarAddPlayerFrameRaceMenu, EventDatabase_GetRaceCodeByRace(vRace));
end
end
return false;
end
function CalendarAddPlayerWhisper_OnEnter()
if not CalendarAddPlayerFrame.IsWhisper then
return;
end
CalendarAttendanceList_ShowMessageTooltip(this, CalendarAddPlayerFrame.Name, CalendarAddPlayerFrame.Whispers, ChatTypeInfo["WHISPER"]);
end
function CalendarAddPlayerWhisper_OnLeave()
GameTooltip:Hide();
end
function CalendarAddPlayerWhisper_Reply()
local vName;
if CalendarAddPlayerFrame.Name then
vName = CalendarAddPlayerFrame.Name;
else
vName = CalendarAddPlayerFrameName:GetText()
end
if not vName or vName == "" then
return;
end
DEFAULT_CHAT_FRAME.editBox.chatType = "WHISPER";
DEFAULT_CHAT_FRAME.editBox.tellTarget = vName;
ChatEdit_UpdateHeader(DEFAULT_CHAT_FRAME.editBox);
if not DEFAULT_CHAT_FRAME.editBox:IsVisible() then
ChatFrame_OpenChat("", DEFAULT_CHAT_FRAME);
end
end
function CalendarEventEditor_AttendanceMenuItemSelected(pOwner, pValue)
local vAttendanceItem = pOwner:GetParent();
local vLineIndex = vAttendanceItem:GetID();
local vAttendanceList = vAttendanceItem:GetParent();
local vItem = CalendarAttendanceList_GetIndexedItem(vAttendanceList, vLineIndex);
if pValue == "DELETE" then
if vItem.mType == "Whisper" then
CalendarWhisperLog_RemovePlayer(vItem.mName);
else
gGroupCalendar_RSVPToDelete = vItem;
StaticPopup_Show("CONFIRM_CALENDAR_RSVP_DELETE", vItem.mName);
end
elseif pValue == "ADD" then
if vItem.mType == "Whisper" then
CalendarAddPlayer_OpenWhisper(vItem.mName, vItem.mDate, vItem.mTime, vItem.mWhispers);
end
elseif pValue == "EDIT" then
CalendarAddPlayer_EditRSVP(vItem);
elseif pValue == "INVITE" then
InviteByName(vItem.mName);
else
vItem.mStatus = pValue;
EventDatabase_AddEventRSVP(
gCalendarEventEditor_Database,
gCalendarEventEditor_Event,
vItem.mName,
vItem);
end
end
function CalendarClassLimitItem_SetClassName(pItem, pClassName)
local vItemName = pItem:GetName();
local vLabelItem = getglobal(vItemName.."Label");
local vSeparatorItem = getglobal(vItemName.."Separator");
local vLabel = getglobal("GroupCalendar_c"..pClassName.."sLabel");
vLabelItem:SetText(vLabel);
local vColor = RAID_CLASS_COLORS[getglobal("GroupCalendar_c"..pClassName.."ClassColorName")];
vLabelItem:SetTextColor(vColor.r, vColor.g, vColor.b);
vSeparatorItem:SetTextColor(vColor.r, vColor.g, vColor.b);
end
function CalendarAttendanceTotals_OnShow(pTotalsFrame)
local vFrameName = this:GetName();
local vPaladinsFrame = getglobal(vFrameName.."Paladins");
local vPaladinsLabelFrame = getglobal(vFrameName.."PaladinsLabel");
local vShamansFrame = getglobal(vFrameName.."Shamans");
local vShamansLabelFrame = getglobal(vFrameName.."ShamansLabel");
if gGroupCalendar_PlayerFactionGroup == "Alliance" then
vPaladinsFrame:Show();
vPaladinsLabelFrame:Show();
vShamansFrame:Hide();
vShamansLabelFrame:Hide();
else
vPaladinsFrame:Hide();
vPaladinsLabelFrame:Hide();
vShamansFrame:Show();
vShamansLabelFrame:Show();
end
end