diff --git a/Reseter2/Form1.cs b/Reseter2/Form1.cs
index 4354134..fb13f26 100644
--- a/Reseter2/Form1.cs
+++ b/Reseter2/Form1.cs
@@ -46,8 +46,9 @@ namespace Reseter2
SGlobalSetting.LoadSetting();
+
WordsList.MainCategory = SGlobalSetting.LoadWords();
-
+
InitializeComponent();
checkControl1.updateCheck += CheckControl1_updateCheck;
@@ -57,9 +58,10 @@ namespace Reseter2
HistoryList.Update += Update_lb;
lb_history.DataSource = HistoryList.Hitem;
lb_history.DisplayMember = "ToStr";
+ treeView1.PathSeparator = "/";
treeView1.Nodes.AddRange(WordsList.ListNodes());
-
+ SGlobalSetting.settingExpand.ExpendAll(treeView1.Nodes);
//treeView1.SelectedNode.
//treeView1.MouseCaptureChanged.;
tabControl1.SelectedIndex = 1;
@@ -169,22 +171,8 @@ namespace Reseter2
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
- BinaryFormatter binaryFormatter = new BinaryFormatter();
- FileStream file = null;
- try
- {
- file = new FileStream("res.dat", FileMode.OpenOrCreate);
- binaryFormatter.Serialize(file, HistoryList.Hitem);
- file.Close();
- file.Dispose();
- }
- catch
- {
- file.Close();
- file.Dispose();
- MessageBox.Show("Ошибка записи конфигурационных файлов.\n Текущие данные будут потерянны.", "Критическая ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
-
+ SGlobalSetting.settingExpand.SaveExpand(treeView1.Nodes);
+ SGlobalSetting.SaveSettig();
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
diff --git a/Reseter2/Reseter2.csproj b/Reseter2/Reseter2.csproj
index bf0ba62..5ba202b 100644
--- a/Reseter2/Reseter2.csproj
+++ b/Reseter2/Reseter2.csproj
@@ -75,6 +75,7 @@
+
diff --git a/Reseter2/Setting/SGlobalSetting.cs b/Reseter2/Setting/SGlobalSetting.cs
index c4aa898..ac71477 100644
--- a/Reseter2/Setting/SGlobalSetting.cs
+++ b/Reseter2/Setting/SGlobalSetting.cs
@@ -9,6 +9,7 @@ using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
+using static System.Net.WebRequestMethods;
namespace Reseter2.Setting
{
@@ -17,6 +18,7 @@ namespace Reseter2.Setting
{
public static SettingWords settingWords = new SettingWords();
+ public static SettingExpand settingExpand = new SettingExpand();
//public static void LoadSetting()
// {
@@ -31,12 +33,30 @@ namespace Reseter2.Setting
object output = Load("res.dat");
if (!(output is SSetting)) return;
SSetting setting = (SSetting)output;
- settingWords = setting .settingWords;
+ if (setting.settingWords != null) settingWords = setting.settingWords;
+ if (setting.settingExpand != null) settingExpand = setting.settingExpand;
HistoryList.Hitem = setting.historyItems;
// return output;
}
+ public static bool SaveSettig()
+ {
+ SSetting sSetting = new SSetting();
+ sSetting.settingWords = settingWords;
+ sSetting.historyItems = HistoryList.Hitem;
+ sSetting.settingExpand = settingExpand;
+ if(Save("res.dat", sSetting))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+
+ }
+
public static WordsCategory LoadWords()
{
WordsCategory output = (WordsCategory)Load(settingWords.PathBase);
@@ -61,6 +81,11 @@ namespace Reseter2.Setting
}
catch
{
+ if (file != null)
+ {
+ file.Close();
+ file.Dispose();
+ }
return null;
}
@@ -130,7 +155,7 @@ namespace Reseter2.Setting
Memory.Dispose();
file.Close();
file.Dispose();
- return SaveCheck(output);
+ return SaveCheck(settingWords.PathBase, output);
}
WordsList.MainCategory = output;
@@ -149,7 +174,7 @@ namespace Reseter2.Setting
{
return Save(settingWords.PathBase, output);
}
- public static bool Save(string path, object output)
+ public static bool Save(string path, object output)
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
FileStream file = null;
@@ -163,19 +188,22 @@ namespace Reseter2.Setting
}
catch
{
+ if(file != null)
+ {
file.Close();
file.Dispose();
- return SaveCheck(output);
+ }
+ return SaveCheck(path, output);
}
}
- public static bool SaveCheck(object output)
+ public static bool SaveCheck(string path, object output)
{
DialogResult result1 = MessageBox.Show("Файл занят другой программой.\nПовторить еще раз?", "Ошибка сохранения", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error);
switch (result1)
{
case (DialogResult.Retry):
- return SaveCheck(output);
+ return Save(path, output);
case (DialogResult.Abort):
return true;
}
diff --git a/Reseter2/Setting/SSetting.cs b/Reseter2/Setting/SSetting.cs
index 5dbcc25..c68f398 100644
--- a/Reseter2/Setting/SSetting.cs
+++ b/Reseter2/Setting/SSetting.cs
@@ -7,10 +7,12 @@ using System.Threading.Tasks;
namespace Reseter2.Setting
{
+ [Serializable]
internal struct SSetting
{
public SettingWords settingWords;
public List historyItems;
+ public SettingExpand settingExpand;
}
}
diff --git a/Reseter2/Setting/SettingExpand.cs b/Reseter2/Setting/SettingExpand.cs
new file mode 100644
index 0000000..1f6ca71
--- /dev/null
+++ b/Reseter2/Setting/SettingExpand.cs
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Reseter2.Setting
+{
+ [Serializable]
+ internal class SettingExpand
+ {
+ private List nodePathes;
+ public SettingExpand()
+ {
+ nodePathes = new List();
+ }
+
+ public void ExpendAll(TreeNodeCollection nodes)
+ {
+
+ foreach (string path in nodePathes)
+ {
+ string[] folder = path.Split('/');
+ Expand(nodes, folder, 0);
+ }
+ nodePathes.Clear();
+ }
+
+ private void Expand(TreeNodeCollection nodes, string[] folder, int number)
+ {
+
+ int i = nodes.IndexOfKey(folder[number]);
+ if (i == -1) return;
+ if (folder.Count() == number+1)
+ {
+ nodes[i].Expand();
+ }
+ else
+ {
+ Expand(nodes[i].Nodes, folder, number+1);
+ }
+
+ }
+
+ public void SaveExpand(TreeNodeCollection nodes, string path = "")
+ {
+
+ foreach(TreeNode node in nodes)
+ {
+ if(node.Nodes.Count > 0)
+ {
+ if (node.IsExpanded)
+ {
+ nodePathes.Add(path + node.Name);
+ }
+ SaveExpand(node.Nodes, path + node.Name + "/" );
+ }
+ }
+ }
+
+ }
+}
diff --git a/Reseter2/Setting/SettingWords.cs b/Reseter2/Setting/SettingWords.cs
index ed2af6d..362fa4c 100644
--- a/Reseter2/Setting/SettingWords.cs
+++ b/Reseter2/Setting/SettingWords.cs
@@ -32,7 +32,8 @@ namespace Reseter2.Setting
public void HashSumm(MemoryStream memory)
{
- hash = Hash.ComputeHash(memory);
+ if(Hash == null) Hash = MD5.Create();
+ hash = Hash.ComputeHash(memory);
}
public bool HashCheck(MemoryStream memory)
diff --git a/Reseter2/Words/WordsCategory.cs b/Reseter2/Words/WordsCategory.cs
index 64da4ef..c0fa054 100644
--- a/Reseter2/Words/WordsCategory.cs
+++ b/Reseter2/Words/WordsCategory.cs
@@ -107,6 +107,7 @@ namespace Reseter2.Words
public override TreeNode NodeList()
{
TreeNode treeNode = new TreeNode(GetName());
+ treeNode.Name = GetName();
treeNode.Tag = this;
treeNode.ImageIndex = 0;
treeNode.SelectedImageIndex = 0;
@@ -114,7 +115,8 @@ namespace Reseter2.Words
foreach (var item in items)
{
- treeNode.Nodes.Add(item.NodeList());
+ int i = treeNode.Nodes.Add(item.NodeList());
+ treeNode.Nodes[i].Name += treeNode.Nodes[i].Index;
}
return treeNode;
}
diff --git a/Reseter2/Words/WordsComp.cs b/Reseter2/Words/WordsComp.cs
index 5ec98c8..d737f4b 100644
--- a/Reseter2/Words/WordsComp.cs
+++ b/Reseter2/Words/WordsComp.cs
@@ -112,6 +112,7 @@ namespace Reseter2.Words
{
TreeNode treeNode = new TreeNode();
treeNode.Text = NameNode();
+ treeNode.Name = NameNode();
treeNode.Tag = this;
treeNode.ImageIndex = Comp.GetImage();
treeNode.SelectedImageIndex = Comp.GetImage();
diff --git a/Reseter2/Words/WordsList.cs b/Reseter2/Words/WordsList.cs
index 91e1ead..480955c 100644
--- a/Reseter2/Words/WordsList.cs
+++ b/Reseter2/Words/WordsList.cs
@@ -32,6 +32,7 @@ namespace Reseter2.Words
for(int i = 0; i < MainCategory.Count(); i++)
{
treeNodes[i] = MainCategory.Items(i).NodeList();
+ treeNodes[i].Name += i;
}
return treeNodes;