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 !
This commit is contained in:
Kurt 2017-05-16 16:27:43 -07:00
parent f3ca370087
commit 1659405dc4
17 changed files with 489 additions and 285 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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 = 言語

View file

@ -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 = 언어

View file

@ -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

View file

@ -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 = 语言

View file

@ -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;

View file

@ -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)

View file

@ -120,41 +120,6 @@
<metadata name="tabMain.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_PID.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BTN_Shinytize.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_IsShiny.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="Label_IsShiny.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wwAADsMBx2+oZAAAAHhJREFUKFNjQAf/BQQ6oEzc4L+QUOh/QcH///n5jaFCmAAoKfhPUPAuWKGg4BkM
xSCroJLYMbJT/gkIzMSmCCQOVYIAQIkzKIqAzoBKoQIk98EUvoNKIQDII2AFAgKrgGwlMA3iY3gIKAAK
GigXDIB8F3QxIgADAwC7NFU/mWb72QAAAABJRU5ErkJggg==
</value>
</data>
<data name="Label_IsShiny.InitialImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wwAADsMBx2+oZAAAAHhJREFUKFNjQAf/BQQ6oEzc4L+QUOh/QcH///n5jaFCmAAoKfhPUPAuWKGg4BkM
xSCroJLYMbJT/gkIzMSmCCQOVYIAQIkzKIqAzoBKoQIk98EUvoNKIQDII2AFAgKrgGwlMA3iY3gIKAAK
GigXDIB8F3QxIgADAwC7NFU/mWb72QAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="TB_PID.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_Gender.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BTN_RerollPID.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_Species.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -167,6 +132,18 @@
<metadata name="Label_EXP.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TB_EXP.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_CurLevel.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TB_Level.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="MT_Level.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_Nature.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -263,6 +240,50 @@
<metadata name="Label_EncryptionConstant.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_PID.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BTN_Shinytize.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_IsShiny.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_PID.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BTN_Shinytize.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_IsShiny.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="Label_IsShiny.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wwAADsMBx2+oZAAAAHhJREFUKFNjQAf/BQQ6oEzc4L+QUOh/QcH///n5jaFCmAAoKfhPUPAuWKGg4BkM
xSCroJLYMbJT/gkIzMSmCCQOVYIAQIkzKIqAzoBKoQIk98EUvoNKIQDII2AFAgKrgGwlMA3iY3gIKAAK
GigXDIB8F3QxIgADAwC7NFU/mWb72QAAAABJRU5ErkJggg==
</value>
</data>
<data name="Label_IsShiny.InitialImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wwAADsMBx2+oZAAAAHhJREFUKFNjQAf/BQQ6oEzc4L+QUOh/QcH///n5jaFCmAAoKfhPUPAuWKGg4BkM
xSCroJLYMbJT/gkIzMSmCCQOVYIAQIkzKIqAzoBKoQIk98EUvoNKIQDII2AFAgKrgGwlMA3iY3gIKAAK
GigXDIB8F3QxIgADAwC7NFU/mWb72QAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="TB_PID.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_Gender.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="BTN_RerollPID.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TB_PID.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -287,33 +308,6 @@
<metadata name="TB_Nickname.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_EXP.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TB_EXP.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_CurLevel.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TB_Level.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="MT_Level.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TB_EXP.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_CurLevel.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TB_Level.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="MT_Level.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label_Nature.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -1671,32 +1665,6 @@
EwAACxMBAJqcGAAAAI5JREFUOE/tzTsKg0AUheHBDQhimcLOOrgxixS2KUUb1xIEQXApgmAhSRdSSIjo
f2UCgnmIjY0HPhju3DOjPsRCjicymJjFQ4hYK3DHGQ/IA+872TtCNZClG3qthItqMrtC9mqMAx+OPn9z
wAkvjIPVJQP2D3I/Ky3JXtLZoNThgmCBFC1UAmnLj/+wp6IB3W9Xq5yYVfMAAAAASUVORK5CYII=
</value>
</data>
<data name="Menu_CyberGadget.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EwAACxMBAJqcGAAAAQhJREFUOE+dkTtqAlEUQEdt0igpLNxDOheQwgUIVtmASxAEU4vuIlU24QL8gI2V
kDaNrZ0iGs8ZHBhe3ozogQPz3sz9zL1JjiZO8QdPuMcZdvEubdzhHxq4wu3trF9YxShWNviMI3zBjDdc
o0nGXsSwbT8wOMYr/uIRW16E+M+2na8cMkCL9NNTgAPzn8vooAkm6SnA6g6sjB6a4DM9BbgqXzqwIr7R
b+zkH+7Zl07bgYV84AU3WPEihns2idN2YFaybSsb7Lsh1jFKDd2zq/LjvFY22OclNrAQ9+yqnLYDsxPb
trLBJllgaZIiDMqSzG/nhzHIDrIkhTMpwyQGH/Ddi2ewMsFJcgW3PELpOCYNqwAAAABJRU5ErkJggg==
</value>
</data>
<data name="Menu_OpenTemp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EwAACxMBAJqcGAAAAFtJREFUOE+V0jsKgDAQRdHZhqXbtAqIK7TOQvyA3oBphif6Bk5zhyFNglmw40pW
DPicA/m4qygvJoyQh3+1B+TCIaNDRoeMDhkdMjpkdMSZgqN9wpixPcHBTZQbzSiwBf4Q1BwAAAAASUVO
RK5CYII=
</value>
</data>
<data name="Menu_OpenCache.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EwAACxMBAJqcGAAAAFtJREFUOE+V0jsKgDAQRdHZhqXbtAqIK7TOQvyA3oBphif6Bk5zhyFNglmw40pW
DPicA/m4qygvJoyQh3+1B+TCIaNDRoeMDhkdMjpkdMSZgqN9wpixPcHBTZQbzSiwBf4Q1BwAAAAASUVO
RK5CYII=
</value>
</data>
<data name="Menu_Data.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -1767,32 +1735,6 @@
xArS6O3GlyPatk8Xsf8dmpNkEw+InaIz+9wiO+YJ+whjK3g6s7atJ/vJ0SPCIZZWKKuHJCOooIv0Yu08
umQ6v9r3SLOLU9ShLzKAnzxEFTWcoInC6J77BXRjS+UZc6Ot5/yNIfwBdF+Mwpmwi9MAAAAASUVORK5C
YII=
</value>
</data>
<data name="Menu_Other.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EwAACxMBAJqcGAAAAQhJREFUOE+dkTtqAlEUQEdt0igpLNxDOheQwgUIVtmASxAEU4vuIlU24QL8gI2V
kDaNrZ0iGs8ZHBhe3ozogQPz3sz9zL1JjiZO8QdPuMcZdvEubdzhHxq4wu3trF9YxShWNviMI3zBjDdc
o0nGXsSwbT8wOMYr/uIRW16E+M+2na8cMkCL9NNTgAPzn8vooAkm6SnA6g6sjB6a4DM9BbgqXzqwIr7R
b+zkH+7Zl07bgYV84AU3WPEihns2idN2YFaybSsb7Lsh1jFKDd2zq/LjvFY22OclNrAQ9+yqnLYDsxPb
trLBJllgaZIiDMqSzG/nhzHIDrIkhTMpwyQGH/Ddi2ewMsFJcgW3PELpOCYNqwAAAABJRU5ErkJggg==
</value>
</data>
<data name="Menu_OpenSDF.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EwAACxMBAJqcGAAAAFtJREFUOE+V0jsKgDAQRdHZhqXbtAqIK7TOQvyA3oBphif6Bk5zhyFNglmw40pW
DPicA/m4qygvJoyQh3+1B+TCIaNDRoeMDhkdMjpkdMSZgqN9wpixPcHBTZQbzSiwBf4Q1BwAAAAASUVO
RK5CYII=
</value>
</data>
<data name="Menu_OpenSDB.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EwAACxMBAJqcGAAAAFtJREFUOE+V0jsKgDAQRdHZhqXbtAqIK7TOQvyA3oBphif6Bk5zhyFNglmw40pW
DPicA/m4qygvJoyQh3+1B+TCIaNDRoeMDhkdMjpkdMSZgqN9wpixPcHBTZQbzSiwBf4Q1BwAAAAASUVO
RK5CYII=
</value>
</data>
<data name="Menu_Language.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -2650,6 +2592,9 @@
<metadata name="B_OpenMiscEditor.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="B_OpenFriendSafari.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dragout.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -2676,9 +2621,6 @@
<metadata name="L_UpdateAvailable.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="B_OpenFriendSafari.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>

View file

@ -467,6 +467,12 @@
<Compile Include="Subforms\SAV_Database.Designer.cs">
<DependentUpon>SAV_Database.cs</DependentUpon>
</Compile>
<Compile Include="Subforms\SAV_FolderList.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Subforms\SAV_FolderList.Designer.cs">
<DependentUpon>SAV_FolderList.cs</DependentUpon>
</Compile>
<Compile Include="Subforms\SAV_MysteryGiftDB.cs">
<SubType>Form</SubType>
</Compile>
@ -627,6 +633,9 @@
<EmbeddedResource Include="Subforms\SAV_Database.resx">
<DependentUpon>SAV_Database.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Subforms\SAV_FolderList.resx">
<DependentUpon>SAV_FolderList.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Subforms\SAV_MysteryGiftDB.resx">
<DependentUpon>SAV_MysteryGiftDB.cs</DependentUpon>
</EmbeddedResource>

View file

@ -0,0 +1,65 @@
namespace PKHeX.WinForms
{
partial class SAV_FolderList
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View file

@ -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<CustomFolderPath>
{
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<CustomFolderPath> getUserPaths()
{
const string loc = "savpaths.txt";
var list = new List<CustomFolderPath>();
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;
}
}
}

View file

@ -0,0 +1,216 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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//////
</value>
</data>
</root>

View file

@ -24,6 +24,23 @@ namespace PKHeX.WinForms
return null;
}
/// <summary>
/// Gets a list of 3DS save backup paths for the storage device.
/// </summary>
/// <param name="root">Root location of device</param>
/// <returns>List of possible 3DS save backup paths.</returns>
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"),
};
}
/// <summary>
/// Detects a save file.
/// </summary>
@ -35,18 +52,8 @@ namespace PKHeX.WinForms
List<string> foldersToCheck = new List<string>(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)
{