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.

286 lines
6.1 KiB

--[[
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