90 lines
2.6 KiB
C#
90 lines
2.6 KiB
C#
|
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
|
|||
|
}
|
|||
|
}
|