You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
4.5 KiB

5 years ago
--imports
local WIM = WIM;
local _G = _G;
local select = select;
local table = table;
local unpack = unpack;
local string = string;
local pairs = pairs;
--set namespace
setfenv(1, WIM);
db_defaults.expose = {
combat = true,
groupOnly = false,
border = false,
borderSize = 20,
direction = 1,
protect = 1,
};
local Expose = WIM.CreateModule("Expose", true);
local inCombat = false;
local isWaiting = false;
function Expose:VARIABLES_LOADED()
-- add menu option inside of Minimap's menu.
local minimapMenu = GetContextMenu("MENU_MINIMAP");
local info = _G.UIDropDownMenu_CreateInfo();
info.text = (db.expose.combat and L["Disable"] or L["Enable"]).." Expose";
info.func = function()
db.expose.combat = not db.expose.combat;
GetContextMenu("ENABLE_DISABLE_EXPOSE").text = db.expose.combat and L["Disable"].." Expose" or L["Enable"].." Expose";
end
info.notCheckable = true;
minimapMenu:AddSubItem(AddContextMenu("ENABLE_DISABLE_EXPOSE", info));
end
function Expose:OnStateChange(state, combatFlag)
--if(1) then return; end -- not ready for release.
if(db and db.expose and db.expose.combat) then
if(db.expose.groupOnly) then
-- check if in group, if not, return.
if(not _G.IsInInstance()) then
return;
end
end
isWaiting = false;
if(combatFlag) then
--entered combat
if(db.expose.protect) then
if(EditBoxInFocus and EditBoxInFocus:GetText() ~= "") then
isWaiting = true;
return;
end
end
HideContainer(db and db.winAnimation);
inCombat = true;
-- DisplayTutorial(L["Expose"].."?!", L["Your conversations have been hidden in order to clear your screen while in combat. To disable this feature type"].." |cff69ccf0/wim|r");
elseif(inCombat) then
--left combat
ShowContainer(db and db.winAnimation);
end
end
end
local exposeFrame = _G.CreateFrame("Frame", "WIM_UIParent_Expose", _G.UIParent);
exposeFrame:SetFrameStrata("BACKGROUND");
exposeFrame:SetAllPoints();
exposeFrame.top = exposeFrame:CreateTexture("BACKGROUND");
exposeFrame.top:SetColorTexture(0, 0, 0, .5);
exposeFrame.bottom = exposeFrame:CreateTexture("BACKGROUND");
exposeFrame.bottom:SetColorTexture(0, 0, 0, .5);
exposeFrame.left = exposeFrame:CreateTexture("BACKGROUND");
exposeFrame.left:SetColorTexture(0, 0, 0, .5);
exposeFrame.right = exposeFrame:CreateTexture("BACKGROUND");
exposeFrame.right:SetColorTexture(0, 0, 0, .5);
exposeFrame:SetAlpha(0);
local function AnimAlpha(self, fraction)
return fraction;
end
local AnimTable = {
totalTime = 0.3,
updateFunc = "SetAlpha",
getPosFunc = AnimAlpha,
}
function Expose:OnContainerShow()
if(db.expose.border) then
exposeFrame:Show();
WIM.SetUpAnimation(exposeFrame, AnimTable, function(self) self:SetAlpha(0); end, true);
else
exposeFrame:Hide();
end
end
local function hasVisibleChildren()
local ui = _G.WIM_UIParent
for i=1,ui:GetNumChildren() do
local child = select(i, ui:GetChildren())
if child.isWimWindow and child:IsVisible() then return true end
end
end
function Expose:OnContainerHide()
if(db.expose.border and hasVisibleChildren()) then
exposeFrame:Show();
exposeFrame.top:SetPoint("TOPLEFT", exposeFrame, "TOPLEFT", 0, 0);
exposeFrame.top:SetPoint("BOTTOMRIGHT", exposeFrame, "TOPRIGHT", 0, -(db.expose.borderSize));
exposeFrame.bottom:SetPoint("BOTTOMLEFT", exposeFrame, "BOTTOMLEFT", 0, 0);
exposeFrame.bottom:SetPoint("TOPRIGHT", exposeFrame, "BOTTOMRIGHT", 0, db.expose.borderSize);
exposeFrame.left:SetPoint("TOPLEFT", exposeFrame.top, "BOTTOMLEFT", 0, 0);
exposeFrame.left:SetPoint("BOTTOMRIGHT", exposeFrame.bottom, "TOPLEFT", db.expose.borderSize, 0);
exposeFrame.right:SetPoint("TOPRIGHT", exposeFrame.top, "TOPRIGHT", 0, 0);
exposeFrame.right:SetPoint("BOTTOMLEFT", exposeFrame.bottom, "TOPRIGHT", -(db.expose.borderSize), 0);
WIM.SetUpAnimation(exposeFrame, AnimTable, function(self) self:SetAlpha(1); end, false);
else
exposeFrame:Hide();
end
end
-- delay expose if currently typing
-- no longer typing, trigger expose.
RegisterWidgetTrigger("msg_box", "whisper,chat,w2w", "OnEditFocusLost", function(self)
if(isWaiting) then
WIM:PLAYER_ENTERING_WORLD(); -- hack to refresh states.
end
end);
-- This module will always remain running.
Expose.canDisable = false;
Expose:Enable();