mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-13 12:14:17 +01:00
Add mod root directory max length and warnings on non-ascii characters.
This commit is contained in:
parent
5f8eac0ec1
commit
787c19a170
1 changed files with 15 additions and 6 deletions
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using Dalamud.Interface;
|
||||
using Dalamud.Interface.ImGuiFileDialog;
|
||||
|
|
@ -16,6 +17,7 @@ public partial class ConfigWindow
|
|||
{
|
||||
private partial class SettingsTab
|
||||
{
|
||||
public const int RootDirectoryMaxLength = 64;
|
||||
private readonly ConfigWindow _window;
|
||||
|
||||
public SettingsTab( ConfigWindow window )
|
||||
|
|
@ -65,11 +67,18 @@ public partial class ConfigWindow
|
|||
|
||||
// Do not change the directory without explicitly pressing enter or this button.
|
||||
// Shows up only if the current input does not correspond to the current directory.
|
||||
private static bool DrawPressEnterWarning( string old, float width )
|
||||
private static bool DrawPressEnterWarning( string newName, string old, float width, bool saved )
|
||||
{
|
||||
using var color = ImRaii.PushColor( ImGuiCol.Button, Colors.PressEnterWarningBg );
|
||||
var w = new Vector2( width, 0 );
|
||||
return ImGui.Button( $"Press Enter or Click Here to Save (Current Directory: {old})", w );
|
||||
var symbol = '\0';
|
||||
var (text, valid) = newName.Length > RootDirectoryMaxLength
|
||||
? ( $"Path is too long. The maximum length is {RootDirectoryMaxLength}.", false )
|
||||
: newName.Any( c => ( symbol = c ) > ( char )0x7F )
|
||||
? ( $"Path contains invalid symbol {symbol}. Only ASCII is allowed.", false )
|
||||
: ( $"Press Enter or Click Here to Save (Current Directory: {old})", true );
|
||||
|
||||
return ( ImGui.Button( text, w ) || saved ) && valid;
|
||||
}
|
||||
|
||||
// Draw a directory picker button that toggles the directory picker.
|
||||
|
|
@ -128,7 +137,7 @@ public partial class ConfigWindow
|
|||
var spacing = 3 * ImGuiHelpers.GlobalScale;
|
||||
using var group = ImRaii.Group();
|
||||
ImGui.SetNextItemWidth( _window._inputTextWidth.X - spacing - _window._iconButtonSize.X );
|
||||
var save = ImGui.InputText( "##rootDirectory", ref _newModDirectory, 255, ImGuiInputTextFlags.EnterReturnsTrue );
|
||||
var save = ImGui.InputText( "##rootDirectory", ref _newModDirectory, 64, ImGuiInputTextFlags.EnterReturnsTrue );
|
||||
using var style = ImRaii.PushStyle( ImGuiStyleVar.ItemSpacing, new Vector2( spacing, 0 ) );
|
||||
ImGui.SameLine();
|
||||
DrawDirectoryPickerButton();
|
||||
|
|
@ -147,7 +156,7 @@ public partial class ConfigWindow
|
|||
|
||||
if( Penumbra.Config.ModDirectory != _newModDirectory
|
||||
&& _newModDirectory.Length != 0
|
||||
&& ( save || DrawPressEnterWarning( Penumbra.Config.ModDirectory, pos ) ) )
|
||||
&& DrawPressEnterWarning( _newModDirectory, Penumbra.Config.ModDirectory, pos, save ) )
|
||||
{
|
||||
Penumbra.ModManager.DiscoverMods( _newModDirectory );
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue