1
0
mirror of synced 2025-02-25 22:38:07 +01:00

Adjust program to use one instance for loading files (can be disabled in config)

This commit is contained in:
KillzXGaming 2019-08-11 11:10:32 -04:00
parent 9a70890924
commit e15e00c2c0
10 changed files with 78 additions and 18 deletions

Binary file not shown.

View File

@ -244,6 +244,9 @@ namespace Toolbox.Library
case "CustomPicureBoxBGColor": case "CustomPicureBoxBGColor":
TryParseHexColor(node, ref Runtime.CustomPicureBoxBGColor); TryParseHexColor(node, ref Runtime.CustomPicureBoxBGColor);
break; break;
case "UseSingleInstance":
bool.TryParse(node.InnerText, out Runtime.UseSingleInstance);
break;
} }
} }
@ -368,6 +371,8 @@ namespace Toolbox.Library
XmlNode mainSettingsNode = doc.CreateElement("MAINFORM"); XmlNode mainSettingsNode = doc.CreateElement("MAINFORM");
parentNode.AppendChild(mainSettingsNode); parentNode.AppendChild(mainSettingsNode);
mainSettingsNode.AppendChild(createNode(doc, "UseSingleInstance", Runtime.UseSingleInstance.ToString()));
mainSettingsNode.AppendChild(createNode(doc, "UseDirectXTexDecoder", Runtime.UseDirectXTexDecoder.ToString())); mainSettingsNode.AppendChild(createNode(doc, "UseDirectXTexDecoder", Runtime.UseDirectXTexDecoder.ToString()));
mainSettingsNode.AppendChild(createNode(doc, "AlwaysCompressOnSave", Runtime.AlwaysCompressOnSave.ToString())); mainSettingsNode.AppendChild(createNode(doc, "AlwaysCompressOnSave", Runtime.AlwaysCompressOnSave.ToString()));
mainSettingsNode.AppendChild(createNode(doc, "DisplayViewport", Runtime.DisplayViewport.ToString())); mainSettingsNode.AppendChild(createNode(doc, "DisplayViewport", Runtime.DisplayViewport.ToString()));

View File

@ -106,6 +106,7 @@ namespace Toolbox.Library.Forms
} }
public void SelectFirstNode() { if (ObjectTree != null) ObjectTree.SelectFirstNode(); } public void SelectFirstNode() { if (ObjectTree != null) ObjectTree.SelectFirstNode(); }
public void SelectNode(TreeNode node) { if (ObjectTree != null) ObjectTree.SelectNode(node); }
public void SortTreeAscending() { if (ObjectTree != null) ObjectTree.SortTreeAscending(); } public void SortTreeAscending() { if (ObjectTree != null) ObjectTree.SortTreeAscending(); }

View File

@ -58,6 +58,8 @@ namespace Toolbox.Library.Forms
FileRoot.Nodes.Add(n); FileRoot.Nodes.Add(n);
} }
SelectNode(FileRoot);
for (int i = 0; i < FileRoot.FileNodes.Count; i++) for (int i = 0; i < FileRoot.FileNodes.Count; i++)
{ {
if (FileRoot.FileNodes[i].Item1.OpenFileFormatOnLoad) if (FileRoot.FileNodes[i].Item1.OpenFileFormatOnLoad)
@ -563,6 +565,11 @@ namespace Toolbox.Library.Forms
treeViewCustom1.Sort(); treeViewCustom1.Sort();
} }
public void SelectNode(TreeNode node)
{
treeViewCustom1.SelectedNode = node;
}
private void splitter1_Resize(object sender, EventArgs e) private void splitter1_Resize(object sender, EventArgs e)
{ {
} }

View File

@ -15,10 +15,9 @@ namespace Toolbox.Library
public class Runtime public class Runtime
{ {
public static bool UseSingleInstance = true;
public static bool UseDirectXTexDecoder = true; public static bool UseDirectXTexDecoder = true;
public static bool DEVELOPER_DEBUG_MODE = false; public static bool DEVELOPER_DEBUG_MODE = false;
public static bool AlwaysCompressOnSave = false; public static bool AlwaysCompressOnSave = false;
public static class ResourceTables public static class ResourceTables

View File

@ -51,8 +51,6 @@ namespace Toolbox
FormThemes.ActivePreset = FormThemes.Preset.Dark; FormThemes.ActivePreset = FormThemes.Preset.Dark;
InitializeComponent(); InitializeComponent();
LoadConfig();
} }
public void UpdateForm() public void UpdateForm()
@ -65,7 +63,7 @@ namespace Toolbox
} }
//Use for files opened with program //Use for files opened with program
public List<string> openedFiles = new List<string>(); public List<string> OpenedFiles = new List<string>();
private void Form1_Load(object sender, EventArgs e) private void Form1_Load(object sender, EventArgs e)
{ {
@ -122,13 +120,13 @@ namespace Toolbox
ReloadFiles(); ReloadFiles();
LoadPluginFileContextMenus(); LoadPluginFileContextMenus();
foreach (string file in openedFiles) foreach (string file in OpenedFiles)
{ {
if (File.Exists(file)) if (File.Exists(file))
OpenFile(file); OpenFile(file);
} }
openedFiles.Clear(); OpenedFiles.Clear();
if (Runtime.UseDebugDomainExceptionHandler) if (Runtime.UseDebugDomainExceptionHandler)
{ {
@ -137,6 +135,17 @@ namespace Toolbox
} }
} }
public void OpenFiles()
{
foreach (string file in OpenedFiles)
{
if (File.Exists(file))
OpenFile(file);
}
OpenedFiles.Clear();
}
private void ReloadFiles() private void ReloadFiles()
{ {
SupportedFormats = FileManager.GetFileFormats(); SupportedFormats = FileManager.GetFileFormats();
@ -324,8 +333,6 @@ namespace Toolbox
} }
SetFormatSettings(GetActiveIFileFormat()); SetFormatSettings(GetActiveIFileFormat());
((ObjectEditor)editor).SelectFirstNode();
} }
private void AddObjectEditorFile(TreeNode file, ObjectEditor editor, bool ClearFiles) private void AddObjectEditorFile(TreeNode file, ObjectEditor editor, bool ClearFiles)
@ -333,6 +340,7 @@ namespace Toolbox
TabDupeIndex = 0; TabDupeIndex = 0;
editor.MdiParent = this; editor.MdiParent = this;
editor.AddNode(file, ClearFiles); editor.AddNode(file, ClearFiles);
editor.SelectNode(file);
if (file is TreeNodeFile) if (file is TreeNodeFile)
{ {
@ -558,7 +566,7 @@ namespace Toolbox
#region Form Settings and plugin menus #region Form Settings and plugin menus
private void LoadConfig() public static void LoadConfig()
{ {
try try
{ {

View File

@ -6,6 +6,7 @@ using System.Windows.Forms;
using System.IO; using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Reflection; using System.Reflection;
using Microsoft.VisualBasic.ApplicationServices;
namespace Toolbox namespace Toolbox
{ {
@ -35,10 +36,6 @@ namespace Toolbox
var domain = AppDomain.CurrentDomain; var domain = AppDomain.CurrentDomain;
domain.AssemblyResolve += LoadAssembly; domain.AssemblyResolve += LoadAssembly;
MainForm form = new MainForm();
form.openedFiles = Files;
bool LoadedDX = TryLoadDirectXTex(); bool LoadedDX = TryLoadDirectXTex();
if (!LoadedDX && !Toolbox.Library.Runtime.UseDirectXTexDecoder) if (!LoadedDX && !Toolbox.Library.Runtime.UseDirectXTexDecoder)
{ {
@ -49,10 +46,53 @@ namespace Toolbox
System.Diagnostics.Process.Start("https://www.microsoft.com/en-us/download/details.aspx?id=35"); System.Diagnostics.Process.Start("https://www.microsoft.com/en-us/download/details.aspx?id=35");
} }
} }
Toolbox.Library.Runtime.UseDirectXTexDecoder= LoadedDX;
MainForm.LoadConfig();
if (Toolbox.Library.Runtime.UseSingleInstance)
{
SingleInstanceController controller = new SingleInstanceController();
controller.Run(args);
}
else
{
MainForm form = new MainForm();
form.OpenedFiles = Files;
Application.Run(form); Application.Run(form);
} }
}
public class SingleInstanceController : WindowsFormsApplicationBase
{
public SingleInstanceController()
{
IsSingleInstance = true;
Startup += OnStart;
StartupNextInstance += Program_StartupNextInstance;
}
private void OnStart(object sender, StartupEventArgs e)
{
List<string> args = new List<string>();
foreach (string arg in e.CommandLine)
args.Add(arg);
Toolbox.MainForm.Instance.OpenedFiles = args;
}
void Program_StartupNextInstance(object sender, StartupNextInstanceEventArgs e)
{
e.BringToForeground = true;
MainForm form = MainForm as MainForm;
form.OpenedFiles = e.CommandLine.ToList();
form.OpenFiles();
}
protected override void OnCreateMainForm()
{
MainForm = new MainForm();
}
}
private static bool TryLoadZSTD() private static bool TryLoadZSTD()
{ {