可以切换MindType

This commit is contained in:
艾竹
2023-03-05 23:22:34 +08:00
parent 79f4896fbd
commit cd20abd7fe
18 changed files with 286 additions and 254 deletions

View File

@@ -25,16 +25,13 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
public class MindNode : DiagramItemViewModel
{
public MindNode(NodeLevel nodeLevel, MindType mindType = MindType.Mind) : this(null, nodeLevel, mindType)
public MindNode() : this(null)
{
}
public MindNode(IDiagramViewModel root, NodeLevel nodeLevel, MindType mindType = MindType.Mind) : base(root)
public MindNode(IDiagramViewModel root) : base(root)
{
NodeLevel = nodeLevel;
MindType = mindType;
InitLayout(true);
}
public MindNode(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
@@ -67,7 +64,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
BuildMenuOptions();
}
protected void InitLayout(bool initAppearance)
public 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();
@@ -76,6 +73,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
MindLayout.Appearance(this);
}
this.PropertyChanged -= this.Item_PropertyChanged;
this.PropertyChanged += this.Item_PropertyChanged;
}
@@ -85,8 +83,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
if (designerbase is MindNodeDesignerItem designer)
{
NodeLevel = designer.NodeLevel;
MindType = designer.MindType;
Spacing = designer.Spacing;
Offset = designer.Offset;
IsExpanded = designer.IsExpanded;
@@ -97,8 +93,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
var mindNodeModel = new MindNodeModel();
mindNodeModel.NodeLevel = NodeLevel;
mindNodeModel.MindType = MindType;
mindNodeModel.Spacing = Spacing;
mindNodeModel.Offset = Offset;
mindNodeModel.IsExpanded = IsExpanded;
@@ -111,7 +105,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
if (Command_Enable(obj) == false) return false;
return NodeLevel != NodeLevel.Level1;
return NodeLevel != 0;
}
#region
@@ -119,53 +113,36 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
get; set;
}
[Browsable(false)]
private NodeLevel _nodeLevel;
public NodeLevel NodeLevel
public MindNode ParentNode
{
get
{
return _nodeLevel;
return Parent as MindNode;
}
set
}
public int NodeLevel
{
get
{
SetProperty(ref _nodeLevel, value);
if (ParentNode == null)
{
return 0;
}
else
{
return ParentNode.NodeLevel + 1;
}
}
}
//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
{
get
{
return _mindType;
}
set
{
SetProperty(ref _mindType, value);
return (Root as IMindDiagramViewModel)?.MindType ?? MindType.Mind;
}
}
@@ -395,14 +372,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
#region
public void AddChild(MindNode item, int index = -1)
{
if (this.NodeLevel == NodeLevel.Level1)
{
item.NodeLevel = NodeLevel.Level2;
}
else
{
item.NodeLevel = NodeLevel.Level3;
}
if (index >= 0)
{
this.Children.Insert(index, item);
@@ -412,7 +381,9 @@ namespace AIStudio.Wpf.Mind.ViewModels
this.Children.Add(item);
}
item.Parent = this;
ConnectionViewModel connector = MindLayout?.GetConnectionViewModel(this, item);
item.InitLayout(true);
ConnectionViewModel connector = MindLayout?.GetOrSetConnectionViewModel(this, item);
Root?.DirectAddItemCommand.Execute(new SelectableDesignerItemViewModelBase[] { item, connector });
connector.ZIndex = -1;
this.IsSelected = true;
@@ -440,6 +411,15 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
}
}
public void InitConnectLayout()
{
var connector = Root?.Items.OfType<ConnectionViewModel>().Where(p => p.IsFullConnection).FirstOrDefault(p => p.SinkConnectorInfoFully.DataItem == this);
if (connector != null)
{
MindLayout?.GetOrSetConnectionViewModel(connector.SourceConnectorInfo.DataItem as MindNode, connector.SinkConnectorInfoFully.DataItem as MindNode, connector);
}
}
#endregion
private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
@@ -458,14 +438,11 @@ namespace AIStudio.Wpf.Mind.ViewModels
case nameof(NodeLevel):
MindLayout?.Appearance(this);
break;
case nameof(MindType):
InitLayout(true);
break;
case nameof(Left):
{
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
{
if (NodeLevel == NodeLevel.Level1)
if (NodeLevel == 0)
{
LayoutUpdated();
}
@@ -481,7 +458,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
{
if (NodeLevel == NodeLevel.Level1)
if (NodeLevel == 0)
{
LayoutUpdated();
}
@@ -516,7 +493,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
public MindNode GetLevel2Node()
{
var node = this;
while (node.Parent is MindNode mindNode && mindNode.NodeLevel == NodeLevel.Level2)
while (node.Parent is MindNode mindNode && mindNode.NodeLevel == 1)
{
node = mindNode;
}