Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/hakchi2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2017-02-19 08:32:08 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2017-02-19 08:32:08 +0300
commit8662d7938c8ff29b6c6a20878fb079fdd075bc5c (patch)
tree3bd72d1b8e30fba1b6a496d34e70548d5439b9a8
parenteb456f27307110c5c9a03678c0235cb3500eb6bc (diff)
Refactoring
-rw-r--r--Apps/FdsGame.cs (renamed from FdsGame.cs)23
-rw-r--r--Apps/NesGame.cs (renamed from NesGame.cs)5
-rw-r--r--Apps/NesMiniApplication.cs (renamed from NesMiniApplication.cs)24
-rw-r--r--Apps/NesUGAme.cs34
-rw-r--r--ConfigIni.cs17
-rw-r--r--NesMenuFolder.cs12
-rw-r--r--Properties/Resources.Designer.cs24
-rw-r--r--Properties/Resources.resx7
-rw-r--r--TreeContructorForm.Designer.cs14
-rw-r--r--TreeContructorForm.cs32
-rw-r--r--TreeContructorForm.resx118
-rw-r--r--TreeContructorForm.ru-RU.resx72
-rw-r--r--WorkerForm.cs30
-rw-r--r--hakchi_gui.csproj18
-rw-r--r--images/app_sm.pngbin0 -> 1020 bytes
-rw-r--r--images/app_sm_tr.pngbin0 -> 1004 bytes
-rw-r--r--images/blank_app.pngbin0 -> 8589 bytes
-rw-r--r--images/famicom_sm.pngbin0 -> 281 bytes
-rw-r--r--images/famicom_sm_tr.pngbin0 -> 286 bytes
-rw-r--r--images/fds_sm.pngbin0 -> 318 bytes
-rw-r--r--images/fds_sm_tr.pngbin0 -> 321 bytes
-rw-r--r--images/nes_sm.png (renamed from images/blank_sm.png)bin276 -> 276 bytes
-rw-r--r--images/nes_sm_tr.png (renamed from images/blank_sm_tr.png)bin275 -> 275 bytes
23 files changed, 287 insertions, 143 deletions
diff --git a/FdsGame.cs b/Apps/FdsGame.cs
index ffd452b1..08909370 100644
--- a/FdsGame.cs
+++ b/Apps/FdsGame.cs
@@ -16,9 +16,20 @@ namespace com.clusterrr.hakchi_gui
{
public class FdsGame : NesMiniApplication
{
- protected const char prefixCode = 'D';
-
- public readonly string FdsPath;
+ internal static override char Prefix
+ {
+ get
+ {
+ return 'D';
+ }
+ }
+ internal static override Image DefaultCover
+ {
+ get
+ {
+ return Resources.blank_fds;
+ }
+ }
const string DefaultArgs = "--guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 10,2 --volume 75 --enable-armet --fds-auto-disk-side-switch-on-keypress";
public string Args
@@ -39,12 +50,10 @@ namespace com.clusterrr.hakchi_gui
public FdsGame(string path, bool ignoreEmptyConfig)
: base(path, ignoreEmptyConfig)
{
- FdsPath = Path.Combine(GamePath, Code + ".fds");
- hasUnsavedChanges = false;
Args = Args; // To update exec path if need
}
- public static FdsGame Import(string fdsFileName, byte[] rawRomData = null)
+ public static FdsGame ImportFds(string fdsFileName, byte[] rawRomData = null)
{
if (rawRomData == null)
rawRomData = File.ReadAllBytes(fdsFileName);
@@ -55,7 +64,7 @@ namespace com.clusterrr.hakchi_gui
rawRomData = fdsDataNoHeader;
}
var crc32 = CRC32(rawRomData);
- var code = GenerateCode(crc32, prefixCode);
+ var code = GenerateCode(crc32, Prefix);
var gamePath = Path.Combine(GamesDirectory, code);
var fdsPath = Path.Combine(gamePath, code + ".fds");
Directory.CreateDirectory(gamePath);
diff --git a/NesGame.cs b/Apps/NesGame.cs
index 23e7ad3a..3eb78323 100644
--- a/NesGame.cs
+++ b/Apps/NesGame.cs
@@ -68,11 +68,10 @@ namespace com.clusterrr.hakchi_gui
if (File.Exists(GameGeniePath))
gameGenie = File.ReadAllText(GameGeniePath);
- hasUnsavedChanges = false;
Args = Args; // To update exec path if need
}
- public static NesMiniApplication Import(string nesFileName, bool? ignoreMapper, ref bool? needPatch, NeedPatchDelegate needPatchCallback = null, Form parentForm = null, byte[] rawRomData = null)
+ public static NesMiniApplication ImportNes(string nesFileName, bool? ignoreMapper, ref bool? needPatch, NeedPatchDelegate needPatchCallback = null, Form parentForm = null, byte[] rawRomData = null)
{
NesFile nesFile;
try
@@ -147,7 +146,7 @@ namespace com.clusterrr.hakchi_gui
game.Name = Regex.Replace(game.Name, @" ?\(.*?\)", string.Empty).Trim();
game.Name = Regex.Replace(game.Name, @" ?\[.*?\]", string.Empty).Trim();
game.Name = game.Name.Replace("_", " ").Replace(" ", " ");
- game.FindCover(nesFileName, (game.region == "Japan") ? Resources.blank_jp : Resources.blank, crc32);
+ game.FindCover(nesFileName, (game.region == "Japan") ? Resources.blank_jp : Resources.blank_nes, crc32);
game.Args = DefaultArgs;
game.Save();
return game;
diff --git a/NesMiniApplication.cs b/Apps/NesMiniApplication.cs
index ae8e9345..3b2106cd 100644
--- a/NesMiniApplication.cs
+++ b/Apps/NesMiniApplication.cs
@@ -25,6 +25,18 @@ namespace com.clusterrr.hakchi_gui
{
get { return code; }
}
+ virtual internal static char Prefix
+ {
+ get { return 'Z'; }
+ }
+ virtual internal static Image DefaultCover
+ {
+ get { return Resources.blank_app; }
+ }
+ virtual internal static string DefaultAp
+ {
+ get { return "/bin/path-to-your-app"; }
+ }
public readonly string GamePath;
public readonly string ConfigPath;
public readonly string IconPath;
@@ -114,16 +126,18 @@ namespace com.clusterrr.hakchi_gui
var extension = Path.GetExtension(fileName).ToLower();
char prefixCode;
string application;
+ Image defaultCover = Resources.blank_app;
switch (extension)
{
// For some unusual NES ROM formats
case ".fds":
- return FdsGame.Import(fileName, rawRomData);
+ return FdsGame.ImportFds(fileName, rawRomData);
case ".nes":
case ".unf":
case ".unif":
- prefixCode = 'U';
+ prefixCode = NesUGame.Prefix;
application = "/bin/nes";
+ defaultCover = NesUGame.DefaultCover; // Most of UNIF roms are pirated Famicom games
break;
case ".desktop":
return ImportApp(fileName);
@@ -135,7 +149,7 @@ namespace com.clusterrr.hakchi_gui
case ".gba":
prefixCode = 'A';
application = "/bin/gba";
- break;
+ break;
case ".n64":
case ".z64":
case ".v64":
@@ -165,7 +179,7 @@ namespace com.clusterrr.hakchi_gui
var crc32 = CRC32(rawRomData);
var code = GenerateCode(crc32, prefixCode);
var gamePath = Path.Combine(GamesDirectory, code);
- var romName = Path.GetFileName(fileName).Replace(" ", "_");
+ var romName = Regex.Replace(Path.GetFileName(fileName), @"[^A-Za-z0-9.-]", "_").Trim();
var romPath = Path.Combine(gamePath, romName);
Directory.CreateDirectory(gamePath);
File.WriteAllBytes(romPath, rawRomData);
@@ -174,7 +188,7 @@ namespace com.clusterrr.hakchi_gui
game.Name = Regex.Replace(game.Name, @" ?\(.*?\)", string.Empty).Trim();
game.Name = Regex.Replace(game.Name, @" ?\[.*?\]", string.Empty).Trim();
game.Name = game.Name.Replace("_", " ").Replace(" ", " ").Trim();
- game.FindCover(fileName, Resources.blank, crc32);
+ game.FindCover(fileName, Resources.blank_app, crc32);
game.Command = string.Format("{0} /usr/share/games/nes/kachikachi/{1}/{2}", application, code, romName);
game.Save();
return game;
diff --git a/Apps/NesUGAme.cs b/Apps/NesUGAme.cs
new file mode 100644
index 00000000..d0b1e5b4
--- /dev/null
+++ b/Apps/NesUGAme.cs
@@ -0,0 +1,34 @@
+using com.clusterrr.Famicom;
+using com.clusterrr.hakchi_gui.Properties;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Windows.Forms;
+using System.Xml.XPath;
+
+namespace com.clusterrr.hakchi_gui
+{
+ public class NesUGame : NesMiniApplication
+ {
+ protected const char prefixCode = 'U';
+
+ internal override Image DefaultCover
+ {
+ get
+ {
+ return Resources.blank_jp;
+ }
+ }
+ public NesUGame(string path, bool ignoreEmptyConfig)
+ : base(path, ignoreEmptyConfig)
+ {
+ }
+ }
+}
+
diff --git a/ConfigIni.cs b/ConfigIni.cs
index e5628e7b..95aaf282 100644
--- a/ConfigIni.cs
+++ b/ConfigIni.cs
@@ -25,12 +25,21 @@ namespace com.clusterrr.hakchi_gui
public static SelectButtonsForm.NesButtons ResetCombination = SelectButtonsForm.NesButtons.Down | SelectButtonsForm.NesButtons.Select;
public static Dictionary<string, string> Presets = new Dictionary<string, string>();
public static string ExtraCommandLineArguments = "";
+ public const string ConfigDir = "config";
public const string ConfigFile = "config.ini";
public static void Load()
{
Debug.WriteLine("Loading config");
- var fileName = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), ConfigFile);
+ var fileNameOld = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), ConfigFile);
+ var configFullDir = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), ConfigDir);
+ var fileName = Path.Combine(configFullDir, ConfigFile);
+ if (File.Exists(fileNameOld)) // Moving old config to new directory
+ {
+ Directory.CreateDirectory(configFullDir);
+ File.Copy(fileNameOld, fileName, true);
+ File.Delete(fileNameOld);
+ }
if (File.Exists(fileName))
{
var configLines = File.ReadAllLines(fileName);
@@ -130,7 +139,11 @@ namespace com.clusterrr.hakchi_gui
{
configLines.Add(string.Format("{0}={1}", preset, Presets[preset]));
}
- File.WriteAllLines(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), ConfigFile), configLines.ToArray());
+
+ var configFullDir = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), ConfigDir);
+ var fileName = Path.Combine(configFullDir, ConfigFile);
+ Directory.CreateDirectory(configFullDir);
+ File.WriteAllLines(fileName, configLines.ToArray());
}
}
}
diff --git a/NesMenuFolder.cs b/NesMenuFolder.cs
index 42c562a9..f872b81f 100644
--- a/NesMenuFolder.cs
+++ b/NesMenuFolder.cs
@@ -156,10 +156,10 @@ namespace com.clusterrr.hakchi_gui
const int maxY = 204;
if (image.Width <= maxX && image.Height <= maxY) // Do not upscale
return image;
- if (image.Width / image.Height > maxX / maxY)
- outImage = new Bitmap(maxX, maxY * image.Height / image.Width);
+ if ((double)image.Width / (double)image.Height > (double)maxX / (double)maxY)
+ outImage = new Bitmap(maxX, (int)((double)maxY * (double)image.Height / (double)image.Width));
else
- outImage = new Bitmap(maxX * image.Width / image.Height, maxY);
+ outImage = new Bitmap((int)(maxX * (double)image.Width / (double)image.Height), maxY);
gr = Graphics.FromImage(outImage);
gr.DrawImage(image, new Rectangle(0, 0, outImage.Width, outImage.Height),
new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);
@@ -181,10 +181,10 @@ namespace com.clusterrr.hakchi_gui
const int maxY = 40;
if (image.Width <= maxX && image.Height <= maxY) // Do not upscale
return image;
- if (image.Width / image.Height > maxX / maxY)
- outImage = new Bitmap(maxX, maxY * image.Height / image.Width);
+ if ((double)image.Width / (double)image.Height > (double)maxX / (double)maxY)
+ outImage = new Bitmap(maxX, (int)((double)maxY * (double)image.Height / (double)image.Width));
else
- outImage = new Bitmap(maxX * image.Width / image.Height, maxY);
+ outImage = new Bitmap((int)(maxX * (double)image.Width / (double)image.Height), maxY);
gr = Graphics.FromImage(outImage);
gr.DrawImage(image, new Rectangle(0, 0, outImage.Width, outImage.Height),
new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
index 8b054c61..f603d7da 100644
--- a/Properties/Resources.Designer.cs
+++ b/Properties/Resources.Designer.cs
@@ -108,9 +108,9 @@ namespace com.clusterrr.hakchi_gui.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
- internal static System.Drawing.Bitmap blank {
+ internal static System.Drawing.Bitmap blank_app {
get {
- object obj = ResourceManager.GetObject("blank", resourceCulture);
+ object obj = ResourceManager.GetObject("blank_app", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
@@ -136,6 +136,16 @@ namespace com.clusterrr.hakchi_gui.Properties {
}
/// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ internal static System.Drawing.Bitmap blank_nes {
+ get {
+ object obj = ResourceManager.GetObject("blank_nes", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to Building the custom kernel image....
/// </summary>
internal static string BuildingCustom {
@@ -226,7 +236,7 @@ namespace com.clusterrr.hakchi_gui.Properties {
}
/// <summary>
- /// Looks up a localized string similar to Do you really want to delete &quot;{0}&quot; preset?.
+ /// Looks up a localized string similar to Do you really want to delete the &quot;{0}&quot; preset?.
/// </summary>
internal static string DeletePreset {
get {
@@ -334,7 +344,7 @@ namespace com.clusterrr.hakchi_gui.Properties {
}
/// <summary>
- /// Looks up a localized string similar to Executing FES-1....
+ /// Looks up a localized string similar to Executing fes1....
/// </summary>
internal static string ExecutingFes1 {
get {
@@ -922,7 +932,7 @@ namespace com.clusterrr.hakchi_gui.Properties {
}
/// <summary>
- /// Looks up a localized string similar to Sorry, &quot;{0}&quot; uses mapper #{1} but this mapper is not supported by the NES Mini and the game probably will not start with the default emulator. But it should work if other emulator&apos;s module installed. Do you want to add this game?.
+ /// Looks up a localized string similar to Sorry, &quot;{0}&quot; uses mapper #{1} but this mapper is not supported by the NES Mini and the game will probably not start with the default emulator. But it should work if other emulator&apos;s module installed. Do you want to add this game?.
/// </summary>
internal static string MapperNotSupported {
get {
@@ -940,7 +950,7 @@ namespace com.clusterrr.hakchi_gui.Properties {
}
/// <summary>
- /// Looks up a localized string similar to The kernel is already patched or it&apos;s an unknown revision. Please send this message to me (press Ctrl+C). Continue at on your own risk..
+ /// Looks up a localized string similar to The kernel is already patched or it&apos;s an unknown revision. Please send this message to me (press Ctrl+C). Continue at your own risk..
/// </summary>
internal static string MD5Failed2 {
get {
@@ -1030,7 +1040,7 @@ namespace com.clusterrr.hakchi_gui.Properties {
}
/// <summary>
- /// Looks up a localized string similar to Don&apos;t worry! Everything is fine. There are just too many ROMs to transfer them at once. Please wait until the power LED goes out, press OK and follow the instructions to continue..
+ /// Looks up a localized string similar to Don&apos;t worry! Everything is fine. There are just too many ROMs to transfer at once. Please wait until power LED goes out, press OK and follow the instructions to continue..
/// </summary>
internal static string ParticallyBody {
get {
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
index 886ef25b..ac16d397 100644
--- a/Properties/Resources.resx
+++ b/Properties/Resources.resx
@@ -313,7 +313,7 @@
<value>Extra command-line arguments</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <data name="blank" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <data name="blank_nes" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\images\blank.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="DownloadAllCoversTitle" xml:space="preserve">
@@ -511,4 +511,7 @@
<data name="UninstallingMods" xml:space="preserve">
<value>Uninstalling mods...</value>
</data>
-</root>
+ <data name="blank_app" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\images\blank_app.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+</root> \ No newline at end of file
diff --git a/TreeContructorForm.Designer.cs b/TreeContructorForm.Designer.cs
index a1bc0dff..041acee7 100644
--- a/TreeContructorForm.Designer.cs
+++ b/TreeContructorForm.Designer.cs
@@ -111,10 +111,16 @@
this.imageList.TransparentColor = System.Drawing.Color.Transparent;
this.imageList.Images.SetKeyName(0, "folder_sm.png");
this.imageList.Images.SetKeyName(1, "folder_sm_tr.png");
- this.imageList.Images.SetKeyName(2, "blank_sm.png");
- this.imageList.Images.SetKeyName(3, "blank_sm_tr.png");
- this.imageList.Images.SetKeyName(4, "original_sm.png");
- this.imageList.Images.SetKeyName(5, "original_sm_tr.png");
+ this.imageList.Images.SetKeyName(2, "original_sm.png");
+ this.imageList.Images.SetKeyName(3, "original_sm_tr.png");
+ this.imageList.Images.SetKeyName(4, "app_sm.png");
+ this.imageList.Images.SetKeyName(5, "app_sm_tr.png");
+ this.imageList.Images.SetKeyName(6, "nes_sm.png");
+ this.imageList.Images.SetKeyName(7, "nes_sm_tr.png");
+ this.imageList.Images.SetKeyName(8, "famicom_sm.png");
+ this.imageList.Images.SetKeyName(9, "famicom_sm_tr.png");
+ this.imageList.Images.SetKeyName(10, "fds_sm.png");
+ this.imageList.Images.SetKeyName(11, "fds_sm_tr.png");
//
// comboBoxPosition
//
diff --git a/TreeContructorForm.cs b/TreeContructorForm.cs
index 17db792d..122b6c66 100644
--- a/TreeContructorForm.cs
+++ b/TreeContructorForm.cs
@@ -17,7 +17,7 @@ namespace com.clusterrr.hakchi_gui
{
public partial class TreeContructorForm : Form
{
- public static string FoldersXmlPath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "folders.xml");
+ public static string FoldersXmlPath = Path.Combine(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), ConfigIni.ConfigDir), "folders.xml");
List<TreeNode> cuttedNodes = new List<TreeNode>();
List<INesMenuElement> deletedGames = new List<INesMenuElement>();
NesMenuCollection gamesCollection = new NesMenuCollection();
@@ -112,6 +112,22 @@ namespace com.clusterrr.hakchi_gui
ShowSelected();
}
+ static int getImageIndex(INesMenuElement nesElement)
+ {
+ if (nesElement is NesMenuFolder || nesElement is NesMenuCollection)
+ return 0;
+ if (nesElement is NesDefaultGame)
+ return 2;
+ if (nesElement is NesGame)
+ return 6;
+ //if (nesElement is ) // How to determine Famicom game?
+ // return 8;
+ if (nesElement is FdsGame)
+ return 10;
+ //if (nesElement is NesMiniApplication)
+ return 4;
+ }
+
void AddNodes(TreeNodeCollection treeNodeCollection, NesMenuCollection nesMenuCollection, List<NesMenuCollection> usedFolders = null)
{
if (usedFolders == null)
@@ -130,12 +146,8 @@ namespace com.clusterrr.hakchi_gui
nesMenuCollection.Remove(nesElement); // We don't need any "back" folders
continue;
}
- newNode.SelectedImageIndex = newNode.ImageIndex = 0;
}
- else if (nesElement is NesMiniApplication)
- newNode.SelectedImageIndex = newNode.ImageIndex = 2;
- else if (nesElement is NesDefaultGame)
- newNode.SelectedImageIndex = newNode.ImageIndex = 4;
+ newNode.SelectedImageIndex = newNode.ImageIndex = getImageIndex(nesElement as INesMenuElement);
newNode.Text = nesElement.Name;
newNode.Tag = nesElement;
treeNodeCollection.Add(newNode);
@@ -198,12 +210,7 @@ namespace com.clusterrr.hakchi_gui
var item = new ListViewItem();
item.Text = element.Name;
var transparency = cuttedNodes.Contains(n) ? 1 : 0;
- if (element is NesMenuFolder)
- item.ImageIndex = 0 + transparency;
- else if (element is NesMiniApplication)
- item.ImageIndex = 2 + transparency;
- else if (element is NesDefaultGame)
- item.ImageIndex = 4 + transparency;
+ item.ImageIndex = getImageIndex(element) + transparency;
item.Tag = n;
listViewContent.Items.Add(item);
}
@@ -802,6 +809,7 @@ namespace com.clusterrr.hakchi_gui
void SaveTree()
{
+ Directory.CreateDirectory(Path.GetDirectoryName(FoldersXmlPath));
File.WriteAllText(FoldersXmlPath, TreeToXml());
if (mainForm != null)
{
diff --git a/TreeContructorForm.resx b/TreeContructorForm.resx
index 40d35f29..648b81a7 100644
--- a/TreeContructorForm.resx
+++ b/TreeContructorForm.resx
@@ -117,9 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
- <data name="&gt;&gt;splitContainer.Type" xml:space="preserve">
- <value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </data>
<data name="&gt;&gt;buttonFoldersEqually.Name" xml:space="preserve">
<value>buttonFoldersEqually</value>
</data>
@@ -206,7 +203,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC0
- CwAAAk1TRnQBSQFMAgEBBgEAAbwBAAHQAQABEAEAARABAAT/AQkBEAj/AUIBTQE2AQQGAAE2AQQCAAEo
+ CwAAAk1TRnQBSQFMAgEBBgEAAbwBAAHcAQABEAEAARABAAT/AQkBEAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@@ -262,21 +259,12 @@
<data name="treeView.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
- <data name="&gt;&gt;cutToolStripMenuItem.Type" xml:space="preserve">
- <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </data>
- <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
- <value>784, 512</value>
- </data>
<data name="buttonOk.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 25</value>
</data>
<data name="&gt;&gt;buttonFoldersLetters.Parent" xml:space="preserve">
<value>groupBoxSplitModes</value>
</data>
- <data name="&gt;&gt;buttonNoFolders.Type" xml:space="preserve">
- <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </data>
<data name="buttonCancel.Text" xml:space="preserve">
<value>Cancel</value>
</data>
@@ -307,6 +295,9 @@
<data name="comboBoxPosition.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
+ <data name="&gt;&gt;splitContainer.Panel2.Name" xml:space="preserve">
+ <value>splitContainer.Panel2</value>
+ </data>
<data name="&gt;&gt;listViewContent.Name" xml:space="preserve">
<value>listViewContent</value>
</data>
@@ -1466,6 +1457,9 @@
//////////////////////////////////8=
</value>
</data>
+ <data name="&gt;&gt;cutToolStripMenuItem.Name" xml:space="preserve">
+ <value>cutToolStripMenuItem</value>
+ </data>
<data name="buttonFoldersEquallyOriginal.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 60</value>
</data>
@@ -1526,12 +1520,18 @@
<data name="buttonCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
+ <data name="groupBoxArt.Size" type="System.Drawing.Size, System.Drawing">
+ <value>221, 227</value>
+ </data>
<data name="&gt;&gt;buttonCancel.Parent" xml:space="preserve">
<value>panel2</value>
</data>
<data name="buttonFoldersLetters.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
+ <data name="&gt;&gt;splitContainer.Panel2.ZOrder" xml:space="preserve">
+ <value>1</value>
+ </data>
<data name="buttonNewFolder.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
@@ -1553,8 +1553,11 @@
<data name="&gt;&gt;treeView.ZOrder" xml:space="preserve">
<value>0</value>
</data>
- <data name="&gt;&gt;buttonFoldersEqually.Type" xml:space="preserve">
- <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <data name="buttonFoldersEquallyOriginal.Text" xml:space="preserve">
+ <value>Original games -&gt; Split equally</value>
+ </data>
+ <data name="&gt;&gt;buttonNoFoldersOriginal.ZOrder" xml:space="preserve">
+ <value>0</value>
</data>
<data name="buttonNewFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>394, 243</value>
@@ -1595,15 +1598,15 @@
<data name="&gt;&gt;panel2.Name" xml:space="preserve">
<value>panel2</value>
</data>
+ <data name="&gt;&gt;buttonFoldersEqually.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
<data name="buttonFoldersLettersOriginal.Text" xml:space="preserve">
<value>Original games -&gt; Split by first letter</value>
</data>
<data name="buttonFoldersEqually.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 88</value>
</data>
- <data name="deleteToolStripMenuItem.Text" xml:space="preserve">
- <value>Delete</value>
- </data>
<data name="toolStripMenuItemSep.Size" type="System.Drawing.Size, System.Drawing">
<value>164, 6</value>
</data>
@@ -1634,15 +1637,9 @@
<data name="buttonCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>678, 7</value>
</data>
- <data name="&gt;&gt;buttonOk.ZOrder" xml:space="preserve">
- <value>1</value>
- </data>
<data name="splitContainer.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
- <data name="buttonFoldersEquallyOriginal.Text" xml:space="preserve">
- <value>Original games -&gt; Split equally</value>
- </data>
<data name="treeView.ImageIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
@@ -1664,6 +1661,9 @@
<data name="&gt;&gt;pasteToolStripMenuItem.Name" xml:space="preserve">
<value>pasteToolStripMenuItem</value>
</data>
+ <data name="newFolderToolStripMenuItem.Text" xml:space="preserve">
+ <value>Create new folder</value>
+ </data>
<data name="buttonOk.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
@@ -1694,6 +1694,9 @@
<data name="deleteToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>167, 22</value>
</data>
+ <data name="&gt;&gt;contextMenuStrip.Name" xml:space="preserve">
+ <value>contextMenuStrip</value>
+ </data>
<data name="pictureBoxArt.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
@@ -1721,9 +1724,6 @@
<data name="&gt;&gt;groupBoxSplitModes.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <data name="buttonOk.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
- <value>Top, Right</value>
- </data>
<data name="&gt;&gt;splitContainer.ZOrder" xml:space="preserve">
<value>2</value>
</data>
@@ -1739,6 +1739,9 @@
<data name="buttonFoldersLettersOriginal.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
+ <data name="pictureBoxArt.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+ <value>NoControl</value>
+ </data>
<data name="&gt;&gt;groupBoxArt.Name" xml:space="preserve">
<value>groupBoxArt</value>
</data>
@@ -1757,15 +1760,15 @@
<data name="&gt;&gt;buttonNewFolder.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
+ <data name="buttonFoldersLettersOriginal.Size" type="System.Drawing.Size, System.Drawing">
+ <value>110, 60</value>
+ </data>
<data name="panel2.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;buttonCancel.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <data name="&gt;&gt;deleteToolStripMenuItem.Type" xml:space="preserve">
- <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </data>
<data name="&gt;&gt;listViewContent.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -1778,15 +1781,12 @@
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <data name="&gt;&gt;contextMenuStrip.Name" xml:space="preserve">
- <value>contextMenuStrip</value>
+ <data name="&gt;&gt;deleteToolStripMenuItem.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;panel2.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <data name="&gt;&gt;buttonNoFolders.Parent" xml:space="preserve">
- <value>groupBoxSplitModes</value>
- </data>
<data name="comboBoxPosition.Items3" xml:space="preserve">
<value>Rightmost</value>
</data>
@@ -1829,8 +1829,8 @@
<data name="labelPosition.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
- <data name="&gt;&gt;cutToolStripMenuItem.Name" xml:space="preserve">
- <value>cutToolStripMenuItem</value>
+ <data name="&gt;&gt;splitContainer.Type" xml:space="preserve">
+ <value>System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;buttonNoFoldersOriginal.Parent" xml:space="preserve">
<value>groupBoxSplitModes</value>
@@ -1847,11 +1847,11 @@
<data name="panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
- <data name="newFolderToolStripMenuItem.Text" xml:space="preserve">
- <value>Create new folder</value>
+ <data name="&gt;&gt;cutToolStripMenuItem.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <data name="&gt;&gt;splitContainer.Panel2.ZOrder" xml:space="preserve">
- <value>1</value>
+ <data name="deleteToolStripMenuItem.Text" xml:space="preserve">
+ <value>Delete</value>
</data>
<data name="buttonNewFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 21</value>
@@ -1868,8 +1868,8 @@
<data name="labelPosition.Size" type="System.Drawing.Size, System.Drawing">
<value>111, 13</value>
</data>
- <data name="groupBoxArt.Size" type="System.Drawing.Size, System.Drawing">
- <value>221, 227</value>
+ <data name="&gt;&gt;buttonOk.ZOrder" xml:space="preserve">
+ <value>1</value>
</data>
<data name="&gt;&gt;labelElementCount.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -1877,12 +1877,15 @@
<data name="buttonFoldersEquallyOriginal.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
- <data name="&gt;&gt;buttonNoFoldersOriginal.ZOrder" xml:space="preserve">
- <value>0</value>
+ <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+ <value>784, 512</value>
</data>
<data name="&gt;&gt;newFolderToolStripMenuItem.Name" xml:space="preserve">
<value>newFolderToolStripMenuItem</value>
</data>
+ <data name="comboBoxPosition.Items2" xml:space="preserve">
+ <value>Right to the games</value>
+ </data>
<data name="buttonNoFoldersOriginal.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
@@ -1895,8 +1898,8 @@
<data name="&gt;&gt;panel2.Parent" xml:space="preserve">
<value>$this</value>
</data>
- <data name="&gt;&gt;splitContainer.Panel2.Name" xml:space="preserve">
- <value>splitContainer.Panel2</value>
+ <data name="buttonOk.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+ <value>Top, Right</value>
</data>
<data name="groupBoxArt.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
@@ -1904,14 +1907,11 @@
<data name="&gt;&gt;imageList.Name" xml:space="preserve">
<value>imageList</value>
</data>
- <data name="pictureBoxArt.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
- <value>NoControl</value>
- </data>
<data name="&gt;&gt;toolStripMenuItemSep.Name" xml:space="preserve">
<value>toolStripMenuItemSep</value>
</data>
- <data name="buttonFoldersLettersOriginal.Size" type="System.Drawing.Size, System.Drawing">
- <value>110, 60</value>
+ <data name="&gt;&gt;buttonNoFolders.Parent" xml:space="preserve">
+ <value>groupBoxSplitModes</value>
</data>
<data name="buttonFoldersLetters.Text" xml:space="preserve">
<value>Split by first letter</value>
@@ -1934,8 +1934,8 @@
<data name="&gt;&gt;imageList.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <data name="comboBoxPosition.Items2" xml:space="preserve">
- <value>Right to the games</value>
+ <data name="&gt;&gt;buttonNoFolders.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="comboBoxPosition.Size" type="System.Drawing.Size, System.Drawing">
<value>126, 21</value>
@@ -1946,16 +1946,16 @@
<data name="&gt;&gt;comboBoxPosition.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>120, 17</value>
- </metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
+ <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>ru-RU</value>
</metadata>
- <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>17, 17</value>
+ <metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>120, 17</value>
</metadata>
</root> \ No newline at end of file
diff --git a/TreeContructorForm.ru-RU.resx b/TreeContructorForm.ru-RU.resx
index 9e89198e..edc323dc 100644
--- a/TreeContructorForm.ru-RU.resx
+++ b/TreeContructorForm.ru-RU.resx
@@ -121,9 +121,9 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
- ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABy
- CwAAAk1TRnQBSQFMAgEBBgEAAbABAAGwAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
- AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+ ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAU
+ EQAAAk1TRnQBSQFMAgEBDAEAAcABAAHAAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+ AwABQAMAAUADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
@@ -150,27 +150,51 @@
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
- AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/0IADhICAA7vIgABEgHt
- ArwJ7QESAgAB7wG8AvIJvAHvIgABEgHtAhIJ7QESAgAB7wG8Au8JvAHvIQABEgLtArwC7QESB+0BEgHv
- ArwC8gK8Ae8HvAHvIAABEgLtAhIK7QESAe8CvALvCrwB7yAAARIC7QK8Ae0HMgLtARIB7wK8AvIBvAea
- ArwB7yAAARIC7QISAe0CMgKGAYsCMgLtARIB7wK8Au8BvAKaA7UCmgK8Ae8gAAESAu0CvAHtAjgBiwES
- ARoBEwE4Au0BEgHvArwC8gG8ApoBuwHvARsB9wGaArwB7yAAARIC7QISAe0COAFuAZMBGgEcATgC7QES
- Ae8CvALvAbwCmgEHAbwB8wHwAZoCvAHvIAABEgLtArwB7QQ4AhcBOALtARIB7wK8AvIBvASgApQBoAK8
- Ae8gAAESAu0CEgHtBTgBlAE4Au0BEgHvArwC7wG8BaABvQGgArwB7yAAARIC7QK8Ae0B+wHTAfsB0wP7
- Au0BEgHvArwC8gG8AaAB3AGgAdwDoAK8Ae8gAAESAu0CDwHtAfsB0wH7A9MB+wLtARIB7wK8AuwBvAGg
- AdwBoAPcAaACvAHvIAABEgK8AhIBvAf7ArwBEgHvAvIC7wHyB6AC8gHvIAADEgIPARIHMAMSA+8C7AHv
- B5kD74EADhICAA7vAgAOtAIADrwCAAESAe0CvAntARICAAHvAbwC8gm8Ae8CAAG0DAkBtAIAAbwM8gG8
- AgABEgHtAhIJ7QESAgAB7wG8Au8JvAHvAgABtAwJAbQCAAG8DPIBvAEAARIC7QK8Au0BEgftARIB7wK8
- AvICvAHvB7wB7wEAAbQMCQG0AgABvAzyAbwBAAESAu0CEgrtARIB7wK8Au8KvAHvAbQOCQG0AbwO8gG8
- ARIC7QK8Ae0HbQLtARIB7wK8AvIBvAfvArwB7wG0DgkBtAG8DvIBvAESAu0CEgHtB20C7QESAe8CvALv
- AbwH7wK8Ae8BtA4JAbQBvA7yAbwBEgLtArwB7QdtAu0BEgHvArwC8gG8B+8CvAHvAbQOCQG0AbwO8gG8
- ARIC7QISAe0HbQLtARIB7wK8Au8BvAfvArwB7wG0DgkBtAG8DvIBvAESAu0CvAHtB20C7QESAe8CvALy
- AbwH7wK8Ae8HtAgJAbQHvAjyAbwBEgLtAhIB7QdtAu0BEgHvArwC7wG8B+8CvAHvAQAFrgq0AQAFBwq8
- ARIC7QK8Ae0HbQLtARIB7wK8AvIBvAfvArwB7wEADq4CAA4HAQABEgLtAg8B7QdtAu0BEgHvArwC7AG8
- B+8CvAHvAgAFrgsABQcJAAESArwCEgG8B20CvAESAe8C8gLvAfIH7wLyAe8gAAMSAg8BEgcPAxID7wLs
- Ae8H7APvAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/8BAAT/BAABgAEBAYABAQQA
- AYABAQGAAQEEAAGAAQEBgAEBZAAM/wGAAQEBgAEBAYABAQGAAQEBgAEBAYABAQGAAQEBgAEBAYABAQGA
- AQEBgAEBAYABAQQAAYABAQGAAQE0AAGAAQABgAUAAYABAQGAAQEEAAHBAf8BwQH/BAAE/wQACw==
+ AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8AZgAOKwIA
+ DpkiAAErDDIBKwIAAZkMmgGZAgAOSAIADpgCAAErDDIBKwIAAZkMmgGZAgABSAxUAUgCAA6YAgABKwIy
+ ASsHmgIyASsCAAGZApoBmQfDApoBmQEAAkgMVAJIEJgBAAErAjIHKwGaAjIBKwIAAZkCmgeZAcMCmgGZ
+ AQABSA5UAUgQmAEAASsMMgErAgABmQyaAZkBAAFIAVQH8AEzBPABVAFIApgH8wGYBPMCmAEAASsFMgKa
+ BTIBKwIAAZkFmgLDBZoBmQEAAUgBVAczAfABMwPwAVQBSAmYAfMBmAPzApgBAAErBDIBmgIyAZoEMgEr
+ AgABmQSaAcMCmgHDBJoBmQEAAUgBVAnwATMB8AEzAVQBSAKYCfMBmAHzA5gBAAErAzIBKwEyAv8BMgEr
+ AzIBKwIAAZkDmgGZAZoC/wGaAZkDmgGZAQABSAFUAjMI8AEzAfABVAFIBJgI8wGYAfMCmAEAASsDMgEr
+ BDIBKwMyASsCAAGZA5oBmQSaAZkDmgGZAQABSA5UAUgQmAEAASsBMgErATIBKwEyAg8BMgErATIBKwEy
+ ASsCAAGZAZoBmQGaAZkBmgLsAZoBmQGaAZkBmgGZAQABSA48AUgBmA6eAZgBAAErAzIBKwEyAg8BMgEr
+ AzIBKwIAAZkDmgGZAZoC7AGaAZkDmgGZAgAOSAIADpgCAAErATIDmgQyA5oBMgErAgABmQGaA8MEmgPD
+ AZoBmSIAASsBmgMrBJoDKwGaASsCAAGZAcMDmQTDA5kBwwGZIgACKwMABCsDAAIrAgACmQMABJkDAAKZ
+ AgAB9AG8Cu8BvAHzAgAB9AHyCrwB8QH0IgAB8QEHCrwBBwHxAgAB8gzwAfICAA4SAgAO7wIAAfIBvAQH
+ ArwFBwHyAgAB8wzwAfMCAAESAe0CvAntARICAAHvAbwC8gm8Ae8CAAHyAgcDvAL3A7wCBwHxAgAB8wTw
+ AfECBwHxBPAB8wIAARIB7QISCe0BEgIAAe8BvALvCbwB7wIAAfIDBwHtAfcC7AH3Ae0BBwG8AQcB8QIA
+ AfMD8AIHAu8CBwPwAfMBAAESAu0CvALtARIH7QESAe8CvALyArwB7we8Ae8BAAHyAgcBvAHsAesC7AHr
+ AewCvAEHAfECAAHzAvAB8QHvAfcC7wH3Ae8D8AHzAQABEgLtAhIK7QESAe8CvALvCrwB7wEAAfICBwHv
+ Ae0B7AIHAuwB9wIHAfECAAHzAvABvAEHAe8C8AEHAe8BvALwAfMBAAESAu0CvAHtB20C7QESAe8CvALy
+ AbwH7wK8Ae8BAAHyAQcBvALsAZIC8QH3AewB6wIHAfECAAHzAvAC7wEHAvIBBwHvAfcC8AHzAQABEgLt
+ AhIB7QdtAu0BEgHvArwC7wG8B+8CvAHvAQAB8gMHAe0B7AL3AewB7QMHAfECAAHzA/ABBwHvArwB7wEH
+ A/AB8wEAARIC7QK8Ae0HbQLtARIB7wK8AvIBvAfvArwB7wEAAfICBwG8BuwBBwG8AQcB8QIAAfMD8Abv
+ A/AB8wEAARIC7QISAe0HbQLtARIB7wK8Au8BvAfvArwB7wEAAfICBwG8AfcBBwLsAQcB9wO8AfICAAHz
+ A/ACvALvArwD8AHzAQABEgLtArwB7QdtAu0BEgHvArwC8gG8B+8CvAHvAQAB8gMHArwC7wG8AQcC9wG8
+ AfMCAAHzBPAB8QK8AfEB8AK8AfAB9AEAARIC7QISAe0HbQLtARIB7wK8Au8BvAfvArwB7wEAAfIFBwK8
+ AQcB9wHtAQcEAAHzCPACBwG8AwABEgLtArwB7QdtAu0BEgHvArwC8gG8B+8CvAHvAQAB8ggHAfcBBwUA
+ AfMI8AEHAbwEAAESAu0CDwHtB20C7QESAe8CvALsAbwH7wK8Ae8BAAHzAbwIBwYAAfQB8QfwAbwFAAES
+ ArwCEgG8B20CvAESAe8C8gLvAfIH7wLyAe8BAAH/AfQB8QXyAfEB9AYAAf8B9AHyBfMB8gH/BQADEgIP
+ ARIHDwMSA+8C7AHvB+wD72EADhICAA7vAgAOtAIADrwCAAESAe0CvAntARICAAHvAbwC8gm8Ae8CAAG0
+ DAkBtAIAAbwM8gG8AgABEgHtAhIJ7QESAgAB7wG8Au8JvAHvAgABtAwJAbQCAAG8DPIBvAEAARIC7QK8
+ Au0BEgftARIB7wK8AvICvAHvB7wB7wEAAbQMCQG0AgABvAzyAbwBAAESAu0CEgrtARIB7wK8Au8KvAHv
+ AbQOCQG0AbwO8gG8ARIC7QK8Ae0HMgLtARIB7wK8AvIBvAeaArwB7wG0DgkBtAG8DvIBvAESAu0CEgHt
+ AjIChgGLAjIC7QESAe8CvALvAbwCmgO1ApoCvAHvAbQOCQG0AbwO8gG8ARIC7QK8Ae0COAGLARIBGgET
+ ATgC7QESAe8CvALyAbwCmgG7Ae8BGwH3AZoCvAHvAbQOCQG0AbwO8gG8ARIC7QISAe0COAFuAZMBGgEc
+ ATgC7QESAe8CvALvAbwCmgEHAbwB8wHwAZoCvAHvAbQOCQG0AbwO8gG8ARIC7QK8Ae0EOAIXATgC7QES
+ Ae8CvALyAbwEoAKUAaACvAHvB7QICQG0B7wI8gG8ARIC7QISAe0FOAGUATgC7QESAe8CvALvAbwFoAG9
+ AaACvAHvAQAFrgq0AQAFBwq8ARIC7QK8Ae0B+wHTAfsB0wP7Au0BEgHvArwC8gG8AaAB3AGgAdwDoAK8
+ Ae8BAA6uAgAOBwEAARIC7QIPAe0B+wHTAfsD0wH7Au0BEgHvArwC7AG8AaAB3AGgA9wBoAK8Ae8CAAWu
+ CwAFBwkAARICvAISAbwH+wK8ARIB7wLyAu8B8gegAvIB7yAAAxICDwESBzADEgPvAuwB7weZA+8BQgFN
+ AT4HAAE+AwABKAMAAUADAAFAAwABAQEAAQEGAAECFgAD/4EADP8BgAEBAYABAQT/AYABAQGAAQEBgAEB
+ AYABAQGAAQEBgAEBAYABAQGAAQEBgAEBAYABAQQAAYABAQGAAQEEAAGAAQEBgAEBBAABgAEBAYABAQQA
+ AYABAQGAAQEEAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGAAQEBgAEBAYABAQGAAQEBgAEB
+ AYABAQT/AYABAQGAAQEE/wGcATkBnAE5AYABAQGAAQEE/wGAAQEBgAEBAYABAQGAAQEBgAEBAYABAQGA
+ AQEBgAEBAYABAQGAAQEBgAEBAYABAQGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGAAQEBgAEB
+ BAABgAEBAYABAQQAAYABAQGAAQEEAAGAAQEBgAEBBAABgAEBAYABAQQAAYABBwGAAQcEAAGAAQ8BgAEP
+ BAABgAEfAYABHwQAAYABHwGAAR8EAAz/AYABAQGAAQEBgAEBAYABAQGAAQEBgAEBAYABAQGAAQEBgAEB
+ AYABAQGAAQEBgAEBBAABgAEBAYABATQAAYABAAGABQABgAEBAYABAQQAAcEB/wHBAf8EAAT/BAAL
</value>
</data>
<data name="comboBoxPosition.Items" xml:space="preserve">
diff --git a/WorkerForm.cs b/WorkerForm.cs
index e52d38f3..39faae39 100644
--- a/WorkerForm.cs
+++ b/WorkerForm.cs
@@ -886,6 +886,7 @@ namespace com.clusterrr.hakchi_gui
var ext = Path.GetExtension(file).ToLower();
bool? needPatch = YesForAllPatches ? (bool?)true : null;
byte[] rawData = null;
+ string tmp = null;
if (ext == ".7z" || ext == ".zip" || ext == ".rar")
{
SevenZipExtractor.SetLibraryPath(Path.Combine(baseDirectory, IntPtr.Size == 8 ? @"tools\7z64.dll" : @"tools\7z.dll"));
@@ -896,11 +897,11 @@ namespace com.clusterrr.hakchi_gui
foreach (var f in szExtractor.ArchiveFileNames)
{
var e = Path.GetExtension(f).ToLower();
- if (e == ".nes" || e == ".fds" || e == ".unf" || e == ".unif")
+ if (e == ".nes" || e == ".fds" || e == ".unf" || e == ".unif" || e == ".desktop")
nesFilesInArchive.Add(f);
filesInArchive.Add(f);
}
- if (nesFilesInArchive.Count == 1) // Only one NES file
+ if (nesFilesInArchive.Count == 1) // Only one NES file (or app)
{
fileName = nesFilesInArchive[0];
}
@@ -921,17 +922,29 @@ namespace com.clusterrr.hakchi_gui
else continue;
}
var o = new MemoryStream();
- szExtractor.ExtractFile(fileName, o);
- rawData = new byte[o.Length];
- o.Seek(0, SeekOrigin.Begin);
- o.Read(rawData, 0, (int)o.Length);
+ if (Path.GetExtension(fileName).ToLower() == ".desktop" // App in archive, need the whole directory
+ || szExtractor.ArchiveFileNames.Contains(Path.GetFileNameWithoutExtension(fileName)+".jpg") // Or it has cover in archive
+ || szExtractor.ArchiveFileNames.Contains(Path.GetFileNameWithoutExtension(fileName) + ".png"))
+ {
+ tmp = Path.Combine(Path.GetTempPath(), fileName);
+ Directory.CreateDirectory(tmp);
+ szExtractor.ExtractArchive(tmp);
+ fileName = Path.Combine(tmp, fileName);
+ }
+ else
+ {
+ szExtractor.ExtractFile(fileName, o);
+ rawData = new byte[o.Length];
+ o.Seek(0, SeekOrigin.Begin);
+ o.Read(rawData, 0, (int)o.Length);
+ }
}
}
if (Path.GetExtension(fileName).ToLower() == ".nes")
{
try
{
- app = NesGame.Import(fileName, YesForAllUnsupportedMappers ? (bool?)true : null, ref needPatch, needPatchCallback, this, rawData);
+ app = NesGame.ImportNes(fileName, YesForAllUnsupportedMappers ? (bool?)true : null, ref needPatch, needPatchCallback, this, rawData);
// Trying to import Game Genie codes
var lGameGeniePath = Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName) + ".xml");
@@ -955,7 +968,7 @@ namespace com.clusterrr.hakchi_gui
MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, true);
while (r == DialogResult.None) Thread.Sleep(100);
if (r == DialogResult.Yes || r == DialogResult.Abort || r == DialogResult.Retry)
- app = NesGame.Import(fileName, true, ref needPatch, needPatchCallback, this, rawData);
+ app = NesGame.ImportNes(fileName, true, ref needPatch, needPatchCallback, this, rawData);
if (r == DialogResult.Abort)
YesForAllUnsupportedMappers = true;
}
@@ -966,6 +979,7 @@ namespace com.clusterrr.hakchi_gui
{
app = NesMiniApplication.Import(fileName, rawData);
}
+ if (!string.IsNullOrEmpty(tmp) && Directory.Exists(tmp)) Directory.Delete(tmp, true);
ConfigIni.SelectedGames += ";" + app.Code;
}
catch (Exception ex)
diff --git a/hakchi_gui.csproj b/hakchi_gui.csproj
index 43466c63..a9af9153 100644
--- a/hakchi_gui.csproj
+++ b/hakchi_gui.csproj
@@ -138,12 +138,12 @@
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
- <Compile Include="FdsGame.cs" />
+ <Compile Include="Apps\FdsGame.cs" />
<Compile Include="NesMenuCollection.cs" />
<Compile Include="NesMenuFolder.cs" />
<Compile Include="NesFile.cs" />
- <Compile Include="NesGame.cs" />
- <Compile Include="NesMiniApplication.cs" />
+ <Compile Include="Apps\NesGame.cs" />
+ <Compile Include="Apps\NesMiniApplication.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.ru-RU.Designer.cs">
@@ -606,6 +606,16 @@
<Content Include="folder_images\folder_z.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
+ <Content Include="images\app_sm.png" />
+ <Content Include="images\app_sm_tr.png" />
+ <Content Include="images\blank_app.png" />
+ <Content Include="images\nes_sm_tr.png" />
+ <Content Include="images\famicom_sm.png" />
+ <Content Include="images\famicom_sm_tr.png" />
+ <Content Include="images\fds_sm.png" />
+ <Content Include="images\fds_sm_tr.png" />
+ <Content Include="images\folder_sm_tr.png" />
+ <Content Include="images\original_sm_tr.png" />
<Content Include="user_mods\music_hack.hmod\music.wav">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
@@ -622,7 +632,7 @@
</Content>
<Content Include="images\blank_fds.png" />
<Content Include="images\blank_jp.png" />
- <Content Include="images\blank_sm.png" />
+ <Content Include="images\nes_sm.png" />
<Content Include="images\folder_sm.png" />
<Content Include="images\gamepad.png" />
<Content Include="images\original_sm.png" />
diff --git a/images/app_sm.png b/images/app_sm.png
new file mode 100644
index 00000000..52878f0c
--- /dev/null
+++ b/images/app_sm.png
Binary files differ
diff --git a/images/app_sm_tr.png b/images/app_sm_tr.png
new file mode 100644
index 00000000..475753e9
--- /dev/null
+++ b/images/app_sm_tr.png
Binary files differ
diff --git a/images/blank_app.png b/images/blank_app.png
new file mode 100644
index 00000000..0f55e2a1
--- /dev/null
+++ b/images/blank_app.png
Binary files differ
diff --git a/images/famicom_sm.png b/images/famicom_sm.png
new file mode 100644
index 00000000..2cc4c321
--- /dev/null
+++ b/images/famicom_sm.png
Binary files differ
diff --git a/images/famicom_sm_tr.png b/images/famicom_sm_tr.png
new file mode 100644
index 00000000..7913d555
--- /dev/null
+++ b/images/famicom_sm_tr.png
Binary files differ
diff --git a/images/fds_sm.png b/images/fds_sm.png
new file mode 100644
index 00000000..cd6559ff
--- /dev/null
+++ b/images/fds_sm.png
Binary files differ
diff --git a/images/fds_sm_tr.png b/images/fds_sm_tr.png
new file mode 100644
index 00000000..c2d638b0
--- /dev/null
+++ b/images/fds_sm_tr.png
Binary files differ
diff --git a/images/blank_sm.png b/images/nes_sm.png
index c2cf89df..c2cf89df 100644
--- a/images/blank_sm.png
+++ b/images/nes_sm.png
Binary files differ
diff --git a/images/blank_sm_tr.png b/images/nes_sm_tr.png
index d2706c8b..d2706c8b 100644
--- a/images/blank_sm_tr.png
+++ b/images/nes_sm_tr.png
Binary files differ