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.
279 lines
9.7 KiB
279 lines
9.7 KiB
local _, Cell = ...
|
|
local L = Cell.L
|
|
local F = Cell.funcs
|
|
local P = Cell.pixelPerfectFuncs
|
|
|
|
local Serializer = LibStub:GetLibrary("LibSerialize")
|
|
local LibDeflate = LibStub:GetLibrary("LibDeflate")
|
|
local deflateConfig = {level = 9}
|
|
|
|
local fromLayout
|
|
local indicatorButtons = {}
|
|
local selectedIndicators = {}
|
|
local Toggle, Validate
|
|
|
|
-------------------------------------------------
|
|
-- parent
|
|
-------------------------------------------------
|
|
local exportParent = CreateFrame("Frame", "CellOptionsFrame_IndicatorsExport", Cell.frames.indicatorsTab)
|
|
exportParent:Hide()
|
|
exportParent:SetAllPoints(Cell.frames.indicatorsTab)
|
|
exportParent:SetFrameLevel(Cell.frames.indicatorsTab:GetFrameLevel() + 50)
|
|
|
|
-------------------------------------------------
|
|
-- export
|
|
-------------------------------------------------
|
|
local from, listFrame, exportFrame, textArea, exportBtn
|
|
|
|
local function CreateIndicatorsExportFrame()
|
|
if not Cell.frames.indicatorsTab.mask then
|
|
Cell:CreateMask(Cell.frames.indicatorsTab, nil, {1, -1, -1, 1})
|
|
Cell.frames.indicatorsTab.mask:Hide()
|
|
end
|
|
|
|
-- list
|
|
local listParent = Cell:CreateFrame(nil, exportParent, 136, 525)
|
|
Cell:StylizeFrame(listParent, nil, Cell:GetAccentColorTable())
|
|
listParent:SetPoint("BOTTOMLEFT", 5, 24)
|
|
listParent:Show()
|
|
|
|
-- from
|
|
from = listParent:CreateFontString(nil, "OVERLAY", "CELL_FONT_CLASS")
|
|
from:SetPoint("TOPLEFT", 5, -5)
|
|
|
|
listFrame = CreateFrame("Frame", nil, listParent, "BackdropTemplate")
|
|
Cell:StylizeFrame(listFrame)
|
|
listFrame:SetPoint("TOPLEFT", 5, -20)
|
|
listFrame:SetPoint("TOPRIGHT", -5, -5)
|
|
listFrame:SetHeight(457)
|
|
|
|
Cell:CreateScrollFrame(listFrame)
|
|
listFrame.scrollFrame:SetScrollStep(19)
|
|
|
|
-- export area
|
|
exportFrame = Cell:CreateFrame(nil, exportParent, 281, 273)
|
|
Cell:StylizeFrame(exportFrame, nil, Cell:GetAccentColorTable())
|
|
exportFrame:SetPoint("BOTTOMLEFT", listParent, "BOTTOMRIGHT", 5, 0)
|
|
|
|
-- title
|
|
local title = exportFrame:CreateFontString(nil, "OVERLAY", "CELL_FONT_CLASS")
|
|
title:SetPoint("TOPLEFT", 5, -5)
|
|
|
|
-- textArea
|
|
textArea = Cell:CreateScrollEditBox(exportFrame)
|
|
Cell:StylizeFrame(textArea.scrollFrame, {0, 0, 0, 0}, Cell:GetAccentColorTable())
|
|
textArea:SetPoint("TOPLEFT", 5, -20)
|
|
textArea:SetPoint("BOTTOMRIGHT", -5, 5)
|
|
|
|
-- highlight text
|
|
textArea.eb:SetScript("OnEditFocusGained", function() textArea.eb:HighlightText() end)
|
|
textArea.eb:SetScript("OnMouseUp", function()
|
|
if not isImport then
|
|
textArea.eb:HighlightText()
|
|
end
|
|
end)
|
|
|
|
-- list buttons
|
|
exportBtn = Cell:CreateButton(listParent, L["Export"], "green", {64, 20})
|
|
exportBtn:SetPoint("BOTTOMLEFT", 5, 5)
|
|
exportBtn:SetEnabled(false)
|
|
exportBtn:SetScript("OnClick", function()
|
|
exportFrame:Show()
|
|
|
|
local builtIn, custom = 0, 0
|
|
local data = {
|
|
["indicators"] = {},
|
|
["related"] = {},
|
|
}
|
|
|
|
for index in pairs(selectedIndicators) do
|
|
-- count
|
|
if indicatorButtons[index].isBuiltIn then
|
|
builtIn = builtIn + 1
|
|
else
|
|
custom = custom + 1
|
|
end
|
|
|
|
-- data.indicators
|
|
data["indicators"][index] = CellDB["layouts"][fromLayout]["indicators"][index]
|
|
|
|
-- data.related
|
|
local name = CellDB["layouts"][fromLayout]["indicators"][index]["indicatorName"]
|
|
if name == "defensiveCooldowns" or name == "allCooldowns" then
|
|
data["related"]["customDefensives"] = CellDB["customDefensives"]
|
|
end
|
|
if name == "externalCooldowns" or name == "allCooldowns" then
|
|
data["related"]["customExternals"] = CellDB["customExternals"]
|
|
end
|
|
|
|
if name == "debuffs" then
|
|
data["related"]["debuffBlacklist"] = CellDB["debuffBlacklist"]
|
|
data["related"]["bigDebuffs"] = CellDB["bigDebuffs"]
|
|
-- elseif name == "raidDebuffs" then
|
|
-- if Cell.isRetail then
|
|
-- data["related"]["cleuAuras"] = CellDB["cleuAuras"]
|
|
-- data["related"]["cleuGlow"] = CellDB["cleuGlow"]
|
|
-- end
|
|
elseif name == "targetedSpells" then
|
|
data["related"]["targetedSpellsList"] = CellDB["targetedSpellsList"]
|
|
data["related"]["targetedSpellsGlow"] = CellDB["targetedSpellsGlow"]
|
|
elseif name == "actions" then
|
|
data["related"]["actions"] = CellDB["actions"]
|
|
end
|
|
end
|
|
-- texplore(data)
|
|
|
|
title:SetText(L["Export"]..": ".."|cff90EE90"..builtIn.." "..L["built-in(s)"].."|r, |cffFFB5C5"..custom.." "..L["custom(s)"].."|r")
|
|
|
|
-- prepare string
|
|
local prefix = "!CELL:"..Cell.versionNum..":INDICATOR:"..(builtIn+custom).."!"
|
|
|
|
local exported = Serializer:Serialize(data) -- serialize
|
|
exported = LibDeflate:CompressDeflate(exported, deflateConfig) -- compress
|
|
exported = LibDeflate:EncodeForPrint(exported) -- encode
|
|
exported = prefix..exported
|
|
|
|
textArea:SetText(exported)
|
|
end)
|
|
|
|
local closeBtn = Cell:CreateButton(listParent, L["Close"], "red", {63, 20})
|
|
closeBtn:SetPoint("BOTTOMLEFT", exportBtn, "BOTTOMRIGHT", P:Scale(-1), 0)
|
|
closeBtn:SetScript("OnClick", function()
|
|
exportParent:Hide()
|
|
end)
|
|
|
|
local allBtn = Cell:CreateButton(listParent, L["ALL"], "accent-hover", {64, 20})
|
|
allBtn:SetPoint("BOTTOMLEFT", exportBtn, "TOPLEFT", 0, P:Scale(-1))
|
|
allBtn:SetScript("OnClick", function()
|
|
for i = 1, #indicatorButtons do
|
|
Toggle(i, true)
|
|
end
|
|
Validate()
|
|
end)
|
|
|
|
local invertBtn = Cell:CreateButton(listParent, L["INVERT"], "accent-hover", {63, 20})
|
|
invertBtn:SetPoint("BOTTOMLEFT", closeBtn, "TOPLEFT", 0, P:Scale(-1))
|
|
invertBtn:SetScript("OnClick", function()
|
|
for i = 1, #indicatorButtons do
|
|
if selectedIndicators[i] then
|
|
Toggle(i, false, true)
|
|
else
|
|
Toggle(i, true)
|
|
end
|
|
end
|
|
Validate()
|
|
end)
|
|
end
|
|
|
|
-------------------------------------------------
|
|
-- functions
|
|
-------------------------------------------------
|
|
Validate = function()
|
|
if F:Getn(selectedIndicators) ~= 0 then
|
|
exportBtn:SetEnabled(true)
|
|
else
|
|
exportBtn:SetEnabled(false)
|
|
end
|
|
end
|
|
|
|
Toggle = function(index, isSelect, unhighlight)
|
|
b = indicatorButtons[index]
|
|
if isSelect then
|
|
selectedIndicators[index] = true
|
|
b:SetBackdropColor(unpack(b.hoverColor))
|
|
b:SetScript("OnEnter", nil)
|
|
b:SetScript("OnLeave", nil)
|
|
b:SetTextColor(0, 1, 0)
|
|
b.selected = true
|
|
else
|
|
selectedIndicators[index] = nil
|
|
b:SetScript("OnEnter", function(self) self:SetBackdropColor(unpack(self.hoverColor)) end)
|
|
b:SetScript("OnLeave", function(self) self:SetBackdropColor(unpack(self.color)) end)
|
|
b:SetTextColor(1, 1, 1)
|
|
b.selected = false
|
|
if unhighlight then
|
|
b:SetBackdropColor(0, 0, 0, 0)
|
|
end
|
|
end
|
|
end
|
|
|
|
local function LoadIndicators(layout)
|
|
wipe(selectedIndicators)
|
|
listFrame.scrollFrame:Reset()
|
|
|
|
local last, n
|
|
for i, t in pairs(CellDB["layouts"][layout]["indicators"]) do
|
|
local b = indicatorButtons[i]
|
|
if not b then
|
|
b = Cell:CreateButton(listFrame.scrollFrame.content, " ", "transparent-accent", {20, 20})
|
|
indicatorButtons[i] = b
|
|
b:SetScript("OnClick", function()
|
|
b.selected = not b.selected
|
|
Toggle(i, b.selected)
|
|
Validate()
|
|
end)
|
|
end
|
|
|
|
-- reset
|
|
b:Show()
|
|
b:SetParent(listFrame.scrollFrame.content)
|
|
b.selected = false
|
|
b:SetScript("OnEnter", function(self) self:SetBackdropColor(unpack(self.hoverColor)) end)
|
|
b:SetScript("OnLeave", function(self) self:SetBackdropColor(unpack(self.color)) end)
|
|
b:SetTextColor(1, 1, 1)
|
|
b:SetBackdropColor(0, 0, 0, 0)
|
|
|
|
if t["type"] == "built-in" then
|
|
b:SetText(L[t["name"]])
|
|
b.isBuiltIn = true
|
|
else
|
|
b:SetText(t["name"])
|
|
b.isBuiltIn = false
|
|
if not b.typeIcon then
|
|
b.typeIcon = b:CreateTexture(nil, "ARTWORK")
|
|
b.typeIcon:SetPoint("RIGHT", -2, 0)
|
|
b.typeIcon:SetSize(16, 16)
|
|
b.typeIcon:SetAlpha(0.5)
|
|
b:GetFontString():ClearAllPoints()
|
|
b:GetFontString():SetPoint("LEFT", 5, 0)
|
|
b:GetFontString():SetPoint("RIGHT", b.typeIcon, "LEFT", -2, 0)
|
|
end
|
|
b.typeIcon:SetTexture("Interface\\AddOns\\Cell\\Media\\Indicators\\indicator-"..t["type"])
|
|
end
|
|
|
|
b:SetPoint("RIGHT")
|
|
if last then
|
|
b:SetPoint("TOPLEFT", last, "BOTTOMLEFT", 0, 1)
|
|
else
|
|
b:SetPoint("TOPLEFT")
|
|
end
|
|
last = b
|
|
n = i
|
|
end
|
|
|
|
listFrame.scrollFrame:SetContentHeight(20, n, -1)
|
|
end
|
|
|
|
exportParent:SetScript("OnHide", function()
|
|
exportParent:Hide()
|
|
Cell.frames.indicatorsTab.mask:Hide()
|
|
exportFrame:Hide()
|
|
textArea:SetText("")
|
|
end)
|
|
|
|
exportParent:SetScript("OnShow", function()
|
|
Cell.frames.indicatorsTab.mask:Show()
|
|
end)
|
|
|
|
local init
|
|
function F:ShowIndicatorsExportFrame(layout)
|
|
if not init then
|
|
init = true
|
|
CreateIndicatorsExportFrame()
|
|
end
|
|
|
|
exportParent:Show()
|
|
from:SetText(layout == "default" and _G.DEFAULT or layout)
|
|
LoadIndicators(layout)
|
|
fromLayout = layout
|
|
end
|