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:
-rw-r--r--MainForm.cs4
-rw-r--r--Properties/AssemblyInfo.cs4
-rw-r--r--SelectModsForm.Designer.cs3
-rw-r--r--SelectModsForm.cs52
4 files changed, 56 insertions, 7 deletions
diff --git a/MainForm.cs b/MainForm.cs
index d12e84f8..5b7a6cd0 100644
--- a/MainForm.cs
+++ b/MainForm.cs
@@ -1156,7 +1156,7 @@ namespace com.clusterrr.hakchi_gui
MessageBox.Show(Resources.NoKernelYouNeed, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
- var form = new SelectModsForm();
+ var form = new SelectModsForm(false, true);
form.Text = Resources.SelectModsInstall;
if (form.ShowDialog() == DialogResult.OK)
{
@@ -1176,7 +1176,7 @@ namespace com.clusterrr.hakchi_gui
MessageBox.Show(Resources.NoKernelYouNeed, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
- var form = new SelectModsForm(true);
+ var form = new SelectModsForm(true, false);
form.Text = Resources.SelectModsUninstall;
if (form.ShowDialog() == DialogResult.OK)
{
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
index a3b4b015..2bcad38c 100644
--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.0.14.3")]
-[assembly: AssemblyFileVersion("2.0.14.3")]
+[assembly: AssemblyVersion("2.0.14.4")]
+[assembly: AssemblyFileVersion("2.0.14.4")]
diff --git a/SelectModsForm.Designer.cs b/SelectModsForm.Designer.cs
index ae8f8c2b..6e27dd41 100644
--- a/SelectModsForm.Designer.cs
+++ b/SelectModsForm.Designer.cs
@@ -21,6 +21,7 @@
this.checkedListBoxMods.Location = new System.Drawing.Point(12, 12);
this.checkedListBoxMods.Name = "checkedListBoxMods";
this.checkedListBoxMods.Size = new System.Drawing.Size(258, 334);
+ this.checkedListBoxMods.Sorted = true;
this.checkedListBoxMods.TabIndex = 0;
this.checkedListBoxMods.SelectedIndexChanged += new System.EventHandler(this.checkedListBoxMods_SelectedIndexChanged);
//
@@ -64,6 +65,8 @@
this.Name = "SelectModsForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "ModsSelect";
+ this.DragDrop += new System.Windows.Forms.DragEventHandler(this.SelectModsForm_DragDrop);
+ this.DragEnter += new System.Windows.Forms.DragEventHandler(this.SelectModsForm_DragEnter);
this.ResumeLayout(false);
this.PerformLayout();
diff --git a/SelectModsForm.cs b/SelectModsForm.cs
index 3c9d7753..5b12955e 100644
--- a/SelectModsForm.cs
+++ b/SelectModsForm.cs
@@ -15,7 +15,7 @@ namespace com.clusterrr.hakchi_gui
private readonly string usermodsDirectory;
private readonly string[] readmeFiles;
- public SelectModsForm(bool loadInstalledMods = false)
+ public SelectModsForm(bool loadInstalledMods, bool allowDropMods)
{
InitializeComponent();
baseDirectory = MainForm.BaseDirectory;
@@ -52,8 +52,10 @@ namespace com.clusterrr.hakchi_gui
readmeFiles = new string[] { "readme.txt", "readme.md", "readme" };
checkedListBoxMods.Items.Clear();
checkedListBoxMods.Items.AddRange(modsList.ToArray());
+ this.AllowDrop = allowDropMods;
}
+
private void buttonOk_Click(object sender, EventArgs e)
{
if (checkedListBoxMods.CheckedItems.Count > 0)
@@ -103,9 +105,9 @@ namespace com.clusterrr.hakchi_gui
tar.Seek(0, SeekOrigin.Begin);
using (var szExtractorTar = new SevenZipExtractor(tar))
{
- foreach (var f in readmeFiles)
+ foreach (var f in szExtractorTar.ArchiveFileNames)
{
- if (szExtractorTar.ArchiveFileNames.Contains(f))
+ if (readmeFiles.Contains(f.ToLower()))
{
var o = new MemoryStream();
szExtractorTar.ExtractFile(f, o);
@@ -113,6 +115,8 @@ namespace com.clusterrr.hakchi_gui
o.Seek(0, SeekOrigin.Begin);
o.Read(rawData, 0, (int)o.Length);
text = Encoding.UTF8.GetString(rawData);
+ if (!text.Contains("\r"))
+ text = text.Replace("\n", "\r\n");
break;
}
}
@@ -135,5 +139,47 @@ namespace com.clusterrr.hakchi_gui
textBoxReadme.Enabled = readme.Length > 0;
}
}
+
+ private void SelectModsForm_DragEnter(object sender, DragEventArgs e)
+ {
+ if (e.Data.GetDataPresent(DataFormats.FileDrop))
+ e.Effect = DragDropEffects.Copy;
+ }
+
+ private void SelectModsForm_DragDrop(object sender, DragEventArgs e)
+ {
+ var files = (string[])e.Data.GetData(DataFormats.FileDrop);
+ var listAddedMods = new List<string>();
+ foreach (var file in files)
+ {
+ var ext = Path.GetExtension(file).ToLower();
+ if (ext == ".hmod")
+ {
+ File.Copy(file, Path.Combine(usermodsDirectory, Path.GetFileName(file)), true);
+ listAddedMods.Add(Path.GetFileNameWithoutExtension(file));
+ }
+ else if (ext == ".7z" || ext == ".zip" || ext == ".rar")
+ {
+ SevenZipExtractor.SetLibraryPath(Path.Combine(baseDirectory, IntPtr.Size == 8 ? @"tools\7z64.dll" : @"tools\7z.dll"));
+ using (var szExtractor = new SevenZipExtractor(file))
+ {
+ foreach (var f in szExtractor.ArchiveFileNames)
+ if (Path.GetExtension(f).ToLower() == ".hmod")
+ {
+ using (var outFile = new FileStream(Path.Combine(usermodsDirectory, Path.GetFileName(f)), FileMode.Create))
+ {
+ szExtractor.ExtractFile(f, outFile);
+ listAddedMods.Add(Path.GetFileNameWithoutExtension(f));
+ }
+ }
+ }
+ }
+ }
+ foreach (var mod in listAddedMods)
+ {
+ checkedListBoxMods.Items.Remove(mod);
+ checkedListBoxMods.Items.Add(mod, true);
+ }
+ }
}
}