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