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
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();
|