Mind Editoe

This commit is contained in:
艾竹
2023-03-05 21:30:53 +08:00
parent 9061146139
commit 79f4896fbd
41 changed files with 2090 additions and 484 deletions

View File

@@ -20,6 +20,7 @@ using AIStudio.Wpf.Flowchart.Models;
using AIStudio.Wpf.Mind.Helpers;
using AIStudio.Wpf.Mind.Models;
namespace AIStudio.Wpf.Mind.ViewModels
{
public class MindNode : DiagramItemViewModel
@@ -31,20 +32,19 @@ namespace AIStudio.Wpf.Mind.ViewModels
public MindNode(IDiagramViewModel root, NodeLevel nodeLevel, MindType mindType = MindType.Mind) : base(root)
{
NodeLevel = nodeLevel;
MindType = mindType;
MindType = mindType;
InitLayout();
MindLayout.Appearance(this);
InitLayout(true);
}
public MindNode(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
{
InitLayout();
InitLayout(false);
}
public MindNode(IDiagramViewModel root, SerializableItem serializableItem, string serializableType) : base(root, serializableItem, serializableType)
{
InitLayout();
InitLayout(false);
}
public override SelectableItemBase GetSerializableObject()
@@ -58,21 +58,25 @@ namespace AIStudio.Wpf.Mind.ViewModels
EnabledForConnection = false;
AddChildCommand = new SimpleCommand(Command_Enable, ExecuteAddChildCommand);
AddParentCommand = new SimpleCommand(Level_Enable, ExecuteAddParentCommand);
AddPeerCommand = new SimpleCommand(Level_Enable, ExecuteAddPeerCommand);
DeleteCommand = new SimpleCommand(Level_Enable, ExecuteDeleteCommand);
MoveForwardCommand = new SimpleCommand(Command_Enable, ExecuteMoveForwardCommand);
MoveBackCommand = new SimpleCommand(Command_Enable, ExecuteMoveBackCommand);
AddChildCommand = (Root as IMindDiagramViewModel)?.AddChildCommand;
AddParentCommand = (Root as IMindDiagramViewModel)?.AddParentCommand;
AddPeerCommand = (Root as IMindDiagramViewModel)?.AddPeerCommand;
DeleteSelfCommand = (Root as IMindDiagramViewModel)?.DeleteSelfCommand;
MoveForwardCommand = (Root as IMindDiagramViewModel)?.MoveForwardCommand;
MoveBackCommand = (Root as IMindDiagramViewModel)?.MoveBackCommand;
BuildMenuOptions();
this.PropertyChanged += this.Item_PropertyChanged;
}
protected void InitLayout()
protected void InitLayout(bool initAppearance)
{
var layout = GlobalType.AllTypes.Where(p => typeof(IMindLayout).IsAssignableFrom(p)).FirstOrDefault(p => p.Name == MindType.ToString() + "Layout");
MindLayout = layout != null ? (System.Activator.CreateInstance(layout) as IMindLayout) : new MindLayout();
if (initAppearance)
{
MindLayout.Appearance(this);
}
this.PropertyChanged += this.Item_PropertyChanged;
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
@@ -103,8 +107,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
private bool Level_Enable(object obj)
{
if (Command_Enable(obj) == false) return false;
@@ -115,7 +117,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
#region
public IMindLayout MindLayout
{
get;set;
get; set;
}
[Browsable(false)]
private NodeLevel _nodeLevel;
@@ -130,6 +132,29 @@ namespace AIStudio.Wpf.Mind.ViewModels
SetProperty(ref _nodeLevel, value);
}
}
//public MindNode ParentNode
//{
// get
// {
// return Parent as MindNode;
// }
//}
//public int NodeLevel
//{
// get
// {
// if (ParentNode == null)
// {
// return 0;
// }
// else
// {
// return ParentNode.NodeLevel + 1;
// }
// }
//}
private MindType _mindType;
public MindType MindType
@@ -142,7 +167,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
SetProperty(ref _mindType, value);
}
}
}
private bool _isExpanded = true;
public bool IsExpanded
@@ -214,7 +239,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
public bool LayoutUpdating
{
get;set;
get; set;
}
#endregion
@@ -314,7 +339,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
get; private set;
}
public SimpleCommand DeleteCommand
public SimpleCommand DeleteSelfCommand
{
get; private set;
}
@@ -337,136 +362,37 @@ namespace AIStudio.Wpf.Mind.ViewModels
CinchMenuItem menuItem = new CinchMenuItem();
menuItem.Text = "下级";
menuItem.Command = AddChildCommand;
menuItem.CommandParameter = this;
menuOptions.Add(menuItem);
menuItem = new CinchMenuItem();
menuItem.Text = "同级";
menuItem.Command = AddPeerCommand;
menuItem.CommandParameter = this;
menuOptions.Add(menuItem);
menuItem = new CinchMenuItem();
menuItem.Text = "上级";
menuItem.Command = AddParentCommand;
menuItem.CommandParameter = this;
menuOptions.Add(menuItem);
menuItem = new CinchMenuItem();
menuItem.Text = "前移";
menuItem.Command = MoveForwardCommand;
menuItem.CommandParameter = this;
menuOptions.Add(menuItem);
menuItem = new CinchMenuItem();
menuItem.Text = "后移";
menuItem.Command = MoveBackCommand;
menuItem.CommandParameter = this;
menuOptions.Add(menuItem);
menuItem = new CinchMenuItem();
menuItem.Text = "删除";
menuItem.Command = DeleteCommand;
menuItem.Command = DeleteSelfCommand;
menuItem.CommandParameter = this;
menuOptions.Add(menuItem);
}
#endregion
#region
public void ExecuteAddChildCommand(object obj)
{
if (obj is MindNode node)
{
}
else
{
node = new MindNode(Root, (NodeLevel)Math.Min((int)NodeLevel + 1, (int)NodeLevel.Level3), this.MindType) { Text = "分支主题" };
}
AddChild(node);
LayoutUpdated();
}
public void ExecuteAddParentCommand(object obj)
{
if (Parent is MindNode parent)
{
if (obj is MindNode node)
{
}
else
{
if (NodeLevel == NodeLevel.Level1)
{
return;
}
else if (NodeLevel == NodeLevel.Level2)
node = new MindNode(Root, NodeLevel.Level2, this.MindType) { Text = "分支主题" };
else
node = new MindNode(Root, NodeLevel.Level3, this.MindType) { Text = "分支主题" };
}
parent.RemoveChild(this);
int index = parent.Children.IndexOf(this);
parent.AddChild(node, index + 1);
node.AddChild(this);
LayoutUpdated();
}
}
public void ExecuteAddPeerCommand(object obj)
{
if (Parent is MindNode parent)
{
if (obj is MindNode node)
{
}
else
{
if (NodeLevel == NodeLevel.Level1)
{
return;
}
else if (NodeLevel == NodeLevel.Level2)
node = new MindNode(Root, NodeLevel.Level2, this.MindType) { Text = "分支主题" };
else
node = new MindNode(Root, NodeLevel.Level3, this.MindType) { Text = "分支主题" };
}
int index = parent.Children.IndexOf(this);
parent.AddChild(node, index + 1);
LayoutUpdated();
}
}
private void ExecuteMoveBackCommand(object obj)
{
if (Parent is MindNode parent)
{
int index = parent.Children.IndexOf(this);
if (index < parent.Children.Count - 1)
{
parent.RemoveChild(this);
parent.AddChild(this, index + 1);
LayoutUpdated();
}
}
}
private void ExecuteMoveForwardCommand(object obj)
{
if (Parent is MindNode parent)
{
int index = parent.Children.IndexOf(this);
if (index > 0)
{
parent.RemoveChild(this);
parent.AddChild(this, index - 1);
LayoutUpdated();
}
}
}
private void ExecuteDeleteCommand(object obj)
{
if (Parent is MindNode parent)
{
parent.RemoveChild(this, true);
LayoutUpdated();
}
}
#region
public void AddChild(MindNode item, int index = -1)
{
if (this.NodeLevel == NodeLevel.Level1)
@@ -486,13 +412,10 @@ namespace AIStudio.Wpf.Mind.ViewModels
this.Children.Add(item);
}
item.Parent = this;
Root?.DirectAddItemCommand.Execute(item);
ConnectionViewModel connector = MindLayout?.GetConnectionViewModel(this, item);
Root?.DirectAddItemCommand.Execute(connector);
Root?.ClearSelectedItemsCommand.Execute(new SelectableDesignerItemViewModelBase[] { connector });
Root?.BringForwardCommand.Execute(new DesignerItemViewModelBase[] { item });
Root?.DirectAddItemCommand.Execute(new SelectableDesignerItemViewModelBase[] { item, connector });
connector.ZIndex = -1;
this.IsSelected = true;
}
public void RemoveChild(MindNode item, bool removeall = false)
@@ -535,17 +458,9 @@ namespace AIStudio.Wpf.Mind.ViewModels
case nameof(NodeLevel):
MindLayout?.Appearance(this);
break;
//case nameof(MindType):
// if (NodeLevel == NodeLevel.Level1)
// {
// MindLayout?.Appearance(this);
// LayoutUpdated();
// }
// else
// {
// GetLevel1Node().MindType = MindType;
// }
// break;
case nameof(MindType):
InitLayout(true);
break;
case nameof(Left):
{
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
@@ -625,7 +540,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
#endregion
}
public class LinkInfo : BindableBase
{
private string _url;