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.
114 lines
4.5 KiB
114 lines
4.5 KiB
--- ============================ HEADER ============================
|
|
--- ======= LOCALIZE =======
|
|
-- Addon
|
|
local addonName, HR = ...;
|
|
-- HeroLib
|
|
local HL = HeroLib;
|
|
local Utils = HL.Utils;
|
|
-- Lua
|
|
local stringformat = string.format;
|
|
local stringgmatch = string.gmatch;
|
|
local strsplit = strsplit;
|
|
local tableconcat = table.concat;
|
|
-- File Locals
|
|
local CreatePanelOption = HL.GUI.CreatePanelOption;
|
|
local StringToNumberIfPossible = Utils.StringToNumberIfPossible;
|
|
|
|
|
|
--- ============================ CONTENT ============================
|
|
HR.GUI = {};
|
|
|
|
function HR.GUI.LoadSettingsRecursively (Table, KeyChain)
|
|
local KeyChain = KeyChain or "";
|
|
for Key, Value in pairs(Table) do
|
|
-- Generate the NewKeyChain
|
|
local NewKeyChain;
|
|
if KeyChain ~= "" then
|
|
NewKeyChain = KeyChain .. "." .. Key;
|
|
else
|
|
NewKeyChain = Key;
|
|
end
|
|
-- Continue the table browsing
|
|
if type(Value) == "table" then
|
|
HR.GUI.LoadSettingsRecursively(Value, NewKeyChain);
|
|
-- Update the value
|
|
else
|
|
-- Check if the final key is a string or a number (the case for table values with numeric index)
|
|
local ParsedKey = StringToNumberIfPossible(Key);
|
|
-- Load the saved value
|
|
local DBSetting = HeroRotationDB.GUISettings[NewKeyChain];
|
|
-- If the saved value exists, take it
|
|
if DBSetting ~= nil then
|
|
Table[ParsedKey] = DBSetting;
|
|
-- Else, save the default value
|
|
else
|
|
HeroRotationDB.GUISettings[NewKeyChain] = Value;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
do
|
|
local function GCDName (Name)
|
|
return stringformat("Show GCD as Off GCD: %s", Name);
|
|
end
|
|
local function GCDDesc (Name)
|
|
return stringformat("Enable if you want to put %s shown as Off GCD (top icons) instead of Main (Middle icon).", Name);
|
|
end
|
|
local function OffGCDName (Name)
|
|
return stringformat("Show Off GCD as Off GCD: %s", Name);
|
|
end
|
|
local function OffGCDDesc (Name)
|
|
return stringformat("Enable if you want to put %s shown as Off GCD (top icons) instead of Main (Middle icon).", Name);
|
|
end
|
|
local CreateARPanelOption = {
|
|
Enabled = function (Panel, Setting, Name)
|
|
CreatePanelOption("CheckButton", Panel, Setting, "Show: " .. Name, "Enable if you want to show when to use " .. Name .. ".");
|
|
end,
|
|
DisplayStyle = function(Panel, Setting, Name)
|
|
CreatePanelOption("Dropdown", Panel, Setting, {"Main Icon", "Suggested", "SuggestedRight", "Cooldown"}, "Display Style: " .. Name, "Define which icon display style to use for " .. Name .. ".");
|
|
end,
|
|
PotionType = function(Panel, Setting, Name)
|
|
CreatePanelOption("Dropdown", Panel, Setting, {"Power", "Frozen Focus", "Chilled Clarity", "Shocking Disclosure"}, "Potion Type: ", "Define which potion type to track.\n\nThe Power option will include Fleeting Ultimate Power, Fleeting Power, Ultimate Power, and Power potions.");
|
|
end,
|
|
GCDasOffGCD = function(Panel, Setting, Name)
|
|
CreatePanelOption("CheckButton", Panel, Setting, GCDName(Name), GCDDesc(Name));
|
|
end,
|
|
OffGCDasOffGCD = function(Panel, Setting, Name)
|
|
CreatePanelOption("CheckButton", Panel, Setting, OffGCDName(Name), OffGCDDesc(Name));
|
|
end
|
|
};
|
|
function HR.GUI.CreateARPanelOption (Type, Panel, Setting, ...)
|
|
CreateARPanelOption[Type](Panel, Setting, ...);
|
|
end
|
|
|
|
function HR.GUI.CreateARPanelOptions (Panel, Settings)
|
|
-- Find the corresponding setting table
|
|
local SettingsSplit = {strsplit(".", Settings)};
|
|
local SettingsTable = HR.GUISettings;
|
|
for i = 1, #SettingsSplit do
|
|
SettingsTable = SettingsTable[SettingsSplit[i]];
|
|
end
|
|
-- Iterate over all options available
|
|
for Type, _ in pairs(CreateARPanelOption) do
|
|
SettingsType = SettingsTable[Type];
|
|
if SettingsType then
|
|
for SettingName, _ in pairs(SettingsType) do
|
|
-- Split the key on uppercase matches
|
|
local Name = "";
|
|
for Word in stringgmatch(SettingName, "[A-Z][a-z]+") do
|
|
if Name == "" then
|
|
Name = Word;
|
|
else
|
|
Name = Name .. " " .. Word;
|
|
end
|
|
end
|
|
-- Rewrite the setting string
|
|
local Setting = tableconcat({Settings, Type, SettingName}, ".");
|
|
-- Construct the option
|
|
HR.GUI.CreateARPanelOption(Type, Panel, Setting, Name);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|