Plugins: Add MustExist/MustNotExist/IsFolder to PluginOptionFilePath
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace Il2CppInspector.PluginAPI.V100
|
namespace Il2CppInspector.PluginAPI.V100
|
||||||
@@ -148,8 +149,37 @@ namespace Il2CppInspector.PluginAPI.V100
|
|||||||
throw new ArgumentException("Path name is required");
|
throw new ArgumentException("Path name is required");
|
||||||
|
|
||||||
// Throws an exception if the path is invalid (file or folder may or may not exist)
|
// Throws an exception if the path is invalid (file or folder may or may not exist)
|
||||||
System.IO.Path.GetFullPath(path ?? "");
|
var fullPath = Path.GetFullPath(path ?? "");
|
||||||
|
var fileName = Path.GetFileName(fullPath);
|
||||||
|
|
||||||
|
if (IsFolder) {
|
||||||
|
if (MustExist && !Directory.Exists(fullPath))
|
||||||
|
throw new ArgumentException($"Directory {fileName} does not exist");
|
||||||
|
if (MustNotExist && Directory.Exists(fullPath))
|
||||||
|
throw new ArgumentException($"Directory {fileName} already exists");
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if (MustExist && !File.Exists(fullPath))
|
||||||
|
throw new ArgumentException($"File {fileName} does not exist");
|
||||||
|
if (MustNotExist && File.Exists(fullPath))
|
||||||
|
throw new ArgumentException($"File {fileName} already exists");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Set this to true if you want the user to specify a folder rather than a file
|
||||||
|
/// </summary>
|
||||||
|
public bool IsFolder = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Set this to true if the specified file or folder must exist
|
||||||
|
/// </summary>
|
||||||
|
public bool MustExist = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Set this to true if the specified file or folder must not exist
|
||||||
|
/// </summary>
|
||||||
|
public bool MustNotExist = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -9,12 +9,14 @@
|
|||||||
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||||
<UseWPF>true</UseWPF>
|
<UseWPF>true</UseWPF>
|
||||||
<AssemblyName>Il2CppInspector</AssemblyName>
|
<AssemblyName>Il2CppInspector</AssemblyName>
|
||||||
<Version>2020.2.1</Version>
|
<Version>2021.1</Version>
|
||||||
<Authors>Katy Coe</Authors>
|
<Authors>Katy Coe</Authors>
|
||||||
<Company>Noisy Cow Studios</Company>
|
<Company>Noisy Cow Studios</Company>
|
||||||
<Product>Il2CppInspector Windows Edition</Product>
|
<Product>Il2CppInspector Windows Edition</Product>
|
||||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
<ApplicationIcon>Il2CppInspector.ico</ApplicationIcon>
|
<ApplicationIcon>Il2CppInspector.ico</ApplicationIcon>
|
||||||
|
<AssemblyVersion>2021.1.0.0</AssemblyVersion>
|
||||||
|
<FileVersion>2021.1.0.0</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ using System.Linq;
|
|||||||
using Il2CppInspector.PluginAPI.V100;
|
using Il2CppInspector.PluginAPI.V100;
|
||||||
using Il2CppInspector.Reflection;
|
using Il2CppInspector.Reflection;
|
||||||
using Il2CppInspector;
|
using Il2CppInspector;
|
||||||
|
using Ookii.Dialogs.Wpf;
|
||||||
|
|
||||||
namespace Il2CppInspectorGUI
|
namespace Il2CppInspectorGUI
|
||||||
{
|
{
|
||||||
@@ -134,22 +135,49 @@ namespace Il2CppInspectorGUI
|
|||||||
|
|
||||||
var option = (PluginOptionFilePath) ((Button) sender).DataContext;
|
var option = (PluginOptionFilePath) ((Button) sender).DataContext;
|
||||||
|
|
||||||
|
string path = null;
|
||||||
|
|
||||||
|
if (option.IsFolder && option.MustExist) {
|
||||||
|
var openFolderDialog = new VistaFolderBrowserDialog {
|
||||||
|
SelectedPath = option.Value,
|
||||||
|
Description = option.Description,
|
||||||
|
UseDescriptionForTitle = true
|
||||||
|
};
|
||||||
|
if (openFolderDialog.ShowDialog() == true) {
|
||||||
|
path = openFolderDialog.SelectedPath;
|
||||||
|
}
|
||||||
|
} else if (option.MustExist) {
|
||||||
var openFileDialog = new OpenFileDialog {
|
var openFileDialog = new OpenFileDialog {
|
||||||
Title = option.Description,
|
Title = option.Description,
|
||||||
Filter = "All files (*.*)|*.*",
|
Filter = "All files (*.*)|*.*",
|
||||||
FileName = option.Value,
|
FileName = option.Value,
|
||||||
CheckFileExists = false,
|
CheckFileExists = true,
|
||||||
CheckPathExists = false
|
CheckPathExists = true
|
||||||
};
|
};
|
||||||
|
|
||||||
if (openFileDialog.ShowDialog() == true) {
|
if (openFileDialog.ShowDialog() == true) {
|
||||||
|
path = openFileDialog.FileName;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var saveFileDialog = new SaveFileDialog {
|
||||||
|
Title = option.Description,
|
||||||
|
Filter = "All files (*.*)|*.*",
|
||||||
|
FileName = option.Value,
|
||||||
|
CheckFileExists = false,
|
||||||
|
OverwritePrompt = false
|
||||||
|
};
|
||||||
|
if (saveFileDialog.ShowDialog() == true) {
|
||||||
|
path = saveFileDialog.FileName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (path != null) {
|
||||||
// This spaghetti saves us from implementing INotifyPropertyChanged on Plugin.Options
|
// This spaghetti saves us from implementing INotifyPropertyChanged on Plugin.Options
|
||||||
// (we don't want to expose WPF stuff in our SDK)
|
// (we don't want to expose WPF stuff in our SDK)
|
||||||
// Will break if we change the format of the FilePathDataTemplate too much
|
// Will break if we change the format of the FilePathDataTemplate too much
|
||||||
var tb = ((DockPanel) ((Button) sender).Parent).Children.OfType<StackPanel>().First().Children.OfType<TextBox>().First(n => n.Name == "valueControl");
|
var tb = ((DockPanel) ((Button) sender).Parent).Children.OfType<StackPanel>().First().Children.OfType<TextBox>().First(n => n.Name == "valueControl");
|
||||||
try {
|
try {
|
||||||
tb.Clear();
|
tb.Clear();
|
||||||
tb.AppendText(openFileDialog.FileName);
|
tb.AppendText(path);
|
||||||
tb.GetBindingExpression(TextBox.TextProperty).UpdateSource();
|
tb.GetBindingExpression(TextBox.TextProperty).UpdateSource();
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
|
|||||||
Reference in New Issue
Block a user