vanilla-wow-addons – Rev 1
?pathlinks?
function CalendarClassLimits_Open(pLimits, pTitle, pShowPriority, pSaveFunction)
CalendarClassLimitsFrame.mSaveFunction = pSaveFunction;
CalendarClassLimitsFrameTitle:SetText(pTitle);
CalendarClassLimits_UpdateFields(pLimits);
if pShowPriority then
CalendarClassLimitsFramePriority:Show();
else
CalendarClassLimitsFramePriority:Hide();
end
CalendarClassLimitsFrame:Show();
end
function CalendarClassLimits_Done()
if CalendarClassLimitsFrame.mSaveFunction then
CalendarClassLimitsFrame.mSaveFunction(CalendarClassLimits_GetLimits());
end
CalendarClassLimitsFrame:Hide();
end
function CalendarClassLimits_Cancel()
CalendarClassLimitsFrame:Hide();
end
function CalendarClassLimits_UpdateFields(pLimits)
for vClassCode, vClassInfo in gGroupCalendar_ClassInfoByClassCode do
local vClassFieldName = "CalendarClassLimitsFrame"..vClassInfo.element;
local vClassMin = getglobal(vClassFieldName.."Min");
local vClassMax = getglobal(vClassFieldName.."Max");
local vClassLimit = nil;
if pLimits
and pLimits.mClassLimits then
vClassLimit = pLimits.mClassLimits[vClassCode];
end
if vClassLimit then
if vClassLimit.mMin then
vClassMin:SetText(vClassLimit.mMin);
else
vClassMin:SetText("");
end
if vClassLimit.mMax then
vClassMax:SetText(vClassLimit.mMax);
else
vClassMax:SetText("");
end
else
vClassMin:SetText("");
vClassMax:SetText("");
end
end
if pLimits
and pLimits.mMaxAttendance then
CalendarDropDown_SetSelectedValue(CalendarClassLimitsFrameMaxPartySize, pLimits.mMaxAttendance);
else
CalendarDropDown_SetSelectedValue(CalendarClassLimitsFrameMaxPartySize, 0);
end
if pLimits
and pLimits.mPriorityOrder then
CalendarDropDown_SetSelectedValue(CalendarClassLimitsFramePriorityValue, pLimits.mPriorityOrder);
else
CalendarDropDown_SetSelectedValue(CalendarClassLimitsFramePriorityValue, "Date");
end
end
function CalendarClassLimits_GetLimits()
local vLimits = {};
for vClassCode, vClassInfo in gGroupCalendar_ClassInfoByClassCode do
local vClassFieldName = "CalendarClassLimitsFrame"..vClassInfo.element;
local vClassMin = tonumber(getglobal(vClassFieldName.."Min"):GetText());
local vClassMax = tonumber(getglobal(vClassFieldName.."Max"):GetText());
if vClassMin or vClassMax then
if not vLimits.mClassLimits then
vLimits.mClassLimits = {};
end
vLimits.mClassLimits[vClassCode] = {mMin = vClassMin, mMax = vClassMax};
end
end
vLimits.mMaxAttendance = UIDropDownMenu_GetSelectedValue(CalendarClassLimitsFrameMaxPartySize);
if vLimits.mMaxAttendance == 0 then
vLimits.mMaxAttendance = nil;
end
vLimits.mPriorityOrder = UIDropDownMenu_GetSelectedValue(CalendarClassLimitsFramePriorityValue);
if vLimits.mPriorityOrder == "Date" then
vLimits.mPriorityOrder = nil;
end
-- See if the mLimits field should just be removed altogether
if Calendar_ArrayIsEmpty(vLimits) then
vLimits = nil;
end
-- Done
return vLimits;
end
function CalendarClassLimits_ClassLimitsChanged(pOldLimits, pNewLimits)
-- If there are no new limits then just see if there were old ones
if not pNewLimits then
return pOldLimits ~= nil;
end
-- If there were no limits previous then just notify that there are now
if not pOldLimits then
return true;
end
-- See if anything is different between the two
if pNewLimits.mMaxAttendance ~= pOldLimits.mMaxAttendance then
return true;
end
-- No differences if neither had class limits
if not pNewLimits.mClassLimits
and not pOldLimits.mClassLimits then
return false;
end
-- New class limits if one has them when the other didn't
if (pNewLimits.mClassLimits == nil)
~= (pOldLimits.mClassLimits == nil) then
return true;
end
-- Compare the limits
for vClassCode, vClassInfo in gGroupCalendar_ClassInfoByClassCode do
local vNewClassLimits = pNewLimits.mClassLimits[vClassCode];
local vOldClassLimits = pOldLimits.mClassLimits[vClassCode];
if (vNewClassLimits == nil)
~= (vOldClassLimits == nil) then
return true;
end
if vNewClassLimits then
if vNewClassLimits.mMin ~= vOldClassLimits.mMin
or vNewClassLimits.mMax ~= vOldClassLimits.mMax then
return true;
end
end
end
-- Done
return false;
end
function CalendarClassLimits_OnShow(pAutoConfirmFrame)
local vFrameName = this:GetName();
local vPaladinsFrame = getglobal(vFrameName.."Paladin");
local vShamansFrame = getglobal(vFrameName.."Shaman");
if gGroupCalendar_PlayerFactionGroup == "Alliance" then
vPaladinsFrame:Show();
vShamansFrame:Hide();
else
vPaladinsFrame:Hide();
vShamansFrame:Show();
end
CalendarClassLimits_MinTotalChanged(pAutoConfirmFrame);
end
function CalendarClassLimits_MinTotalChanged(pAutoConfirmFrame)
local vMinTotal = nil;
local vChanged = false;
for vClassCode, vClassInfo in gGroupCalendar_ClassInfoByClassCode do
local vClassFieldName = "CalendarClassLimitsFrame"..vClassInfo.element;
local vClassMin = tonumber(getglobal(vClassFieldName.."Min"):GetText());
if vClassMin then
if not vMinTotal then
vMinTotal = vClassMin;
else
vMinTotal = vMinTotal + vClassMin;
end
end
end
local vMinTotalField = getglobal(pAutoConfirmFrame:GetName().."MaxPartySizeMin");
if vMinTotal then
vMinTotalField:SetText(vMinTotal);
else
vMinTotalField:SetText(GroupCalendar_cNoMinimum);
end
return vChanged;
end