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.

178 lines
5.3 KiB

local E, L, C = select(2, ...):unpack()
local PS = E.ProfileSharing
local selectedProfileType, selectedProfileSrc, selectedProfileDest
local selectedProfileZone, selectedProfileOption
local tbl = {}
PS.profileTypeValues = {
["all"] = format("%s + %s", GENERAL, FRIENDLY),
["cds"] = L["Spell Editor"],
}
local ProfileValues = function() return E.DB:GetProfiles(tbl) end
local ProfileSharing = {
name = L["Profile Sharing"],
order = 1100,
type = "group",
args = {
desc = {
name = "",
order = 1,
type = "description",
},
export = {
name = L["Export Profile"],
order = 100,
type = "group",
inline = true,
args = {
lb1 = {
name = L["Exports your currently active profile."], order = 0, type = "description",
},
profileType = {
name = L["Profile Type"],
order = 1,
type = "select",
values = PS.profileTypeValues,
get = function() return selectedProfileType end,
set = function(_, value) selectedProfileType = value end,
},
openExportDialog = {
disabled = function() return not selectedProfileType end,
name = L["Export"],
order = 2,
type = "execute",
func = function()
local profileKey, encodedData = PS:ExportProfile(selectedProfileType)
PS:ShowProfileDialog(encodedData or PS.errorMsg)
end,
},
}
},
import = {
name = L["Import Profile"],
order = 200,
type = "group",
inline = true,
args = {
lb1 = {
name = format(L["Importing \`%s\` will create a new profile."], PS.profileTypeValues.all),
order = 0, type = "description",
},
lb2 = {
name = format(L["Importing \`%s\` will merge new spells to your list and overwrite same spells."], PS.profileTypeValues.cds),
order = 1, type = "description",
},
openImportDialog = {
name = L["Import"],
order = 3,
type = "execute",
func = function() PS:ShowProfileDialog(nil) end,
},
}
},
lb1 = {
name = "\n\n", order = 201, type = "description",
},
copy = {
name = L["Copy Zone Segments"],
order = 300,
type = "group",
inline = true,
args = {
lb1 = {
name = L["Tool to copy portions of a profile to another existing profile."],
order = 0, type = "description",
},
src = {
name = L["Source Profile"],
order = 1,
type = "select",
values = ProfileValues,
get = function() return selectedProfileSrc end,
set = function(_, value) selectedProfileSrc = value end,
},
zone = {
name = ZONE,
order = 2,
type = "select",
values = E.L_CFG_ZONE,
sorting = { "arena", "pvp", "party", "raid" },
get = function() return selectedProfileZone end,
set = function(_, value) selectedProfileZone = value end,
},
option = {
name = OPTIONS,
desc = L["Value \'Manual Position\' includes Interrupt and Raid Bar's saved positions."],
order = 3,
type = "select",
values = {
["all"] = ALL,
["general"] = GENERAL,
["position"] = L["Position"],
["manualPos"] = L["Manual Position"],
["icons"] = L["Icons"],
["highlight"] = L["Highlighting"],
["priority"] = L["Priority"],
["frame"] = L["Frame"],
["spells"] = L["Spells"],
["spellFrame"] = format("%s-%s",L["Spells"], L["Bar"]),
["spellPriority"] = format("%s-%s",L["Spells"], L["Priority"]),
["spellGlow"] = format("%s-%s",L["Spells"], L["Glow"]),
["extraBars"] = L["Raid Bar"],
},
sorting = { "all", "general", "position", "manualPos", "icons", "highlight", "priority", "frame", "spells", "spellFrame", "spellPriority", "spellGlow", "extraBars" },
get = function() return selectedProfileOption end,
set = function(_, value) selectedProfileOption = value end,
},
dest = {
name = L["Destination Profile"],
order = 4,
type = "select",
values = ProfileValues,
get = function() return selectedProfileDest end,
set = function(_, value) selectedProfileDest = value end,
disabledItem = function() return selectedProfileSrc end,
},
copy = {
disabled = function()
return not selectedProfileSrc or not selectedProfileZone or not selectedProfileOption or not selectedProfileDest
end,
name = L["Copy"],
order = 5,
type = "execute",
func = function()
local src = selectedProfileSrc and tbl[selectedProfileSrc]
local dest = selectedProfileDest and tbl[selectedProfileDest]
local current = E.DB:GetCurrentProfile()
if selectedProfileOption == "all" then
local t = OmniCDDB.profiles[src].Party[selectedProfileZone]
if t then
OmniCDDB.profiles[dest].Party[selectedProfileZone] = E:DeepCopy(t)
end
else
local t = OmniCDDB.profiles[src].Party[selectedProfileZone] and OmniCDDB.profiles[src].Party[selectedProfileZone][selectedProfileOption]
if t then
OmniCDDB.profiles[dest].Party = OmniCDDB.profiles[dest].Party or {}
OmniCDDB.profiles[dest].Party[selectedProfileZone] = OmniCDDB.profiles[dest].Party[selectedProfileZone] or {}
OmniCDDB.profiles[dest].Party[selectedProfileZone][selectedProfileOption] = E:DeepCopy(t)
end
end
if dest == current then
E:RefreshProfile(current)
end
end,
},
}
}
}
}
function E:AddProfileSharing()
self.options.args["ProfileSharing"] = ProfileSharing
end