节点导入完成

This commit is contained in:
艾竹
2023-04-02 21:47:55 +08:00
parent 0701f25519
commit 7835b422ff
20 changed files with 765 additions and 119 deletions

View File

@@ -1,12 +1,12 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Windows.Input;
using System.Windows.Media;
using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
using AIStudio.Wpf.Mind.Controls;
using AIStudio.Wpf.Mind.Helpers;
using AIStudio.Wpf.Mind.Models;
@@ -160,6 +160,24 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
}
private ICommand _exportCommand;
public ICommand ExportCommand
{
get
{
return this._exportCommand ?? (this._exportCommand = new SimpleCommand(MindExecuteEnable, ExecuteExportCommand));
}
}
private ICommand _importCommand;
public ICommand ImportCommand
{
get
{
return this._importCommand ?? (this._importCommand = new SimpleCommand(MindExecuteEnable, ExecuteImportCommand));
}
}
private ICommand _selectBrotherCommand;
public ICommand SelectBrotherCommand
{
@@ -354,7 +372,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
AddRootItem();
}
ResetChildren(RootItems);
RootItems?.ForEach(p => p.LayoutUpdated());
RootItems?.ForEach(p => p.UpdatedLayout());
base.Init();
}
@@ -378,7 +396,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
item.Offset = new DiagramDesigner.Geometrys.PointBase();
}
RootItems?.ForEach(p => p.LayoutUpdated());
RootItems?.ForEach(p => p.UpdatedLayout());
}
private void ResetChildren(IEnumerable<MindNode> parents)
@@ -393,7 +411,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
item.Parent = parent;
item.InitLayout(false);
item.InitConnectLayout();
item.InitConnectionLayout();
}
ResetChildren(parent.Children);
}
@@ -483,7 +501,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
newitems.Add(newitem);
}
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.LayoutUpdated());
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
},
() => {
foreach (var item in newitems)
@@ -491,7 +509,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
item.RemoveFrom();
}
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.LayoutUpdated());
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
});
}
@@ -529,7 +547,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
newitems.Add(newitem);
}
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.LayoutUpdated());
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
},
() => {
foreach (var item in items)
@@ -545,7 +563,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
item.AddTo(parent.ParentNode, index);
}
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.LayoutUpdated());
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
});
}
@@ -580,16 +598,16 @@ namespace AIStudio.Wpf.Mind.ViewModels
newitems.Add(newitem);
}
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.LayoutUpdated());
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
},
() => {
foreach (var item in newitems)
{
item.RemoveFrom();
item.LayoutUpdated();
item.UpdatedLayout();
}
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.LayoutUpdated());
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
});
}
@@ -644,6 +662,78 @@ namespace AIStudio.Wpf.Mind.ViewModels
});
}
private void ExecuteExportCommand(object parameter)
{
if (parameter is MindNode node)
{
}
else
{
node = SelectedItem as MindNode;
}
if (node != null)
{
var output = node.GetChildrenText(true);
var window = new NodeDTSWindow("导出节点", output);
window.ShowDialog();
}
}
private void ExecuteImportCommand(object parameter)
{
if (parameter is MindNode node)
{
}
else
{
node = SelectedItem as MindNode;
}
if (node != null)
{
var window = new NodeDTSWindow("导入节点", "");
if (window.ShowDialog() == true)
{
List<MindNode> newitems = new List<MindNode>();
DoCommandManager.DoNewCommand(this.ToString(),
() =>
{
var content = window.ContentString;
var lines = content.Split(new string[] { "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
MindNode lastnode = node;
foreach (var line in lines)
{
int level = Regex.Matches(line, "\t").Count + node.NodeLevel + 1;
string text = line.Replace("\t", "");
var newitem = new MindNode(this) { Text = text };
while (lastnode.NodeLevel != level - 1)
{
lastnode = lastnode.ParentNode;
}
if (lastnode == null)
{
continue;
}
newitem.AddTo(lastnode, isSelected: false);
lastnode = newitem;
newitems.Add(newitem);
}
node.UpdatedLayout();
},
() => {
foreach (var item in newitems)
{
item.RemoveFrom();
}
node.UpdatedLayout();
});
}
}
}
private void MoveBack(List<MindNode> items)
{
foreach (var item in items)
@@ -660,7 +750,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
item.AddTo(parent, index + 1);
}
}
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.LayoutUpdated());
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
}
private void MoveForward(List<MindNode> items)
@@ -679,7 +769,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
item.AddTo(parent, index - 1);
}
}
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.LayoutUpdated());
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
}
protected override bool Delete(object parameter)
@@ -731,7 +821,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
base.Delete(others);
}
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.LayoutUpdated());
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
},
() => {
if (others.Any())
@@ -748,7 +838,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
}
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.LayoutUpdated());
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
});
return true;
}
@@ -776,7 +866,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
}
ResetChildren(parents);
parents.ForEach(p => p.LayoutUpdated());
parents.ForEach(p => p.UpdatedLayout());
}
#endregion
@@ -997,14 +1087,14 @@ namespace AIStudio.Wpf.Mind.ViewModels
() => {
roots.ForEach(p => p.MindType = mindType);
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitLayout(true); });
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitConnectLayout(); });
roots.ForEach(p => p.LayoutUpdated());
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitConnectionLayout(); });
roots.ForEach(p => p.UpdatedLayout());
},
() => {
roots.ForEach(p => p.MindType = oldMindType);
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitLayout(true); });
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitConnectLayout(); });
roots.ForEach(p => p.LayoutUpdated());
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitConnectionLayout(); });
roots.ForEach(p => p.UpdatedLayout());
});
}
}
@@ -1033,7 +1123,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
MindTheme = mindTheme;
roots.ForEach(p => p.MindTheme = MindTheme);
roots.SelectMany(p => p.GetChildren(true)).ToList().ForEach(item => { item.ThemeChange(); });
roots.ForEach(p => p.LayoutUpdated());
roots.ForEach(p => p.UpdatedLayout());
},
() => {
var mindThemeModel = MindThemeHelper.GetTheme(oldmindTheme);
@@ -1048,7 +1138,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
MindTheme = oldmindTheme;
roots.ForEach(p => p.MindTheme = MindTheme);
roots.SelectMany(p => p.GetChildren(true)).ToList().ForEach(item => { item.ThemeChange(); });
roots.ForEach(p => p.LayoutUpdated());
roots.ForEach(p => p.UpdatedLayout());
});
}
}
@@ -1177,7 +1267,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
rootitem.Left = left.Value;
rootitem.Top = top.Value;
rootitem.Offset = offset;
rootitem?.LayoutUpdated();
rootitem?.UpdatedLayout();
FitViewModel = new FitViewModel() { BoundingRect = rootitem.GetBounds() };
}