|
|
|
|
--[[
|
|
|
|
|
|
|
|
|
|
This file is part of 'Masque', an add-on for World of Warcraft. For bug reports,
|
|
|
|
|
documentation and license information, please visit https://github.com/SFX-WoW/Masque.
|
|
|
|
|
|
|
|
|
|
* File...: Options\Info.lua
|
|
|
|
|
* Author.: StormFX
|
|
|
|
|
|
|
|
|
|
'Installed Skins' Group/Panel
|
|
|
|
|
|
|
|
|
|
]]
|
|
|
|
|
|
|
|
|
|
local MASQUE, Core = ...
|
|
|
|
|
|
|
|
|
|
----------------------------------------
|
|
|
|
|
-- Lua API
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
local pairs, tostring = pairs, tostring
|
|
|
|
|
|
|
|
|
|
----------------------------------------
|
|
|
|
|
-- Libraries
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
local LIB_ACR = LibStub("AceConfigRegistry-3.0")
|
|
|
|
|
|
|
|
|
|
----------------------------------------
|
|
|
|
|
-- Internal
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
-- @ Locales\enUS
|
|
|
|
|
local L = Core.Locale
|
|
|
|
|
|
|
|
|
|
-- @ Masque
|
|
|
|
|
local OLD_VERSION = Core.OLD_VERSION
|
|
|
|
|
|
|
|
|
|
-- @ Options\Core
|
|
|
|
|
local CRLF = Core.CRLF
|
|
|
|
|
local Setup = Core.Setup
|
|
|
|
|
|
|
|
|
|
----------------------------------------
|
|
|
|
|
-- Locals
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
-- Formatted Text
|
|
|
|
|
local UPDATED = "|cff00ff00"..L["Compatible"].."|r"
|
|
|
|
|
local COMPATIBLE = "|cffffff00"..L["Compatible"].."|r"
|
|
|
|
|
local UNKNOWN = "|cff777777"..L["Unknown"].."|r"
|
|
|
|
|
|
|
|
|
|
-- Reusable Header
|
|
|
|
|
local HDR = {
|
|
|
|
|
type = "header",
|
|
|
|
|
name = L["Description"],
|
|
|
|
|
order = 1,
|
|
|
|
|
disabled = true,
|
|
|
|
|
dialogControl = "SFX-Header",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-- Returns the status and tooltip for a skin based on its API_VERSION setting.
|
|
|
|
|
local function GetStatus(Version)
|
|
|
|
|
if not Version then
|
|
|
|
|
return UNKNOWN, L["The status of this skin is unknown."]
|
|
|
|
|
elseif Version >= OLD_VERSION then
|
|
|
|
|
return UPDATED, L["This skin is compatible with Masque."]
|
|
|
|
|
else
|
|
|
|
|
return COMPATIBLE, L["This skin is outdated but is still compatible with Masque."]
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
----------------------------------------
|
|
|
|
|
-- Options Builder
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
-- Creates a skin info options group.
|
|
|
|
|
local function GetInfoGroup(Skin, Title, Group)
|
|
|
|
|
local Order = (Group and Skin.Order) or nil
|
|
|
|
|
local Description = Skin.Description or L["No description available."]
|
|
|
|
|
local Version = (Skin.Version and tostring(Skin.Version)) or UNKNOWN
|
|
|
|
|
local Authors = Skin.Authors or Skin.Author or UNKNOWN
|
|
|
|
|
local Websites = Skin.Websites or Skin.Website
|
|
|
|
|
local Status, Tooltip = GetStatus(Skin.API_VERSION)
|
|
|
|
|
|
|
|
|
|
-- Options Group
|
|
|
|
|
local Info = {
|
|
|
|
|
type = "group",
|
|
|
|
|
name = Title,
|
|
|
|
|
order = Order,
|
|
|
|
|
args = {
|
|
|
|
|
Head = HDR,
|
|
|
|
|
Desc = {
|
|
|
|
|
type = "description",
|
|
|
|
|
name = Description..CRLF,
|
|
|
|
|
order = 2,
|
|
|
|
|
fontSize = "medium",
|
|
|
|
|
},
|
|
|
|
|
Info = {
|
|
|
|
|
type = "group",
|
|
|
|
|
name = "",
|
|
|
|
|
order = 3,
|
|
|
|
|
inline = true,
|
|
|
|
|
args = {
|
|
|
|
|
Version = {
|
|
|
|
|
type = "input",
|
|
|
|
|
name = L["Version"],
|
|
|
|
|
arg = Version..CRLF,
|
|
|
|
|
order = 1,
|
|
|
|
|
disabled = true,
|
|
|
|
|
dialogControl = "SFX-Info",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local args = Info.args.Info.args
|
|
|
|
|
Order = 2
|
|
|
|
|
|
|
|
|
|
-- Populate the Author field(s).
|
|
|
|
|
if type(Authors) == "table" then
|
|
|
|
|
local Count = #Authors
|
|
|
|
|
if Count > 0 then
|
|
|
|
|
for i = 1, Count do
|
|
|
|
|
local Key = "Author"..i
|
|
|
|
|
local Name = (i == 1 and L["Authors"]) or ""
|
|
|
|
|
args[Key] = {
|
|
|
|
|
type = "input",
|
|
|
|
|
name = Name,
|
|
|
|
|
arg = Authors[i],
|
|
|
|
|
order = Order,
|
|
|
|
|
disabled = true,
|
|
|
|
|
dialogControl = "SFX-Info",
|
|
|
|
|
}
|
|
|
|
|
Order = Order + 1
|
|
|
|
|
end
|
|
|
|
|
args["SPC"..Order] = {
|
|
|
|
|
type = "description",
|
|
|
|
|
name = " ",
|
|
|
|
|
order = Order,
|
|
|
|
|
}
|
|
|
|
|
Order = Order + 1
|
|
|
|
|
end
|
|
|
|
|
elseif type(Authors) == "string" then
|
|
|
|
|
args.Author = {
|
|
|
|
|
type = "input",
|
|
|
|
|
name = L["Author"],
|
|
|
|
|
arg = Authors,
|
|
|
|
|
order = Order,
|
|
|
|
|
disabled = true,
|
|
|
|
|
dialogControl = "SFX-Info",
|
|
|
|
|
}
|
|
|
|
|
Order = Order + 1
|
|
|
|
|
args["SPC"..Order] = {
|
|
|
|
|
type = "description",
|
|
|
|
|
name = " ",
|
|
|
|
|
order = Order,
|
|
|
|
|
}
|
|
|
|
|
Order = Order + 1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Populate the Website field(s).
|
|
|
|
|
if type(Websites) == "table" then
|
|
|
|
|
local Count = #Websites
|
|
|
|
|
if Count > 0 then
|
|
|
|
|
for i = 1, Count do
|
|
|
|
|
local Key = "Website"..i
|
|
|
|
|
local Name = (i == 1) and L["Websites"] or ""
|
|
|
|
|
args[Key] = {
|
|
|
|
|
type = "input",
|
|
|
|
|
name = Name,
|
|
|
|
|
arg = Websites[i],
|
|
|
|
|
order = Order,
|
|
|
|
|
dialogControl = "SFX-Info-URL",
|
|
|
|
|
}
|
|
|
|
|
Order = Order + 1
|
|
|
|
|
end
|
|
|
|
|
args["SPC"..Order] = {
|
|
|
|
|
type = "description",
|
|
|
|
|
name = " ",
|
|
|
|
|
order = Order,
|
|
|
|
|
}
|
|
|
|
|
Order = Order + 1
|
|
|
|
|
end
|
|
|
|
|
elseif type(Websites) == "string" then
|
|
|
|
|
args.Website = {
|
|
|
|
|
type = "input",
|
|
|
|
|
name = L["Website"],
|
|
|
|
|
arg = Websites,
|
|
|
|
|
order = Order,
|
|
|
|
|
dialogControl = "SFX-Info",
|
|
|
|
|
}
|
|
|
|
|
Order = Order + 1
|
|
|
|
|
args["SPC"..Order] = {
|
|
|
|
|
type = "description",
|
|
|
|
|
name = " ",
|
|
|
|
|
order = Order,
|
|
|
|
|
}
|
|
|
|
|
Order = Order + 1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Status
|
|
|
|
|
args.Status = {
|
|
|
|
|
type = "input",
|
|
|
|
|
name = L["Status"],
|
|
|
|
|
desc = Tooltip,
|
|
|
|
|
arg = Status,
|
|
|
|
|
order = Order,
|
|
|
|
|
dialogControl = "SFX-Info",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Info
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
----------------------------------------
|
|
|
|
|
-- Setup
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
-- Creates/Removes the 'Installed Skins' options group/panel.
|
|
|
|
|
function Setup.Info(self)
|
|
|
|
|
if not self.OptionsLoaded then return end
|
|
|
|
|
|
|
|
|
|
local cArgs = self.Options.args.Core.args
|
|
|
|
|
|
|
|
|
|
if not self.db.profile.SkinInfo then
|
|
|
|
|
cArgs.SkinInfo = nil
|
|
|
|
|
elseif not cArgs.SkinInfo then
|
|
|
|
|
local Tooltip = "|cffffffff"..L["Select to view."].."|r"
|
|
|
|
|
|
|
|
|
|
local Options = {
|
|
|
|
|
type = "group",
|
|
|
|
|
name = L["Installed Skins"],
|
|
|
|
|
desc = Tooltip,
|
|
|
|
|
get = self.GetArg,
|
|
|
|
|
set = self.NoOp,
|
|
|
|
|
order = 4,
|
|
|
|
|
args = {
|
|
|
|
|
Head = {
|
|
|
|
|
type = "header",
|
|
|
|
|
name = L["Installed Skins"],
|
|
|
|
|
order = 0,
|
|
|
|
|
disabled = true,
|
|
|
|
|
dialogControl = "SFX-Header",
|
|
|
|
|
},
|
|
|
|
|
Desc = {
|
|
|
|
|
type = "description",
|
|
|
|
|
name = L["This section provides information on any skins you have installed."]..CRLF,
|
|
|
|
|
fontSize = "medium",
|
|
|
|
|
order = 1,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local Skins, SkinList = self.Skins, self.SkinList
|
|
|
|
|
local args = Options.args
|
|
|
|
|
|
|
|
|
|
-- Create the info groups.
|
|
|
|
|
for SkinID in pairs(SkinList) do
|
|
|
|
|
local Skin = Skins[SkinID]
|
|
|
|
|
local Group = Skin.Group
|
|
|
|
|
|
|
|
|
|
if Group then
|
|
|
|
|
local Title = Skin.Title or SkinID
|
|
|
|
|
|
|
|
|
|
if not args[Group] then
|
|
|
|
|
args[Group] = {
|
|
|
|
|
type = "group",
|
|
|
|
|
name = Group,
|
|
|
|
|
desc = Tooltip,
|
|
|
|
|
args = {},
|
|
|
|
|
childGroups = "select",
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
args[Group].args[SkinID] = GetInfoGroup(Skin, Title, Group)
|
|
|
|
|
else
|
|
|
|
|
args[SkinID] = GetInfoGroup(Skin, SkinID)
|
|
|
|
|
args[SkinID].desc = Tooltip
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
cArgs.SkinInfo = Options
|
|
|
|
|
else
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
LIB_ACR:NotifyChange(MASQUE)
|
|
|
|
|
end
|