Sic04/Sicentury.Core/Tree/TreeNodeSelectionGroupInfo.cs

90 lines
2.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Newtonsoft.Json;
namespace Sicentury.Core.Tree
{
public class TreeNodeSelectionGroupInfo
{
#region Constructors
public TreeNodeSelectionGroupInfo()
{
SelectedTerminalNodes = new List<string>();
}
public TreeNodeSelectionGroupInfo(IEnumerable<string> collection)
{
SelectedTerminalNodes = new List<string>(collection);
}
#endregion
#region Properties
public List<string> SelectedTerminalNodes
{
get;
}
#endregion
#region Methods
/// <summary>
/// 从指定的文件恢复节点选择
/// </summary>
/// <param name="fileName"></param>
internal static void RecoveryFromJsonFile(string fileName, TreeNode treeRoot)
{
if (treeRoot == null)
throw new ArgumentNullException(nameof(treeRoot));
if (string.IsNullOrEmpty(fileName))
throw new ArgumentException("the file name is not specified.", nameof(fileName));
var json = File.ReadAllText(fileName);
var info = JsonConvert.DeserializeObject<TreeNodeSelectionGroupInfo>(json);
// 如果没有正确恢复Preset Group文件则提示错误
if (info.SelectedTerminalNodes == null)
throw new JsonException($"the file of preset group might be incorrect.");
treeRoot.UnselectAll();
treeRoot.SuspendUpdate();
var flattenTree = treeRoot.Flatten(true);
info.SelectedTerminalNodes.ForEach(x =>
{
var matched = flattenTree.FirstOrDefault(f => f.ToString() == x.ToString());
if (matched != null)
matched.IsSelected = true;
});
treeRoot.ResumeUpdate();
}
internal static void SaveToJsonFile(string fileName, TreeNode treeRoot)
{
if (treeRoot == null)
throw new ArgumentNullException(nameof(treeRoot));
if (string.IsNullOrEmpty(fileName))
throw new ArgumentException("the file name is not specified.", nameof(fileName));
var selectedNodes =
treeRoot.Flatten(true)
.Where(x => x.IsSelected == true)
.Select(x=>x.ToString());
var info = new TreeNodeSelectionGroupInfo(selectedNodes);
var json = JsonConvert.SerializeObject(info, Formatting.Indented);
File.WriteAllText(fileName, json);
}
#endregion
}
}