initial commit
This commit is contained in:
423
Layout/Layout.lua
Normal file
423
Layout/Layout.lua
Normal file
@@ -0,0 +1,423 @@
|
||||
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
||||
local LO = E:GetModule('Layout')
|
||||
local DT = E:GetModule('DataTexts')
|
||||
local CH = E:GetModule('Chat')
|
||||
|
||||
local _G = _G
|
||||
local CreateFrame = CreateFrame
|
||||
local FCF_SavePositionAndDimensions = FCF_SavePositionAndDimensions
|
||||
-- GLOBALS: HideLeftChat, HideRightChat, HideBothChat
|
||||
|
||||
local BAR_HEIGHT = 22
|
||||
local TOGGLE_WIDTH = 18
|
||||
|
||||
local function Panel_OnShow(self)
|
||||
self:SetFrameLevel(200)
|
||||
self:SetFrameStrata('BACKGROUND')
|
||||
end
|
||||
|
||||
function LO:Initialize()
|
||||
LO.Initialized = true
|
||||
LO:CreateChatPanels()
|
||||
LO:CreateMinimapPanels()
|
||||
LO:SetDataPanelStyle()
|
||||
|
||||
LO.BottomPanel = CreateFrame('Frame', 'ElvUI_BottomPanel', E.UIParent, 'BackdropTemplate')
|
||||
LO.BottomPanel:SetTemplate('Transparent')
|
||||
LO.BottomPanel:Point('BOTTOMLEFT', E.UIParent, 'BOTTOMLEFT', -1, -1)
|
||||
LO.BottomPanel:Point('BOTTOMRIGHT', E.UIParent, 'BOTTOMRIGHT', 1, -1)
|
||||
LO.BottomPanel:Height(BAR_HEIGHT)
|
||||
LO.BottomPanel:SetScript('OnShow', Panel_OnShow)
|
||||
E.FrameLocks.ElvUI_BottomPanel = true
|
||||
Panel_OnShow(LO.BottomPanel)
|
||||
LO:BottomPanelVisibility()
|
||||
|
||||
LO.TopPanel = CreateFrame('Frame', 'ElvUI_TopPanel', E.UIParent, 'BackdropTemplate')
|
||||
LO.TopPanel:SetTemplate('Transparent')
|
||||
LO.TopPanel:Point('TOPLEFT', E.UIParent, 'TOPLEFT', -1, 1)
|
||||
LO.TopPanel:Point('TOPRIGHT', E.UIParent, 'TOPRIGHT', 1, 1)
|
||||
LO.TopPanel:Height(BAR_HEIGHT)
|
||||
LO.TopPanel:SetScript('OnShow', Panel_OnShow)
|
||||
Panel_OnShow(LO.TopPanel)
|
||||
E.FrameLocks.ElvUI_TopPanel = true
|
||||
LO:TopPanelVisibility()
|
||||
end
|
||||
|
||||
function LO:BottomPanelVisibility()
|
||||
LO.BottomPanel:SetShown(E.db.general.bottomPanel)
|
||||
end
|
||||
|
||||
function LO:TopPanelVisibility()
|
||||
LO.TopPanel:SetShown(E.db.general.topPanel)
|
||||
end
|
||||
|
||||
local function finishFade(self)
|
||||
if self:GetAlpha() == 0 then
|
||||
self:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
local function fadeChatPanel(self, duration, alpha)
|
||||
if alpha == 1 then
|
||||
self.parent:Show()
|
||||
end
|
||||
|
||||
E:UIFrameFadeOut(self.parent, duration, self.parent:GetAlpha(), alpha)
|
||||
|
||||
if E.db.chat.fadeChatToggles then
|
||||
E:UIFrameFadeOut(self, duration, self:GetAlpha(), alpha)
|
||||
end
|
||||
end
|
||||
|
||||
local function ChatButton_OnEnter(self)
|
||||
if E.db[self.parent:GetName()..'Faded'] then
|
||||
fadeChatPanel(self, 0.3, 1)
|
||||
end
|
||||
|
||||
if not _G.GameTooltip:IsForbidden() then
|
||||
_G.GameTooltip:SetOwner(self, 'ANCHOR_TOPLEFT', 0, 4)
|
||||
_G.GameTooltip:ClearLines()
|
||||
_G.GameTooltip:AddDoubleLine(L["Left Click:"], L["Toggle Chat Frame"], 1, 1, 1)
|
||||
_G.GameTooltip:Show()
|
||||
end
|
||||
end
|
||||
|
||||
local function ChatButton_OnLeave(self)
|
||||
if E.db[self.parent:GetName()..'Faded'] then
|
||||
fadeChatPanel(self, 0.3, 0)
|
||||
end
|
||||
|
||||
if not _G.GameTooltip:IsForbidden() then
|
||||
_G.GameTooltip:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
local function ChatButton_OnClick(self)
|
||||
local name = self.parent:GetName()..'Faded'
|
||||
if E.db[name] then
|
||||
E.db[name] = nil
|
||||
fadeChatPanel(self, 0.2, 1)
|
||||
else
|
||||
E.db[name] = true
|
||||
fadeChatPanel(self, 0.2, 0)
|
||||
end
|
||||
|
||||
if not _G.GameTooltip:IsForbidden() then
|
||||
_G.GameTooltip:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
-- these are used by the bindings and options
|
||||
function HideLeftChat()
|
||||
ChatButton_OnClick(_G.LeftChatToggleButton)
|
||||
end
|
||||
|
||||
function HideRightChat()
|
||||
ChatButton_OnClick(_G.RightChatToggleButton)
|
||||
end
|
||||
|
||||
function HideBothChat()
|
||||
ChatButton_OnClick(_G.LeftChatToggleButton)
|
||||
ChatButton_OnClick(_G.RightChatToggleButton)
|
||||
end
|
||||
|
||||
function LO:ToggleChatTabPanels(rightOverride, leftOverride)
|
||||
if leftOverride or not E.db.chat.panelTabBackdrop then
|
||||
_G.LeftChatTab:Hide()
|
||||
else
|
||||
_G.LeftChatTab:Show()
|
||||
end
|
||||
|
||||
if rightOverride or not E.db.chat.panelTabBackdrop then
|
||||
_G.RightChatTab:Hide()
|
||||
else
|
||||
_G.RightChatTab:Show()
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
local function DataPanelStyle(panel, db)
|
||||
panel.forcedBorderColors = (db.border == false and {0,0,0,0}) or nil
|
||||
panel:SetTemplate(db.backdrop and (db.panelTransparency and 'Transparent' or 'Default') or 'NoBackdrop', true)
|
||||
|
||||
if db.border ~= nil then
|
||||
if panel.iborder then panel.iborder:SetShown(db.border) end
|
||||
if panel.oborder then panel.oborder:SetShown(db.border) end
|
||||
end
|
||||
end
|
||||
|
||||
function LO:SetDataPanelStyle()
|
||||
DataPanelStyle(_G.LeftChatToggleButton, E.db.datatexts.panels.LeftChatDataPanel)
|
||||
DataPanelStyle(_G.RightChatToggleButton, E.db.datatexts.panels.RightChatDataPanel)
|
||||
end
|
||||
end
|
||||
|
||||
local barHeight = BAR_HEIGHT + 1
|
||||
local toggleWidth = TOGGLE_WIDTH + 1
|
||||
function LO:RefreshChatMovers()
|
||||
local LeftChatPanel = _G.LeftChatPanel
|
||||
local RightChatPanel = _G.RightChatPanel
|
||||
local LeftChatMover = _G.LeftChatMover
|
||||
local RightChatMover = _G.RightChatMover
|
||||
|
||||
local Left = LeftChatPanel:GetPoint()
|
||||
local Right = RightChatPanel:GetPoint()
|
||||
local showRightPanel = E.db.datatexts.panels.RightChatDataPanel.enable
|
||||
local showLeftPanel = E.db.datatexts.panels.LeftChatDataPanel.enable
|
||||
if not showLeftPanel or E.db.chat.LeftChatDataPanelAnchor == 'ABOVE_CHAT' then
|
||||
LeftChatPanel:Point(Left, LeftChatMover, 0, 0)
|
||||
elseif showLeftPanel then
|
||||
LeftChatPanel:Point(Left, LeftChatMover, 0, barHeight)
|
||||
end
|
||||
if not showRightPanel or E.db.chat.RightChatDataPanelAnchor == 'ABOVE_CHAT' then
|
||||
RightChatPanel:Point(Right, RightChatMover, 0, 0)
|
||||
elseif showRightPanel then
|
||||
RightChatPanel:Point(Right, RightChatMover, 0, barHeight)
|
||||
end
|
||||
|
||||
-- mover sizes: same as in CH.PositionChats for panels but including the datatext bar height
|
||||
LeftChatMover:Size(E.db.chat.panelWidth, E.db.chat.panelHeight + (showLeftPanel and barHeight or 0))
|
||||
if E.db.chat.separateSizes then
|
||||
RightChatMover:Size(E.db.chat.panelWidthRight, E.db.chat.panelHeightRight + (showRightPanel and barHeight or 0))
|
||||
else
|
||||
RightChatMover:Size(E.db.chat.panelWidth, E.db.chat.panelHeight + (showRightPanel and barHeight or 0))
|
||||
end
|
||||
end
|
||||
|
||||
function LO:RepositionChatDataPanels()
|
||||
local LeftChatTab = _G.LeftChatTab
|
||||
local RightChatTab = _G.RightChatTab
|
||||
local LeftChatPanel = _G.LeftChatPanel
|
||||
local RightChatPanel = _G.RightChatPanel
|
||||
local LeftChatDataPanel = _G.LeftChatDataPanel
|
||||
local RightChatDataPanel = _G.RightChatDataPanel
|
||||
local LeftChatToggleButton = _G.LeftChatToggleButton
|
||||
local RightChatToggleButton = _G.RightChatToggleButton
|
||||
|
||||
if E.private.chat.enable then
|
||||
LeftChatTab:ClearAllPoints()
|
||||
RightChatTab:ClearAllPoints()
|
||||
LeftChatTab:Point('TOPLEFT', LeftChatPanel, 'TOPLEFT', 2, -2)
|
||||
LeftChatTab:Point('BOTTOMRIGHT', LeftChatPanel, 'TOPRIGHT', -2, -BAR_HEIGHT-2)
|
||||
RightChatTab:Point('TOPRIGHT', RightChatPanel, 'TOPRIGHT', -2, -2)
|
||||
RightChatTab:Point('BOTTOMLEFT', RightChatPanel, 'TOPLEFT', 2, -BAR_HEIGHT-2)
|
||||
end
|
||||
|
||||
LeftChatDataPanel:ClearAllPoints()
|
||||
RightChatDataPanel:ClearAllPoints()
|
||||
|
||||
local SPACING = E.PixelMode and 1 or -1
|
||||
local sideButton = E.db.chat.hideChatToggles and 0 or toggleWidth
|
||||
if E.db.chat.LeftChatDataPanelAnchor == 'ABOVE_CHAT' then
|
||||
LeftChatDataPanel:Point('BOTTOMRIGHT', LeftChatPanel, 'TOPRIGHT', 0, -SPACING)
|
||||
LeftChatDataPanel:Point('TOPLEFT', LeftChatPanel, 'TOPLEFT', sideButton, barHeight)
|
||||
LeftChatToggleButton:Point('BOTTOMRIGHT', LeftChatDataPanel, 'BOTTOMLEFT', SPACING, 0)
|
||||
LeftChatToggleButton:Point('TOPLEFT', LeftChatDataPanel, 'TOPLEFT', -toggleWidth, 0)
|
||||
else
|
||||
LeftChatDataPanel:Point('TOPRIGHT', LeftChatPanel, 'BOTTOMRIGHT', 0, SPACING)
|
||||
LeftChatDataPanel:Point('BOTTOMLEFT', LeftChatPanel, 'BOTTOMLEFT', sideButton, -barHeight)
|
||||
LeftChatToggleButton:Point('TOPRIGHT', LeftChatDataPanel, 'TOPLEFT', SPACING, 0)
|
||||
LeftChatToggleButton:Point('BOTTOMLEFT', LeftChatDataPanel, 'BOTTOMLEFT', -toggleWidth, 0)
|
||||
end
|
||||
|
||||
if E.db.chat.RightChatDataPanelAnchor == 'ABOVE_CHAT' then
|
||||
RightChatDataPanel:Point('BOTTOMLEFT', RightChatPanel, 'TOPLEFT', 0, -SPACING)
|
||||
RightChatDataPanel:Point('TOPRIGHT', RightChatPanel, 'TOPRIGHT', -sideButton, barHeight)
|
||||
RightChatToggleButton:Point('BOTTOMLEFT', RightChatDataPanel, 'BOTTOMRIGHT', -SPACING, 0)
|
||||
RightChatToggleButton:Point('TOPRIGHT', RightChatDataPanel, 'TOPRIGHT', toggleWidth, 0)
|
||||
else
|
||||
RightChatDataPanel:Point('TOPLEFT', RightChatPanel, 'BOTTOMLEFT', 0, SPACING)
|
||||
RightChatDataPanel:Point('BOTTOMRIGHT', RightChatPanel, 'BOTTOMRIGHT', -sideButton, -barHeight)
|
||||
RightChatToggleButton:Point('TOPLEFT', RightChatDataPanel, 'TOPRIGHT', -SPACING, 0)
|
||||
RightChatToggleButton:Point('BOTTOMRIGHT', RightChatDataPanel, 'BOTTOMRIGHT', toggleWidth, 0)
|
||||
end
|
||||
|
||||
LO:RefreshChatMovers()
|
||||
end
|
||||
|
||||
function LO:SetChatTabStyle()
|
||||
local tabStyle = (E.db.chat.panelTabTransparency and 'Transparent') or nil
|
||||
local glossTex = (not tabStyle and true) or nil
|
||||
|
||||
_G.LeftChatTab:SetTemplate(tabStyle, glossTex)
|
||||
_G.RightChatTab:SetTemplate(tabStyle, glossTex)
|
||||
end
|
||||
|
||||
function LO:ToggleChatPanels()
|
||||
local showRightPanel = E.db.datatexts.panels.RightChatDataPanel.enable
|
||||
local showLeftPanel = E.db.datatexts.panels.LeftChatDataPanel.enable
|
||||
|
||||
_G.RightChatDataPanel:SetShown(showRightPanel)
|
||||
_G.LeftChatDataPanel:SetShown(showLeftPanel)
|
||||
|
||||
local showToggles = not E.db.chat.hideChatToggles
|
||||
_G.LeftChatToggleButton:SetShown(showToggles and showLeftPanel)
|
||||
_G.RightChatToggleButton:SetShown(showToggles and showRightPanel)
|
||||
|
||||
LO:RefreshChatMovers()
|
||||
|
||||
local panelBackdrop = E.db.chat.panelBackdrop
|
||||
if panelBackdrop == 'SHOWBOTH' then
|
||||
_G.LeftChatPanel.backdrop:Show()
|
||||
_G.RightChatPanel.backdrop:Show()
|
||||
LO:ToggleChatTabPanels()
|
||||
elseif panelBackdrop == 'HIDEBOTH' then
|
||||
_G.LeftChatPanel.backdrop:Hide()
|
||||
_G.RightChatPanel.backdrop:Hide()
|
||||
LO:ToggleChatTabPanels(true, true)
|
||||
elseif panelBackdrop == 'LEFT' then
|
||||
_G.LeftChatPanel.backdrop:Show()
|
||||
_G.RightChatPanel.backdrop:Hide()
|
||||
LO:ToggleChatTabPanels(true)
|
||||
else
|
||||
_G.LeftChatPanel.backdrop:Hide()
|
||||
_G.RightChatPanel.backdrop:Show()
|
||||
LO:ToggleChatTabPanels(nil, true)
|
||||
end
|
||||
end
|
||||
|
||||
function LO:ResaveChatPosition()
|
||||
if not E.private.chat.enable then return end
|
||||
|
||||
local name, chat = self.name
|
||||
if name == 'LeftChatMover' then
|
||||
chat = CH.LeftChatWindow
|
||||
elseif name == 'RightChatMover' then
|
||||
chat = CH.RightChatWindow
|
||||
end
|
||||
|
||||
if chat and chat:GetLeft() then
|
||||
FCF_SavePositionAndDimensions(chat)
|
||||
end
|
||||
end
|
||||
|
||||
function LO:CreateChatPanels()
|
||||
--Left Chat
|
||||
local lchat = CreateFrame('Frame', 'LeftChatPanel', E.UIParent, 'BackdropTemplate')
|
||||
lchat:SetFrameStrata('BACKGROUND')
|
||||
lchat:SetFrameLevel(300)
|
||||
lchat:Size(100, 100)
|
||||
lchat:Point('BOTTOMLEFT', E.UIParent, 4, 4)
|
||||
lchat:CreateBackdrop('Transparent')
|
||||
lchat.backdrop.callbackBackdropColor = CH.Panel_ColorUpdate
|
||||
lchat.backdrop:SetAllPoints()
|
||||
lchat.FadeObject = {finishedFunc = finishFade, finishedArg1 = lchat, finishedFuncKeep = true}
|
||||
E:CreateMover(lchat, 'LeftChatMover', L["Left Chat"], nil, nil, LO.ResaveChatPosition, nil, nil, 'chat,general', nil, true)
|
||||
|
||||
--Background Texture
|
||||
local lchattex = lchat:CreateTexture(nil, 'OVERLAY')
|
||||
lchattex:SetInside()
|
||||
lchattex:SetTexture(E.db.chat.panelBackdropNameLeft)
|
||||
lchattex:SetAlpha(E.db.general.backdropfadecolor.a - 0.7 > 0 and E.db.general.backdropfadecolor.a - 0.7 or 0.5)
|
||||
lchat.tex = lchattex
|
||||
|
||||
--Left Chat Tab
|
||||
CreateFrame('Frame', 'LeftChatTab', lchat, 'BackdropTemplate')
|
||||
|
||||
--Left Chat Data Panel
|
||||
local lchatdp = CreateFrame('Frame', 'LeftChatDataPanel', lchat, 'BackdropTemplate')
|
||||
DT:RegisterPanel(lchatdp, 3, 'ANCHOR_TOPLEFT', -17, 4)
|
||||
|
||||
--Left Chat Toggle Button
|
||||
local lchattb = CreateFrame('Button', 'LeftChatToggleButton', E.UIParent, 'BackdropTemplate')
|
||||
lchattb:SetNormalTexture(E.Media.Textures.ArrowUp)
|
||||
lchattb:SetFrameStrata('BACKGROUND')
|
||||
lchattb:SetFrameLevel(301)
|
||||
lchattb:RegisterForClicks('LeftButtonUp', 'RightButtonUp')
|
||||
lchattb:SetScript('OnEnter', ChatButton_OnEnter)
|
||||
lchattb:SetScript('OnLeave', ChatButton_OnLeave)
|
||||
lchattb:SetScript('OnClick', function(lcb, btn)
|
||||
if btn == 'LeftButton' then
|
||||
ChatButton_OnClick(lcb)
|
||||
end
|
||||
end)
|
||||
|
||||
local lchattbtex = lchattb:GetNormalTexture()
|
||||
lchattbtex:SetRotation(E.Skins.ArrowRotation.left)
|
||||
lchattbtex:ClearAllPoints()
|
||||
lchattbtex:Point('CENTER')
|
||||
lchattbtex:Size(12)
|
||||
lchattb.texture = lchattbtex
|
||||
lchattb.OnEnter = ChatButton_OnEnter
|
||||
lchattb.OnLeave = ChatButton_OnLeave
|
||||
lchattb.parent = lchat
|
||||
|
||||
--Right Chat
|
||||
local rchat = CreateFrame('Frame', 'RightChatPanel', E.UIParent, 'BackdropTemplate')
|
||||
rchat:SetFrameStrata('BACKGROUND')
|
||||
rchat:SetFrameLevel(300)
|
||||
rchat:Size(100, 100)
|
||||
rchat:Point('BOTTOMRIGHT', E.UIParent, -4, 4)
|
||||
rchat:CreateBackdrop('Transparent')
|
||||
rchat.backdrop.callbackBackdropColor = CH.Panel_ColorUpdate
|
||||
rchat.backdrop:SetAllPoints()
|
||||
rchat.FadeObject = {finishedFunc = finishFade, finishedArg1 = rchat, finishedFuncKeep = true}
|
||||
E:CreateMover(rchat, 'RightChatMover', L["Right Chat"], nil, nil, LO.ResaveChatPosition, nil, nil, 'chat,general', nil, true)
|
||||
|
||||
--Background Texture
|
||||
local rchattex = rchat:CreateTexture(nil, 'OVERLAY')
|
||||
rchattex:SetInside()
|
||||
rchattex:SetTexture(E.db.chat.panelBackdropNameRight)
|
||||
rchattex:SetAlpha(E.db.general.backdropfadecolor.a - 0.7 > 0 and E.db.general.backdropfadecolor.a - 0.7 or 0.5)
|
||||
rchat.tex = rchattex
|
||||
|
||||
--Right Chat Tab
|
||||
CreateFrame('Frame', 'RightChatTab', rchat, 'BackdropTemplate')
|
||||
|
||||
--Right Chat Data Panel
|
||||
local rchatdp = CreateFrame('Frame', 'RightChatDataPanel', rchat, 'BackdropTemplate')
|
||||
DT:RegisterPanel(rchatdp, 3, 'ANCHOR_TOPRIGHT', 17, 4)
|
||||
|
||||
--Right Chat Toggle Button
|
||||
local rchattb = CreateFrame('Button', 'RightChatToggleButton', E.UIParent, 'BackdropTemplate')
|
||||
rchattb:SetNormalTexture(E.Media.Textures.ArrowUp)
|
||||
rchattb:RegisterForClicks('AnyUp')
|
||||
rchattb:SetFrameStrata('BACKGROUND')
|
||||
rchattb:SetFrameLevel(301)
|
||||
rchattb:SetScript('OnEnter', ChatButton_OnEnter)
|
||||
rchattb:SetScript('OnLeave', ChatButton_OnLeave)
|
||||
rchattb:SetScript('OnClick', function(rcb, btn)
|
||||
if btn == 'LeftButton' then
|
||||
ChatButton_OnClick(rcb)
|
||||
end
|
||||
end)
|
||||
|
||||
local rchattbtex = rchattb:GetNormalTexture()
|
||||
rchattbtex:SetRotation(E.Skins.ArrowRotation.right)
|
||||
rchattbtex:ClearAllPoints()
|
||||
rchattbtex:Point('CENTER')
|
||||
rchattbtex:Size(12)
|
||||
rchattb.texture = rchattbtex
|
||||
rchattb.parent = rchat
|
||||
|
||||
--Load Settings
|
||||
local fadeToggle = E.db.chat.fadeChatToggles
|
||||
if E.db.LeftChatPanelFaded then
|
||||
if fadeToggle then
|
||||
_G.LeftChatToggleButton:SetAlpha(0)
|
||||
end
|
||||
|
||||
lchat:Hide()
|
||||
end
|
||||
|
||||
if E.db.RightChatPanelFaded then
|
||||
if fadeToggle then
|
||||
_G.RightChatToggleButton:SetAlpha(0)
|
||||
end
|
||||
|
||||
rchat:Hide()
|
||||
end
|
||||
|
||||
LO:ToggleChatPanels()
|
||||
LO:SetChatTabStyle()
|
||||
end
|
||||
|
||||
function LO:CreateMinimapPanels()
|
||||
local panel = CreateFrame('Frame', 'MinimapPanel', _G.Minimap, 'BackdropTemplate')
|
||||
panel:Point('TOPLEFT', _G.Minimap, 'BOTTOMLEFT', -E.Border, E.PixelMode and 0 or -3)
|
||||
panel:Point('BOTTOMRIGHT', _G.Minimap, 'BOTTOMRIGHT', E.Border, -BAR_HEIGHT)
|
||||
panel:Hide()
|
||||
DT:RegisterPanel(panel, E.db.datatexts.panels.MinimapPanel.numPoints, 'ANCHOR_BOTTOM', 0, -4)
|
||||
end
|
||||
|
||||
E:RegisterModule(LO:GetName())
|
||||
3
Layout/Load_Layout.xml
Normal file
3
Layout/Load_Layout.xml
Normal file
@@ -0,0 +1,3 @@
|
||||
<Ui xmlns='http://www.blizzard.com/wow/ui/'>
|
||||
<Script file='Layout.lua'/>
|
||||
</Ui>
|
||||
Reference in New Issue
Block a user