From bb805345b160c3a56ffa6fd632da79bd9abcbec5 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Sat, 4 Feb 2023 20:23:52 +0100 Subject: [PATCH] Minimal cleanup on option descriptions. --- .../IndividualCollections.Access.cs | 2 +- Penumbra/Import/TexToolsImporter.ModPack.cs | 2 +- Penumbra/Import/TexToolsStructs.cs | 5 ++-- Penumbra/Mods/Manager/Mod.Manager.Options.cs | 8 ++---- Penumbra/UI/ConfigWindow.ModPanel.Edit.cs | 13 ++++++--- Penumbra/UI/ConfigWindow.ModPanel.Settings.cs | 27 ++++++++++++++----- 6 files changed, 37 insertions(+), 20 deletions(-) diff --git a/Penumbra/Collections/IndividualCollections.Access.cs b/Penumbra/Collections/IndividualCollections.Access.cs index 2e421807..83f32b18 100644 --- a/Penumbra/Collections/IndividualCollections.Access.cs +++ b/Penumbra/Collections/IndividualCollections.Access.cs @@ -136,7 +136,7 @@ public sealed partial class IndividualCollections : IReadOnlyList< (string Displ return ( Penumbra.Config.UseCharacterCollectionInInspect ? identifier : ActorIdentifier.Invalid, SpecialResult.Card ); } - return ( Penumbra.Config.UseCharacterCollectionInTryOn ? _actorManager.GetGlamourPlayer() : ActorIdentifier.Invalid, SpecialResult.Glamour ); + return Penumbra.Config.UseCharacterCollectionInTryOn ? ( _actorManager.GetGlamourPlayer(), SpecialResult.Glamour ) : ( identifier, SpecialResult.Invalid ); } default: return ( identifier, SpecialResult.Invalid ); } diff --git a/Penumbra/Import/TexToolsImporter.ModPack.cs b/Penumbra/Import/TexToolsImporter.ModPack.cs index 71760187..e2edfe92 100644 --- a/Penumbra/Import/TexToolsImporter.ModPack.cs +++ b/Penumbra/Import/TexToolsImporter.ModPack.cs @@ -213,7 +213,7 @@ public partial class TexToolsImporter } Mod.CreateOptionGroup( _currentModDirectory, group.SelectionType, name, groupPriority, groupPriority, - defaultSettings ?? 0, string.Empty, options ); + defaultSettings ?? 0, group.Description, options ); ++groupPriority; } } diff --git a/Penumbra/Import/TexToolsStructs.cs b/Penumbra/Import/TexToolsStructs.cs index 1e92d1a4..da01dda2 100644 --- a/Penumbra/Import/TexToolsStructs.cs +++ b/Penumbra/Import/TexToolsStructs.cs @@ -34,8 +34,9 @@ internal class ModPackPage internal class ModGroup { public string GroupName = string.Empty; - public GroupType SelectionType = GroupType.Single; + public GroupType SelectionType = GroupType.Single; public OptionList[] OptionList = Array.Empty< OptionList >(); + public string Description = string.Empty; } [Serializable] @@ -46,7 +47,7 @@ internal class OptionList public string ImagePath = string.Empty; public SimpleMod[] ModsJsons = Array.Empty< SimpleMod >(); public string GroupName = string.Empty; - public GroupType SelectionType = GroupType.Single; + public GroupType SelectionType = GroupType.Single; public bool IsChecked = false; } diff --git a/Penumbra/Mods/Manager/Mod.Manager.Options.cs b/Penumbra/Mods/Manager/Mod.Manager.Options.cs index 1887c490..4e482612 100644 --- a/Penumbra/Mods/Manager/Mod.Manager.Options.cs +++ b/Penumbra/Mods/Manager/Mod.Manager.Options.cs @@ -128,16 +128,12 @@ public sealed partial class Mod { var group = mod._groups[ groupIdx ]; var option = group[ optionIdx ]; - if( option.Description == newDescription ) + if( option.Description == newDescription || option is not SubMod s ) { return; } - var _ = option switch - { - SubMod s => s.Description = newDescription, - }; - + s.Description = newDescription; ModOptionChanged.Invoke( ModOptionChangeType.DisplayChange, mod, groupIdx, optionIdx, -1 ); } diff --git a/Penumbra/UI/ConfigWindow.ModPanel.Edit.cs b/Penumbra/UI/ConfigWindow.ModPanel.Edit.cs index 951b0200..45f8f25c 100644 --- a/Penumbra/UI/ConfigWindow.ModPanel.Edit.cs +++ b/Penumbra/UI/ConfigWindow.ModPanel.Edit.cs @@ -311,8 +311,13 @@ public partial class ConfigWindow { _newDescriptionIdx = groupIdx; _newDesriptionOptionIdx = optionIdx; - _newDescription = groupIdx < 0 ? mod.Description : optionIdx < 0 ? mod.Groups[ groupIdx ].Description : mod.Groups[ groupIdx ][ optionIdx ].Description; - _mod = mod; + _newDescription = groupIdx < 0 + ? mod.Description + : optionIdx < 0 + ? mod.Groups[ groupIdx ].Description + : mod.Groups[ groupIdx ][ optionIdx ].Description; + + _mod = mod; ImGui.OpenPopup( PopupName ); } @@ -365,6 +370,7 @@ public partial class ConfigWindow { Penumbra.ModManager.ChangeOptionDescription( _mod, _newDescriptionIdx, _newDesriptionOptionIdx, _newDescription ); } + break; } @@ -486,7 +492,7 @@ public partial class ConfigWindow ImGui.TableSetupColumn( "idx", ImGuiTableColumnFlags.WidthFixed, 60 * ImGuiHelpers.GlobalScale ); ImGui.TableSetupColumn( "default", ImGuiTableColumnFlags.WidthFixed, ImGui.GetFrameHeight() ); ImGui.TableSetupColumn( "name", ImGuiTableColumnFlags.WidthFixed, - panel._window._inputTextWidth.X - 68 * ImGuiHelpers.GlobalScale - ImGui.GetFrameHeight() ); + panel._window._inputTextWidth.X - 72 * ImGuiHelpers.GlobalScale - ImGui.GetFrameHeight() - panel._window._iconButtonSize.X ); ImGui.TableSetupColumn( "description", ImGuiTableColumnFlags.WidthFixed, panel._window._iconButtonSize.X ); ImGui.TableSetupColumn( "delete", ImGuiTableColumnFlags.WidthFixed, panel._window._iconButtonSize.X ); ImGui.TableSetupColumn( "priority", ImGuiTableColumnFlags.WidthFixed, 50 * ImGuiHelpers.GlobalScale ); @@ -547,6 +553,7 @@ public partial class ConfigWindow { panel._delayedActions.Enqueue( () => DescriptionEdit.OpenPopup( panel._mod, groupIdx, optionIdx ) ); } + ImGui.TableNextColumn(); if( ImGuiUtil.DrawDisabledButton( FontAwesomeIcon.Trash.ToIconString(), panel._window._iconButtonSize, "Delete this option.\nHold Control while clicking to delete.", !ImGui.GetIO().KeyCtrl, true ) ) diff --git a/Penumbra/UI/ConfigWindow.ModPanel.Settings.cs b/Penumbra/UI/ConfigWindow.ModPanel.Settings.cs index 32735bc0..8f9b8c36 100644 --- a/Penumbra/UI/ConfigWindow.ModPanel.Settings.cs +++ b/Penumbra/UI/ConfigWindow.ModPanel.Settings.cs @@ -64,7 +64,7 @@ public partial class ConfigWindow if( _mod.Groups.Count > 0 ) { var useDummy = true; - foreach(var (group, idx) in _mod.Groups.WithIndex().Where(g => g.Value.Type == GroupType.Single && g.Value.IsOption )) + foreach( var (group, idx) in _mod.Groups.WithIndex().Where( g => g.Value.Type == GroupType.Single && g.Value.IsOption ) ) { ImGuiUtil.Dummy( _window._defaultSpace, useDummy ); useDummy = false; @@ -175,15 +175,27 @@ public partial class ConfigWindow for( var idx2 = 0; idx2 < group.Count; ++idx2 ) { id.Push( idx2 ); - if( ImGui.Selectable( group[ idx2 ].Name, idx2 == selectedOption ) ) + var option = group[ idx2 ]; + if( ImGui.Selectable( option.Name, idx2 == selectedOption ) ) { Penumbra.CollectionManager.Current.SetModSetting( _mod.Index, groupIdx, ( uint )idx2 ); } - if( !string.IsNullOrEmpty( group[ idx2 ].Description ) ) + if( option.Description.Length > 0 ) { + var hovered = ImGui.IsItemHovered(); ImGui.SameLine(); - ImGuiComponents.HelpMarker(group[idx2].Description); + using( var font = ImRaii.PushFont( UiBuilder.IconFont ) ) + { + using var color = ImRaii.PushColor( ImGuiCol.Text, ImGui.GetColorU32( ImGuiCol.TextDisabled ) ); + ImGuiUtil.RightAlign( FontAwesomeIcon.InfoCircle.ToIconString(), ImGui.GetStyle().ItemSpacing.X ); + } + + if( hovered ) + { + using var tt = ImRaii.Tooltip(); + ImGui.TextUnformatted( option.Description ); + } } id.Pop(); @@ -211,19 +223,20 @@ public partial class ConfigWindow Widget.BeginFramedGroup( group.Name, group.Description ); for( var idx2 = 0; idx2 < group.Count; ++idx2 ) { + var option = group[ idx2 ]; id.Push( idx2 ); var flag = 1u << idx2; var setting = ( flags & flag ) != 0; - if( ImGui.Checkbox( group[ idx2 ].Name, ref setting ) ) + if( ImGui.Checkbox( option.Name, ref setting ) ) { flags = setting ? flags | flag : flags & ~flag; Penumbra.CollectionManager.Current.SetModSetting( _mod.Index, groupIdx, flags ); } - if( !string.IsNullOrEmpty( group[ idx2 ].Description ) ) + if( option.Description.Length > 0 ) { ImGui.SameLine(); - ImGuiComponents.HelpMarker(group[idx2].Description); + ImGuiComponents.HelpMarker( option.Description ); } id.Pop();