vanilla-wow-addons – Rev 1
?pathlinks?
--[[
Guild Event Manager by Kiki of European Cho'gall (Alliance)
Events list - By Alexandre Flament & Kiki
]]
GEM_SORTBY_DATE = "date";
GEM_SORTBY_WHERE = "where";
GEM_SORTBY_LEADER = "leader";
GEM_SORTBY_COUNT = "count";
GEM_SORTBY_MINMAX = "minmax";
local MAXDISPLAY_EVENT = 12;
local sortType = GEM_SORTBY_DATE;
local sortDir = true;
local UIEvents = nil;
local UIEventsRefresh = true;
local selectEvent = nil;
local GEMList_PreviousTab = 1;
GEM_Classes = {};
GEM_Classes["WARRIOR"] = GEM_TEXT_CLASS_WARRIOR;
GEM_Classes["PALADIN"] = GEM_TEXT_CLASS_PALADIN;
GEM_Classes["SHAMAN"] = GEM_TEXT_CLASS_SHAMAN;
GEM_Classes["ROGUE"] = GEM_TEXT_CLASS_ROGUE;
GEM_Classes["MAGE"] = GEM_TEXT_CLASS_MAGE;
GEM_Classes["WARLOCK"] = GEM_TEXT_CLASS_WARLOCK;
GEM_Classes["HUNTER"] = GEM_TEXT_CLASS_HUNTER;
GEM_Classes["DRUID"] = GEM_TEXT_CLASS_DRUID;
GEM_Classes["PRIEST"] = GEM_TEXT_CLASS_PRIEST;
GEMList_CurrentGroupIDMustReset = false;
GEMList_CurrentGroupID = nil;
GEMList_CurrentGroupIsRaid = false;
GEMList_MustConvertToRaid = false;
GEM_NewEvents = {};
function GEMList_GetCursorWidgetPosition()
local abs_x,abs_y = GetCursorPosition();
local x = this:GetLeft();
local y = this:GetTop();
return abs_x-x,abs_y-y;
end
--[[
Tabs handling function
]]
function GEMList_SelectTab(tab)
PanelTemplates_SetTab(GEMListMiddleFrame, tab);
local TabFrames = {
[1] = "GEMListDetailsFrame",
[2] = "GEMListLimitationsFrame",
[3] = "GEMListAdminFrame"
};
for id, name in TabFrames do
if (id == tab) then
getglobal(name):Show();
else
getglobal(name):Hide();
end
end
GEMList_PreviousTab = tab;
end
local function GEMList_Middle_ShowFrame()
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil)
then
--[[ if(GEM_IsMyReroll(event.leader))
then
GEMListMiddleFrameTab3:Show();
else
GEMListMiddleFrameTab3:Hide();
if(GEMList_PreviousTab == 3)
then
GEMList_PreviousTab = 1;
end
end]]
PanelTemplates_SetNumTabs(GEMListMiddleFrame,3);
GEMList_SelectTab(GEMList_PreviousTab);
GEMListMiddleFrame:Show();
else
GEMListMiddleFrame:Hide();
end
end
--[[
Details Tab functions
]]
function GEMListDetails_OnShow()
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil)
then
GEMListDetailsFrame_Descr_Value:SetText(event.ev_comment);
local plugin = GEM_SUB_GetPlugin(event.sorttype);
if(plugin == nil)
then
GEMListDetailsFrame_SortType_Value:SetText(GEM_TEXT_DETAILS_UNKNOWN.." ("..event.sorttype..")");
else
if(plugin.Help)
then
GEMListDetailsFrame_SortType_Value:SetText(plugin.Name.." : "..plugin.Help);
else
GEMListDetailsFrame_SortType_Value:SetText(plugin.Name);
end
end
end
end
--[[
Limitations Tab functions
]]
local function GEMListLimit_GetRangeValue(tab,name,range)
if(tab[name] == nil)
then
return -1;
end
if(tab[name][range] == nil)
then
return -1;
end
return tab[name][range];
end
local function GEMListLimit_SetClassValues(name)
local wgt_name = "GEMListLimitItem_"..name;
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil)
then
local min,max,titular,substitute,replacement;
min = GEMListLimit_GetRangeValue(event.classes,name,"min");
max = GEMListLimit_GetRangeValue(event.classes,name,"max");
titular = GEMListLimit_GetRangeValue(event.classes,name,"tit_count");
substitute = GEMListLimit_GetRangeValue(event.classes,name,"sub_count");
replacement = GEMListLimit_GetRangeValue(event.classes,name,"repl_count");
getglobal(wgt_name.."Class"):SetText(GEM_Classes[name]);
if(min == -1)
then
getglobal(wgt_name.."Min"):SetText("-");
getglobal(wgt_name.."Min"):SetTextColor(1,1,1);
getglobal(wgt_name.."Titular"):SetTextColor(1,1,1);
else
getglobal(wgt_name.."Min"):SetText(min);
if(titular < min)
then
getglobal(wgt_name.."Min"):SetTextColor(1,0,0);
getglobal(wgt_name.."Titular"):SetTextColor(1,0,0);
else
getglobal(wgt_name.."Min"):SetTextColor(0,1,0);
getglobal(wgt_name.."Titular"):SetTextColor(0,1,0);
end
end
if(max == -1)
then
getglobal(wgt_name.."Max"):SetText("-");
getglobal(wgt_name.."Max"):SetTextColor(1,1,1);
getglobal(wgt_name.."Substitute"):SetTextColor(1,1,1);
else
getglobal(wgt_name.."Max"):SetText(max);
if(substitute > 0)
then
getglobal(wgt_name.."Max"):SetTextColor(0.2,0.2,1);
getglobal(wgt_name.."Substitute"):SetTextColor(0.2,0.2,1);
else
getglobal(wgt_name.."Max"):SetTextColor(1,1,1);
getglobal(wgt_name.."Substitute"):SetTextColor(1,1,1);
end
end
if(titular == -1)
then
getglobal(wgt_name.."Titular"):SetText("n/a");
else
getglobal(wgt_name.."Titular"):SetText(titular);
end
if(substitute == -1)
then
getglobal(wgt_name.."Substitute"):SetText("n/a");
else
getglobal(wgt_name.."Substitute"):SetText(substitute);
end
getglobal(wgt_name.."Replacement"):SetText(replacement);
end
end
function GEMListLimitations_OnShow()
if(not GEMListLimitationsFrame:IsVisible()) then
return;
end
GEMListLimit_SetClassValues("WARRIOR");
GEMListLimit_SetClassValues("PALADIN");
GEMListLimit_SetClassValues("SHAMAN");
GEMListLimit_SetClassValues("ROGUE");
GEMListLimit_SetClassValues("MAGE");
GEMListLimit_SetClassValues("WARLOCK");
GEMListLimit_SetClassValues("HUNTER");
GEMListLimit_SetClassValues("DRUID");
GEMListLimit_SetClassValues("PRIEST");
end
--[[
Admin Tab functions
]]
GEMADMIN_SORTBY_PLACE = "place";
GEMADMIN_SORTBY_NAME = "name";
GEMADMIN_SORTBY_GUILD = "guild";
GEMADMIN_SORTBY_CLASS = "class";
GEMADMIN_SORTBY_LEVEL = "level";
local MAXDISPLAY_LIST = 10;
local sortTypeAdmin = GEMADMIN_SORTBY_PLACE;
local sortDirAdmin = true;
local UIList = nil;
local UIListAdminRefresh = true;
local selectAdminItem = nil;
function GEMListAdmin_EventOnClick(button)
selectAdminItem = this.pl_name;
GEMListAdmin_UpdatePlayersList();
if(button == "RightButton")
then
ToggleDropDownMenu(1,nil,GEMListAdminMenu,"cursor");
end
end
function GEMListAdmin_EventOnHover()
if (selectEvent ~= nil and GEM_Events.realms[GEM_Realm].events[selectEvent] ~= nil) then
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
local pl_name = getglobal(this:GetName().."Name"):GetText();
if(pl_name and event.players[pl_name] ~= nil and event.players[pl_name].comment ~= nil and event.players[pl_name].comment ~= "")
then
GameTooltip:SetOwner(this, "ANCHOR_CURSOR");
GameTooltip:ClearLines();
local lines = 0;
lines = GEMList_AddTooltipText("|cff" .. "00AAFF" .. GEM_TEXT_ADMIN_COMMENT .. "|r",lines);
lines = GEMList_AddTooltipText("|cff" .. "FFFFFF" .. event.players[pl_name].comment .. "|r",lines,"FFFFFF");
GameTooltip:Show();
end
end
end
function GEMListAdmin_GetList()
if (UIListAdminRefresh) then
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
UIList = {};
if(event ~= nil and event.closed_comment == nil)
then
GEM_CheckEventHasChannel(event);
local players = GEM_Players[GEM_Realm][event.channel];
if(players == nil) then players = {}; end;
for pos,tab in event.titulars do
if(tab.guild == GEM_NA_FORMAT and players[tab.name]) then tab.guild = players[tab.name].guild; end;
tinsert(UIList, {place = "P"..pos; name = tab.name; guild=tab.guild; class=tab.class; level=tab.level});
end
for pos,tab in event.substitutes do
if(tab.guild == GEM_NA_FORMAT and players[tab.name]) then tab.guild = players[tab.name].guild; end;
tinsert(UIList, {place = "S"..pos; name = tab.name; guild=tab.guild; class=tab.class; level=tab.level});
end
for pos,tab in event.replacements do
if(tab.guild == GEM_NA_FORMAT and players[tab.name]) then tab.guild = players[tab.name].guild; end;
tinsert(UIList, {place = "R"..pos; name = tab.name; guild=tab.guild; class=tab.class; level=tab.level});
end
-- If leader is not online, add speculative list
if(not GEM_IsPlayerConnected(event.channel,event.leader) and GEM_Events.realms[GEM_Realm].commands[selectEvent])
then
for cmdid,cmdtab in GEM_Events.realms[GEM_Realm].commands[selectEvent].cmds
do
if(cmdtab.cmd == GEM_CMD_CMD_SUBSCRIBE and cmdtab.acked == 0) -- A subscribe not acked ?
then
tinsert(UIList, {place = "NA"; name = cmdtab.params[5]; guild=cmdtab.params[7]; class=cmdtab.params[6]; level=tonumber(cmdtab.params[8],10); stamp=cmdtab.stamp});
end
end
end
table.sort(UIList, GEMListAdmin_Predicate);
if(not sortDirAdmin)
then
UIList = GEMList_InvertList(UIList);
end
end
UIListAdminRefresh = false;
end
return UIList;
end
function GEMListAdmin_UpdatePlayersList()
if(not GEMListAdminFrame:IsVisible()) then
return;
end
local list = GEMListAdmin_GetList();
local size = table.getn(list);
local offset = FauxScrollFrame_GetOffset(GEMListAdminItemScrollFrame);
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
local iamassistant = false;
if(event == nil)
then
UIEventsRefresh = true;
GEMList_UpdateEventList();
return;
end
numButtons = MAXDISPLAY_LIST;
i = 1;
if(GEM_IsMyReroll(event.leader) and GEM_IsChannelJoined(event.channel)) -- If I'm leader of this event AND my toon has joined the channel
then
GEMListAdminFrameClose:Enable();
GEMListAdminFrameEdit:Enable();
GEMListAdminFrameGroup:Enable();
GEMListAdminFrameAddExt:Enable();
GEMListAdminFrameIgnore:Disable();
GEMListAdminFrameBanned:Enable();
iamassistant = true;
else
GEMListAdminFrameClose:Disable();
GEMListAdminFrameEdit:Disable();
GEMListAdminFrameAddExt:Disable();
if(not GEM_IsMyReroll(event.leader))
then
GEMListAdminFrameIgnore:Enable();
end
GEMListAdminFrameBanned:Disable();
if(GEM_Events.realms[GEM_Realm].assistant[event.id] and GEM_IsChannelJoined(event.channel)) -- If I'm assistant AND my toon has joined the channel
then
GEMListAdminFrameGroup:Enable();
iamassistant = true;
else
GEMListAdminFrameGroup:Disable();
end
end
while (i <= numButtons) do
local j = i + offset
local prefix = "GEMListAdminItem"..i;
local button = getglobal(prefix);
if (j <= size) then
button.pl_name = list[j].name;
if((GEM_IsMyReroll(list[j].name) and iamassistant) or -- Myself and I'm assistant (assistant is set if I'm the leader)
(list[j].name == event.leader) or -- This is the leader
(GEM_IsMyReroll(event.leader) and event.assistants ~= nil and event.assistants[list[j].name])) -- I'm the leader, and there is an assistants list, and this subscriber is assistant
then
getglobal(prefix.."Place"):SetTextColor(0,1,0);
else
getglobal(prefix.."Place"):SetTextColor(1,1,1);
end
getglobal(prefix.."Place"):SetText(list[j].place);
if(GEM_IsPlayerConnected(event.channel,list[j].name))
then
if(GEM_IsMyReroll(list[j].name) or GEM_IsPlayerInGroup(list[j].name))
then
getglobal(prefix.."Name"):SetTextColor(0,1,0); -- Green
else
getglobal(prefix.."Name"):SetTextColor(0.4,0.4,1); -- blue
end
else
getglobal(prefix.."Name"):SetTextColor(1,1,1); -- White
end
getglobal(prefix.."Name"):SetText(list[j].name);
getglobal(prefix.."Guild"):SetText(list[j].guild);
getglobal(prefix.."Class"):SetText(GEM_Classes[list[j].class]);
getglobal(prefix.."Level"):SetText(list[j].level);
button:Show();
-- selected
if (GEM_IsMyReroll(event.leader) and selectAdminItem == list[j].name and not GEM_IsMyReroll(list[j].name)) then
button:LockHighlight();
else
button:UnlockHighlight();
end
else
button.pl_name = nil;
button:Hide();
end
i = i + 1;
end
FauxScrollFrame_Update(GEMListAdminItemScrollFrame, size, MAXDISPLAY_LIST, 17);
end
_GEMList_PlaceConvert = {};
_GEMList_PlaceConvert["P"] = 100;
_GEMList_PlaceConvert["S"] = 200;
_GEMList_PlaceConvert["R"] = 300;
_GEMList_PlaceConvert["NA"] = 400;
function GEMListAdmin_PredicatePlace(a, b)
local _,_,type1,num1 = string.find(a.place,"([^%d]+)(%d*)");
local _,_,type2,num2 = string.find(b.place,"([^%d]+)(%d*)");
if(type1 == nil or type2 == nil)
then
if (a.place < b.place) then
return true;
elseif (a.place > b.place) then
return false;
end
else
if(num1 == "") then num1 = a.stamp; end;
if(num2 == "") then num2 = b.stamp; end;
local v1 = _GEMList_PlaceConvert[type1] + tonumber(num1,10);
local v2 = _GEMList_PlaceConvert[type2] + tonumber(num2,10);
if(v1 < v2) then
return true;
elseif(v1 > v2) then
return false;
end
end
return GEMListAdmin_PredicateName(a, b);
end
function GEMListAdmin_PredicateName(a, b)
if (a.name < b.name) then
return true;
elseif (a.name > b.name) then
return false;
end
return GEMListAdmin_PredicateGuild(a, b);
end
function GEMListAdmin_PredicateGuild(a, b)
if (a.guild == nil or b.guild == nil) then
if(a.guild == nil and b.guild == nil) then
return GEMListAdmin_PredicateClass(a, b);
elseif(a.guild == nil) then
return false;
else
return true;
end
end
if (a.guild < b.guild) then
return true;
elseif (a.guild > b.guild) then
return false;
end
return GEMListAdmin_PredicateClass(a, b);
end
function GEMListAdmin_PredicateClass(a, b)
if (a.class < b.class) then
return true;
elseif (a.class > b.class) then
return false;
end
return GEMListAdmin_PredicateLevel(a, b);
end
function GEMListAdmin_PredicateLevel(a, b)
if (a.level < b.level) then
return true;
elseif (a.level > b.level) then
return false;
end
return false;
end
function GEMListAdmin_Predicate(a, b)
-- a ou b est nil
if (a == nil) then
if (b == nil) then
return false;
else
return true;
end
elseif (b == nil) then
return false;
end
GEMADMIN_SORTBY = {
[GEMADMIN_SORTBY_PLACE] = GEMListAdmin_PredicatePlace,
[GEMADMIN_SORTBY_NAME] = GEMListAdmin_PredicateName,
[GEMADMIN_SORTBY_GUILD] = GEMListAdmin_PredicateGuild,
[GEMADMIN_SORTBY_CLASS] = GEMListAdmin_PredicateClass,
[GEMADMIN_SORTBY_LEVEL] = GEMListAdmin_PredicateLevel
};
predicate = GEMADMIN_SORTBY[sortTypeAdmin];
return predicate(a,b);
end
function GEMListAdmin_SortBy(aSortType, aSortDir)
sortTypeAdmin = aSortType;
sortDirAdmin = aSortDir;
UIListAdminRefresh = true;
GEMListAdmin_UpdatePlayersList();
end
function GEMListAdmin_OnShow()
UIListAdminRefresh = true;
GEMListAdmin_UpdatePlayersList();
end
StaticPopupDialogs["GEM_CONFIRM_CLOSE"] = {
text = TEXT(GEM_TEXT_ADMIN_CLOSE_CONFIRM),
button1 = TEXT(OKAY),
button2 = TEXT(CANCEL),
hasEditBox = 1,
maxLetters = 100,
OnAccept = function()
local text = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GEM_EVT_CloseEvent(this:GetParent().data,text);
end,
EditBoxOnEnterPressed = function()
local text = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GEM_EVT_CloseEvent(this:GetParent().data,text);
end,
OnShow = function()
getglobal(this:GetName().."EditBox"):SetFocus();
end,
OnHide = function()
if ( ChatFrameEditBox:IsVisible() ) then
ChatFrameEditBox:SetFocus();
end
getglobal(this:GetName().."EditBox"):SetText("");
end,
timeout = 0,
exclusive = 1
};
function GEMListAdmin_CloseOnClick()
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil)
then
local dialogFrame = StaticPopup_Show("GEM_CONFIRM_CLOSE");
if(dialogFrame)
then
dialogFrame.data = event.id;
end
end
end
function GEMListAdmin_EditOnClick()
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil)
then
GEMNew_Create:SetText(GEM_TEXT_MODIFY);
GEMNew_AutoMembers:Disable();
if(GEMNewAutoMembersFrame:IsVisible())
then
GEMNewAutoMembersFrame:Hide();
end
GEMMain_SelectTab(2);
GEMNew_LoadEvent(event);
end
end
function GEMListAdmin_External_Set(infos, user_data)
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil)
then
if(infos.level < event.min_lvl or infos.level > event.max_lvl)
then
GEM_ChatPrint(GEM_TEXT_EXTERNAL_ERR_LEVEL);
return;
end
GEM_SUB_CreateSubscriber(event.id,time(),infos.name,infos.class,infos.guild,infos.level,infos.comment,infos.forcesub,infos.forcetit);
end
end
function GEM_IsPlayerInGroup(pl_name)
if(GEMList_CurrentGroupIsRaid)
then
for i = 1, 40 do
local name = GetRaidRosterInfo(i);
if(name and name == pl_name)
then
return true;
end
end
else
for i = 1,4 do
local name = UnitName("party"..i);
if(name and name == pl_name)
then
return true;
end
end
end
return false;
end
function GEMListAdmin_GroupOnClick()
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil)
then
if(GEMList_CurrentGroupIDMustReset)
then
GEMList_CurrentGroupIDMustReset = false;
GEMList_CurrentGroupID = nil;
GEMList_CurrentGroupIsRaid = false;
GEMList_MustConvertToRaid = false;
end
if(GEMList_CurrentGroupID ~= nil) -- Check current group and raid
then
if(GEMList_CurrentGroupID ~= event.id)
then
GEM_ChatPrint(GEM_TEXT_ADMIN_ERR_LEAVE_GROUP);
return;
end
else -- Check if already grouped
GEMList_CurrentGroupID = event.id;
if(GetNumPartyMembers() ~= 0 or UnitInRaid("player"))
then
GEM_ChatPrint(GEM_TEXT_ADMIN_ERR_ALREADY_GROUP);
if(GetNumRaidMembers() ~= 0)
then
GEMList_CurrentGroupIsRaid = true;
GEM_ChatDebug(GEM_DEBUG_GLOBAL,"I'm in a raid !");
end
end
end
-- Ok let's group titulars
for i,tab in event.titulars
do
if(GEMList_MustConvertToRaid == true)
then
ConvertToRaid();
GEMList_CurrentGroupIsRaid = true;
GEM_ChatDebug(GEM_DEBUG_GLOBAL,"Converted to raid !");
GEMList_MustConvertToRaid = false;
end
GEM_ChatDebug(GEM_DEBUG_GLOBAL,"Group : Checking "..tab.name);
if(tab.name ~= GEM_PlayerName and not GEM_IsPlayerInGroup(tab.name))
then
GEM_ChatDebug(GEM_DEBUG_GLOBAL,"Group : "..tab.name.." not in group, inviting");
InviteByName(tab.name);
end
end
end
end
function GEMListAdmin_AddExtOnClick()
GEMExternal_Choose(GEMListAdmin_External_Set,GEM_TEXT_EXTERNAL_HEADER,{true,true});
end
StaticPopupDialogs["GEM_CONFIRM_IGNORE"] = {
text = TEXT(GEM_TEXT_ADMIN_IGNORE_CONFIRM),
button1 = TEXT(OKAY),
button2 = TEXT(CANCEL),
OnAccept = function()
local event = GEM_Events.realms[GEM_Realm].events[this:GetParent().data.ev_id];
if(event ~= nil)
then
GEM_Events.realms[GEM_Realm].ignore[event.id] = 1;
GEM_EVT_ClearEvent(event.id,"Ignored",true);
GEM_NotifyGUI(GEM_NOTIFY_EVENT_UPDATE,event.id);
end
end,
timeout = 0
};
function GEMListAdmin_IgnoreOnClick()
if (selectEvent and not GEM_EVT_CheckExpiredEvent(selectEvent)) then
local dialogFrame = StaticPopup_Show("GEM_CONFIRM_IGNORE");
if(dialogFrame)
then
dialogFrame.data = { ev_id=selectEvent };
end
end
end
function GEMListAdmin_BannedOnClick()
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(GEMListBannedFrame:IsVisible() or event == nil)
then
return;
end
GEMListBannedFrame.Event = selectEvent;
GEMListBannedFrame:Show();
end
function GEMListAdminMenu_OnLoad()
HideDropDownMenu(1);
GEMListAdminMenu.initialize = GEMListAdminMenu_Initialize;
GEMListAdminMenu.displayMode = "MENU";
GEMListAdminMenu.name = "Titre";
end
function GEMListAdminMenu_Initialize()
info = { };
info.text = selectAdminItem;
info.isTitle = true;
info.notCheckable = 1;
UIDropDownMenu_AddButton(info,1);
info = { };
info.text = WHISPER_MESSAGE;
info.notCheckable = 1;
info.value = selectAdminItem;
info.func = GEMListAdminMenu_Whisper_OnClick;
if(GEM_IsMyReroll(selectAdminItem))
then
info.disabled = 1;
end
UIDropDownMenu_AddButton(info,1);
info = { };
info.text = GROUP_INVITE;
info.notCheckable = 1;
info.value = selectAdminItem;
info.func = GEMListAdminMenu_GroupInvite_OnClick;
if(GEM_IsMyReroll(selectAdminItem) or GEM_IsPlayerInGroup(selectAdminItem))
then
info.disabled = 1;
end
UIDropDownMenu_AddButton(info,1);
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil and selectAdminItem ~= nil and selectAdminItem ~= "" and GEM_IsMyReroll(event.leader))
then
info = { };
info.text = GEM_TEXT_ADMIN_ASSISTANT;
info.notCheckable = 1;
info.value = selectAdminItem;
info.func = GEMListAdminMenu_Assistant_OnClick;
if(event.assistants == nil or event.assistants[selectAdminItem] or GEM_IsMyReroll(selectAdminItem))
then
info.disabled = 1;
end
UIDropDownMenu_AddButton(info,1);
info = { };
info.text = GEM_TEXT_ADMIN_KICK;
info.notCheckable = 1;
info.value = selectAdminItem;
info.disabled = GEM_IsMyReroll(selectAdminItem);
info.func = GEMListAdminMenu_Kick_OnClick;
UIDropDownMenu_AddButton(info,1);
info = { };
info.text = GEM_TEXT_ADMIN_BAN;
info.notCheckable = 1;
info.value = selectAdminItem;
info.disabled = GEM_IsMyReroll(selectAdminItem);
info.func = GEMListAdminMenu_Ban_OnClick;
UIDropDownMenu_AddButton(info,1);
info = { };
info.text = GEM_TEXT_FORCETIT;
info.value = selectAdminItem;
info.func = GEMListAdminMenu_Forcetit_OnClick;
info.checked = event.players[selectAdminItem].forcetit == 1;
UIDropDownMenu_AddButton(info,1);
info = { };
info.text = GEM_TEXT_FORCESUB;
info.value = selectAdminItem;
info.func = GEMListAdminMenu_Forcesub_OnClick;
info.checked = event.players[selectAdminItem].forcesub == 1;
UIDropDownMenu_AddButton(info,1);
info = { };
info.text = GEM_TEXT_SETLEADER;
info.notCheckable = 1;
info.value = selectAdminItem;
info.disabled = GEM_IsMyReroll(selectAdminItem);
info.func = GEMListAdminMenu_SetLeader_OnClick;
UIDropDownMenu_AddButton(info,1);
end
info = { };
info.text = CANCEL;
info.notCheckable = 1;
info.func = GEMListAdminMenu_Cancel_OnClick;
UIDropDownMenu_AddButton(info,1);
end
function GEMListAdminMenu_Cancel_OnClick()
HideDropDownMenu(1);
end
function GEMListAdminMenu_Whisper_OnClick()
local pl_name = this.value;
if(pl_name)
then
if(not ChatFrameEditBox:IsVisible())
then
ChatFrame_OpenChat("/w "..pl_name.." ");
else
ChatFrameEditBox:SetText("/w "..pl_name.." ");
end
ChatEdit_ParseText(ChatFrame1.editBox,0);
end
end
function GEMListAdminMenu_GroupInvite_OnClick()
local pl_name = this.value;
if(pl_name)
then
InviteByName(pl_name);
end
end
StaticPopupDialogs["GEM_KICK_DIALOG"] = {
text = TEXT(GEM_TEXT_ADMIN_KICK),
button1 = TEXT(ACCEPT),
button2 = TEXT(CANCEL),
hasEditBox = 1,
maxLetters = 100,
OnAccept = function()
local text = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GEM_COM_KickPlayer(this:GetParent().data.ev_id,this:GetParent().data.pl_name,text);
end,
EditBoxOnEnterPressed = function()
local text = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GEM_COM_KickPlayer(this:GetParent().data.ev_id,this:GetParent().data.pl_name,text);
end,
OnShow = function()
getglobal(this:GetName().."EditBox"):SetFocus();
end,
OnHide = function()
if ( ChatFrameEditBox:IsVisible() ) then
ChatFrameEditBox:SetFocus();
end
getglobal(this:GetName().."EditBox"):SetText("");
end,
timeout = 0,
exclusive = 1
};
function GEMListAdminMenu_Assistant_OnClick()
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil and selectAdminItem ~= nil and selectAdminItem ~= "")
then
GEM_COM_AddAssistant(event.id,selectAdminItem);
GEM_NotifyGUI(GEM_NOTIFY_MY_SUBSCRIPTION,selectEvent);
end
end
function GEMListAdminMenu_Kick_OnClick()
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil and selectAdminItem ~= nil and selectAdminItem ~= "")
then
local dialogFrame = StaticPopup_Show("GEM_KICK_DIALOG");
if(dialogFrame)
then
dialogFrame.data = { ev_id=event.id, pl_name=selectAdminItem };
end
end
end
StaticPopupDialogs["GEM_BAN_DIALOG"] = {
text = TEXT(GEM_TEXT_ADMIN_BAN),
button1 = TEXT(ACCEPT),
button2 = TEXT(CANCEL),
hasEditBox = 1,
maxLetters = 100,
OnAccept = function()
local text = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GEM_COM_BanPlayer(this:GetParent().data.ev_id,this:GetParent().data.pl_name,text);
end,
EditBoxOnEnterPressed = function()
local text = getglobal(this:GetParent():GetName().."EditBox"):GetText();
GEM_COM_BanPlayer(this:GetParent().data.ev_id,this:GetParent().data.pl_name,text);
end,
OnShow = function()
getglobal(this:GetName().."EditBox"):SetFocus();
end,
OnHide = function()
if ( ChatFrameEditBox:IsVisible() ) then
ChatFrameEditBox:SetFocus();
end
getglobal(this:GetName().."EditBox"):SetText("");
end,
timeout = 0,
exclusive = 1
};
function GEMListAdminMenu_Ban_OnClick()
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil and selectAdminItem ~= nil and selectAdminItem ~= "")
then
local dialogFrame = StaticPopup_Show("GEM_BAN_DIALOG");
if(dialogFrame)
then
dialogFrame.data = { ev_id=event.id, pl_name=selectAdminItem };
end
end
end
function GEMListAdminMenu_Forcetit_OnClick()
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil and selectAdminItem ~= nil and selectAdminItem ~= "")
then
if(GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].forcesub == 1) -- Was in replacement
then
GEM_SUB_RemoveFromReplacementList(event.id,selectAdminItem,GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].class);
GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].forcesub = 0;
GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].forcetit = 1;
elseif(GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].forcetit == 1) -- Was forced titular
then
GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].forcetit = 0;
elseif(GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].forcetit == 0) -- Was not forced titular
then
GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].forcetit = 1;
end
GEM_SUB_SortPlayers(event.id); -- Sort players
GEM_NotifyGUI(GEM_NOTIFY_EVENT_UPDATE,event.id); -- Redraw
end
end
function GEMListAdminMenu_Forcesub_OnClick()
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil and selectAdminItem ~= nil and selectAdminItem ~= "")
then
GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].forcetit = 0; -- Clear forcetit status
if(GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].forcesub == 1) -- Was in replacement
then
GEM_SUB_RemoveFromReplacementList(event.id,selectAdminItem,GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].class);
GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].forcesub = 0;
else -- Move to replacement
GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].forcesub = 1;
GEM_SUB_AddToReplacementList(event.id,selectAdminItem,GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].guild,GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].class,GEM_Events.realms[GEM_Realm].events[event.id].players[selectAdminItem].level);
end
GEM_SUB_SortPlayers(event.id); -- Sort players
GEM_NotifyGUI(GEM_NOTIFY_EVENT_UPDATE,event.id); -- Redraw
end
end
StaticPopupDialogs["GEM_CONFIRM_SETLEADER"] = {
text = TEXT(GEM_TEXT_ADMIN_SETLEADER_CONFIRM),
button1 = TEXT(OKAY),
button2 = TEXT(CANCEL),
OnAccept = function()
GEM_COM_ChangeLeader(this:GetParent().data.ev_id,this:GetParent().data.pl_name);
end,
timeout = 0
};
function GEMListAdminMenu_SetLeader_OnClick()
local event = GEM_Events.realms[GEM_Realm].events[selectEvent];
if(event ~= nil and selectAdminItem ~= nil and selectAdminItem ~= "")
then
local dialogFrame = StaticPopup_Show("GEM_CONFIRM_SETLEADER");
if(dialogFrame)
then
dialogFrame.data = { ev_id=event.id, pl_name=selectAdminItem };
end
end
end
--[[
List Functions
]]
function GEMList_InvertList(list)
local newlist = {};
local count = table.getn(list);
for i=1,count
do
table.insert(newlist,list[count+1-i]);
end
return newlist;
end
function GEMSetColumnWidth( width, frame )
if ( not frame ) then
frame = this;
end
frame:SetWidth(width);
getglobal(frame:GetName().."Middle"):SetWidth(width - 9);
end
function _GEMList_AddBanKickTooltip(event,lines)
if(GEM_Events.realms[GEM_Realm].banned[event.id] ~= nil)
then
return GEMList_AddTooltipText("|cff" .. "FF0000" .. GEM_TEXT_TOOLTIP_BANNED .. GEM_Events.realms[GEM_Realm].banned[event.id] .. "|r",lines,"FF0000");
elseif(GEM_Events.realms[GEM_Realm].kicked[event.id] ~= nil)
then
return GEMList_AddTooltipText("|cff" .. "800000" .. GEM_TEXT_TOOLTIP_KICKED .. GEM_Events.realms[GEM_Realm].kicked[event.id] .. "|r",lines,"800000");
end
return lines;
end
function _GEMList_AddClosedTooltip(event,lines)
if(GEM_Events.realms[GEM_Realm].events[event.id].closed_comment ~= nil)
then
return GEMList_AddTooltipText("|cff" .. "A0A0A0" .. GEM_TEXT_TOOLTIP_CLOSED .. GEM_Events.realms[GEM_Realm].events[event.id].closed_comment .. "|r",lines,"A0A0A0");
end
return lines;
end
local function _GEMList_AddTooltipLine(text,lines)
lines = lines + 1;
local tooltip = getglobal("GameTooltipTextLeft"..lines);
GameTooltip:AddLine(".");
tooltip:SetText(text);
return lines;
end
function GEMList_AddTooltipText(text,lines,multi_line_color)
local _GEM_MAX_TT_LINE_LENGTH = 100;
local added = false;
while(string.len(text) > _GEM_MAX_TT_LINE_LENGTH)
do
local add = 0;
while(string.byte(text,_GEM_MAX_TT_LINE_LENGTH+add) and string.byte(text,_GEM_MAX_TT_LINE_LENGTH+add) ~= 32)
do
add = add + 1;
end
if(string.byte(text,_GEM_MAX_TT_LINE_LENGTH+add) == nil) -- Don't create new line if we reach eol
then
break;
end
local submsg = string.sub(text,1,_GEM_MAX_TT_LINE_LENGTH+add);
if(added and multi_line_color)
then
submsg = "|cff"..multi_line_color..submsg;
end
lines = _GEMList_AddTooltipLine(submsg,lines);
added = true;
text = string.sub(text,_GEM_MAX_TT_LINE_LENGTH+add+1);
end
if(added and multi_line_color)
then
text = "|cff"..multi_line_color..text;
end
lines = _GEMList_AddTooltipLine(text,lines);
return lines;
end
function GEMList_EventOnHover()
local ev_id = this.eventid;
if (ev_id ~= nil and GEM_Events.realms[GEM_Realm].events[ev_id] ~= nil) then
local event = GEM_Events.realms[GEM_Realm].events[ev_id];
GameTooltip:SetOwner(this, "ANCHOR_CURSOR");
GameTooltip:ClearLines();
local color = "E0C010";
local color1 = "00AAFF";
local color2 = "E0C010";
local color3 = "FFFFFF";
if(event.closed_comment)
then
color = "706005";
color1 = "005588";
color2 = "706005";
color3 = "888888";
end
local lines = 0;
local alias = event.channel;
if(GEM_COM_Channels[event.channel] and GEM_COM_Channels[event.channel].alias and GEM_COM_Channels[event.channel].alias ~= "")
then
alias = GEM_COM_Channels[event.channel].alias;
end
lines = GEMList_AddTooltipText("|cff" .. color1 .. event.ev_place .. " |cff"..color3.."(" .. string.format(GEM_TEXT_EVT_CHANNEL,alias) .. ")|r",lines,color3);
lines = GEMList_AddTooltipText("|cff" .. color2 .. event.leader .. "|r (" .. GEM_ConvertDateFormat(date(GEM_Events.DateFormat,event.ev_date + GEM_ComputeHourOffset()))..")",lines);
if(event.ev_comment ~= "")
then
lines = GEMList_AddTooltipText("|cff" .. color3 .. GEM_TEXT_COMMENT .. " : "..event.ev_comment.."|r",lines,color3);
end
lines = _GEMList_AddBanKickTooltip(event,lines);
lines = _GEMList_AddClosedTooltip(event,lines);
GameTooltip:Show();
end
end
function GEMList_EventOnClick()
selectEvent = this.eventid;
GEMList_UpdateEventList();
if(GEMList_PreviousTab == 1) -- Details
then
GEMListDetails_OnShow();
elseif(GEMList_PreviousTab == 2) -- Limits
then
GEMListLimitations_OnShow();
elseif(GEMList_PreviousTab == 3) -- Admin
then
UIListAdminRefresh = true;
GEMListAdmin_UpdatePlayersList()
end
end
function GEMList_PredicateDate(a, b)
if (a.event.ev_date < b.event.ev_date) then
return true;
elseif (a.event.ev_date > b.event.ev_date) then
return false;
end
return GEMList_PredicateWhere(a, b);
end
function GEMList_PredicateWhere(a, b)
if (a.event.ev_place < b.event.ev_place) then
return true;
elseif (a.event.ev_place > b.event.ev_place) then
return false;
end
return GEMList_PredicateLeader(a, b);
end
function GEMList_PredicateLeader(a, b)
if (a.event.leader < b.event.leader) then
return true;
elseif (a.event.leader > b.event.leader) then
return false;
end
return GEMList_PredicateCount(a, b);
end
function GEMList_PredicateCount(a, b)
if (a.event.titular_count < b.event.titular_count) then
return true;
elseif (a.event.titular_count > b.event.titular_count) then
return false;
end
return GEMList_PredicateMinMax(a, b);
end
function GEMList_PredicateMinMax(a, b)
if (a.event.max_lvl < b.event.max_lvl) then
return true;
elseif (a.event.max_lvl > b.event.max_lvl) then
return false;
end
return false;
end
function GEMList_Predicate(a, b)
-- a ou b est nil
if (a == nil) then
if (b == nil) then
return false;
else
return true;
end
elseif (b == nil) then
return false;
end
GEM_SORTBY = {
[GEM_SORTBY_DATE] = GEMList_PredicateDate,
[GEM_SORTBY_WHERE] = GEMList_PredicateWhere,
[GEM_SORTBY_LEADER] = GEMList_PredicateLeader,
[GEM_SORTBY_COUNT] = GEMList_PredicateCount,
[GEM_SORTBY_MINMAX] = GEMList_PredicateMinMax
};
predicate = GEM_SORTBY[sortType];
return predicate(a,b);
end
function GEMList_SortBy(aSortType, aSortDir)
sortType = aSortType;
sortDir = aSortDir;
UIEventsRefresh = true;
GEMList_UpdateEventList();
end
function GEMList_GetEvent()
if(UIEventsRefresh)
then
UIEvents = {};
local selected = GEM_GetSelectedReroll();
local infos = GEM_Events.realms[GEM_Realm].my_names[selected];
for ev_id,event in GEM_Events.realms[GEM_Realm].events
do
if((GEM_Events.realms[GEM_Realm].ignore[event.id] == nil) and -- Not in ignore list
(GEM_Events.realms[GEM_Realm].my_names[GEM_PlayerName].FilterEvents == nil or GEM_IsMyReroll(event.leader) or (infos.level >= event.min_lvl and infos.level <= event.max_lvl))) -- And level is ok
then
tinsert(UIEvents, {id = ev_id; event = event});
end
end
table.sort(UIEvents, GEMList_Predicate);
if(not sortDir)
then
UIEvents = GEMList_InvertList(UIEvents);
end
UIEventsRefresh = false;
end
return UIEvents;
end
function GEM_ConvertDateFormat(df)
for src,dest in GEM_DATE_CONVERT
do
df = string.gsub(df,src,dest);
end
return df;
end
function GEM_IsNewEvent(id)
for _,n in GEM_NewEvents
do
if(n == id) then return true; end
end
return false;
end
function GEM_RemoveNewEvent(id)
for i,n in GEM_NewEvents
do
if(n == id) then tremove(GEM_NewEvents,i); return; end
end
end
function GEMList_UpdateEventList()
if(not GEMListFrame:IsVisible()) then
return;
end
local events = GEMList_GetEvent();
local size = table.getn(events);
local enable_subscribe = false;
local enable_unsubscribe = false;
local sel_event = nil;
local enableEventActions = false;
local enableClosedActions = false;
local offset = FauxScrollFrame_GetOffset(GEMEventItemScrollFrame);
numButtons = MAXDISPLAY_EVENT;
i = 1;
local selected = GEM_GetSelectedReroll();
local infos = GEM_Events.realms[GEM_Realm].my_names[selected];
while (i <= numButtons) do
local j = i + offset
local prefix = "GEMEventItem"..i;
local button = getglobal(prefix);
if (j <= size) then
local id = events[j].id;
local event = events[j].event;
local banned = GEM_Events.realms[GEM_Realm].banned[event.id] ~= nil;
local kicked = GEM_Events.realms[GEM_Realm].kicked[event.id] ~= nil;
local level_ok = infos.level >= event.min_lvl and infos.level <= event.max_lvl;
if(infos.level == 0) -- No level, set as OK
then
level_ok = true;
end
button.eventid = id;
getglobal(prefix.."Date"):SetText(GEM_ConvertDateFormat(date(GEM_Events.DateFormat,event.ev_date + GEM_ComputeHourOffset())));
getglobal(prefix.."Where"):SetText(event.ev_place);
getglobal(prefix.."Leader"):SetText(event.leader);
getglobal(prefix.."Date"):SetTextColor(0.9,0.8,0.10);
getglobal(prefix.."RangeLevel"):SetTextColor(1,1,1);
if(GEM_IsNewEvent(id))
then
getglobal(prefix.."Where"):SetTextColor(0,1,0);
else
getglobal(prefix.."Where"):SetTextColor(1,1,1);
end
if(GEM_IsPlayerConnected(event.channel,event.leader))
then
getglobal(prefix.."Leader"):SetTextColor(0,1,0);
else
getglobal(prefix.."Leader"):SetTextColor(1,1,1);
end
if(GEM_Events.realms[GEM_Realm].subscribed[event.id] ~= nil) -- I subscribed for this event
then
if(selectEvent == id) -- This event is the selected one
then
enable_unsubscribe = true;
getglobal("GEMListFrameForcesub"):Disable();
getglobal("GEMListFrameComment"):EnableKeyboard(0);
getglobal("GEMListFrameComment"):EnableMouse(0);
getglobal("GEMListFrameComment"):SetTextColor(0.5,0.5,0.5);
getglobal("GEMListFrameComment"):SetText(GEM_Events.realms[GEM_Realm].subscribed[event.id].comment);
if(GEM_Events.realms[GEM_Realm].subscribed[event.id].forcesub == 1)
then
getglobal("GEMListFrameForcesub"):SetChecked(1);
else
getglobal("GEMListFrameForcesub"):SetChecked(0);
end
getglobal("GEMListFrameCommentString"):SetTextColor(0.4,0.4,0.4);
getglobal("GEMListFrameForcesubString"):SetTextColor(0.4,0.4,0.4);
GEM_SetSelectedReroll(GEM_Events.realms[GEM_Realm].subscribed[event.id].name);
end
if(GEM_Events.realms[GEM_Realm].subscribed[event.id].state == "1") -- Titular
then
getglobal(prefix.."Count"):SetTextColor(0,1,0); -- Green
elseif(GEM_Events.realms[GEM_Realm].subscribed[event.id].state == "2") -- Substitute
then
getglobal(prefix.."Count"):SetTextColor(0.2,0.2,1); -- Blue
elseif(GEM_Events.realms[GEM_Realm].subscribed[event.id].state == "3") -- Replacement
then
getglobal(prefix.."Count"):SetTextColor(0.8,0.8,0); -- Yellow
else -- Not Acked
getglobal(prefix.."Count"):SetTextColor(0.3,0.3,0.3); -- Dark Grey
end
elseif(GEM_IsMyReroll(event.leader)) -- I'm the leader
then
getglobal(prefix.."Count"):SetTextColor(0,1,0);
if(selectEvent == id) -- This event is the selected one
then
getglobal("GEMListFrameForcesub"):Disable();
getglobal("GEMListFrameComment"):EnableKeyboard(0);
getglobal("GEMListFrameComment"):EnableMouse(0);
getglobal("GEMListFrameComment"):SetTextColor(0.6,0.6,0.6);
getglobal("GEMListFrameComment"):SetText("");
getglobal("GEMListFrameForcesub"):SetChecked(0);
getglobal("GEMListFrameCommentString"):SetTextColor(0.4,0.4,0.4);
getglobal("GEMListFrameForcesubString"):SetTextColor(0.4,0.4,0.4);
end
else -- Not subscribed
if(selectEvent == id) -- This event is the selected one
then
if(not banned and level_ok) -- Not banned, and level range is ok
then
enable_subscribe = true;
end
getglobal("GEMListFrameForcesub"):Enable();
getglobal("GEMListFrameComment"):EnableKeyboard(1);
getglobal("GEMListFrameComment"):EnableMouse(1);
getglobal("GEMListFrameComment"):SetTextColor(1,1,1);
getglobal("GEMListFrameComment"):SetText("");
getglobal("GEMListFrameForcesub"):SetChecked(0);
getglobal("GEMListFrameCommentString"):SetTextColor(0.90,0.75,0);
getglobal("GEMListFrameForcesubString"):SetTextColor(0.90,0.75,0);
end
if(banned)
then
getglobal(prefix.."Count"):SetTextColor(1,0,0);
elseif(kicked)
then
getglobal(prefix.."Count"):SetTextColor(0.5,0,0);
elseif(not level_ok)
then
getglobal(prefix.."Count"):SetTextColor(0.7,0,0.8);
else
getglobal(prefix.."Count"):SetTextColor(1,1,1);
end
end
local subs = table.getn(event.substitutes);
if(subs ~= 0)
then
getglobal(prefix.."Count"):SetText(event.titular_count.."/"..event.max_count.." ("..subs..")");
else
getglobal(prefix.."Count"):SetText(event.titular_count.."/"..event.max_count);
end
getglobal(prefix.."RangeLevel"):SetText(event.min_lvl.." - "..event.max_lvl);
button:Show();
if(event.closed_comment)
then
getglobal(prefix.."Date"):SetTextColor(0.5,0.5,0.5);
getglobal(prefix.."Where"):SetTextColor(0.5,0.5,0.5);
getglobal(prefix.."Leader"):SetTextColor(0.5,0.5,0.5);
getglobal(prefix.."Count"):SetTextColor(0.5,0.5,0.5);
getglobal(prefix.."RangeLevel"):SetTextColor(0.5,0.5,0.5);
end
-- selected
if (selectEvent == id) then
button:LockHighlight();
sel_event = event;
if(event.closed_comment) then
enableClosedActions = true;
else
enableEventActions = true;
end
else
button:UnlockHighlight();
end
else
button.eventid = nil;
button:Hide();
end
i = i + 1;
end
FauxScrollFrame_Update(GEMEventItemScrollFrame, size, MAXDISPLAY_EVENT, 17);
if (enableEventActions) then
GEMListFrameCommentString:Show();
GEMListFrameForcesubString:Show();
GEMListFrameComment:Show();
GEMListFrameForcesub:Show();
GEMList_Middle_ShowFrame();
GEMListFrameSubscribe:Show();
GEMListFrameUnsubscribe:Show();
GEMListFrameRerollDropDown:Show();
GEMListFrameUnclose:Hide();
GEMListFrameEventIgnore:Hide();
GEMListFrameDelete:Hide();
GEMListFrameRecover:Hide();
GEMListFrameUnsubscribe:Disable();
GEMListFrameSubscribe:Disable();
if(enable_subscribe) then
GEMListFrameSubscribe:Enable();
end
if(enable_unsubscribe) then
GEMListFrameUnsubscribe:Enable();
end
else
GEMListFrameCommentString:Hide();
GEMListFrameForcesubString:Hide();
GEMListFrameComment:Hide();
GEMListFrameForcesub:Hide();
GEMListMiddleFrame:Hide();
GEMListFrameSubscribe:Hide();
GEMListFrameUnsubscribe:Hide();
GEMListFrameRerollDropDown:Hide();
GEMListFrameUnclose:Hide();
GEMListFrameEventIgnore:Hide();
GEMListFrameDelete:Hide();
GEMListFrameRecover:Hide();
if(enableClosedActions) then
if(sel_event.crashed) then
if(not GEM_EVT_CheckExpiredEvent(sel_event.id) and GEM_IsChannelJoined(sel_event.channel)) then
GEMListFrameRecover:Show();
end
elseif(GEM_IsMyReroll(sel_event.leader) and not GEM_EVT_CheckExpiredEvent(sel_event.id) and GEM_IsChannelJoined(sel_event.channel)) then
GEMListFrameUnclose:Show();
GEMListFrameDelete:Show();
else
GEMListFrameEventIgnore:Show();
end
else
GEMListFrameUnclose:Hide();
GEMListFrameEventIgnore:Hide();
GEMListFrameDelete:Hide();
GEMListFrameRecover:Hide();
end
end
GEM_NewEvents = {};
end
function GEMList_SubscribeOnClick()
if (selectEvent and not GEM_EVT_CheckExpiredEvent(selectEvent)) then
local forcesub = GEMListFrameForcesub:GetChecked();
if(forcesub == nil) then forcesub = 0; end;
GEM_COM_Subscribe(selectEvent,forcesub,string.gsub(GEMListFrameComment:GetText(),"[%c]"," "));
end
end
function GEMList_UnsubscribeOnClick()
if (selectEvent and not GEM_EVT_CheckExpiredEvent(selectEvent)) then
GEM_COM_Unsubscribe(selectEvent,"Test unsubscribe comment");
end
end
function GEMList_UncloseOnClick()
if (selectEvent and not GEM_EVT_CheckExpiredEvent(selectEvent)) then
GEM_EVT_UnCloseEvent(selectEvent);
GEM_NotifyGUI(GEM_NOTIFY_EVENT_UPDATE,selectEvent);
end
end
StaticPopupDialogs["GEM_CONFIRM_DELETEEVENT"] = {
text = TEXT(GEM_TEXT_DELETE_CONFIRM),
button1 = TEXT(OKAY),
button2 = TEXT(CANCEL),
OnAccept = function()
local event = GEM_Events.realms[GEM_Realm].events[this:GetParent().data.ev_id];
if(event ~= nil)
then
event.ev_date = time() - GEM_ExpirationTimeSelf * 2;
event.update_time = time();
GEM_COM_BroadcastEvent(event); -- Force brodcast (or it will be deleted before update)
GEM_NotifyGUI(GEM_NOTIFY_EVENT_UPDATE,event.id);
end
end,
timeout = 0
};
function GEMList_DeleteOnClick()
if (selectEvent and not GEM_EVT_CheckExpiredEvent(selectEvent)) then
local dialogFrame = StaticPopup_Show("GEM_CONFIRM_DELETEEVENT");
if(dialogFrame)
then
dialogFrame.data = { ev_id=selectEvent };
end
end
end
function GEMList_RecoverOnClick()
if (selectEvent and not GEM_EVT_CheckExpiredEvent(selectEvent)) then
if(GEM_SUB_RecoverSubscribers(selectEvent)) then
GEM_EVT_UnCloseEvent(selectEvent);
GEM_NotifyGUI(GEM_NOTIFY_EVENT_UPDATE,selectEvent);
GEM_ChatPrint("Event recovered using known informations !");
else
GEM_ChatPrint("Failed to recover the event !");
end
end
end
--
function GEM_SetSelectedReroll(pl_name)
if(GEM_Events.realms[GEM_Realm].my_names[pl_name] == nil)
then
return;
end
getglobal("GEMListFrameRerollDropDown").name = pl_name;
getglobal("GEMNewRerollDropDown").name = pl_name;
UIDropDownMenu_SetText(pl_name,GEMListFrameRerollDropDown);
end
function GEM_GetSelectedReroll()
local name;
if(GEMNewRerollDropDown:IsVisible())
then
name = getglobal("GEMNewRerollDropDown").name;
else
name = getglobal("GEMListFrameRerollDropDown").name;
end
if(name == nil)
then
name = GEM_PlayerName;
end
if(GEM_Events.realms[GEM_Realm].my_names[name] == nil)
then
GEM_ChatPrint("GEM_GetSelectedReroll : WARNING : my_names not initialized for "..name);
return nil;
end
if(GEM_Events.realms[GEM_Realm].my_names[GEM_PlayerName].guild == nil or GEM_Events.realms[GEM_Realm].my_names[GEM_PlayerName].guild == "")
then
GEM_Events.realms[GEM_Realm].my_names[GEM_PlayerName].guild = GetGuildInfo("player");
GEM_Events.realms[GEM_Realm].my_names[GEM_PlayerName].level = UnitLevel("player");
end
return name;
end
function GEMListFrameRerollDropDown_OnShow()
if(getglobal("GEMListFrameRerollDropDown").name == nil)
then
getglobal("GEMListFrameRerollDropDown").name = GEM_PlayerName;
end
UIDropDownMenu_Initialize(GEMListFrameRerollDropDown, GEMListFrameRerollDropDown_Init);
UIDropDownMenu_SetText(getglobal("GEMListFrameRerollDropDown").name, GEMListFrameRerollDropDown);
UIDropDownMenu_SetWidth(80, GEMListFrameRerollDropDown);
end
function GEMListFrameRerollDropDown_OnClick()
getglobal("GEMListFrameRerollDropDown").name = this.value;
getglobal("GEMNewRerollDropDown").name = this.value;
UIDropDownMenu_SetText(this.value,GEMListFrameRerollDropDown);
GEMList_Notify(GEM_NOTIFY_MY_SUBSCRIPTION,""); -- Force update of the list
end
function GEMListFrameRerollDropDown_OnClickBadValue()
GEM_ChatPrint(GEM_TEXT_REROLL_ERR_SELECT);
end
function GEMListFrameRerollDropDown_Init()
for name,tab in GEM_Events.realms[GEM_Realm].my_names do
local info = { };
info.text = name;
info.value = name;
if(not GEM_IsChannelInRerollList(name,GEM_GetSelectedChannel()))
then
info.disabled = 1;
info.func = GEMListFrameRerollDropDown_OnClickBadValue;
else
info.func = GEMListFrameRerollDropDown_OnClick;
end
UIDropDownMenu_AddButton(info);
end
end
function GEMList_OnShow()
GEM_EVT_CheckExpiredEvents();
GEMList_UpdateEventList();
end
function GEMList_OnLoad()
GEM_SetNotifyCallback(GEMList_Notify);
end
local function _GEMList_RefreshLists(ev_id)
if(ev_id == nil or ev_id == "")
then
ev_id = selectEvent;
end
if(ev_id ~= nil and GEM_Events.realms[GEM_Realm].events[ev_id] == nil) -- id no longer exists
then
selectEvent = nil;
end
UIEventsRefresh = true;
GEMList_UpdateEventList();
if(ev_id == selectEvent) -- Event selected
then
if(GEMList_PreviousTab == 1) -- Details
then
GEMListDetails_OnShow();
elseif(GEMList_PreviousTab == 2) -- Limits
then
GEMListLimitations_OnShow();
elseif(GEMList_PreviousTab == 3) -- Admin
then
UIListAdminRefresh = true;
GEMListAdmin_UpdatePlayersList()
end
end
end
local _GEMList_Blink = true;
function GEMList_NotifyNewEvent()
if(table.getn(GEM_NewEvents) == 0) -- Reset texture
then
GEMMinimapButtonText:SetText("");
GEMMinimapButtonTexture:SetAlpha(1);
return;
end
GEMMinimapButtonText:SetText("N");
if(_GEMList_Blink)
then
_GEMList_Blink = false;
GEMMinimapButtonTexture:SetAlpha(0.7);
else
_GEMList_Blink = true;
GEMMinimapButtonTexture:SetAlpha(1);
end
GEMSystem_Schedule(1,GEMList_NotifyNewEvent);
end
function GEMList_Notify(cmd,...)
if(cmd == GEM_NOTIFY_NEW_EVENT) then
UIEventsRefresh = true;
GEMList_UpdateEventList();
GEM_ChatDebug(GEM_DEBUG_GUI,"GEMList_Notify : New Event : "..arg[1]);
if(not GEMMainFrame:IsVisible()) then
if(not GEM_IsNewEvent(arg[1]))
then
tinsert(GEM_NewEvents,arg[1]);
if(table.getn(GEM_NewEvents) == 1) -- Start schedule if first new event
then
GEMSystem_Schedule(1,GEMList_NotifyNewEvent);
_GEMList_Blink = true;
end
end
end
elseif(cmd == GEM_NOTIFY_CLOSE_EVENT) then
UIEventsRefresh = true;
GEMList_UpdateEventList();
GEM_ChatDebug(GEM_DEBUG_GUI,"GEMList_Notify : Close Event : "..arg[1]);
elseif(cmd == GEM_NOTIFY_EVENT_UPDATE) then
GEM_ChatDebug(GEM_DEBUG_GUI,"GEMList_Notify : Update Event : "..arg[1]);
_GEMList_RefreshLists(arg[1]);
elseif(cmd == GEM_NOTIFY_SUBSCRIBER) then
GEM_ChatDebug(GEM_DEBUG_GUI,"GEMList_Notify : My subscription changed for "..arg[1]);
_GEMList_RefreshLists(arg[1]);
elseif(cmd == GEM_NOTIFY_UNSUBSCRIBER) then
GEM_ChatDebug(GEM_DEBUG_GUI,"GEMList_Notify : My subscription changed for "..arg[1]);
_GEMList_RefreshLists(arg[1]);
elseif(cmd == GEM_NOTIFY_MY_SUBSCRIPTION) then
GEM_ChatDebug(GEM_DEBUG_GUI,"GEMList_Notify : My subscription changed for "..arg[1]);
_GEMList_RefreshLists(arg[1]);
elseif(cmd == GEM_NOTIFY_PLAYER_INFOS) then
if(GEMPlayersFrame:IsVisible()) -- Players list
then
GEMPlayers_UpdatePlayersList();
end
end
end
--[[
Banned list Functions
]]
local MAXDISPLAY_BANS = 10;
local selectBannedItem = nil;
local function GEMListBanned_GetList()
local bans = {};
for name,reason in GEM_Events.realms[GEM_Realm].events[GEMListBannedFrame.Event].banned do
table.insert(bans,{Name=name, Reason=reason });
end
return bans;
end
function GEMListBanned_UpdatePlayersList()
if(not GEMListBannedFrame:IsVisible()) then
return;
end
local list = GEMListBanned_GetList();
local size = table.getn(list);
local offset = FauxScrollFrame_GetOffset(GEMListBannedItemScrollFrame);
numButtons = MAXDISPLAY_BANS;
i = 1;
GEMListBanned_UnBan:Disable();
while (i <= numButtons) do
local j = i + offset
local prefix = "GEMListBannedItem"..i;
local button = getglobal(prefix);
if (j <= size) then
button.pl_name = list[j].Name;
getglobal(prefix.."Name"):SetText(list[j].Name);
getglobal(prefix.."Reason"):SetText(list[j].Reason);
button:Show();
-- selected
if (selectBannedItem == list[j].Name) then
button:LockHighlight();
if(GEM_IsMyReroll(GEM_Events.realms[GEM_Realm].events[GEMListBannedFrame.Event].leader)) then
GEMListBanned_UnBan:Enable();
end
else
button:UnlockHighlight();
end
else
button.pl_name = nil;
button:Hide();
end
i = i + 1;
end
FauxScrollFrame_Update(GEMListBannedItemScrollFrame, size, MAXDISPLAY_BANS, 17);
end
function GEMListBannedUnBan_OnClick()
if(selectBannedItem ~= nil and selectBannedItem ~= "")
then
GEM_COM_UnBanPlayer(GEMListBannedFrame.Event,selectBannedItem);
GEMListBanned_UpdatePlayersList();
end
end
function GEMListBanned_EventOnClick()
selectBannedItem = this.pl_name;
GEMListBanned_UpdatePlayersList();
end
function GEMListBanned_OnShow()
GEMListBanned_UpdatePlayersList();
end
----------------------------- CALENDAR ---------------------------
local _GEMEventCalendar_CurrentMonth = nil;
local _GEMEventCalendar_CurrentYear = nil;
local _GEMEventCalendar_CurrentReset = 0;
function GEMEventCalendarResetsDropDown_OnShow()
UIDropDownMenu_Initialize(GEMListFrameCalViewResetsDropDown, GEMEventCalendarResetsDropDown_Init);
UIDropDownMenu_SetText(GEM_EVENT_CALENDAR_Resets[_GEMEventCalendar_CurrentReset].name, GEMListFrameCalViewResetsDropDown);
UIDropDownMenu_SetWidth(80, GEMListFrameCalViewResetsDropDown);
end
function GEMEventCalendarResetsDropDown_OnClick()
_GEMEventCalendar_CurrentReset = this.value;
if(this.value == 0)
then
UIDropDownMenu_SetText(GEM_EVENT_CALENDAR_INSTANCE_NONE_NAME, GEMListFrameCalViewResetsDropDown);
else
UIDropDownMenu_SetText(GEM_EVENT_CALENDAR_Resets[_GEMEventCalendar_CurrentReset].name,GEMListFrameCalViewResetsDropDown);
end
GEMEventCalendar_OnShow(getglobal("GEMListFrameCalViewCal"));
end
function GEMEventCalendarResetsDropDown_Init()
local info = { };
info.text = GEM_EVENT_CALENDAR_INSTANCE_NONE_NAME;
info.value = 0;
info.func = GEMEventCalendarResetsDropDown_OnClick;
UIDropDownMenu_AddButton(info);
for i,tab in GEM_EVENT_CALENDAR_Resets do
local info = { };
info.text = tab.name;
info.value = i;
info.func = GEMEventCalendarResetsDropDown_OnClick;
UIDropDownMenu_AddButton(info);
end
end
function GEMListCalendarCheckBox_OnClick()
if(GEMListCalendarCheckBox:GetChecked()) -- Calendar view
then
GEMListFrameListView:Hide();
GEMListFrameCalView:Show();
else
GEMListFrameCalView:Hide();
GEMListFrameListView:Show();
end
end
function GEMEventCalendar_OnShow(parent)
local tab = date("*t");
if(_GEMEventCalendar_CurrentMonth == nil)
then
_GEMEventCalendar_CurrentMonth = tab.month;
_GEMEventCalendar_CurrentYear = tab.year;
_GEMEventCalendar_CurrentReset = 0;
end
tab.month = _GEMEventCalendar_CurrentMonth;
tab.year = _GEMEventCalendar_CurrentYear;
GEMListFrameCalViewMonthYear:SetText(GEMCalendar_Month[tab.month].." ".._GEMEventCalendar_CurrentYear);
GEMEventCalendar_DrawDays(parent,time(tab),_GEMEventCalendar_CurrentReset);
end
function GEMEventCalendar_PreviousMonth()
_GEMEventCalendar_CurrentMonth = _GEMEventCalendar_CurrentMonth - 1;
if(_GEMEventCalendar_CurrentMonth == 0)
then
_GEMEventCalendar_CurrentYear = _GEMEventCalendar_CurrentYear - 1;
_GEMEventCalendar_CurrentMonth = 12;
end
GEMEventCalendar_OnShow(getglobal("GEMListFrameCalViewCal"));
end
function GEMEventCalendar_NextMonth()
_GEMEventCalendar_CurrentMonth = _GEMEventCalendar_CurrentMonth + 1;
if(_GEMEventCalendar_CurrentMonth == 13)
then
_GEMEventCalendar_CurrentYear = _GEMEventCalendar_CurrentYear + 1;
_GEMEventCalendar_CurrentMonth = 1;
end
GEMEventCalendar_OnShow(getglobal("GEMListFrameCalViewCal"));
end