From 1659405dc41cf04697b6da2146b08c2e2c58a824 Mon Sep 17 00:00:00 2001 From: Kurt Date: Tue, 16 May 2017 16:27:43 -0700 Subject: [PATCH] Add quick folder open menu item Closes #1137 allows loading of tab separated value text file "savpaths.txt" which can also be used to 'favorite' locations (ie, the program checks for duplicate paths and only adds the first). folder availability checked on form creation shortcut: press ctrl-F on main window Thanks @sora10pls ! --- PKHeX.Core/Resources/text/de/lang_de.txt | 7 +- PKHeX.Core/Resources/text/en/lang_en.txt | 7 +- PKHeX.Core/Resources/text/es/lang_es.txt | 7 +- PKHeX.Core/Resources/text/fr/lang_fr.txt | 9 +- PKHeX.Core/Resources/text/it/lang_it.txt | 9 +- PKHeX.Core/Resources/text/ja/lang_ja.txt | 9 +- PKHeX.Core/Resources/text/ko/lang_ko.txt | 7 +- PKHeX.Core/Resources/text/other/lang_pt.txt | 9 +- PKHeX.Core/Resources/text/zh/lang_zh.txt | 7 +- PKHeX.WinForms/MainWindow/Main.Designer.cs | 79 ++----- PKHeX.WinForms/MainWindow/Main.cs | 38 +-- PKHeX.WinForms/MainWindow/Main.resx | 176 +++++--------- PKHeX.WinForms/PKHeX.WinForms.csproj | 9 + .../Subforms/SAV_FolderList.Designer.cs | 65 ++++++ PKHeX.WinForms/Subforms/SAV_FolderList.cs | 89 ++++++++ PKHeX.WinForms/Subforms/SAV_FolderList.resx | 216 ++++++++++++++++++ PKHeX.WinForms/Util/PathUtilWindows.cs | 31 ++- 17 files changed, 489 insertions(+), 285 deletions(-) create mode 100644 PKHeX.WinForms/Subforms/SAV_FolderList.Designer.cs create mode 100644 PKHeX.WinForms/Subforms/SAV_FolderList.cs create mode 100644 PKHeX.WinForms/Subforms/SAV_FolderList.resx diff --git a/PKHeX.Core/Resources/text/de/lang_de.txt b/PKHeX.Core/Resources/text/de/lang_de.txt index 50112ad61..aed85c448 100644 --- a/PKHeX.Core/Resources/text/de/lang_de.txt +++ b/PKHeX.Core/Resources/text/de/lang_de.txt @@ -30,9 +30,6 @@ Menu_ShowdownImportPKM = Importiere Set aus Zwischenablage Menu_ShowdownExportPKM = Exportiere Set in Zwischenablage Menu_ShowdownExportParty = Exportiere Team in Zwischenablage Menu_ShowdownExportBattleBox = Exportiere Kampf-Box in Zwischenablage -Menu_CyberGadget = CyberGadget -Menu_OpenTemp = Öffne Temp Ordner -Menu_OpenCache = Öffne Cache Ordner Menu_Data = Daten Menu_LoadBoxes = Lade Boxen Menu_DumpBoxes = Dumpe Boxen @@ -40,9 +37,7 @@ Menu_Report = Box-Datenreport Menu_Database = PKM Datenbank Menu_MGDatabase = Wunderkarten Datenbank Menu_BatchEditor = Batch Editor -Menu_Other = Andere -Menu_OpenSDF = Öffne SaveDataFiler Ordner -Menu_OpenSDB = Öffne SaveDataBackup Ordner +Menu_Folder = Öffne Ordner -- Menu_Options = Optionen Menu_Language = Sprache diff --git a/PKHeX.Core/Resources/text/en/lang_en.txt b/PKHeX.Core/Resources/text/en/lang_en.txt index c80dc2aaf..8ca050fef 100644 --- a/PKHeX.Core/Resources/text/en/lang_en.txt +++ b/PKHeX.Core/Resources/text/en/lang_en.txt @@ -30,9 +30,6 @@ Menu_ShowdownImportPKM = Import Set from Clipboard Menu_ShowdownExportPKM = Export Set to Clipboard Menu_ShowdownExportParty = Export Party to Clipboard Menu_ShowdownExportBattleBox = Export Battle Box to Clipboard -Menu_CyberGadget = CyberGadget -Menu_OpenTemp = Open Temp Folder -Menu_OpenCache = Open Cache Folder Menu_Data = Data Menu_LoadBoxes = Load Boxes Menu_DumpBoxes = Dump Boxes @@ -40,9 +37,7 @@ Menu_Report = Box Data Report Menu_Database = PKM Database Menu_MGDatabase = Mystery Gift Database Menu_BatchEditor = Batch Editor -Menu_Other = Other -Menu_OpenSDF = Open SaveDataFiler Folder -Menu_OpenSDB = Open SaveDataBackup Folder +Menu_Folder = Open Folder -- Menu_Options = Options Menu_Language = Language diff --git a/PKHeX.Core/Resources/text/es/lang_es.txt b/PKHeX.Core/Resources/text/es/lang_es.txt index 383e1736a..a6c06473d 100644 --- a/PKHeX.Core/Resources/text/es/lang_es.txt +++ b/PKHeX.Core/Resources/text/es/lang_es.txt @@ -30,9 +30,6 @@ Menu_ShowdownImportPKM = Importar set desde el portapapeles Menu_ShowdownExportPKM = Exportar set desde el portapapeles Menu_ShowdownExportParty = Exportar equipo desde el portapapeles Menu_ShowdownExportBattleBox = Exportar caja de combate desde el portapapeles -Menu_CyberGadget = CyberGadget -Menu_OpenTemp = Abrir carpeta Temp -Menu_OpenCache = Abrir carpeta Cache Menu_Data = Data Menu_LoadBoxes = Cargar Cajas Menu_DumpBoxes = Exportar Cajas @@ -40,9 +37,7 @@ Menu_Report = Informe de la caja Menu_Database = Base de datos de PKM Menu_MGDatabase = Base de datos de regalo misterioso Menu_BatchEditor = Editor por lotes -Menu_Other = Otro -Menu_OpenSDF = Abrir carpeta SaveDataFiler -Menu_OpenSDB = Abrir carpeta SaveDataBackup +Menu_Folder = Abrir carpeta -- Menu_Options = Opciones Menu_Language = Idioma diff --git a/PKHeX.Core/Resources/text/fr/lang_fr.txt b/PKHeX.Core/Resources/text/fr/lang_fr.txt index 4564328d0..7ab1c2483 100644 --- a/PKHeX.Core/Resources/text/fr/lang_fr.txt +++ b/PKHeX.Core/Resources/text/fr/lang_fr.txt @@ -30,17 +30,14 @@ Menu_ShowdownImportPKM = Import Set from Clipboard Menu_ShowdownExportPKM = Export Set to Clipboard Menu_ShowdownExportParty = Export Party to Clipboard Menu_ShowdownExportBattleBox = Export Battle Box to Clipboard -Menu_CyberGadget = CyberGadget -Menu_OpenTemp = Ouvrir le dossier Temp -Menu_OpenCache = Ouvrir le dossier Cache Menu_Data = Données Menu_LoadBoxes = Charger Boîtes Menu_DumpBoxes = Dumper Boîtes Menu_Report = Rapport de données Box Menu_Database = Base de données PKM -Menu_Other = Autre -Menu_OpenSDF = Ouvrir le dossier SaveDataFiler -Menu_OpenSDB = Ouvrir le dossier SaveDataBackup +Menu_MGDatabase = Base de données de cadeaux de mystère +Menu_BatchEditor = Éditeur en vrac +Menu_Folder = Ouvrir le dossier -- Menu_Options = Options Menu_Language = Langue diff --git a/PKHeX.Core/Resources/text/it/lang_it.txt b/PKHeX.Core/Resources/text/it/lang_it.txt index f48dad58c..1d7335acd 100644 --- a/PKHeX.Core/Resources/text/it/lang_it.txt +++ b/PKHeX.Core/Resources/text/it/lang_it.txt @@ -30,17 +30,14 @@ Menu_ShowdownImportPKM = Import Set from Clipboard Menu_ShowdownExportPKM = Export Set to Clipboard Menu_ShowdownExportParty = Export Party to Clipboard Menu_ShowdownExportBattleBox = Export Battle Box to Clipboard -Menu_CyberGadget = CyberGadget -Menu_OpenTemp = Open Temp Folder -Menu_OpenCache = Open Cache Folder Menu_Data = Data Menu_LoadBoxes = Load Boxes Menu_DumpBoxes = Dump Boxes Menu_Report = Box Data Report Menu_Database = PKM Database -Menu_Other = Other -Menu_OpenSDF = Open SaveDataFiler Folder -Menu_OpenSDB = Open SaveDataBackup Folder +Menu_MGDatabase = Mystery Gift Database +Menu_BatchEditor = Batch Editor +Menu_Folder = Open Folder -- Menu_Options = Options Menu_Language = Language diff --git a/PKHeX.Core/Resources/text/ja/lang_ja.txt b/PKHeX.Core/Resources/text/ja/lang_ja.txt index cb2c545f6..1aecc1fc6 100644 --- a/PKHeX.Core/Resources/text/ja/lang_ja.txt +++ b/PKHeX.Core/Resources/text/ja/lang_ja.txt @@ -30,17 +30,14 @@ Menu_ShowdownImportPKM = Import Set from Clipboard Menu_ShowdownExportPKM = Export Set to Clipboard Menu_ShowdownExportParty = Export Party to Clipboard Menu_ShowdownExportBattleBox = Export Battle Box to Clipboard -Menu_CyberGadget = CyberGadget -Menu_OpenTemp = オープンTempフォルダ -Menu_OpenCache = オープンCacheフォルダ Menu_Data = データ Menu_LoadBoxes = ロードボックス Menu_DumpBoxes = ダンプボックス Menu_Report = ボックスデータレポート Menu_Database = PKMデータベース -Menu_Other = その他 -Menu_OpenSDF = オープンSaveDataFilerフォルダ -Menu_OpenSDB = オープンSaveDataBackupフォルダ +Menu_MGDatabase = 奇妙なカードデータベース +Menu_BatchEditor = バルクエディタ +Menu_Folder = オープンフォルダ -- Menu_Options = 設定 Menu_Language = 言語 diff --git a/PKHeX.Core/Resources/text/ko/lang_ko.txt b/PKHeX.Core/Resources/text/ko/lang_ko.txt index c02f0dca6..e2f9282cd 100644 --- a/PKHeX.Core/Resources/text/ko/lang_ko.txt +++ b/PKHeX.Core/Resources/text/ko/lang_ko.txt @@ -30,9 +30,6 @@ Menu_ShowdownImportPKM = 클립보드에서 세트 가져오기 Menu_ShowdownExportPKM = 클립보드로 세트 내보내기 Menu_ShowdownExportParty = 클립보드로 파티 내보내기 Menu_ShowdownExportBattleBox = 클립보드로 배틀 박스 내보내기 -Menu_CyberGadget = CyberGadget -Menu_OpenTemp = 임시 폴더 열기 -Menu_OpenCache = 캐시 폴더 열기 Menu_Data = 데이터 Menu_LoadBoxes = 박스 불러오기 Menu_DumpBoxes = 박스 덤프 @@ -40,9 +37,7 @@ Menu_Report = 박스 데이터 보고서 Menu_Database = 포켓몬 데이터베이스 Menu_MGDatabase = 이상한 카드 데이터베이스 Menu_BatchEditor = 일괄 수정 -Menu_Other = 기타 -Menu_OpenSDF = SaveDataFiler 폴더 열기 -Menu_OpenSDB = SaveDataBackup 폴더 열기 +Menu_Folder = 폴더 열기 -- Menu_Options = 옵션 Menu_Language = 언어 diff --git a/PKHeX.Core/Resources/text/other/lang_pt.txt b/PKHeX.Core/Resources/text/other/lang_pt.txt index b6855cac9..65d883dfd 100644 --- a/PKHeX.Core/Resources/text/other/lang_pt.txt +++ b/PKHeX.Core/Resources/text/other/lang_pt.txt @@ -30,17 +30,14 @@ Menu_ShowdownImportPKM = Import Set from Clipboard Menu_ShowdownExportPKM = Export Set to Clipboard Menu_ShowdownExportParty = Export Party to Clipboard Menu_ShowdownExportBattleBox = Export Battle Box to Clipboard -Menu_CyberGadget = CyberGadget -Menu_OpenTemp = Abrir pasta Temp -Menu_OpenCache = Abrir pasta Cache Menu_Data = Dados Menu_LoadBoxes = Carregar Boxes Menu_DumpBoxes = Despejar Boxes Menu_Report = Relatório de Dados das Boxes Menu_Database = PKM Database -Menu_Other = Outro -Menu_OpenSDF = Abrir pasta SaveDataFiler -Menu_OpenSDB = Abrir pasta SaveDataBackup +Menu_MGDatabase = Mystery Gift Database +Menu_BatchEditor = Editor de lote +Menu_Folder = Abrir pasta -- Menu_Options = Opções Menu_Language = Idioma diff --git a/PKHeX.Core/Resources/text/zh/lang_zh.txt b/PKHeX.Core/Resources/text/zh/lang_zh.txt index efd40caf2..4715147ef 100644 --- a/PKHeX.Core/Resources/text/zh/lang_zh.txt +++ b/PKHeX.Core/Resources/text/zh/lang_zh.txt @@ -30,9 +30,6 @@ Menu_ShowdownImportPKM = 从剪贴板导入组合 Menu_ShowdownExportPKM = 导出组合到剪贴板 Menu_ShowdownExportParty = 导出同行队伍到剪贴板 Menu_ShowdownExportBattleBox = 导出战斗盒子到剪贴板 -Menu_CyberGadget = CyberGadget -Menu_OpenTemp = 打开临时文件夹(Temp) -Menu_OpenCache = 打开缓存文件夹(Cache) Menu_Data = 数据 Menu_LoadBoxes = 加载盒子信息 Menu_DumpBoxes = 导出盒子信息 @@ -40,9 +37,7 @@ Menu_Report = 盒子数据报告 Menu_Database = PKM数据库 Menu_MGDatabase = 神秘礼物数据库 Menu_BatchEditor = 批量编辑器 -Menu_Other = 其他 -Menu_OpenSDF = 打开SaveDataFiler文件夹 -Menu_OpenSDB = 打开SaveDataBackup文件夹 +Menu_Folder = 打开文件夹 -- Menu_Options = 设置 Menu_Language = 语言 diff --git a/PKHeX.WinForms/MainWindow/Main.Designer.cs b/PKHeX.WinForms/MainWindow/Main.Designer.cs index 83c97b510..8d76d16dd 100644 --- a/PKHeX.WinForms/MainWindow/Main.Designer.cs +++ b/PKHeX.WinForms/MainWindow/Main.Designer.cs @@ -300,9 +300,7 @@ this.Menu_ShowdownExportPKM = new System.Windows.Forms.ToolStripMenuItem(); this.Menu_ShowdownExportParty = new System.Windows.Forms.ToolStripMenuItem(); this.Menu_ShowdownExportBattleBox = new System.Windows.Forms.ToolStripMenuItem(); - this.Menu_CyberGadget = new System.Windows.Forms.ToolStripMenuItem(); - this.Menu_OpenTemp = new System.Windows.Forms.ToolStripMenuItem(); - this.Menu_OpenCache = new System.Windows.Forms.ToolStripMenuItem(); + this.Menu_Folder = new System.Windows.Forms.ToolStripMenuItem(); this.Menu_Data = new System.Windows.Forms.ToolStripMenuItem(); this.Menu_LoadBoxes = new System.Windows.Forms.ToolStripMenuItem(); this.Menu_DumpBoxes = new System.Windows.Forms.ToolStripMenuItem(); @@ -311,9 +309,6 @@ this.Menu_Database = new System.Windows.Forms.ToolStripMenuItem(); this.Menu_MGDatabase = new System.Windows.Forms.ToolStripMenuItem(); this.Menu_BatchEditor = new System.Windows.Forms.ToolStripMenuItem(); - this.Menu_Other = new System.Windows.Forms.ToolStripMenuItem(); - this.Menu_OpenSDF = new System.Windows.Forms.ToolStripMenuItem(); - this.Menu_OpenSDB = new System.Windows.Forms.ToolStripMenuItem(); this.Menu_Options = new System.Windows.Forms.ToolStripMenuItem(); this.Menu_Language = new System.Windows.Forms.ToolStripMenuItem(); this.CB_MainLanguage = new System.Windows.Forms.ToolStripComboBox(); @@ -3794,9 +3789,8 @@ // this.Menu_Tools.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.Menu_Showdown, - this.Menu_CyberGadget, this.Menu_Data, - this.Menu_Other}); + this.Menu_Folder}); this.Menu_Tools.Name = "Menu_Tools"; this.Menu_Tools.Size = new System.Drawing.Size(47, 20); this.Menu_Tools.Text = "Tools"; @@ -3810,7 +3804,7 @@ this.Menu_ShowdownExportBattleBox}); this.Menu_Showdown.Image = ((System.Drawing.Image)(resources.GetObject("Menu_Showdown.Image"))); this.Menu_Showdown.Name = "Menu_Showdown"; - this.Menu_Showdown.Size = new System.Drawing.Size(143, 22); + this.Menu_Showdown.Size = new System.Drawing.Size(152, 22); this.Menu_Showdown.Text = "Showdown"; // // Menu_ShowdownImportPKM @@ -3850,31 +3844,15 @@ this.Menu_ShowdownExportBattleBox.Text = "Export Battle Box to Clipboard"; this.Menu_ShowdownExportBattleBox.Click += new System.EventHandler(this.clickShowdownExportBattleBox); // - // Menu_CyberGadget + // Menu_Folder // - this.Menu_CyberGadget.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.Menu_OpenTemp, - this.Menu_OpenCache}); - this.Menu_CyberGadget.Image = ((System.Drawing.Image)(resources.GetObject("Menu_CyberGadget.Image"))); - this.Menu_CyberGadget.Name = "Menu_CyberGadget"; - this.Menu_CyberGadget.Size = new System.Drawing.Size(143, 22); - this.Menu_CyberGadget.Text = "CyberGadget"; - // - // Menu_OpenTemp - // - this.Menu_OpenTemp.Image = ((System.Drawing.Image)(resources.GetObject("Menu_OpenTemp.Image"))); - this.Menu_OpenTemp.Name = "Menu_OpenTemp"; - this.Menu_OpenTemp.Size = new System.Drawing.Size(175, 22); - this.Menu_OpenTemp.Text = "Open Temp Folder"; - this.Menu_OpenTemp.Click += new System.EventHandler(this.clickOpenTempFolder); - // - // Menu_OpenCache - // - this.Menu_OpenCache.Image = ((System.Drawing.Image)(resources.GetObject("Menu_OpenCache.Image"))); - this.Menu_OpenCache.Name = "Menu_OpenCache"; - this.Menu_OpenCache.Size = new System.Drawing.Size(175, 22); - this.Menu_OpenCache.Text = "Open Cache Folder"; - this.Menu_OpenCache.Click += new System.EventHandler(this.clickOpenCacheFolder); + this.Menu_Folder.Image = global::PKHeX.WinForms.Properties.Resources.folder; + this.Menu_Folder.Name = "Menu_Folder"; + this.Menu_Folder.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F))); + this.Menu_Folder.ShowShortcutKeys = false; + this.Menu_Folder.Size = new System.Drawing.Size(152, 22); + this.Menu_Folder.Text = "Open Folder"; + this.Menu_Folder.Click += new System.EventHandler(this.Menu_Folder_Click); // // Menu_Data // @@ -3888,7 +3866,7 @@ this.Menu_BatchEditor}); this.Menu_Data.Image = ((System.Drawing.Image)(resources.GetObject("Menu_Data.Image"))); this.Menu_Data.Name = "Menu_Data"; - this.Menu_Data.Size = new System.Drawing.Size(143, 22); + this.Menu_Data.Size = new System.Drawing.Size(152, 22); this.Menu_Data.Text = "Data"; // // Menu_LoadBoxes @@ -3955,32 +3933,6 @@ this.Menu_BatchEditor.Text = "Batch Editor"; this.Menu_BatchEditor.Click += new System.EventHandler(this.manMenuBatchEditor); // - // Menu_Other - // - this.Menu_Other.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.Menu_OpenSDF, - this.Menu_OpenSDB}); - this.Menu_Other.Image = ((System.Drawing.Image)(resources.GetObject("Menu_Other.Image"))); - this.Menu_Other.Name = "Menu_Other"; - this.Menu_Other.Size = new System.Drawing.Size(143, 22); - this.Menu_Other.Text = "Other"; - // - // Menu_OpenSDF - // - this.Menu_OpenSDF.Image = ((System.Drawing.Image)(resources.GetObject("Menu_OpenSDF.Image"))); - this.Menu_OpenSDF.Name = "Menu_OpenSDF"; - this.Menu_OpenSDF.Size = new System.Drawing.Size(229, 22); - this.Menu_OpenSDF.Text = "Open SaveDataFiler Folder"; - this.Menu_OpenSDF.Click += new System.EventHandler(this.clickOpenSDFFolder); - // - // Menu_OpenSDB - // - this.Menu_OpenSDB.Image = ((System.Drawing.Image)(resources.GetObject("Menu_OpenSDB.Image"))); - this.Menu_OpenSDB.Name = "Menu_OpenSDB"; - this.Menu_OpenSDB.Size = new System.Drawing.Size(229, 22); - this.Menu_OpenSDB.Text = "Open SaveDataBackup Folder"; - this.Menu_OpenSDB.Click += new System.EventHandler(this.clickOpenSDBFolder); - // // Menu_Options // this.Menu_Options.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -6419,16 +6371,11 @@ private System.Windows.Forms.ToolStripMenuItem Menu_ShowdownImportPKM; private System.Windows.Forms.ToolStripMenuItem Menu_ShowdownExportParty; private System.Windows.Forms.ToolStripMenuItem Menu_ShowdownExportBattleBox; - private System.Windows.Forms.ToolStripMenuItem Menu_CyberGadget; - private System.Windows.Forms.ToolStripMenuItem Menu_OpenTemp; - private System.Windows.Forms.ToolStripMenuItem Menu_OpenCache; + private System.Windows.Forms.ToolStripMenuItem Menu_Folder; private System.Windows.Forms.ToolStripMenuItem Menu_Data; private System.Windows.Forms.ToolStripMenuItem Menu_LoadBoxes; private System.Windows.Forms.ToolStripMenuItem Menu_Report; private System.Windows.Forms.ToolStripMenuItem Menu_Database; - private System.Windows.Forms.ToolStripMenuItem Menu_Other; - private System.Windows.Forms.ToolStripMenuItem Menu_OpenSDF; - private System.Windows.Forms.ToolStripMenuItem Menu_OpenSDB; private System.Windows.Forms.MaskedTextBox Stat_SPE; private System.Windows.Forms.MaskedTextBox Stat_SPD; private System.Windows.Forms.MaskedTextBox Stat_SPA; diff --git a/PKHeX.WinForms/MainWindow/Main.cs b/PKHeX.WinForms/MainWindow/Main.cs index 4b9ab2d14..5ee887666 100644 --- a/PKHeX.WinForms/MainWindow/Main.cs +++ b/PKHeX.WinForms/MainWindow/Main.cs @@ -269,7 +269,7 @@ namespace PKHeX.WinForms public static string WorkingDirectory => WinFormsUtil.IsClickonceDeployed ? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "PKHeX") : Application.StartupPath; public static string DatabasePath => Path.Combine(WorkingDirectory, "pkmdb"); public static string MGDatabasePath => Path.Combine(WorkingDirectory, "mgdb"); - private static string BackupPath => Path.Combine(WorkingDirectory, "bak"); + public static string BackupPath => Path.Combine(WorkingDirectory, "bak"); private static string TemplatePath => Path.Combine(WorkingDirectory, "template"); private const string ThreadPath = @"https://projectpokemon.org/PKHeX/"; private const string VersionPath = @"https://raw.githubusercontent.com/kwsch/PKHeX/master/PKHeX.WinForms/Resources/text/version.txt"; @@ -651,41 +651,7 @@ namespace PKHeX.WinForms } catch { } } - private void clickOpenTempFolder(object sender, EventArgs e) - { - string path = CyberGadgetUtil.GetTempFolder(); - if (Directory.Exists(Path.Combine(path, "root"))) - Process.Start("explorer.exe", Path.Combine(path, "root")); - else if (Directory.Exists(path)) - Process.Start("explorer.exe", path); - else - WinFormsUtil.Alert("Can't find the temporary file.", "Make sure the Cyber Gadget software is paused."); - } - private void clickOpenCacheFolder(object sender, EventArgs e) - { - string path = CyberGadgetUtil.GetCacheFolder(); - if (Directory.Exists(path)) - Process.Start("explorer.exe", path); - else - WinFormsUtil.Alert("Can't find the cache folder."); - } - private void clickOpenSDFFolder(object sender, EventArgs e) - { - string path = Path.GetPathRoot(PathUtilWindows.get3DSLocation()); - if (path != null && Directory.Exists(path = Path.Combine(path, "filer", "UserSaveData"))) - Process.Start("explorer.exe", path); - else - WinFormsUtil.Alert("Can't find the SaveDataFiler folder."); - } - private void clickOpenSDBFolder(object sender, EventArgs e) - { - string path3DS = Path.GetPathRoot(PathUtilWindows.get3DSLocation()); - string path; - if (path3DS != null && Directory.Exists(path = Path.Combine(path3DS, "SaveDataBackup"))) - Process.Start("explorer.exe", path); - else - WinFormsUtil.Alert("Can't find the SaveDataBackup folder."); - } + private void Menu_Folder_Click(object sender, EventArgs e) => new SAV_FolderList().ShowDialog(); // Main Menu Subfunctions private void openQuick(string path, bool force = false) diff --git a/PKHeX.WinForms/MainWindow/Main.resx b/PKHeX.WinForms/MainWindow/Main.resx index e9118b8cf..d4600093f 100644 --- a/PKHeX.WinForms/MainWindow/Main.resx +++ b/PKHeX.WinForms/MainWindow/Main.resx @@ -120,41 +120,6 @@ True - - True - - - True - - - True - - - - - iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAAHhJREFUKFNjQAf/BQQ6oEzc4L+QUOh/QcH///n5jaFCmAAoKfhPUPAuWKGg4BkM - xSCroJLYMbJT/gkIzMSmCCQOVYIAQIkzKIqAzoBKoQIk98EUvoNKIQDII2AFAgKrgGwlMA3iY3gIKAAK - GigXDIB8F3QxIgADAwC7NFU/mWb72QAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAAHhJREFUKFNjQAf/BQQ6oEzc4L+QUOh/QcH///n5jaFCmAAoKfhPUPAuWKGg4BkM - xSCroJLYMbJT/gkIzMSmCCQOVYIAQIkzKIqAzoBKoQIk98EUvoNKIQDII2AFAgKrgGwlMA3iY3gIKAAK - GigXDIB8F3QxIgADAwC7NFU/mWb72QAAAABJRU5ErkJggg== - - - - True - - - True - - - True - True @@ -167,6 +132,18 @@ True + + True + + + True + + + True + + + True + True @@ -263,6 +240,50 @@ True + + True + + + True + + + True + + + True + + + True + + + True + + + + + iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAHhJREFUKFNjQAf/BQQ6oEzc4L+QUOh/QcH///n5jaFCmAAoKfhPUPAuWKGg4BkM + xSCroJLYMbJT/gkIzMSmCCQOVYIAQIkzKIqAzoBKoQIk98EUvoNKIQDII2AFAgKrgGwlMA3iY3gIKAAK + GigXDIB8F3QxIgADAwC7NFU/mWb72QAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAHhJREFUKFNjQAf/BQQ6oEzc4L+QUOh/QcH///n5jaFCmAAoKfhPUPAuWKGg4BkM + xSCroJLYMbJT/gkIzMSmCCQOVYIAQIkzKIqAzoBKoQIk98EUvoNKIQDII2AFAgKrgGwlMA3iY3gIKAAK + GigXDIB8F3QxIgADAwC7NFU/mWb72QAAAABJRU5ErkJggg== + + + + True + + + True + + + True + True @@ -287,33 +308,6 @@ True - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - True @@ -1671,32 +1665,6 @@ EwAACxMBAJqcGAAAAI5JREFUOE/tzTsKg0AUheHBDQhimcLOOrgxixS2KUUb1xIEQXApgmAhSRdSSIjo f2UCgnmIjY0HPhju3DOjPsRCjicymJjFQ4hYK3DHGQ/IA+872TtCNZClG3qthItqMrtC9mqMAx+OPn9z wAkvjIPVJQP2D3I/Ky3JXtLZoNThgmCBFC1UAmnLj/+wp6IB3W9Xq5yYVfMAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL - EwAACxMBAJqcGAAAAQhJREFUOE+dkTtqAlEUQEdt0igpLNxDOheQwgUIVtmASxAEU4vuIlU24QL8gI2V - kDaNrZ0iGs8ZHBhe3ozogQPz3sz9zL1JjiZO8QdPuMcZdvEubdzhHxq4wu3trF9YxShWNviMI3zBjDdc - o0nGXsSwbT8wOMYr/uIRW16E+M+2na8cMkCL9NNTgAPzn8vooAkm6SnA6g6sjB6a4DM9BbgqXzqwIr7R - b+zkH+7Zl07bgYV84AU3WPEihns2idN2YFaybSsb7Lsh1jFKDd2zq/LjvFY22OclNrAQ9+yqnLYDsxPb - trLBJllgaZIiDMqSzG/nhzHIDrIkhTMpwyQGH/Ddi2ewMsFJcgW3PELpOCYNqwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL - EwAACxMBAJqcGAAAAFtJREFUOE+V0jsKgDAQRdHZhqXbtAqIK7TOQvyA3oBphif6Bk5zhyFNglmw40pW - DPicA/m4qygvJoyQh3+1B+TCIaNDRoeMDhkdMjpkdMSZgqN9wpixPcHBTZQbzSiwBf4Q1BwAAAAASUVO - RK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL - EwAACxMBAJqcGAAAAFtJREFUOE+V0jsKgDAQRdHZhqXbtAqIK7TOQvyA3oBphif6Bk5zhyFNglmw40pW - DPicA/m4qygvJoyQh3+1B+TCIaNDRoeMDhkdMjpkdMSZgqN9wpixPcHBTZQbzSiwBf4Q1BwAAAAASUVO - RK5CYII= @@ -1767,32 +1735,6 @@ xArS6O3GlyPatk8Xsf8dmpNkEw+InaIz+9wiO+YJ+whjK3g6s7atJ/vJ0SPCIZZWKKuHJCOooIv0Yu08 umQ6v9r3SLOLU9ShLzKAnzxEFTWcoInC6J77BXRjS+UZc6Ot5/yNIfwBdF+Mwpmwi9MAAAAASUVORK5C YII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL - EwAACxMBAJqcGAAAAQhJREFUOE+dkTtqAlEUQEdt0igpLNxDOheQwgUIVtmASxAEU4vuIlU24QL8gI2V - kDaNrZ0iGs8ZHBhe3ozogQPz3sz9zL1JjiZO8QdPuMcZdvEubdzhHxq4wu3trF9YxShWNviMI3zBjDdc - o0nGXsSwbT8wOMYr/uIRW16E+M+2na8cMkCL9NNTgAPzn8vooAkm6SnA6g6sjB6a4DM9BbgqXzqwIr7R - b+zkH+7Zl07bgYV84AU3WPEihns2idN2YFaybSsb7Lsh1jFKDd2zq/LjvFY22OclNrAQ9+yqnLYDsxPb - trLBJllgaZIiDMqSzG/nhzHIDrIkhTMpwyQGH/Ddi2ewMsFJcgW3PELpOCYNqwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL - EwAACxMBAJqcGAAAAFtJREFUOE+V0jsKgDAQRdHZhqXbtAqIK7TOQvyA3oBphif6Bk5zhyFNglmw40pW - DPicA/m4qygvJoyQh3+1B+TCIaNDRoeMDhkdMjpkdMSZgqN9wpixPcHBTZQbzSiwBf4Q1BwAAAAASUVO - RK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL - EwAACxMBAJqcGAAAAFtJREFUOE+V0jsKgDAQRdHZhqXbtAqIK7TOQvyA3oBphif6Bk5zhyFNglmw40pW - DPicA/m4qygvJoyQh3+1B+TCIaNDRoeMDhkdMjpkdMSZgqN9wpixPcHBTZQbzSiwBf4Q1BwAAAAASUVO - RK5CYII= @@ -2650,6 +2592,9 @@ True + + True + True @@ -2676,9 +2621,6 @@ True - - True - True diff --git a/PKHeX.WinForms/PKHeX.WinForms.csproj b/PKHeX.WinForms/PKHeX.WinForms.csproj index e47f353c0..14b6d97b0 100644 --- a/PKHeX.WinForms/PKHeX.WinForms.csproj +++ b/PKHeX.WinForms/PKHeX.WinForms.csproj @@ -467,6 +467,12 @@ SAV_Database.cs + + Form + + + SAV_FolderList.cs + Form @@ -627,6 +633,9 @@ SAV_Database.cs + + SAV_FolderList.cs + SAV_MysteryGiftDB.cs diff --git a/PKHeX.WinForms/Subforms/SAV_FolderList.Designer.cs b/PKHeX.WinForms/Subforms/SAV_FolderList.Designer.cs new file mode 100644 index 000000000..bef8235d1 --- /dev/null +++ b/PKHeX.WinForms/Subforms/SAV_FolderList.Designer.cs @@ -0,0 +1,65 @@ +namespace PKHeX.WinForms +{ + partial class SAV_FolderList + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SAV_FolderList)); + this.FLP_Buttons = new System.Windows.Forms.FlowLayoutPanel(); + this.SuspendLayout(); + // + // FLP_Buttons + // + this.FLP_Buttons.AutoScroll = true; + this.FLP_Buttons.Dock = System.Windows.Forms.DockStyle.Fill; + this.FLP_Buttons.Location = new System.Drawing.Point(0, 0); + this.FLP_Buttons.Name = "FLP_Buttons"; + this.FLP_Buttons.Size = new System.Drawing.Size(304, 161); + this.FLP_Buttons.TabIndex = 0; + // + // SAV_FolderList + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(304, 161); + this.Controls.Add(this.FLP_Buttons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SAV_FolderList"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Folder List"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.FlowLayoutPanel FLP_Buttons; + } +} \ No newline at end of file diff --git a/PKHeX.WinForms/Subforms/SAV_FolderList.cs b/PKHeX.WinForms/Subforms/SAV_FolderList.cs new file mode 100644 index 000000000..14fee016f --- /dev/null +++ b/PKHeX.WinForms/Subforms/SAV_FolderList.cs @@ -0,0 +1,89 @@ +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Windows.Forms; + +namespace PKHeX.WinForms +{ + public partial class SAV_FolderList : Form + { + public SAV_FolderList() + { + InitializeComponent(); + + // Preprogrammed folders + var path3DS = Path.GetPathRoot(PathUtilWindows.get3DSLocation() ?? ""); + var locs = new List + { + new CustomFolderPath {Path = Main.BackupPath, DisplayText = "PKHeX Backups"} + }; + locs.AddRange(getUserPaths()); + foreach (var z in PathUtilWindows.get3DSBackupPaths(path3DS)) + { + var di = new DirectoryInfo(z); + var root = di.Root.Name; + var folder = di.Parent.Name; + if (root == folder) + folder = di.Name; + locs.Add(new CustomFolderPath {Path = z, DisplayText = folder}); + } + locs.Add(new CustomFolderPath {Path = CyberGadgetUtil.GetCacheFolder(), DisplayText = "CGSE Cache"}); + locs.Add(new CustomFolderPath {Path = CyberGadgetUtil.GetTempFolder(), DisplayText = "CGSE Temp"}); + + foreach (var loc in locs.GroupBy(z => z.Path)) + addButton(loc.First().DisplayText, loc.First().Path); + + WinFormsUtil.TranslateInterface(this, Main.curlanguage); + } + + private void addButton(string name, string path) + { + var button = new Button + { + Size = new Size { Height = 30, Width = 130 }, + Text = name, + Name = "B_" + name, + Enabled = new DirectoryInfo(path).Exists, + }; + button.Click += (s, e) => + { + if (Directory.Exists(path)) + Process.Start("explorer.exe", path); + else + WinFormsUtil.Alert("Can't find folder:", path); + }; + FLP_Buttons.Controls.Add(button); + } + + private static List getUserPaths() + { + const string loc = "savpaths.txt"; + var list = new List(); + + if (!File.Exists(loc)) + return list; + + try + { + string[] lines = File.ReadAllLines(loc); + return (from line in lines + select line.Split('\t') into split + where split.Length == 2 + select new CustomFolderPath { DisplayText = split[0], Path = split[1] }) + .ToList(); + } + catch + { + return list; + } + } + + public struct CustomFolderPath + { + public string Path; + public string DisplayText; + } + } +} diff --git a/PKHeX.WinForms/Subforms/SAV_FolderList.resx b/PKHeX.WinForms/Subforms/SAV_FolderList.resx new file mode 100644 index 000000000..603f660be --- /dev/null +++ b/PKHeX.WinForms/Subforms/SAV_FolderList.resx @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAE + AAAAAAAAAAAAAAAAAAAAAAAAIyMjAQAAAAALCwsPJiYmJysrKycqKionKSkpJykpKScpKSknKioqJyoq + KicrKysnJycnJw0ODQ8AAAAAJiYmAQAAAABpaWlHq6ur17+/v+6+vr7svr6+7b6+vu2+vr7tvr6+7b6+ + vu2+vr7tvr6+7L+/v+6rq6vXampqSAAAAAAoKSgXvr++3eLi4v/g4OD94eHh/+Hh4f/i4uL/4uLi/+Li + 4v/i4uL/4eHh/+Dh4P/g4OD94uLi/7+/v90sLCwXfn5+PNna2frg4OD/39/f/uHh4f7h4eH+39/f/uDg + 4P7g4OD+39/f/uHh4f7h4OH+39/f/t/g3//a2tr6g4ODPoOCgz7X19f64+Pj/+Li4v7k5OT/4+Tj//Ly + 8v/19fX/9PT0//T09P/k5OT/5OTk/+Pj4/7j4+P/19jX+4qLikCDhIM+2tra++Xl5f/k5eT+5OTk//Lz + 8v+urq7/RUVF/z4+Pv+Zmpn/8fHx/+Xm5f/k5eT+5eXl/9ra2vyLi4tAhYWFPuXm5vvx8vP/7+/w/v// + //+sra3/AgIC/15eXv9tbG3/BQUF/4yMjP//////7+/w/vHy8//l5ub8jY2NQC4uLD5LS0f7UFBL/09P + Sv5YWVP/FBUS/29wcP///////////5SUlP8PDw//U1NO/1BQS/5PT0r/S0tH/DIyMEAAAAs+AAAM+wAA + Dv8AAA/+AwMS/wAAAP+UlJX///////////+3t7n/AAAA/wAAD/8BAQ/+AAAO/wAADPwCAg5ABARSPgoK + k/sNDab/DQ2o/hAQvP8CAmj/IiIW/7Kzrv/Cw8D/NDQm/wAATf8QELz/DQ2q/gwMp/8LC5T8Dg5bQAUF + Xj4KCpz7DQ2u/w0NsP4NDbX/Dw+//wUFYf8CAhL/AwMP/wMDTf8ODrj/Dg64/w0NsP4MDK7/Cwud/A8P + aEEGBmU9DAyl+w4Otf8ODrf+Dw+6/xAQvv8TE8v/EhK+/xAQvP8TE8v/EBDA/w8Puf8PD7f+Dg61/w0N + pvsREW9ACAhtQA8PsfsTE77/ExO//xQUwP8UFML/FBTD/xUVyP8WFsn/FRXE/xQUw/8UFMH/ExO//xMT + vv8QELL7ERF3QxkZdCgXF771ExPH/xUVyPwVFcn9FhbL/RcXzP0XF8z9FxfM/RcXy/0XF8v9FhbJ/RUV + yPwTE8f/Fxe+9RkZdykAAAAAIyOtghsbx/8ZGcj+GRnJ/xoayf8aGsn/GhrK/xoayv8aGsn/GhrJ/xkZ + yf8ZGcj+GxvH/yMjrYQAAAAAAADHAQAAAAAzM51FLCyscCoqrGwqKqxtKSmsbSoqrG0qKqxtKSmsbSoq + rG0qKqxsLCyscDMznUUAAAAAAAAAAP//AADAAwAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB + AACAAQAAgAEAAIABAACAAQAAgAEAAP//AAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKysrCR0dHSMWFhY3GBgYORgYGDkYGBg5GBgYORgY + GDkYGBg5GBgYORgYGDkYGBg5GBgYORgYGDkYGBg5GBgYORgYGDkYGBg5GBgYORgYGDkYGBg5FxcXNx4e + HiQuLi4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASEhIARYWFis7OzuVkJCQ2ampqeqqqqrsqqqq7Kqq + quyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqqquyqqqrsqqqq7Kqq + quypqanqkZGR2j09PZcXFxcsUFBQAQAAAAAAAAAAAAAAAAAAAAASEhIuhISEytvb2/7W1tb/19fX/9jY + 2P/Y2Nj/2NjY/9jY2P/Y2Nj/2NjY/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ2f/Y2Nj/2NjY/9jY + 2P/Y2Nj/2NjY/9fX1//W1tb/29vb/oeHh8sTExMvAAAAAAAAAAAAAAAAPDw8DGtra6zZ2dn/2dnZ/9ra + 2v/b29v/29vb/9vb2//c3Nz/3Nzc/9zc3P/c3Nz/3d3d/93d3f/d3d3/3d3d/93d3f/d3d3/3Nzc/9zc + 3P/c3Nz/3Nzc/9vb2//b29v/29vb/9ra2v/Z2dn/2dnZ/21tba5DQ0MNAAAAAAAAAAAiIiIx1NXU9tna + 2f/c3Nz/3d3d/93e3f/e3t7/3t7e/9/f3//f39//39/f/9/g3//g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg + 4P/g4OD/39/f/9/f3//f39//3t/e/97e3v/d3t3/3d3d/9zc3P/Z2tn/1dXV9icnJzMAAAAAAAAAAFhZ + WFzf4N//3Nzc/97e3v/f39//39/f/9/g3//g4OD/4ODg/+Hh4f/h4eH/4eHh/+Li4v/i4uL/4uLi/+Li + 4v/i4uL/4uLi/+Hi4f/h4eH/4eHh/+Dg4P/g4OD/3+Df/9/f3//f39//3t7e/9zc3P/f39//XV1dXQAA + AAAAAAAAZmZmZdvc2//e3t7/3+Df/+Dg4P/g4eD/4eHh/+Hi4f/i4uL/4uPi/+Pj4//j4+P/5OTk/+Tk + 5P/k5OT/5OTk/+Tk5P/k5OT/4+Pj/+Pj4//j4+P/4uLi/+Li4v/h4eH/4eHh/+Dg4P/f4N//3t7e/9vb + 2/9wcHBoAAAAAAAAAABoaGhl3d3d/9/f3//h4eH/4eLh/+Li4v/j4+P/4+Pj/+Tk5P/k5OT/5eXl/+Xl + 5f/l5uX/5ubm/+bm5v/m5ub/5ubm/+bm5v/l5eX/5eXl/+Tk5P/k5OT/4+Pj/+Pj4//i4uL/4uLi/+Hh + 4f/f39//3N3c/3Nzc2kAAAAAAAAAAGhoaGXe3t7/4ODg/+Li4v/j4+P/4+Pj/+Tk5P/l5eX/5eXl/+bm + 5v/m5+b/5+fn/+fn5//n6Of/6Ojo/+jo6P/o6Oj/5+fn/+fn5//n5+f/5ubm/+Xl5f/l5eX/5OTk/+Pk + 4//j4+P/4uLi/+Dg4P/e3t7/c3NzaQAAAAAAAAAAaGhoZd/g3//i4uL/5OTk/+Tl5P/l5eX/5ebl/+bn + 5v/n5+f/5+jn/+jp6P/p6en/7Ozs/8LCwv+Tk5P/ioqK/66urv/o6ej/6enp/+jp6P/o6Oj/5+jn/+bn + 5v/m5ub/5ebl/+Tl5P/k5OT/4uLi/9/g3/9zdHNpAAAAAAAAAABoaWhl4eLh/+Pk4//m5ub/5ubm/+fn + 5//n6Of/6Ojo/+np6f/p6un/6urq/8bGxv8yMjL/AAAA/wAAAP8AAAD/AAAA/xMTE/+ZmZn/7Ozs/+rq + 6v/p6en/6Ojo/+jo6P/n5+f/5ubm/+bm5v/k5OT/4eHh/3R0dGkAAAAAAAAAAGhpaGXj4+P/5eXl/+fn + 5//n6Of/6Ojo/+np6f/q6ur/6urq/+vr6//Dw8P/DAwM/wAAAP8AAAD/Gxsb/ygoKP8BAQH/AAAA/wAA + AP+FhYX/7O3s/+rr6v/q6ur/6enp/+jo6P/o6Oj/5+fn/+Xl5f/i4+L/dHR0aQAAAAAAAAAAYWFhZeTl + 5P/m5+b/6Ono/+np6f/p6un/6uvq/+vr6//s7Oz/7e7t/ycnJ/8AAAD/Ghoa/7S0tP/m5ub/5OTk/9HR + 0f9GRkb/AAAA/wICAv/IyMj/7Ozs/+vs6//q6+r/6urq/+nq6f/o6ej/5+fn/+Tk5P9sbGxpAAAAAAAA + AAA9Pj1lj4+P/5OTk/+VlZX/lpaW/5eXl/+YmJj/mZmZ/5qamv92dnb/AAAA/wEBAf+/wL//3Nzc/+Tk + 5P/l5eX/3d3d/+Li4v8mJib/AAAA/0ZGRv+ampr/mZmZ/5iYmP+Xl5f/lpaW/5WVlf+Tk5P/j4+P/0ZG + RmoAAAAAAAAAAAwMDGUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Nzc3/+fn + 5//q6ur/7O3s/+zt7P/v7+//39/f/4WFhf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/EBAQagAAAAAAAAAAAwMHZQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9NTU3/5ufm//Lz8v/z9PP/8/Tz//X19f/l5eX/nZ2d/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8GBgpqAAAAAAAAAAAAABZlAQEk/wEBJ/8CAin/AgIq/wICKv8CAiv/AgIs/wIC + LP8BAR3/AAAA/xwcHP/w8PD/6+zr//r6+v/6+vr/9PT0/+vr6/9lZWX/AAAA/wAAD/8CAi3/AgIs/wIC + K/8CAir/AgIq/wICKf8BASf/AQEl/wUFG2oAAAAAAAAAAAICQGUGBpL/Bwec/wgIo/8JCaf/CQmq/wkJ + rf8JCa//Cgqz/wkJqP8AAAL/AAAA/4CAgP/y8/L/6+zr/+3t7f/u7u7/xMTE/wcHB/8AAAD/BgZz/woK + s/8JCbD/CQmt/wkJqv8JCaj/CAik/wcHnf8HB5P/Dg5MagAAAAAAAAAAAwNHZQgIk/8JCZ3/Cgqj/wsL + p/8LC6n/Cwus/wsLr/8MDLL/DAy2/wYGW/8AAAD/AAAA/1JSUv+sraz/tra2/3h4eP8KCgr/AAAA/wIC + Iv8MDLb/DAyy/wsLsP8LC63/Cwuq/wsLp/8KCqT/CQmd/wgIk/8PD1VrAAAAAAAAAAAEBE1lCQmY/woK + ov8LC6j/DAyr/wwMrf8MDLD/DAyy/w0Ntf8NDbf/Dg67/wUFSv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8CAiH/DQ2q/w0NuP8NDbX/DQ2z/wwMsP8MDK7/DAyr/wsLqP8KCqL/CQmZ/xAQWmsAAAAAAAAAAAQE + UGUKCp7/Cwum/wwMrP8NDa//DQ2w/w0Ns/8ODrX/Dg63/w4Ouf8ODrv/Dw/A/wwMiv8FBTj/AAAG/wAA + AP8DAyb/CQls/w8Pu/8PD7z/Dg66/w4OuP8ODrX/DQ2z/w0Nsf8NDa//DAys/wsLp/8KCp7/ERFeawAA + AAAAAAAABQVTZQsLpP8MDKv/DQ2w/w4Os/8ODrT/Dg62/w8PuP8PD7r/Dw+8/w8Pvf8QEL//EBDA/xER + w/8SEsn/ERHJ/xERxf8QEMD/EBC//w8Pvv8PD7z/Dw+6/w8PuP8ODrf/Dg61/w4Os/8NDbH/DAyr/wsL + pP8SEmFrAAAAAAAAAAAGBlZlDAyq/w4OsP8PD7X/Dw+3/w8PuP8QELr/EBC7/xAQvf8REb7/ERHA/xER + wf8REcL/EhLC/xISw/8SEsP/EhLC/xERwv8REcH/ERHA/xERvv8QEL3/EBC7/xAQuv8QELj/Dw+3/w8P + tf8ODrD/DAyq/xMTZWsAAAAAAAAAAAcHWmUODrD/EBC2/xERuv8REbz/ERG9/xISvv8SEr//EhLA/xMT + wf8TE8P/ExPD/xMTxP8TE8X/FBTF/xQUxf8UFMX/ExPE/xMTxP8TE8P/ExPC/xISwf8SEr//EhK+/xER + vf8REbz/ERG6/xAQtv8ODrD/FBRpawAAAAAAAAAACAhcYxAQtf8SErv/ExO+/xQUwP8UFMD/FBTB/xUV + wv8VFcP/FRXE/xUVxf8WFsb/FhbG/xYWx/8WFsf/FhbH/xYWx/8WFsf/FhbG/xYWxf8VFcT/FRXD/xUV + wv8UFMH/FBTB/xQUwP8TE77/EhK7/xAQtf8TE2hoAAAAAAAAAAAQEFNUFRXC/xMTv/8UFMP/FRXE/xUV + xP8VFcX/FRXG/xYWx/8WFsf/FhbI/xYWyf8XF8n/FxfK/xcXyv8XF8r/FxfK/xcXyf8XF8n/FhbI/xYW + yP8WFsf/FhbG/xUVxf8VFcT/FRXE/xQUw/8TE7//FRXB/xAQV1UAAAAAAAAAAA0NPxkjI8byFBTD/xUV + x/8WFsj/FxfJ/xcXyf8XF8r/FxfK/xcXy/8YGMz/GBjM/xgYzP8YGM3/GBjN/xgYzf8YGM3/GBjM/xgY + zP8YGMz/GBjL/xcXy/8XF8r/FxfJ/xcXyf8WFsj/FRXH/xQUw/8jI8f0Dg5GGwAAAAAAAAAAFhZxAiUl + eIUZGcr/FBTI/xUVyv8WFsv/FhbM/xYWzP8WFsz/FhbN/xcXzf8XF83/FxfN/xcXzv8XF87/FxfO/xcX + zv8XF87/FxfN/xcXzf8WFs3/FhbM/xYWzP8WFsz/FhbL/xUVyv8UFMj/GBjJ/yYmeogWFnYCAAAAAAAA + AAAAAAAAGBh1BzMzk50kJNP+FxfK/xgYzP8YGMz/GBjN/xgYzf8YGM3/GBjN/xgYzf8ZGc7/GRnO/xkZ + zv8ZGc7/GRnO/xkZzv8YGM3/GBjN/xgYzf8YGM3/GBjN/xgYzP8YGMz/FxfK/yMj0v4zM5WfFBRkBwAA + AAAAAAAAAAAAAAAAAAAAAAAAHBx7Ay0tdkg3N5emMTGpxSwsp8gsLKfILCynyCwsp8gsLKfILCynyCws + p8gsLKfILCynyCwsp8gsLKfILCynyCwsp8gsLKfILCynyCwsp8gsLKfILCynyDExqcU2NpenLi54Shsb + ewMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////8AAAD+AAAAfAAAADwAAAA8AAAAPAAAADwAAAA8AA + AAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA + AAPAAAADwAAAA8AAAAPAAAAD4AAAB/gAAB////// + + + \ No newline at end of file diff --git a/PKHeX.WinForms/Util/PathUtilWindows.cs b/PKHeX.WinForms/Util/PathUtilWindows.cs index a9c0ec6d9..ef549eabd 100644 --- a/PKHeX.WinForms/Util/PathUtilWindows.cs +++ b/PKHeX.WinForms/Util/PathUtilWindows.cs @@ -24,6 +24,23 @@ namespace PKHeX.WinForms return null; } + /// + /// Gets a list of 3DS save backup paths for the storage device. + /// + /// Root location of device + /// List of possible 3DS save backup paths. + public static string[] get3DSBackupPaths(string root) + { + return new[] + { + Path.Combine(root, "saveDataBackup"), + Path.Combine(root, "filer", "UserSaveData"), + Path.Combine(root, "JKSV", "Saves"), + Path.Combine(root, "TWLSaveTool"), + Path.Combine(root, "fbi", "save"), + }; + } + /// /// Detects a save file. /// @@ -35,18 +52,8 @@ namespace PKHeX.WinForms List foldersToCheck = new List(extra.Where(f => f?.Length > 0)); path = null; - // Homebrew/CFW - if (path3DS != null) - { - foldersToCheck.AddRange(new[] - { - Path.Combine(path3DS, "saveDataBackup"), - Path.Combine(path3DS, "filer", "UserSaveData"), - Path.Combine(path3DS, "JKSV", "Saves"), - Path.Combine(path3DS, "TWLSaveTool"), - Path.Combine(path3DS, "fbi", "save"), - }); - } + if (path3DS != null) // check for Homebrew/CFW backups + foldersToCheck.AddRange(get3DSBackupPaths(path3DS)); foreach (var p in foldersToCheck) {