From 3b95cf4ff625fc68e53205c1e2613fb2c696091c Mon Sep 17 00:00:00 2001 From: klavirshik Date: Tue, 20 Aug 2024 09:45:28 +0200 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=20expand=20save?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Reseter2/Form1.cs | 24 +++--------- Reseter2/Reseter2.csproj | 1 + Reseter2/Setting/SGlobalSetting.cs | 40 ++++++++++++++++--- Reseter2/Setting/SSetting.cs | 2 + Reseter2/Setting/SettingExpand.cs | 63 ++++++++++++++++++++++++++++++ Reseter2/Setting/SettingWords.cs | 3 +- Reseter2/Words/WordsCategory.cs | 4 +- Reseter2/Words/WordsComp.cs | 1 + Reseter2/Words/WordsList.cs | 1 + 9 files changed, 113 insertions(+), 26 deletions(-) create mode 100644 Reseter2/Setting/SettingExpand.cs 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;