df7cc26a64
Fix remaining lua errors covered by ascension patches Add Addon Skins Add Enhanced Friends List
569 lines
18 KiB
Lua
569 lines
18 KiB
Lua
local E, L, V, P, G = unpack(ElvUI)
|
|
local EMB = E:NewModule("EmbedSystem")
|
|
local AS = E:GetModule("AddOnSkins")
|
|
|
|
local _G = _G
|
|
local pairs = pairs
|
|
local floor = math.floor
|
|
local lower, match = string.lower, string.match
|
|
local tinsert = table.insert
|
|
|
|
local hooksecurefunc = hooksecurefunc
|
|
local NUM_CHAT_WINDOWS = NUM_CHAT_WINDOWS
|
|
|
|
function EMB:GetChatWindowInfo()
|
|
local chatTabInfo = {["NONE"] = "NONE"}
|
|
for i = 1, NUM_CHAT_WINDOWS do
|
|
chatTabInfo["ChatFrame"..i] = _G["ChatFrame"..i.."Tab"]:GetText()
|
|
end
|
|
return chatTabInfo
|
|
end
|
|
|
|
function EMB:ToggleChatFrame(hide)
|
|
local chatFrame = E.db.addOnSkins.embed.hideChat
|
|
if chatFrame == "NONE" then return end
|
|
|
|
if hide then
|
|
_G[chatFrame].originalParent = _G[chatFrame]:GetParent()
|
|
_G[chatFrame]:SetParent(E.HiddenFrame)
|
|
|
|
_G[chatFrame.."Tab"].originalParent = _G[chatFrame.."Tab"]:GetParent()
|
|
_G[chatFrame.."Tab"]:SetParent(E.HiddenFrame)
|
|
else
|
|
if _G[chatFrame].originalParent then
|
|
_G[chatFrame]:SetParent(_G[chatFrame].originalParent)
|
|
_G[chatFrame.."Tab"]:SetParent(_G[chatFrame.."Tab"].originalParent)
|
|
end
|
|
end
|
|
end
|
|
|
|
function EMB:EmbedShow()
|
|
if _G[self.leftFrame.frameName] then
|
|
_G[self.leftFrame.frameName]:Show()
|
|
end
|
|
|
|
if E.db.addOnSkins.embed.embedType == "DOUBLE" then
|
|
if _G[self.rightFrame.frameName] then
|
|
_G[self.rightFrame.frameName]:Show()
|
|
end
|
|
end
|
|
|
|
self:ToggleChatFrame(true)
|
|
self.switchButton:SetAlpha(1)
|
|
end
|
|
|
|
function EMB:EmbedHide()
|
|
if _G[self.leftFrame.frameName] then
|
|
_G[self.leftFrame.frameName]:Hide()
|
|
end
|
|
|
|
if E.db.addOnSkins.embed.embedType == "DOUBLE" then
|
|
if _G[self.rightFrame.frameName] then
|
|
_G[self.rightFrame.frameName]:Hide()
|
|
end
|
|
end
|
|
|
|
self:ToggleChatFrame(false)
|
|
self.switchButton:SetAlpha(0.6)
|
|
end
|
|
|
|
function EMB:CheckEmbed(addon)
|
|
local db = E.db.addOnSkins.embed
|
|
local left, right, embed = lower(db.leftWindow), lower(db.rightWindow), lower(addon)
|
|
|
|
if AS:IsAddonEnabled(addon) and ((db.embedType == "SINGLE" and match(left, embed)) or db.embedType == "DOUBLE" and (match(left, embed) or match(right, embed))) then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
function EMB:EmbedUpdate()
|
|
if E.db.addOnSkins.embed.embedType == "DISABLE" then return end
|
|
|
|
if not self.embedCreated then
|
|
self:EmbedCreate()
|
|
end
|
|
|
|
self:WindowResize()
|
|
|
|
if self:CheckEmbed("Omen") then self:EmbedOmen() end
|
|
if self:CheckEmbed("Recount") then self:EmbedRecount() end
|
|
if self:CheckEmbed("Skada") then self:EmbedSkada() end
|
|
if self:CheckEmbed("Details") then self:EmbedDetails() end
|
|
end
|
|
|
|
function EMB:SetHooks()
|
|
hooksecurefunc(E:GetModule("Chat"), "PositionChat", function(self, override)
|
|
if override then
|
|
EMB:EmbedUpdate()
|
|
end
|
|
end)
|
|
hooksecurefunc(E:GetModule("Layout"), "ToggleChatPanels", function() EMB:EmbedUpdate() end)
|
|
|
|
hooksecurefunc(LeftChatPanel, "fadeFunc", function()
|
|
LeftChatPanel:Hide()
|
|
if not E.db.addOnSkins.embed.rightChatPanel then
|
|
EMB.switchButton:Hide()
|
|
end
|
|
end)
|
|
hooksecurefunc(RightChatPanel, "fadeFunc", function()
|
|
RightChatPanel:Hide()
|
|
if E.db.addOnSkins.embed.rightChatPanel then
|
|
EMB.switchButton:Hide()
|
|
end
|
|
end)
|
|
|
|
local rightChatToggleOnClickOriginal = RightChatToggleButton:GetScript("OnClick")
|
|
RightChatToggleButton:RegisterForClicks("AnyDown")
|
|
RightChatToggleButton:SetScript("OnClick", function(self, btn)
|
|
if btn == "RightButton" then
|
|
if E.db.addOnSkins.embed.rightChatPanel then
|
|
if EMB.mainFrame:IsShown() then
|
|
EMB.mainFrame:Hide()
|
|
else
|
|
EMB.mainFrame:Show()
|
|
end
|
|
end
|
|
else
|
|
rightChatToggleOnClickOriginal(self, btn)
|
|
end
|
|
EMB:UpdateSwitchButton()
|
|
end)
|
|
|
|
RightChatToggleButton:HookScript("OnEnter", function()
|
|
if E.db.addOnSkins.embed.rightChatPanel then
|
|
GameTooltip:AddDoubleLine(L["Right Click:"], L["Toggle Embedded Addon"], 1, 1, 1)
|
|
GameTooltip:Show()
|
|
EMB:UpdateSwitchButton()
|
|
end
|
|
end)
|
|
|
|
local leftChatToggleOnClickOriginal = LeftChatToggleButton:GetScript("OnClick")
|
|
LeftChatToggleButton:RegisterForClicks("AnyDown")
|
|
LeftChatToggleButton:SetScript("OnClick", function(self, btn)
|
|
if btn == "RightButton" then
|
|
if not E.db.addOnSkins.embed.rightChatPanel then
|
|
if EMB.mainFrame:IsShown() then
|
|
EMB.mainFrame:Hide()
|
|
else
|
|
EMB.mainFrame:Show()
|
|
end
|
|
end
|
|
else
|
|
leftChatToggleOnClickOriginal(self, btn)
|
|
end
|
|
EMB:UpdateSwitchButton()
|
|
end)
|
|
|
|
LeftChatToggleButton:HookScript("OnEnter", function()
|
|
if not E.db.addOnSkins.embed.rightChatPanel then
|
|
GameTooltip:AddDoubleLine(L["Right Click:"], L["Toggle Embedded Addon"], 1, 1, 1)
|
|
GameTooltip:Show()
|
|
EMB:UpdateSwitchButton()
|
|
end
|
|
end)
|
|
end
|
|
|
|
function EMB:WindowResize()
|
|
if not self.embedCreated then return end
|
|
|
|
local db = E.db.addOnSkins.embed
|
|
local SPACING = E.Border + E.Spacing
|
|
local chatPanel = db.rightChatPanel and RightChatPanel or LeftChatPanel
|
|
local chatTab = db.rightChatPanel and RightChatTab or LeftChatTab
|
|
local chatData = db.rightChatPanel and RightChatDataPanel or LeftChatToggleButton
|
|
local topRight = chatData == RightChatDataPanel and (E.db.datatexts.rightChatPanel and "TOPLEFT" or "BOTTOMLEFT") or chatData == LeftChatToggleButton and (E.db.datatexts.leftChatPanel and "TOPLEFT" or "BOTTOMLEFT")
|
|
local yOffset = (chatData == RightChatDataPanel and E.db.datatexts.rightChatPanel and SPACING) or (chatData == LeftChatToggleButton and E.db.datatexts.leftChatPanel and SPACING) or 0
|
|
local xOffset = (E.db.chat.panelBackdrop == "RIGHT" and db.rightChatPanel and 0) or (E.db.chat.panelBackdrop == "LEFT" and not db.rightChatPanel and 0) or (E.db.chat.panelBackdrop == "SHOWBOTH" and 0) or E.Border*3 - E.Spacing
|
|
local isDouble = db.embedType == "DOUBLE"
|
|
|
|
self.mainFrame:SetParent(chatPanel)
|
|
self.mainFrame:ClearAllPoints()
|
|
|
|
self.mainFrame:Point("BOTTOMLEFT", chatData, topRight, 0, yOffset)
|
|
self.mainFrame:Point("TOPRIGHT", chatTab, db.belowTopTab and "BOTTOMRIGHT" or "TOPRIGHT", xOffset, db.belowTopTab and -SPACING or 0)
|
|
|
|
if isDouble then
|
|
self.leftFrame:ClearAllPoints()
|
|
self.leftFrame:Point("TOPLEFT", self.mainFrame)
|
|
self.leftFrame:Point("BOTTOMRIGHT", self.mainFrame, "BOTTOMRIGHT", -(self.mainFrame:GetWidth() - db.leftWindowWidth + SPACING), 0)
|
|
|
|
self.rightFrame:ClearAllPoints()
|
|
self.rightFrame:Point("TOPLEFT", self.leftFrame, "TOPRIGHT", SPACING, 0)
|
|
self.rightFrame:Point("BOTTOMRIGHT", self.mainFrame)
|
|
else
|
|
self.leftFrame:ClearAllPoints()
|
|
self.leftFrame:Point("TOPLEFT", self.mainFrame)
|
|
self.leftFrame:Point("BOTTOMRIGHT", self.mainFrame)
|
|
end
|
|
|
|
self:UpdateSwitchButton()
|
|
|
|
if IsAddOnLoaded("ElvUI_Config") then
|
|
E.Options.args.addOnSkins.args.embed.args.leftWindowWidth.min = floor(chatPanel:GetWidth() * .25)
|
|
E.Options.args.addOnSkins.args.embed.args.leftWindowWidth.max = floor(chatPanel:GetWidth() * .75)
|
|
end
|
|
end
|
|
|
|
function EMB:UpdateSwitchButton()
|
|
local db = E.db.addOnSkins.embed
|
|
local chatPanel = db.rightChatPanel and RightChatPanel or LeftChatPanel
|
|
local chatTab = db.rightChatPanel and RightChatTab or LeftChatTab
|
|
local isDouble = db.embedType == "DOUBLE"
|
|
|
|
self.switchButton:SetParent(chatPanel)
|
|
|
|
if db.belowTopTab and chatPanel:IsShown() then
|
|
self.switchButton:Show()
|
|
self.switchButton.text:SetText(isDouble and db.leftWindow.." / "..db.rightWindow or db.leftWindow)
|
|
self.switchButton:ClearAllPoints()
|
|
|
|
if E.Chat.RightChatWindowID and _G["ChatFrame"..E.Chat.RightChatWindowID.."Tab"]:IsVisible() then
|
|
self.switchButton:Point("LEFT", _G["ChatFrame"..E.Chat.RightChatWindowID.."Tab"], "RIGHT", 0, 0)
|
|
else
|
|
self.switchButton:Point(db.rightChatPanel and "LEFT" or "RIGHT", chatTab, 5, 4)
|
|
end
|
|
elseif self.switchButton:IsShown() then
|
|
self.switchButton:Hide()
|
|
end
|
|
end
|
|
|
|
function EMB:EmbedCreate()
|
|
if self.embedCreated then return end
|
|
|
|
self.mainFrame = CreateFrame("Frame", "ElvUI_AddOnSkins_Embed_MainWindow", UIParent)
|
|
self.leftFrame = CreateFrame("Frame", "ElvUI_AddOnSkins_Embed_LeftWindow", self.mainFrame)
|
|
self.rightFrame = CreateFrame("Frame", "ElvUI_AddOnSkins_Embed_RightWindow", self.mainFrame)
|
|
|
|
self.switchButton = CreateFrame("Button", "ElvUI_AddOnSkins_Embed_SwitchButton", UIParent)
|
|
self.switchButton:Size(120, 32)
|
|
self.switchButton:RegisterForClicks("AnyUp")
|
|
|
|
self.switchButton.text = self.switchButton:CreateFontString(nil, "OVERLAY")
|
|
self.switchButton.text:FontTemplate(E.LSM:Fetch("font", E.db.chat.tabFont), E.db.chat.tabFontSize, E.db.chat.tabFontOutline)
|
|
self.switchButton.text:SetTextColor(unpack(E["media"].rgbvaluecolor))
|
|
self.switchButton.text:SetPoint("LEFT", 16, -5)
|
|
|
|
self.switchButton:SetScript("OnClick", function(self, button)
|
|
if EMB.mainFrame:IsShown() then
|
|
EMB.mainFrame:Hide()
|
|
self:SetAlpha(0.6)
|
|
else
|
|
EMB.mainFrame:Show()
|
|
self:SetAlpha(1)
|
|
end
|
|
EMB:UpdateSwitchButton()
|
|
end)
|
|
|
|
self.switchButton:SetScript("OnMouseDown", function(self) self.text:Point("LEFT", 18, -7) end)
|
|
self.switchButton:SetScript("OnMouseUp", function(self) self.text:Point("LEFT", 16, -5) end)
|
|
|
|
self.mainFrame:SetScript("OnShow", function() EMB:EmbedShow() end)
|
|
self.mainFrame:SetScript("OnHide", function() EMB:EmbedHide() end)
|
|
|
|
self.embedCreated = true
|
|
|
|
self:SetHooks()
|
|
self:ToggleChatFrame(false)
|
|
self:EmbedUpdate()
|
|
end
|
|
|
|
if AS:IsAddonLODorEnabled("Recount") then
|
|
function EMB:EmbedRecount()
|
|
local parent = self.leftFrame
|
|
if E.db.addOnSkins.embed.embedType == "DOUBLE" then
|
|
parent = E.db.addOnSkins.embed.rightWindow == "Recount" and self.rightFrame or self.leftFrame
|
|
end
|
|
parent.frameName = "Recount_MainWindow"
|
|
|
|
Recount_MainWindow:SetParent(parent)
|
|
Recount_MainWindow:ClearAllPoints()
|
|
Recount_MainWindow:SetPoint("TOPLEFT", parent, "TOPLEFT", E.PixelMode and -1 or 0, E.PixelMode and 8 or 7)
|
|
Recount_MainWindow:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", E.PixelMode and 1 or 0, E.PixelMode and -1 or 0)
|
|
|
|
Recount.db.profile.Locked = true
|
|
Recount.db.profile.Scaling = 1
|
|
Recount.db.profile.ClampToScreen = true
|
|
Recount.db.profile.FrameStrata = "2-LOW"
|
|
Recount:SetStrataAndClamp()
|
|
Recount:LockWindows(true)
|
|
|
|
Recount_MainWindow:StartSizing("BOTTOMLEFT")
|
|
Recount_MainWindow:StopMovingOrSizing()
|
|
Recount:ResizeMainWindow()
|
|
end
|
|
end
|
|
|
|
if AS:IsAddonLODorEnabled("Omen") then
|
|
function EMB:EmbedOmen()
|
|
local parent = self.leftFrame
|
|
if E.db.addOnSkins.embed.embedType == "DOUBLE" then
|
|
parent = E.db.addOnSkins.embed.rightWindow == "Omen" and self.rightFrame or self.leftFrame
|
|
end
|
|
parent.frameName = "OmenAnchor"
|
|
|
|
local db = Omen.db
|
|
db.profile.Scale = 1
|
|
db.profile.Bar.Spacing = 1
|
|
db.profile.Background.EdgeSize = 1
|
|
db.profile.Background.BarInset = 1
|
|
-- db.profile.TitleBar.Height = 22
|
|
db.profile.TitleBar.UseSameBG = true
|
|
db.profile.ShowWith.UseShowWith = false
|
|
db.profile.Locked = true
|
|
db.profile.TitleBar.ShowTitleBar = true
|
|
db.profile.FrameStrata = "2-LOW"
|
|
|
|
OmenAnchor:SetParent(parent)
|
|
OmenAnchor:ClearAllPoints()
|
|
OmenAnchor:SetAllPoints()
|
|
|
|
if not self.omenHooked then
|
|
hooksecurefunc(Omen, "SetAnchors", function(self, useDB)
|
|
if useDB then
|
|
self.Anchor:SetParent(parent)
|
|
self.Anchor:SetInside(parent, 0, 0)
|
|
end
|
|
end)
|
|
|
|
self.omenHooked = true
|
|
end
|
|
|
|
Omen:UpdateBackdrop()
|
|
end
|
|
end
|
|
|
|
if AS:IsAddonLODorEnabled("Skada") then
|
|
EMB.skadaWindows = {}
|
|
|
|
local function EmbedWindow(window, width, height, point, relativeFrame, relativePoint, ofsx, ofsy)
|
|
if not window then return end
|
|
local barmod = Skada.displays["bar"]
|
|
|
|
window.db.barwidth = width
|
|
|
|
window.db.spark = false
|
|
window.db.barslocked = true
|
|
window.db.enablebackground = true
|
|
|
|
window.bargroup:SetParent(relativeFrame)
|
|
window.bargroup:SetFrameStrata("LOW")
|
|
|
|
if Skada.revisited then
|
|
local offsety = window.db.reversegrowth and -E.Border or E.Border
|
|
|
|
window.db.scale = 1
|
|
window.db.background.height = height - (E.Border * 2)
|
|
|
|
window.bargroup.ClearAllPoints = nil
|
|
window.bargroup:ClearAllPoints()
|
|
window.bargroup.ClearAllPoints = E.noop
|
|
|
|
window.bargroup.SetPoint = nil
|
|
window.bargroup:SetPoint(point, relativeFrame, relativePoint, ofsx, -offsety)
|
|
window.bargroup.SetPoint = E.noop
|
|
|
|
if window.bargroup.backdrop then
|
|
window.bargroup.backdrop:SetFrameStrata("LOW")
|
|
window.bargroup.backdrop:SetFrameLevel(window.bargroup:GetFrameLevel() - 1)
|
|
end
|
|
else
|
|
window.db.background.height = height - (window.db.enabletitle and window.db.barheight or -(E.Border + E.Spacing)) - (E.Border + E.Spacing)
|
|
window.db.enablebackground = true
|
|
|
|
window.bargroup:ClearAllPoints()
|
|
window.bargroup:SetPoint(point, relativeFrame, relativePoint, ofsx, window.db.reversegrowth and ofsy or -ofsy)
|
|
|
|
window.bargroup.bgframe:SetFrameStrata("LOW")
|
|
window.bargroup.bgframe:SetFrameLevel(window.bargroup:GetFrameLevel() - 1)
|
|
end
|
|
|
|
barmod.ApplySettings(barmod, window)
|
|
|
|
if Skada.revisited then
|
|
window:Toggle()
|
|
end
|
|
end
|
|
|
|
function EMB:EmbedSkada()
|
|
wipe(self.skadaWindows)
|
|
for _, window in ipairs(Skada:GetWindows()) do
|
|
tinsert(self.skadaWindows, window)
|
|
end
|
|
|
|
local db = E.db.addOnSkins.embed
|
|
local numberToEmbed = 0
|
|
|
|
if db.embedType == "SINGLE" then
|
|
numberToEmbed = 1
|
|
elseif db.embedType == "DOUBLE" then
|
|
if db.rightWindow == "Skada" then numberToEmbed = numberToEmbed + 1 end
|
|
if db.leftWindow == "Skada" then numberToEmbed = numberToEmbed + 1 end
|
|
end
|
|
|
|
local point
|
|
if numberToEmbed == 1 then
|
|
local parent = self.leftFrame
|
|
if db.embedType == "DOUBLE" then
|
|
parent = db.rightWindow == "Skada" and self.rightFrame or self.leftFrame
|
|
end
|
|
|
|
point = self.skadaWindows[1].db.reversegrowth and "BOTTOMLEFT" or "TOPLEFT"
|
|
EmbedWindow(self.skadaWindows[1], parent:GetWidth() -(E.Border*2), parent:GetHeight(), point, parent, point, E.Border, E.Border)
|
|
elseif numberToEmbed == 2 then
|
|
point = self.skadaWindows[1].db.reversegrowth and "BOTTOMLEFT" or "TOPLEFT"
|
|
EmbedWindow(self.skadaWindows[1], self.leftFrame:GetWidth() -(E.Border*2), self.leftFrame:GetHeight(), point, self.leftFrame, point, E.Border, E.Border)
|
|
|
|
if not self.skadaWindows[2] then
|
|
E:Print("Please Create Skada Windows 2")
|
|
return
|
|
end
|
|
|
|
point = self.skadaWindows[2].db.reversegrowth and "BOTTOMRIGHT" or "TOPRIGHT"
|
|
EmbedWindow(self.skadaWindows[2], self.rightFrame:GetWidth() -(E.Border*2), self.rightFrame:GetHeight(), point, self.rightFrame, point, -E.Border, E.Border)
|
|
end
|
|
end
|
|
end
|
|
|
|
if AS:IsAddonLODorEnabled("Details") then
|
|
local Details = _G._details or _G._detalhes
|
|
|
|
local numberToEmbed = 0
|
|
|
|
EMB.DetailsInstances = {}
|
|
|
|
local listener = Details:CreateEventListener()
|
|
listener:RegisterEvent("DETAILS_INSTANCE_OPEN")
|
|
listener:RegisterEvent("DETAILS_INSTANCE_CLOSE")
|
|
|
|
function listener:OnDetailsEvent(event, instance)
|
|
if event == "DETAILS_INSTANCE_CLOSE" then
|
|
if instance._ElvUIEmbed and _G.DetailsOptionsWindow and _G.DetailsOptionsWindow:IsShown() then
|
|
Details:Msg("You just closed a window Embed on ElvUI, if wasn't intended click on Reopen.") --> need localization
|
|
end
|
|
elseif event == "DETAILS_INSTANCE_OPEN" then
|
|
if instance._ElvUIEmbed then
|
|
if #EMB.DetailsInstances >= 2 then
|
|
EMB.DetailsInstances[1]:UngroupInstance()
|
|
EMB.DetailsInstances[2]:UngroupInstance()
|
|
|
|
EMB.DetailsInstances[1].baseframe:ClearAllPoints()
|
|
EMB.DetailsInstances[2].baseframe:ClearAllPoints()
|
|
|
|
EMB.DetailsInstances[1]:RestoreMainWindowPosition()
|
|
EMB.DetailsInstances[2]:RestoreMainWindowPosition()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local function EmbedWindow(window, width, height, point, relativeFrame, relativePoint, ofsx, ofsy)
|
|
if not window then return end
|
|
|
|
if not window:IsEnabled() then
|
|
window:EnableInstance()
|
|
end
|
|
|
|
window._ElvUIEmbed = true
|
|
|
|
if window.bars_grow_direction == 2 then
|
|
ofsy = -2
|
|
else
|
|
ofsy = -20
|
|
end
|
|
|
|
window:UngroupInstance()
|
|
|
|
window.baseframe:ClearAllPoints()
|
|
window.baseframe:SetParent(relativeFrame)
|
|
window.baseframe:SetFrameStrata(relativeFrame:GetFrameStrata())
|
|
window.baseframe:SetFrameLevel(relativeFrame:GetFrameLevel())
|
|
|
|
ofsx = ofsx - 1
|
|
|
|
if window.show_statusbar then
|
|
height = height - 13
|
|
end
|
|
|
|
window:SetSize(width, height - 20)
|
|
|
|
window.baseframe:SetPoint(point, relativeFrame, relativePoint, ofsx, ofsy)
|
|
window:SaveMainWindowPosition()
|
|
window:RestoreMainWindowPosition()
|
|
|
|
window:LockInstance(true)
|
|
|
|
if window:GetId() == 1 then
|
|
DetailsRowFrame1:SetParent(DetailsBaseFrame1)
|
|
DetailsRowFrame1:SetFrameLevel(DetailsBaseFrame1:GetFrameLevel() + 1)
|
|
elseif window:GetId() == 2 then
|
|
DetailsRowFrame2:SetParent(DetailsBaseFrame2)
|
|
DetailsRowFrame2:SetFrameLevel(DetailsBaseFrame2:GetFrameLevel() + 1)
|
|
end
|
|
|
|
if window:GetSegment() ~= 0 then
|
|
window:SetDisplay(0)
|
|
end
|
|
end
|
|
|
|
function EMB:EmbedDetails()
|
|
wipe(self.DetailsInstances)
|
|
|
|
for _, instance in Details:ListInstances() do
|
|
tinsert(self.DetailsInstances, instance)
|
|
end
|
|
|
|
local db = E.db.addOnSkins.embed
|
|
numberToEmbed = 0
|
|
if db.embedType == "SINGLE" then
|
|
numberToEmbed = 1
|
|
end
|
|
|
|
if db.embedType == "DOUBLE" then
|
|
if db.rightWindow == "Details" then numberToEmbed = numberToEmbed + 1 end
|
|
if db.leftWindow == "Details" then numberToEmbed = numberToEmbed + 1 end
|
|
end
|
|
|
|
if Details:GetMaxInstancesAmount() < numberToEmbed then
|
|
Details:SetMaxInstancesAmount(numberToEmbed)
|
|
end
|
|
|
|
local instances_amount = Details:GetNumInstancesAmount()
|
|
|
|
for i = instances_amount + 1, numberToEmbed do
|
|
local new_instance = Details:CreateInstance(i)
|
|
|
|
if type(new_instance) == "table" then
|
|
tinsert(self.DetailsInstances, new_instance)
|
|
end
|
|
end
|
|
|
|
if numberToEmbed == 1 then
|
|
local parent = self.leftFrame
|
|
if db.embedType == "DOUBLE" then
|
|
parent = db.rightWindow == "Details" and self.rightFrame or self.leftFrame
|
|
end
|
|
EmbedWindow(self.DetailsInstances[1], parent:GetWidth() - (E.Border*2), parent:GetHeight(), "TOPLEFT", parent, "TOPLEFT", 2, 0)
|
|
|
|
if self.DetailsInstances[2] then
|
|
self.DetailsInstances[2]._ElvUIEmbed = nil
|
|
end
|
|
elseif numberToEmbed == 2 then
|
|
EmbedWindow(self.DetailsInstances[1], self.leftFrame:GetWidth() - (E.Border*2), self.leftFrame:GetHeight(), "TOPLEFT", self.leftFrame, "TOPLEFT", E.Border, E.Border)
|
|
EmbedWindow(self.DetailsInstances[2], self.rightFrame:GetWidth() - (E.Border*2), self.rightFrame:GetHeight(), "TOPRIGHT", self.rightFrame, "TOPRIGHT", -E.Border, E.Border)
|
|
end
|
|
end
|
|
end
|
|
|
|
function EMB:Initialize()
|
|
if E.db.addOnSkins.embed.embedType == "DISABLE" then return end
|
|
|
|
self:EmbedCreate()
|
|
end
|
|
|
|
local function InitializeCallback()
|
|
EMB:Initialize()
|
|
end
|
|
|
|
E:RegisterModule(EMB:GetName(), InitializeCallback) |