可以切换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

@@ -23,7 +23,7 @@ namespace AIStudio.Wpf.Flowchart
}
public MindViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument)
{
_service.DrawModeViewModel.LineDrawMode = DrawMode.ConnectingLineSmooth;
}
protected override void InitDiagramViewModel()
@@ -35,6 +35,14 @@ namespace AIStudio.Wpf.Flowchart
DiagramViewModel.AllowDrop = false;
}
public IMindDiagramViewModel MindDiagramViewModel
{
get
{
return DiagramViewModel as IMindDiagramViewModel;
}
}
protected override void Init()
{
DiagramViewModels = new ObservableCollection<IDiagramViewModel>()
@@ -44,51 +52,32 @@ namespace AIStudio.Wpf.Flowchart
DiagramViewModel = DiagramViewModels.FirstOrDefault();
InitDiagramViewModel();
MindNode level1node = new MindNode(DiagramViewModel, Mind.NodeLevel.Level1, MindType) { Text = "思维导图" };
DiagramViewModel.DirectAddItemCommand.Execute(level1node);
var level1node = MindDiagramViewModel.RootItem;
DiagramViewModel.CenterMoveCommand.Execute(level1node);
MindNode level2node1_1 = new MindNode(DiagramViewModel, Mind.NodeLevel.Level2, MindType) { Text = "分支主题1" };
level1node.AddChild(level2node1_1);
MindNode level2node1_1 = new MindNode(DiagramViewModel) { Text = "分支主题1" };
MindDiagramViewModel.AddChildCommand.Execute(new MindNode[] { level1node, level2node1_1 });
MindNode level3node1_1_1 = new MindNode(DiagramViewModel, Mind.NodeLevel.Level3, MindType) { Text = "分支主题1_1" };
level2node1_1.AddChild(level3node1_1_1);
MindNode level2node1_1_1 = new MindNode(DiagramViewModel) { Text = "分支主题1_1" };
MindDiagramViewModel.AddChildCommand.Execute(new MindNode[] { level2node1_1, level2node1_1_1 });
MindNode level3node1_1_2 = new MindNode(DiagramViewModel, Mind.NodeLevel.Level3, MindType) { Text = "分支主题1_2" };
level2node1_1.AddChild(level3node1_1_2);
MindNode level2node1_1_2 = new MindNode(DiagramViewModel) { Text = "分支主题1_2" };
MindDiagramViewModel.AddChildCommand.Execute(new MindNode[] { level2node1_1, level2node1_1_2 });;
MindNode level3node1_1_3 = new MindNode(DiagramViewModel, Mind.NodeLevel.Level3, MindType) { Text = "分支主题1_3" };
level2node1_1.AddChild(level3node1_1_3);
MindNode level2node1_1_3 = new MindNode(DiagramViewModel) { Text = "分支主题1_3" };
MindDiagramViewModel.AddChildCommand.Execute(new MindNode[] { level2node1_1, level2node1_1_3 });
MindNode level2node1_2 = new MindNode(DiagramViewModel, Mind.NodeLevel.Level2, MindType) { Text = "分支主题2" };
level1node.AddChild(level2node1_2);
MindNode level2node1_2 = new MindNode(DiagramViewModel) { Text = "分支主题2" };
MindDiagramViewModel.AddChildCommand.Execute(new MindNode[] { level1node, level2node1_2 });
MindNode level2node1_3 = new MindNode(DiagramViewModel, Mind.NodeLevel.Level2, MindType) { Text = "分支主题3" };
level1node.AddChild(level2node1_3);
MindNode level2node1_3 = new MindNode(DiagramViewModel) { Text = "分支主题3" };
MindDiagramViewModel.AddChildCommand.Execute(new MindNode[] { level1node, level2node1_3 });
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
level1node.LayoutUpdated();
}
private MindType _mindType = Mind.MindType.Organizational;
public MindType MindType
{
get
{
return _mindType;
}
set
{
if (SetProperty(ref _mindType, value))
{
//DiagramViewModel as MindDiagramViewModel
}
}
}
public override void Dispose()
{
base.Dispose();

View File

@@ -1763,16 +1763,16 @@
<TextBlock Text="S" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="9"/>
</Grid>
</Fluent:SplitButton.LargeIcon>
<ListBox BorderThickness="0" helper:EnumHelper.Enum="{x:Type mimd:MindType}" SelectedItem="{Binding SelectedItem.MindType}">
<!--<ListBox BorderThickness="0" helper:EnumHelper.Enum="{x:Type mimd:MindType}" SelectedItem="{Binding SelectedItem.MindType}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" Margin="5"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ListBox>-->
<Fluent:SplitButton.ToolTip>
<Fluent:ScreenTip Title="PageSize"
Text="页面大小"
<Fluent:ScreenTip Title="MindType"
Text="类型"
Width="190" />
</Fluent:SplitButton.ToolTip>
</Fluent:SplitButton>

View File

@@ -250,14 +250,30 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
private string _pathMode;
public string PathMode
{
get; set;
get
{
return _pathMode;
}
set
{
SetProperty(ref _pathMode, value);
}
}
private string _routerMode;
public string RouterMode
{
get; set;
get
{
return _routerMode;
}
set
{
SetProperty(ref _routerMode, value);
}
}
public IRouter Router

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramModels.ViewModels;
namespace AIStudio.Wpf.DiagramModels
@@ -180,9 +181,9 @@ namespace AIStudio.Wpf.DiagramModels
get; set;
}
public virtual DiagramItemViewModel ToNodel()
public virtual DiagramItemViewModel ToNodel(IDiagramViewModel diagramViewModel)
{
return new DiagramItemViewModel();
return new DiagramItemViewModel(diagramViewModel);
}
}

View File

@@ -119,7 +119,7 @@ namespace AIStudio.Wpf.DiagramModels
private static DiagramItemViewModel ToNodelModel(this DiagramNode diagramNode, IDiagramViewModel diagram)
{
DiagramItemViewModel nodeModel = diagramNode.ToNodel();
DiagramItemViewModel nodeModel = diagramNode.ToNodel(diagram);
nodeModel.Id = new Guid(diagramNode.Id);
if (!string.IsNullOrEmpty(diagramNode.ParentId))

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramModels;
using AIStudio.Wpf.DiagramModels.ViewModels;
using AIStudio.Wpf.Flowchart.ViewModels;
@@ -57,40 +58,40 @@ namespace AIStudio.Wpf.Flowchart.Models
get; set;
}
public override DiagramItemViewModel ToNodel()
public override DiagramItemViewModel ToNodel(IDiagramViewModel diagramViewModel)
{
FlowNode flowNode = null;
switch (Kind)
{
case NodeKinds.Start:
{
flowNode = new StartFlowNode();
flowNode = new StartFlowNode(diagramViewModel);
break;
}
case NodeKinds.End:
{
flowNode = new EndFlowNode();
flowNode = new EndFlowNode(diagramViewModel);
break;
}
case NodeKinds.Decide:
{
flowNode = new DecideFlowNode();
flowNode = new DecideFlowNode(diagramViewModel);
break;
}
case NodeKinds.COBegin:
{
flowNode = new COBeginFlowNode();
flowNode = new COBeginFlowNode(diagramViewModel);
break;
}
case NodeKinds.COEnd:
{
flowNode = new COEndFlowNode();
flowNode = new COEndFlowNode(diagramViewModel);
break;
}
case NodeKinds.Middle:
{
var flowchartNodelModel = new MiddleFlowNode();
var flowchartNodelModel = new MiddleFlowNode(diagramViewModel);
flowNode = flowchartNodelModel;
flowchartNodelModel.UserIds = UserIds?.ToList();
flowchartNodelModel.RoleIds = RoleIds?.ToList();
@@ -99,7 +100,7 @@ namespace AIStudio.Wpf.Flowchart.Models
}
default:
{
var flowNodelModel = new FlowNode(NodeKinds.Normal);
var flowNodelModel = new FlowNode(diagramViewModel, NodeKinds.Normal);
flowNode = flowNodelModel;
break;
}

View File

@@ -35,7 +35,7 @@ namespace AIStudio.Wpf.Mind.Controls
_diagramViewModel = new MindDiagramViewModel();
_diagramViewModel.GridMarginSize = new Size(0, 0);
_diagramViewModel.PageSizeType = PageSizeType.Custom;
_diagramViewModel.PageSize = new SizeBase(double.NaN, double.NaN);
_diagramViewModel.PageSize = new SizeBase(double.NaN, double.NaN);
_diagramViewModel.PropertyChanged += DiagramViewModel_PropertyChanged;
}
@@ -90,14 +90,14 @@ namespace AIStudio.Wpf.Mind.Controls
private void CreateFlowchartModel(string json)
{
_diagramViewModel.IsLoading = true;
_diagramViewModel.Items.Clear();
MindNode level1node = new MindNode(_diagramViewModel, Mind.NodeLevel.Level1, _diagramViewModel.MindType) { Text = "思维导图" };
_diagramViewModel.DirectAddItemCommand.Execute(level1node);
level1node.Left = 200;
level1node.Top = 200;
_diagramViewModel.DoCommandManager.Init();
_diagramViewModel.IsLoading = false;
//_diagramViewModel.IsLoading = true;
//_diagramViewModel.Items.Clear();
//MindNode level1node = new MindNode(_diagramViewModel) { Text = "思维导图" };
//_diagramViewModel.DirectAddItemCommand.Execute(level1node);
//level1node.Left = 200;
//level1node.Top = 200;
//_diagramViewModel.DoCommandManager.Init();
//_diagramViewModel.IsLoading = false;
}
public static readonly DependencyProperty GetDataFuncProperty =

View File

@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
switch (mindNode.NodeLevel)
{
case NodeLevel.Level1:
case 0:
{
mindNode.ItemWidth = 110;
mindNode.ItemHeight = 40;
@@ -38,7 +38,7 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.ConnectorOrientation = ConnectorOrientation.None;
break;
}
case NodeLevel.Level2:
case 1:
{
mindNode.ItemWidth = 80;
mindNode.ItemHeight = 25;
@@ -55,7 +55,7 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
break;
}
case NodeLevel.Level3:
default:
{
mindNode.ItemWidth = 80;
mindNode.ItemHeight = 25;
@@ -77,9 +77,19 @@ namespace AIStudio.Wpf.Mind.Helpers
}
}
public ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink)
public ConnectionViewModel GetOrSetConnectionViewModel(MindNode source, MindNode sink, ConnectionViewModel connector = null)
{
var connector = new ConnectionViewModel(source.Root, source.Connectors.FirstOrDefault(), sink.Connectors.FirstOrDefault(), DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
if (connector == null)
{
connector = new ConnectionViewModel(source.Root, source.FirstConnector, sink.FirstConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
}
else
{
connector?.SetSourcePort(source.FirstConnector);
connector?.SetSinkPort(sink.FirstConnector);
connector.PathMode = DrawMode.ConnectingLineStraight.ToString();
connector.RouterMode = RouterMode.RouterOrthogonal.ToString();
}
connector.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
connector.SmoothMargin = 20;
connector.SmoothAutoSlope = 0.2;
@@ -108,7 +118,7 @@ namespace AIStudio.Wpf.Mind.Helpers
var sizewithSpacing = mindNode.SizeWithSpacing;
if (mindNode.Children?.Count > 0)
{
if (mindNode.NodeLevel == NodeLevel.Level1)
if (mindNode.NodeLevel == 0)
{
var childrensizes = mindNode.Children.Select(p => MeasureOverride(p, mindNode.IsExpanded && isExpanded)).ToArray();
sizewithSpacing = new SizeBase(Math.Max(sizewithSpacing.Width, childrensizes.SumOrDefault(p => p.Width)), sizewithSpacing.Height + childrensizes.MaxOrDefault(p => p.Height));
@@ -127,7 +137,7 @@ namespace AIStudio.Wpf.Mind.Helpers
public void ArrangeOverride(MindNode mindNode)
{
if (mindNode.NodeLevel == NodeLevel.Level1)
if (mindNode.NodeLevel == 0)
{
double left = mindNode.MiddlePosition.X - Math.Max(mindNode.DesiredSize.Width, mindNode.Children.SumOrDefault(p => p.DesiredSize.Width)) / 2;
double top = mindNode.MiddlePosition.Y + mindNode.ItemHeight / 2 + mindNode.Spacing.Height;
@@ -142,10 +152,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.FirstConnector);
connect?.SetSinkPort(child.TopConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.FirstConnector);
connector?.SetSinkPort(child.TopConnector);
connector?.SetVisible(child.Visible);
}
}
}
@@ -164,10 +174,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.BottomConnector);
connect?.SetSinkPort(child.LeftConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.BottomConnector);
connector?.SetSinkPort(child.LeftConnector);
connector?.SetVisible(child.Visible);
}
}
}

View File

@@ -21,7 +21,7 @@ namespace AIStudio.Wpf.Mind.Helpers
switch (mindNode.NodeLevel)
{
case NodeLevel.Level1:
case 0:
{
mindNode.ItemWidth = 110;
mindNode.ItemHeight = 40;
@@ -43,7 +43,7 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.ConnectorOrientation = ConnectorOrientation.None;
break;
}
case NodeLevel.Level2:
case 1:
{
mindNode.ItemWidth = 80;
mindNode.ItemHeight = 25;
@@ -62,7 +62,7 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
break;
}
case NodeLevel.Level3:
default:
{
mindNode.ItemWidth = 80;
mindNode.ItemHeight = 25;
@@ -89,16 +89,16 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.GetLevel1Node().LayoutUpdating = false;
}
public ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink)
public ConnectionViewModel GetOrSetConnectionViewModel(MindNode source, MindNode sink, ConnectionViewModel connector = null)
{
DrawMode drawMode;
RouterMode routerMode;
if (source.NodeLevel == NodeLevel.Level1)
if (source.NodeLevel == 0)
{
drawMode = DrawMode.ConnectingLineStraight;
routerMode = RouterMode.RouterFishBone;
}
else if (source.NodeLevel == NodeLevel.Level2)
else if (source.NodeLevel == 1)
{
drawMode = DrawMode.ConnectingLineStraight;
routerMode = RouterMode.RouterNormal;
@@ -109,7 +109,17 @@ namespace AIStudio.Wpf.Mind.Helpers
routerMode = RouterMode.RouterOrthogonal;
}
var connector = new ConnectionViewModel(source.Root, source.Connectors.FirstOrDefault(), sink.Connectors.FirstOrDefault(), drawMode, routerMode);
if (connector == null)
{
connector = new ConnectionViewModel(source.Root, source.FirstConnector, sink.FirstConnector, drawMode, routerMode);
}
else
{
connector?.SetSourcePort(source.FirstConnector);
connector?.SetSinkPort(sink.FirstConnector);
connector.PathMode = drawMode.ToString();
connector.RouterMode = routerMode.ToString();
}
connector.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
connector.SmoothMargin = 20;
connector.SmoothAutoSlope = 0.2;
@@ -138,7 +148,7 @@ namespace AIStudio.Wpf.Mind.Helpers
var bottomoffset = mindNode.Spacing.Width / 2;
if (mindNode.Children?.Count > 0)
{
if (mindNode.NodeLevel == NodeLevel.Level1)
if (mindNode.NodeLevel == 0)
{
var tops = mindNode.Children.Where((p, index) => index % 2 == 0).ToList();
tops.ForEach(p => p.ConnectorOrientation = ConnectorOrientation.BottomLeft);
@@ -148,13 +158,13 @@ namespace AIStudio.Wpf.Mind.Helpers
var bottomsizes = bottoms.Select(p => MeasureOverride(p, mindNode.IsExpanded && isExpanded)).ToArray();
sizewithSpacing = new SizeBase(sizewithSpacing.Width + bottomoffset + Math.Max(topsizes.SumOrDefault(p => p.Width), bottomsizes.SumOrDefault(p => p.Width)), sizewithSpacing.Height + topsizes.MaxOrDefault(p => p.Height) + bottomsizes.MaxOrDefault(p => p.Height));
}
else if (mindNode.NodeLevel == NodeLevel.Level2)
else if (mindNode.NodeLevel == 1)
{
var childrensizes = mindNode.Children.Select(p => MeasureOverride(p, mindNode.IsExpanded && isExpanded)).ToArray();
var lastchildsize = childrensizes.LastOrDefault();
sizewithSpacing = new SizeBase(Math.Max(sizewithSpacing.Width, sizewithSpacing.Height + childrensizes.SumOrDefault(p => p.Height) - lastchildsize.Height / 2 + lastchildsize.Width), sizewithSpacing.Height + childrensizes.SumOrDefault(p => p.Height));
}
else if (mindNode.NodeLevel == NodeLevel.Level3)
else
{
var childrensizes = mindNode.Children.Select(p => MeasureOverride(p, mindNode.IsExpanded && isExpanded)).ToArray();
sizewithSpacing = new SizeBase(Math.Max(sizewithSpacing.Width, sizewithSpacing.Width * 0.5 + childrensizes.MaxOrDefault(p => p.Width)), sizewithSpacing.Height + childrensizes.SumOrDefault(p => p.Height));
@@ -168,7 +178,7 @@ namespace AIStudio.Wpf.Mind.Helpers
public void ArrangeOverride(MindNode mindNode)
{
if (mindNode.NodeLevel == NodeLevel.Level1)
if (mindNode.NodeLevel == 0)
{
var tops = mindNode.Children.Where(p => p.ConnectorOrientation == ConnectorOrientation.BottomLeft).ToList();
double topleft = mindNode.MiddlePosition.X + mindNode.ItemWidth / 2 + mindNode.Spacing.Width;
@@ -185,10 +195,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.RightConnector);
connect?.SetSinkPort(child.BottomLeftConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.RightConnector);
connector?.SetSinkPort(child.BottomLeftConnector);
connector?.SetVisible(child.Visible);
}
}
@@ -208,14 +218,14 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.RightConnector);
connect?.SetSinkPort(child.TopLeftConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.RightConnector);
connector?.SetSinkPort(child.TopLeftConnector);
connector?.SetVisible(child.Visible);
}
}
}
else if (mindNode.NodeLevel == NodeLevel.Level2)
else if (mindNode.NodeLevel == 1)
{
if (mindNode.ConnectorOrientation == ConnectorOrientation.BottomLeft)
{
@@ -233,10 +243,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.BottomLeftConnector);
connect?.SetSinkPort(child.LeftConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.BottomLeftConnector);
connector?.SetSinkPort(child.LeftConnector);
connector?.SetVisible(child.Visible);
}
}
}
@@ -256,15 +266,15 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.TopLeftConnector);
connect?.SetSinkPort(child.LeftConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.TopLeftConnector);
connector?.SetSinkPort(child.LeftConnector);
connector?.SetVisible(child.Visible);
}
}
}
}
else if (mindNode.NodeLevel == NodeLevel.Level3)
else
{
if (mindNode.GetLevel2Node().ConnectorOrientation == ConnectorOrientation.BottomLeft)
{
@@ -281,10 +291,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.BottomConnector);
connect?.SetSinkPort(child.LeftConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.BottomConnector);
connector?.SetSinkPort(child.LeftConnector);
connector?.SetVisible(child.Visible);
}
}
}
@@ -303,10 +313,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.TopConnector);
connect?.SetSinkPort(child.LeftConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.TopConnector);
connector?.SetSinkPort(child.LeftConnector);
connector?.SetVisible(child.Visible);
}
}
}

View File

@@ -9,7 +9,7 @@ namespace AIStudio.Wpf.Mind.Helpers
public interface IMindLayout
{
void Appearance(MindNode mindNode);
ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink);
ConnectionViewModel GetOrSetConnectionViewModel(MindNode source, MindNode sink, ConnectionViewModel connector = null);
void LayoutUpdated(MindNode mindNode);
}

View File

@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
switch (mindNode.NodeLevel)
{
case NodeLevel.Level1:
case 0:
{
mindNode.ItemWidth = 110;
mindNode.ItemHeight = 40;
@@ -39,7 +39,7 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.ConnectorOrientation = ConnectorOrientation.None;
break;
}
case NodeLevel.Level2:
case 1:
{
mindNode.ItemWidth = 80;
mindNode.ItemHeight = 25;
@@ -56,7 +56,7 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
break;
}
case NodeLevel.Level3:
case 2:
{
mindNode.ItemWidth = 80;
mindNode.ItemHeight = 25;
@@ -77,9 +77,19 @@ namespace AIStudio.Wpf.Mind.Helpers
}
}
}
public ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink)
public ConnectionViewModel GetOrSetConnectionViewModel(MindNode source, MindNode sink, ConnectionViewModel connector = null)
{
var connector = new ConnectionViewModel(source.Root, source.Connectors.FirstOrDefault(), sink.Connectors.FirstOrDefault(), DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
if (connector == null)
{
connector = new ConnectionViewModel(source.Root, source.FirstConnector, sink.FirstConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
}
else
{
connector?.SetSourcePort(source.FirstConnector);
connector?.SetSinkPort(sink.FirstConnector);
connector.PathMode = DrawMode.ConnectingLineSmooth.ToString();
connector.RouterMode = RouterMode.RouterNormal.ToString();
}
connector.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
connector.SmoothMargin = 20;
connector.SmoothAutoSlope = 0.2;
@@ -131,10 +141,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.RightConnector ?? mindNode.FirstConnector);
connect?.SetSinkPort(child.LeftConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.RightConnector ?? mindNode.FirstConnector);
connector?.SetSinkPort(child.LeftConnector);
connector?.SetVisible(child.Visible);
}
}

View File

@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
switch (mindNode.NodeLevel)
{
case NodeLevel.Level1:
case 0:
{
mindNode.ItemWidth = 110;
mindNode.ItemHeight = 40;
@@ -39,7 +39,7 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.ConnectorOrientation = ConnectorOrientation.None;
break;
}
case NodeLevel.Level2:
case 1:
{
mindNode.ItemWidth = 80;
mindNode.ItemHeight = 25;
@@ -56,7 +56,7 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
break;
}
case NodeLevel.Level3:
default:
{
mindNode.ItemWidth = 80;
mindNode.ItemHeight = 25;
@@ -78,9 +78,19 @@ namespace AIStudio.Wpf.Mind.Helpers
}
}
public ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink)
public ConnectionViewModel GetOrSetConnectionViewModel(MindNode source, MindNode sink, ConnectionViewModel connector = null)
{
var connector = new ConnectionViewModel(source.Root, source.Connectors.FirstOrDefault(), sink.Connectors.FirstOrDefault(), DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
if (connector == null)
{
connector = new ConnectionViewModel(source.Root, source.FirstConnector, sink.FirstConnector, DrawMode.ConnectingLineSmooth, RouterMode.RouterNormal);
}
else
{
connector?.SetSourcePort(source.FirstConnector);
connector?.SetSinkPort(sink.FirstConnector);
connector.PathMode = DrawMode.ConnectingLineSmooth.ToString();
connector.RouterMode = RouterMode.RouterNormal.ToString();
}
connector.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
connector.SmoothMargin = 20;
connector.SmoothAutoSlope = 0.2;
@@ -108,7 +118,7 @@ namespace AIStudio.Wpf.Mind.Helpers
var sizewithSpacing = mindNode.SizeWithSpacing;
if (mindNode.Children?.Count > 0)
{
if (mindNode.NodeLevel == NodeLevel.Level1)
if (mindNode.NodeLevel == 0)
{
var rights = mindNode.Children.Where((p, index) => index % 2 == 0).ToList();
rights.ForEach(p => p.ConnectorOrientation = ConnectorOrientation.Left);
@@ -132,7 +142,7 @@ namespace AIStudio.Wpf.Mind.Helpers
public void ArrangeOverride(MindNode mindNode)
{
if (mindNode.NodeLevel == NodeLevel.Level1)
if (mindNode.NodeLevel == 0)
{
if (mindNode.Children?.Count > 0)
{
@@ -148,10 +158,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.FirstConnector);
connect?.SetSinkPort(child.LeftConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.FirstConnector);
connector?.SetSinkPort(child.LeftConnector);
connector?.SetVisible(child.Visible);
}
var lefts = mindNode.Children.Where(p => p.ConnectorOrientation == ConnectorOrientation.Right).ToList();
@@ -166,10 +176,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.FirstConnector);
connect?.SetSinkPort(child.RightConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.FirstConnector);
connector?.SetSinkPort(child.RightConnector);
connector?.SetVisible(child.Visible);
}
}
}
@@ -190,10 +200,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.RightConnector);
connect?.SetSinkPort(child.LeftConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.RightConnector);
connector?.SetSinkPort(child.LeftConnector);
connector?.SetVisible(child.Visible);
}
}
}
@@ -212,10 +222,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.LeftConnector);
connect?.SetSinkPort(child.RightConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.LeftConnector);
connector?.SetSinkPort(child.RightConnector);
connector?.SetVisible(child.Visible);
}
}
}

View File

@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.Mind.Helpers
{
switch (mindNode.NodeLevel)
{
case NodeLevel.Level1:
case 0:
{
mindNode.ItemWidth = 110;
mindNode.ItemHeight = 40;
@@ -38,7 +38,7 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.ConnectorOrientation = ConnectorOrientation.None;
break;
}
case NodeLevel.Level2:
case 1:
{
mindNode.ItemWidth = 80;
mindNode.ItemHeight = 25;
@@ -56,7 +56,7 @@ namespace AIStudio.Wpf.Mind.Helpers
mindNode.ConnectorOrientation = ConnectorOrientation.Top;
break;
}
case NodeLevel.Level3:
default:
{
mindNode.ItemWidth = 80;
mindNode.ItemHeight = 25;
@@ -79,9 +79,19 @@ namespace AIStudio.Wpf.Mind.Helpers
}
}
public ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink)
public ConnectionViewModel GetOrSetConnectionViewModel(MindNode source, MindNode sink, ConnectionViewModel connector = null)
{
var connector = new ConnectionViewModel(source.Root, source.Connectors.FirstOrDefault(), sink.Connectors.FirstOrDefault(), DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
if (connector == null)
{
connector = new ConnectionViewModel(source.Root, source.FirstConnector, sink.FirstConnector, DrawMode.ConnectingLineStraight, RouterMode.RouterOrthogonal);
}
else
{
connector?.SetSourcePort(source.FirstConnector);
connector?.SetSinkPort(sink.FirstConnector);
connector.PathMode = DrawMode.ConnectingLineStraight.ToString();
connector.RouterMode = RouterMode.RouterOrthogonal.ToString();
}
connector.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
connector.SmoothMargin = 20;
connector.SmoothAutoSlope = 0.2;
@@ -133,10 +143,10 @@ namespace AIStudio.Wpf.Mind.Helpers
ArrangeOverride(child);
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connect?.SetSourcePort(mindNode.BottomConnector);
connect?.SetSinkPort(child.TopConnector);
connect?.SetVisible(child.Visible);
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
connector?.SetSourcePort(mindNode.BottomConnector);
connector?.SetSinkPort(child.TopConnector);
connector?.SetVisible(child.Visible);
}
}

View File

@@ -14,26 +14,11 @@ namespace AIStudio.Wpf.Mind.Models
}
public MindNodeDesignerItem(MindNode item) : base(item)
{
NodeLevel = item.NodeLevel;
MindType = item.MindType;
Spacing = item.Spacing;
Offset = item.Offset;
IsExpanded = item.IsExpanded;
}
[XmlAttribute]
public NodeLevel NodeLevel
{
get; set;
}
[XmlAttribute]
public MindType MindType
{
get; set;
}
[XmlIgnore]
public Size Spacing
{

View File

@@ -1,4 +1,5 @@
using System.Windows;
using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramModels;
using AIStudio.Wpf.DiagramModels.ViewModels;
using AIStudio.Wpf.Mind;
@@ -9,16 +10,6 @@ namespace AIStudio.Wpf.Flowchart.Models
public class MindNodeModel : DiagramNode
{
public NodeLevel NodeLevel
{
get; set;
}
public MindType MindType
{
get; set;
}
public Size Spacing
{
get; set;
@@ -35,9 +26,9 @@ namespace AIStudio.Wpf.Flowchart.Models
get; set;
}
public override DiagramItemViewModel ToNodel()
public override DiagramItemViewModel ToNodel(IDiagramViewModel diagramViewModel)
{
MindNode mindNode = new MindNode(NodeLevel, MindType);
MindNode mindNode = new MindNode(diagramViewModel);
mindNode.Spacing = Spacing;
mindNode.Offset = Offset;

View File

@@ -11,22 +11,27 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
MindType MindType
{
get;set;
get; set;
}
MindNode RootItem
{
get;
}
SimpleCommand AddParentCommand
{
get;
get;
}
SimpleCommand AddChildCommand
{
get;
get;
}
SimpleCommand AddPeerCommand
{
get;
get;
}
SimpleCommand DeleteSelfCommand
@@ -52,6 +57,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
SimpleCommand ChangeMindThemeCommand
{
get;
}
}
}
}

View File

@@ -23,9 +23,21 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
}
}
public MindNode RootItem
{
get
{
return Items.OfType<MindNode>().FirstOrDefault();
}
}
#endregion
#region
public SimpleCommand AddRootCommand
{
get; private set;
}
public SimpleCommand AddParentCommand
{
@@ -64,7 +76,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
return this._changeMindTypeCommand ?? (this._changeMindTypeCommand = new SimpleCommand(MindExecuteEnable, this.ExecutedChangeMindTypeCommand));
}
}
}
public SimpleCommand ChangeMindThemeCommand
{
@@ -115,6 +127,11 @@ namespace AIStudio.Wpf.Mind.ViewModels
DeleteSelfCommand = new SimpleCommand(MindLevelEnable, ExecuteDeleteSelfCommand);
MoveForwardCommand = new SimpleCommand(MindExecuteEnable, ExecuteMoveForwardCommand);
MoveBackCommand = new SimpleCommand(MindExecuteEnable, ExecuteMoveBackCommand);
MindNode level1node = new MindNode(this) { Left = 200, Top = 200, Text = "思维导图" };
level1node.InitLayout(true);
Items.Add(level1node);
level1node.IsSelected = true;
}
public bool MindExecuteEnable(object para)
@@ -130,7 +147,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
if (MindExecuteEnable(obj) == false) return false;
return (SelectedItem as MindNode).NodeLevel != NodeLevel.Level1;
return (SelectedItem as MindNode).NodeLevel != 0;
}
#region
@@ -138,9 +155,9 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
if (obj is MindType mindType)
{
Items.OfType<MindNode>().ToList().ForEach(item => { item.MindType = mindType; });
Items.OfType<MindNode>().FirstOrDefault()?.LayoutUpdated();
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitLayout(true); });
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitConnectLayout(); });
RootItem?.LayoutUpdated();
}
}
@@ -163,7 +180,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
if (items?.Count == 0)
{
var node = new MindNode(this, (NodeLevel)Math.Min((int)parent.NodeLevel + 1, (int)NodeLevel.Level3), this.MindType) { Text = "分支主题" };
var node = new MindNode(this) { Text = "分支主题" };
items.Add(node);
}
@@ -203,7 +220,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
if (items?.Count == 0)
{
items.Add(new MindNode(this, node.NodeLevel, this.MindType) { Text = "分支主题" });
items.Add(new MindNode(this) { Text = "分支主题" });
}
if (node.Parent is MindNode parent)
@@ -249,7 +266,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
if (items?.Count == 0)
{
var node = new MindNode(this, pear.NodeLevel, this.MindType) { Text = "分支主题" };
var node = new MindNode(this) { Text = "分支主题" };
items.Add(node);
}

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;
}