local ex = Examiner;
local cfg;
-- Module
local mod = ex:CreateModule("More","Module List");
mod.help = "Show more modules\nShift click for last active page";
mod:CreatePage(false,"Module List");
mod:HasButton(true);
-- Variables
local NUM_BUTTONS = 8;
local BUTTON_HEIGHT = (mod.page:GetHeight() - 47) / NUM_BUTTONS;
local shownMods = {};
local buttons = {};
--------------------------------------------------------------------------------------------------------
-- Module Scripts --
--------------------------------------------------------------------------------------------------------
-- OnInitialize
function mod:OnInitialize()
cfg = ex.cfg;
self:BuildModuleList();
end
-- OnInspect
function mod:OnInspect(unit)
self:BuildModuleList();
end
-- OnInspectReady
function mod:OnInspectReady(unit)
self:BuildModuleList();
end
-- OnCacheLoaded
function mod:OnCacheLoaded(entry,unit)
self:BuildModuleList();
end
-- OnClearInspect
function mod:OnClearInspect()
self:BuildModuleList();
end
-- OnPageChanged
function mod:OnPageChanged(module,shown)
if (self == module) then
self:BuildModuleList();
end
end
-- OnButtonClick
function mod:OnButtonClick(frame,button)
-- Left -- with shift pressed, show the last active mod page
if (button == "LeftButton") then
if (IsShiftKeyDown()) then
ex:ShowModulePage(cfg.lastActivatedModule);
end
-- Right -- if the active mod has a dropdown menu, show that
elseif (button == "RightButton") then
local module = ex.modules[cfg.activePage];
if (module) and (not IsModifierKeyDown()) then
if (module.MenuInit and module.MenuSelect) then
frame.initFunc = module.MenuInit;
frame.selectValueFunc = module.MenuSelect;
AzDropDown:ToggleMenu(frame,"TOPLEFT","BOTTOMLEFT");
end
end
end
end
--------------------------------------------------------------------------------------------------------
-- Widget Scripts --
--------------------------------------------------------------------------------------------------------
-- Button: OnClick -- 99% identical to modcode's "Buttons_OnClick"
local function Button_OnClick(self,button,down)
local id = self.id;
local module = ex.modules[id];
if (module.hasData) then
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON); -- "igMainMenuOptionCheckBoxOn"
cfg.lastActivatedModule = id;
-- Call Module OnButtonClick
if (module.OnButtonClick) then
module:OnButtonClick(self,button,down);
end
-- Unmodified Left Clicks
if (not IsModifierKeyDown()) then
if (button == "LeftButton") and (module.page) then
ex:ShowModulePage(id);
AzDropDown:HideMenu();
elseif (module.MenuInit and module.MenuSelect) then
self.initFunc = module.MenuInit;
self.selectValueFunc = module.MenuSelect;
AzDropDown:ToggleMenu(self,"TOPLEFT","BOTTOMLEFT");
end
end
end
end
--------------------------------------------------------------------------------------------------------
-- Code --
--------------------------------------------------------------------------------------------------------
-- Update
local function UpdateShownItems(self)
FauxScrollFrame_Update(self,#shownMods,NUM_BUTTONS,BUTTON_HEIGHT);
local index = self.offset;
for i = 1, NUM_BUTTONS do
index = (index + 1);
local btn = buttons[i];
local mod = shownMods[index];
if (mod) then
btn.name:SetText(mod.title or mod.token);
btn.id = mod.index;
if (mod.hasData) then
btn.name:SetTextColor(0.5,1,0.5);
else
btn.name:SetTextColor(1,0.5,0.5);
end
btn.icon:SetTexture("Interface\\Icons\\Trade_Engineering");
btn:Show();
else
btn:Hide();
end
end
end
-- Build list of modules which has a page but no button
function mod:BuildModuleList()
wipe(shownMods);
for index, module in ipairs(ex.modules) do
if (module.page) and (not module.button) then
shownMods[#shownMods + 1] = module;
end
end
UpdateShownItems(self.scroll);
end
--------------------------------------------------------------------------------------------------------
-- Widget Creation --
--------------------------------------------------------------------------------------------------------
-- Buttons
for i = 1, NUM_BUTTONS do
local btn = CreateFrame("Button",nil,mod.page);
btn:SetHeight(BUTTON_HEIGHT);
btn:RegisterForClicks("LeftButtonDown","RightButtonDown");
btn:SetHighlightTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight");
btn:Hide();
if (#buttons == 0) then
btn:SetPoint("TOPLEFT",8,-36.5);
btn:SetPoint("TOPRIGHT",-28,-36.5);
else
btn:SetPoint("TOPLEFT",buttons[#buttons],"BOTTOMLEFT");
btn:SetPoint("TOPRIGHT",buttons[#buttons],"BOTTOMRIGHT");
end
btn:SetScript("OnClick",Button_OnClick);
-- btn:SetScript("OnEnter",nil);
-- btn:SetScript("OnLeave",ex.HideGTT);
btn.icon = btn:CreateTexture(nil,"ARTWORK");
btn.icon:SetSize(BUTTON_HEIGHT - 2,BUTTON_HEIGHT - 2);
btn.icon:SetPoint("LEFT",2,0);
btn.icon:SetTexCoord(0.07,0.93,0.07,0.93);
btn.icon:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark");
btn.val = btn:CreateFontString(nil,"ARTWORK","GameFontHighlight");
btn.val:SetPoint("RIGHT",-4,0);
btn.val:SetTextColor(1,1,0);
btn.name = btn:CreateFontString(nil,"ARTWORK","GameFontHighlight");
btn.name:SetPoint("LEFT",btn.icon,"RIGHT",3,0);
btn.name:SetPoint("RIGHT",btn.val,"LEFT",-8,0);
btn.name:SetJustifyH("LEFT");
buttons[i] = btn;
end
-- Scroll
mod.scroll = CreateFrame("ScrollFrame","Examiner"..mod.token.."Scroll",mod.page,"FauxScrollFrameTemplate");
mod.scroll:SetPoint("TOPLEFT",buttons[1]);
mod.scroll:SetPoint("BOTTOMRIGHT",buttons[NUM_BUTTONS],-6,-1);
mod.scroll:SetScript("OnVerticalScroll",function(self,offset) FauxScrollFrame_OnVerticalScroll(self,offset,BUTTON_HEIGHT,UpdateShownItems) end);