mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-04-29 12:43:24 +08:00
可以切换MindType
This commit is contained in:
@@ -23,7 +23,7 @@ namespace AIStudio.Wpf.Flowchart
|
|||||||
}
|
}
|
||||||
public MindViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument)
|
public MindViewModel(string filename, DiagramDocument diagramDocument) : base(filename, diagramDocument)
|
||||||
{
|
{
|
||||||
_service.DrawModeViewModel.LineDrawMode = DrawMode.ConnectingLineSmooth;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void InitDiagramViewModel()
|
protected override void InitDiagramViewModel()
|
||||||
@@ -35,6 +35,14 @@ namespace AIStudio.Wpf.Flowchart
|
|||||||
DiagramViewModel.AllowDrop = false;
|
DiagramViewModel.AllowDrop = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IMindDiagramViewModel MindDiagramViewModel
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return DiagramViewModel as IMindDiagramViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override void Init()
|
protected override void Init()
|
||||||
{
|
{
|
||||||
DiagramViewModels = new ObservableCollection<IDiagramViewModel>()
|
DiagramViewModels = new ObservableCollection<IDiagramViewModel>()
|
||||||
@@ -44,51 +52,32 @@ namespace AIStudio.Wpf.Flowchart
|
|||||||
DiagramViewModel = DiagramViewModels.FirstOrDefault();
|
DiagramViewModel = DiagramViewModels.FirstOrDefault();
|
||||||
|
|
||||||
InitDiagramViewModel();
|
InitDiagramViewModel();
|
||||||
|
var level1node = MindDiagramViewModel.RootItem;
|
||||||
MindNode level1node = new MindNode(DiagramViewModel, Mind.NodeLevel.Level1, MindType) { Text = "思维导图" };
|
|
||||||
DiagramViewModel.DirectAddItemCommand.Execute(level1node);
|
|
||||||
DiagramViewModel.CenterMoveCommand.Execute(level1node);
|
DiagramViewModel.CenterMoveCommand.Execute(level1node);
|
||||||
|
|
||||||
MindNode level2node1_1 = new MindNode(DiagramViewModel, Mind.NodeLevel.Level2, MindType) { Text = "分支主题1" };
|
MindNode level2node1_1 = new MindNode(DiagramViewModel) { Text = "分支主题1" };
|
||||||
level1node.AddChild(level2node1_1);
|
MindDiagramViewModel.AddChildCommand.Execute(new MindNode[] { level1node, level2node1_1 });
|
||||||
|
|
||||||
MindNode level3node1_1_1 = new MindNode(DiagramViewModel, Mind.NodeLevel.Level3, MindType) { Text = "分支主题1_1" };
|
MindNode level2node1_1_1 = new MindNode(DiagramViewModel) { Text = "分支主题1_1" };
|
||||||
level2node1_1.AddChild(level3node1_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" };
|
MindNode level2node1_1_2 = new MindNode(DiagramViewModel) { Text = "分支主题1_2" };
|
||||||
level2node1_1.AddChild(level3node1_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" };
|
MindNode level2node1_1_3 = new MindNode(DiagramViewModel) { Text = "分支主题1_3" };
|
||||||
level2node1_1.AddChild(level3node1_1_3);
|
MindDiagramViewModel.AddChildCommand.Execute(new MindNode[] { level2node1_1, level2node1_1_3 });
|
||||||
|
|
||||||
MindNode level2node1_2 = new MindNode(DiagramViewModel, Mind.NodeLevel.Level2, MindType) { Text = "分支主题2" };
|
MindNode level2node1_2 = new MindNode(DiagramViewModel) { Text = "分支主题2" };
|
||||||
level1node.AddChild(level2node1_2);
|
MindDiagramViewModel.AddChildCommand.Execute(new MindNode[] { level1node, level2node1_2 });
|
||||||
|
|
||||||
MindNode level2node1_3 = new MindNode(DiagramViewModel, Mind.NodeLevel.Level2, MindType) { Text = "分支主题3" };
|
MindNode level2node1_3 = new MindNode(DiagramViewModel) { Text = "分支主题3" };
|
||||||
level1node.AddChild(level2node1_3);
|
MindDiagramViewModel.AddChildCommand.Execute(new MindNode[] { level1node, level2node1_3 });
|
||||||
|
|
||||||
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
|
DiagramViewModel.ClearSelectedItemsCommand.Execute(null);
|
||||||
level1node.LayoutUpdated();
|
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()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
base.Dispose();
|
base.Dispose();
|
||||||
|
|||||||
@@ -1763,16 +1763,16 @@
|
|||||||
<TextBlock Text="S" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="9"/>
|
<TextBlock Text="S" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="9"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Fluent:SplitButton.LargeIcon>
|
</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>
|
<ListBox.ItemTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<TextBlock Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" Margin="5"/>
|
<TextBlock Text="{Binding .,Converter={StaticResource EnumDescriptionConverter}}" Margin="5"/>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListBox.ItemTemplate>
|
</ListBox.ItemTemplate>
|
||||||
</ListBox>
|
</ListBox>-->
|
||||||
<Fluent:SplitButton.ToolTip>
|
<Fluent:SplitButton.ToolTip>
|
||||||
<Fluent:ScreenTip Title="PageSize"
|
<Fluent:ScreenTip Title="MindType"
|
||||||
Text="页面大小"
|
Text="类型"
|
||||||
Width="190" />
|
Width="190" />
|
||||||
</Fluent:SplitButton.ToolTip>
|
</Fluent:SplitButton.ToolTip>
|
||||||
</Fluent:SplitButton>
|
</Fluent:SplitButton>
|
||||||
|
|||||||
@@ -250,14 +250,30 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string _pathMode;
|
||||||
public string PathMode
|
public string PathMode
|
||||||
{
|
{
|
||||||
get; set;
|
get
|
||||||
|
{
|
||||||
|
return _pathMode;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetProperty(ref _pathMode, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string _routerMode;
|
||||||
public string RouterMode
|
public string RouterMode
|
||||||
{
|
{
|
||||||
get; set;
|
get
|
||||||
|
{
|
||||||
|
return _routerMode;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetProperty(ref _routerMode, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IRouter Router
|
public IRouter Router
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using AIStudio.Wpf.DiagramDesigner;
|
||||||
using AIStudio.Wpf.DiagramModels.ViewModels;
|
using AIStudio.Wpf.DiagramModels.ViewModels;
|
||||||
|
|
||||||
namespace AIStudio.Wpf.DiagramModels
|
namespace AIStudio.Wpf.DiagramModels
|
||||||
@@ -180,9 +181,9 @@ namespace AIStudio.Wpf.DiagramModels
|
|||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual DiagramItemViewModel ToNodel()
|
public virtual DiagramItemViewModel ToNodel(IDiagramViewModel diagramViewModel)
|
||||||
{
|
{
|
||||||
return new DiagramItemViewModel();
|
return new DiagramItemViewModel(diagramViewModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ namespace AIStudio.Wpf.DiagramModels
|
|||||||
|
|
||||||
private static DiagramItemViewModel ToNodelModel(this DiagramNode diagramNode, IDiagramViewModel diagram)
|
private static DiagramItemViewModel ToNodelModel(this DiagramNode diagramNode, IDiagramViewModel diagram)
|
||||||
{
|
{
|
||||||
DiagramItemViewModel nodeModel = diagramNode.ToNodel();
|
DiagramItemViewModel nodeModel = diagramNode.ToNodel(diagram);
|
||||||
|
|
||||||
nodeModel.Id = new Guid(diagramNode.Id);
|
nodeModel.Id = new Guid(diagramNode.Id);
|
||||||
if (!string.IsNullOrEmpty(diagramNode.ParentId))
|
if (!string.IsNullOrEmpty(diagramNode.ParentId))
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using AIStudio.Wpf.DiagramDesigner;
|
||||||
using AIStudio.Wpf.DiagramModels;
|
using AIStudio.Wpf.DiagramModels;
|
||||||
using AIStudio.Wpf.DiagramModels.ViewModels;
|
using AIStudio.Wpf.DiagramModels.ViewModels;
|
||||||
using AIStudio.Wpf.Flowchart.ViewModels;
|
using AIStudio.Wpf.Flowchart.ViewModels;
|
||||||
@@ -57,40 +58,40 @@ namespace AIStudio.Wpf.Flowchart.Models
|
|||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override DiagramItemViewModel ToNodel()
|
public override DiagramItemViewModel ToNodel(IDiagramViewModel diagramViewModel)
|
||||||
{
|
{
|
||||||
FlowNode flowNode = null;
|
FlowNode flowNode = null;
|
||||||
switch (Kind)
|
switch (Kind)
|
||||||
{
|
{
|
||||||
case NodeKinds.Start:
|
case NodeKinds.Start:
|
||||||
{
|
{
|
||||||
flowNode = new StartFlowNode();
|
flowNode = new StartFlowNode(diagramViewModel);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case NodeKinds.End:
|
case NodeKinds.End:
|
||||||
{
|
{
|
||||||
flowNode = new EndFlowNode();
|
flowNode = new EndFlowNode(diagramViewModel);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeKinds.Decide:
|
case NodeKinds.Decide:
|
||||||
{
|
{
|
||||||
flowNode = new DecideFlowNode();
|
flowNode = new DecideFlowNode(diagramViewModel);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeKinds.COBegin:
|
case NodeKinds.COBegin:
|
||||||
{
|
{
|
||||||
flowNode = new COBeginFlowNode();
|
flowNode = new COBeginFlowNode(diagramViewModel);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeKinds.COEnd:
|
case NodeKinds.COEnd:
|
||||||
{
|
{
|
||||||
flowNode = new COEndFlowNode();
|
flowNode = new COEndFlowNode(diagramViewModel);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeKinds.Middle:
|
case NodeKinds.Middle:
|
||||||
{
|
{
|
||||||
var flowchartNodelModel = new MiddleFlowNode();
|
var flowchartNodelModel = new MiddleFlowNode(diagramViewModel);
|
||||||
flowNode = flowchartNodelModel;
|
flowNode = flowchartNodelModel;
|
||||||
flowchartNodelModel.UserIds = UserIds?.ToList();
|
flowchartNodelModel.UserIds = UserIds?.ToList();
|
||||||
flowchartNodelModel.RoleIds = RoleIds?.ToList();
|
flowchartNodelModel.RoleIds = RoleIds?.ToList();
|
||||||
@@ -99,7 +100,7 @@ namespace AIStudio.Wpf.Flowchart.Models
|
|||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
var flowNodelModel = new FlowNode(NodeKinds.Normal);
|
var flowNodelModel = new FlowNode(diagramViewModel, NodeKinds.Normal);
|
||||||
flowNode = flowNodelModel;
|
flowNode = flowNodelModel;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,14 +90,14 @@ namespace AIStudio.Wpf.Mind.Controls
|
|||||||
|
|
||||||
private void CreateFlowchartModel(string json)
|
private void CreateFlowchartModel(string json)
|
||||||
{
|
{
|
||||||
_diagramViewModel.IsLoading = true;
|
//_diagramViewModel.IsLoading = true;
|
||||||
_diagramViewModel.Items.Clear();
|
//_diagramViewModel.Items.Clear();
|
||||||
MindNode level1node = new MindNode(_diagramViewModel, Mind.NodeLevel.Level1, _diagramViewModel.MindType) { Text = "思维导图" };
|
//MindNode level1node = new MindNode(_diagramViewModel) { Text = "思维导图" };
|
||||||
_diagramViewModel.DirectAddItemCommand.Execute(level1node);
|
//_diagramViewModel.DirectAddItemCommand.Execute(level1node);
|
||||||
level1node.Left = 200;
|
//level1node.Left = 200;
|
||||||
level1node.Top = 200;
|
//level1node.Top = 200;
|
||||||
_diagramViewModel.DoCommandManager.Init();
|
//_diagramViewModel.DoCommandManager.Init();
|
||||||
_diagramViewModel.IsLoading = false;
|
//_diagramViewModel.IsLoading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static readonly DependencyProperty GetDataFuncProperty =
|
public static readonly DependencyProperty GetDataFuncProperty =
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
{
|
{
|
||||||
switch (mindNode.NodeLevel)
|
switch (mindNode.NodeLevel)
|
||||||
{
|
{
|
||||||
case NodeLevel.Level1:
|
case 0:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 110;
|
mindNode.ItemWidth = 110;
|
||||||
mindNode.ItemHeight = 40;
|
mindNode.ItemHeight = 40;
|
||||||
@@ -38,7 +38,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
mindNode.ConnectorOrientation = ConnectorOrientation.None;
|
mindNode.ConnectorOrientation = ConnectorOrientation.None;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeLevel.Level2:
|
case 1:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 80;
|
mindNode.ItemWidth = 80;
|
||||||
mindNode.ItemHeight = 25;
|
mindNode.ItemHeight = 25;
|
||||||
@@ -55,7 +55,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
|
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeLevel.Level3:
|
default:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 80;
|
mindNode.ItemWidth = 80;
|
||||||
mindNode.ItemHeight = 25;
|
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.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
|
||||||
connector.SmoothMargin = 20;
|
connector.SmoothMargin = 20;
|
||||||
connector.SmoothAutoSlope = 0.2;
|
connector.SmoothAutoSlope = 0.2;
|
||||||
@@ -108,7 +118,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
var sizewithSpacing = mindNode.SizeWithSpacing;
|
var sizewithSpacing = mindNode.SizeWithSpacing;
|
||||||
if (mindNode.Children?.Count > 0)
|
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();
|
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));
|
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)
|
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 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;
|
double top = mindNode.MiddlePosition.Y + mindNode.ItemHeight / 2 + mindNode.Spacing.Height;
|
||||||
@@ -142,10 +152,10 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.FirstConnector);
|
connector?.SetSourcePort(mindNode.FirstConnector);
|
||||||
connect?.SetSinkPort(child.TopConnector);
|
connector?.SetSinkPort(child.TopConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -164,10 +174,10 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.BottomConnector);
|
connector?.SetSourcePort(mindNode.BottomConnector);
|
||||||
connect?.SetSinkPort(child.LeftConnector);
|
connector?.SetSinkPort(child.LeftConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
switch (mindNode.NodeLevel)
|
switch (mindNode.NodeLevel)
|
||||||
{
|
{
|
||||||
case NodeLevel.Level1:
|
case 0:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 110;
|
mindNode.ItemWidth = 110;
|
||||||
mindNode.ItemHeight = 40;
|
mindNode.ItemHeight = 40;
|
||||||
@@ -43,7 +43,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
mindNode.ConnectorOrientation = ConnectorOrientation.None;
|
mindNode.ConnectorOrientation = ConnectorOrientation.None;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeLevel.Level2:
|
case 1:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 80;
|
mindNode.ItemWidth = 80;
|
||||||
mindNode.ItemHeight = 25;
|
mindNode.ItemHeight = 25;
|
||||||
@@ -62,7 +62,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
|
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeLevel.Level3:
|
default:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 80;
|
mindNode.ItemWidth = 80;
|
||||||
mindNode.ItemHeight = 25;
|
mindNode.ItemHeight = 25;
|
||||||
@@ -89,16 +89,16 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
mindNode.GetLevel1Node().LayoutUpdating = false;
|
mindNode.GetLevel1Node().LayoutUpdating = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink)
|
public ConnectionViewModel GetOrSetConnectionViewModel(MindNode source, MindNode sink, ConnectionViewModel connector = null)
|
||||||
{
|
{
|
||||||
DrawMode drawMode;
|
DrawMode drawMode;
|
||||||
RouterMode routerMode;
|
RouterMode routerMode;
|
||||||
if (source.NodeLevel == NodeLevel.Level1)
|
if (source.NodeLevel == 0)
|
||||||
{
|
{
|
||||||
drawMode = DrawMode.ConnectingLineStraight;
|
drawMode = DrawMode.ConnectingLineStraight;
|
||||||
routerMode = RouterMode.RouterFishBone;
|
routerMode = RouterMode.RouterFishBone;
|
||||||
}
|
}
|
||||||
else if (source.NodeLevel == NodeLevel.Level2)
|
else if (source.NodeLevel == 1)
|
||||||
{
|
{
|
||||||
drawMode = DrawMode.ConnectingLineStraight;
|
drawMode = DrawMode.ConnectingLineStraight;
|
||||||
routerMode = RouterMode.RouterNormal;
|
routerMode = RouterMode.RouterNormal;
|
||||||
@@ -109,7 +109,17 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
routerMode = RouterMode.RouterOrthogonal;
|
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.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
|
||||||
connector.SmoothMargin = 20;
|
connector.SmoothMargin = 20;
|
||||||
connector.SmoothAutoSlope = 0.2;
|
connector.SmoothAutoSlope = 0.2;
|
||||||
@@ -138,7 +148,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
var bottomoffset = mindNode.Spacing.Width / 2;
|
var bottomoffset = mindNode.Spacing.Width / 2;
|
||||||
if (mindNode.Children?.Count > 0)
|
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();
|
var tops = mindNode.Children.Where((p, index) => index % 2 == 0).ToList();
|
||||||
tops.ForEach(p => p.ConnectorOrientation = ConnectorOrientation.BottomLeft);
|
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();
|
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));
|
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 childrensizes = mindNode.Children.Select(p => MeasureOverride(p, mindNode.IsExpanded && isExpanded)).ToArray();
|
||||||
var lastchildsize = childrensizes.LastOrDefault();
|
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));
|
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();
|
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));
|
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)
|
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();
|
var tops = mindNode.Children.Where(p => p.ConnectorOrientation == ConnectorOrientation.BottomLeft).ToList();
|
||||||
double topleft = mindNode.MiddlePosition.X + mindNode.ItemWidth / 2 + mindNode.Spacing.Width;
|
double topleft = mindNode.MiddlePosition.X + mindNode.ItemWidth / 2 + mindNode.Spacing.Width;
|
||||||
@@ -185,10 +195,10 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.RightConnector);
|
connector?.SetSourcePort(mindNode.RightConnector);
|
||||||
connect?.SetSinkPort(child.BottomLeftConnector);
|
connector?.SetSinkPort(child.BottomLeftConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,14 +218,14 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.RightConnector);
|
connector?.SetSourcePort(mindNode.RightConnector);
|
||||||
connect?.SetSinkPort(child.TopLeftConnector);
|
connector?.SetSinkPort(child.TopLeftConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mindNode.NodeLevel == NodeLevel.Level2)
|
else if (mindNode.NodeLevel == 1)
|
||||||
{
|
{
|
||||||
if (mindNode.ConnectorOrientation == ConnectorOrientation.BottomLeft)
|
if (mindNode.ConnectorOrientation == ConnectorOrientation.BottomLeft)
|
||||||
{
|
{
|
||||||
@@ -233,10 +243,10 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.BottomLeftConnector);
|
connector?.SetSourcePort(mindNode.BottomLeftConnector);
|
||||||
connect?.SetSinkPort(child.LeftConnector);
|
connector?.SetSinkPort(child.LeftConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -256,15 +266,15 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.TopLeftConnector);
|
connector?.SetSourcePort(mindNode.TopLeftConnector);
|
||||||
connect?.SetSinkPort(child.LeftConnector);
|
connector?.SetSinkPort(child.LeftConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mindNode.NodeLevel == NodeLevel.Level3)
|
else
|
||||||
{
|
{
|
||||||
if (mindNode.GetLevel2Node().ConnectorOrientation == ConnectorOrientation.BottomLeft)
|
if (mindNode.GetLevel2Node().ConnectorOrientation == ConnectorOrientation.BottomLeft)
|
||||||
{
|
{
|
||||||
@@ -281,10 +291,10 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.BottomConnector);
|
connector?.SetSourcePort(mindNode.BottomConnector);
|
||||||
connect?.SetSinkPort(child.LeftConnector);
|
connector?.SetSinkPort(child.LeftConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -303,10 +313,10 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.TopConnector);
|
connector?.SetSourcePort(mindNode.TopConnector);
|
||||||
connect?.SetSinkPort(child.LeftConnector);
|
connector?.SetSinkPort(child.LeftConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
public interface IMindLayout
|
public interface IMindLayout
|
||||||
{
|
{
|
||||||
void Appearance(MindNode mindNode);
|
void Appearance(MindNode mindNode);
|
||||||
ConnectionViewModel GetConnectionViewModel(MindNode source, MindNode sink);
|
ConnectionViewModel GetOrSetConnectionViewModel(MindNode source, MindNode sink, ConnectionViewModel connector = null);
|
||||||
void LayoutUpdated(MindNode mindNode);
|
void LayoutUpdated(MindNode mindNode);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
{
|
{
|
||||||
switch (mindNode.NodeLevel)
|
switch (mindNode.NodeLevel)
|
||||||
{
|
{
|
||||||
case NodeLevel.Level1:
|
case 0:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 110;
|
mindNode.ItemWidth = 110;
|
||||||
mindNode.ItemHeight = 40;
|
mindNode.ItemHeight = 40;
|
||||||
@@ -39,7 +39,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
mindNode.ConnectorOrientation = ConnectorOrientation.None;
|
mindNode.ConnectorOrientation = ConnectorOrientation.None;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeLevel.Level2:
|
case 1:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 80;
|
mindNode.ItemWidth = 80;
|
||||||
mindNode.ItemHeight = 25;
|
mindNode.ItemHeight = 25;
|
||||||
@@ -56,7 +56,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
|
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeLevel.Level3:
|
case 2:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 80;
|
mindNode.ItemWidth = 80;
|
||||||
mindNode.ItemHeight = 25;
|
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.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
|
||||||
connector.SmoothMargin = 20;
|
connector.SmoothMargin = 20;
|
||||||
connector.SmoothAutoSlope = 0.2;
|
connector.SmoothAutoSlope = 0.2;
|
||||||
@@ -131,10 +141,10 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.RightConnector ?? mindNode.FirstConnector);
|
connector?.SetSourcePort(mindNode.RightConnector ?? mindNode.FirstConnector);
|
||||||
connect?.SetSinkPort(child.LeftConnector);
|
connector?.SetSinkPort(child.LeftConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
{
|
{
|
||||||
switch (mindNode.NodeLevel)
|
switch (mindNode.NodeLevel)
|
||||||
{
|
{
|
||||||
case NodeLevel.Level1:
|
case 0:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 110;
|
mindNode.ItemWidth = 110;
|
||||||
mindNode.ItemHeight = 40;
|
mindNode.ItemHeight = 40;
|
||||||
@@ -39,7 +39,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
mindNode.ConnectorOrientation = ConnectorOrientation.None;
|
mindNode.ConnectorOrientation = ConnectorOrientation.None;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeLevel.Level2:
|
case 1:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 80;
|
mindNode.ItemWidth = 80;
|
||||||
mindNode.ItemHeight = 25;
|
mindNode.ItemHeight = 25;
|
||||||
@@ -56,7 +56,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
|
mindNode.ShapeViewModel.SinkMarker.SizeStyle = ArrowSizeStyle.VerySmall;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeLevel.Level3:
|
default:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 80;
|
mindNode.ItemWidth = 80;
|
||||||
mindNode.ItemHeight = 25;
|
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.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
|
||||||
connector.SmoothMargin = 20;
|
connector.SmoothMargin = 20;
|
||||||
connector.SmoothAutoSlope = 0.2;
|
connector.SmoothAutoSlope = 0.2;
|
||||||
@@ -108,7 +118,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
var sizewithSpacing = mindNode.SizeWithSpacing;
|
var sizewithSpacing = mindNode.SizeWithSpacing;
|
||||||
if (mindNode.Children?.Count > 0)
|
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();
|
var rights = mindNode.Children.Where((p, index) => index % 2 == 0).ToList();
|
||||||
rights.ForEach(p => p.ConnectorOrientation = ConnectorOrientation.Left);
|
rights.ForEach(p => p.ConnectorOrientation = ConnectorOrientation.Left);
|
||||||
@@ -132,7 +142,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
public void ArrangeOverride(MindNode mindNode)
|
public void ArrangeOverride(MindNode mindNode)
|
||||||
{
|
{
|
||||||
if (mindNode.NodeLevel == NodeLevel.Level1)
|
if (mindNode.NodeLevel == 0)
|
||||||
{
|
{
|
||||||
if (mindNode.Children?.Count > 0)
|
if (mindNode.Children?.Count > 0)
|
||||||
{
|
{
|
||||||
@@ -148,10 +158,10 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.FirstConnector);
|
connector?.SetSourcePort(mindNode.FirstConnector);
|
||||||
connect?.SetSinkPort(child.LeftConnector);
|
connector?.SetSinkPort(child.LeftConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
var lefts = mindNode.Children.Where(p => p.ConnectorOrientation == ConnectorOrientation.Right).ToList();
|
var lefts = mindNode.Children.Where(p => p.ConnectorOrientation == ConnectorOrientation.Right).ToList();
|
||||||
@@ -166,10 +176,10 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.FirstConnector);
|
connector?.SetSourcePort(mindNode.FirstConnector);
|
||||||
connect?.SetSinkPort(child.RightConnector);
|
connector?.SetSinkPort(child.RightConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,10 +200,10 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.RightConnector);
|
connector?.SetSourcePort(mindNode.RightConnector);
|
||||||
connect?.SetSinkPort(child.LeftConnector);
|
connector?.SetSinkPort(child.LeftConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -212,10 +222,10 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.LeftConnector);
|
connector?.SetSourcePort(mindNode.LeftConnector);
|
||||||
connect?.SetSinkPort(child.RightConnector);
|
connector?.SetSinkPort(child.RightConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
{
|
{
|
||||||
switch (mindNode.NodeLevel)
|
switch (mindNode.NodeLevel)
|
||||||
{
|
{
|
||||||
case NodeLevel.Level1:
|
case 0:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 110;
|
mindNode.ItemWidth = 110;
|
||||||
mindNode.ItemHeight = 40;
|
mindNode.ItemHeight = 40;
|
||||||
@@ -38,7 +38,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
mindNode.ConnectorOrientation = ConnectorOrientation.None;
|
mindNode.ConnectorOrientation = ConnectorOrientation.None;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeLevel.Level2:
|
case 1:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 80;
|
mindNode.ItemWidth = 80;
|
||||||
mindNode.ItemHeight = 25;
|
mindNode.ItemHeight = 25;
|
||||||
@@ -56,7 +56,7 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
mindNode.ConnectorOrientation = ConnectorOrientation.Top;
|
mindNode.ConnectorOrientation = ConnectorOrientation.Top;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NodeLevel.Level3:
|
default:
|
||||||
{
|
{
|
||||||
mindNode.ItemWidth = 80;
|
mindNode.ItemWidth = 80;
|
||||||
mindNode.ItemHeight = 25;
|
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.ColorViewModel.LineColor = source.ColorViewModel.LineColor;
|
||||||
connector.SmoothMargin = 20;
|
connector.SmoothMargin = 20;
|
||||||
connector.SmoothAutoSlope = 0.2;
|
connector.SmoothAutoSlope = 0.2;
|
||||||
@@ -133,10 +143,10 @@ namespace AIStudio.Wpf.Mind.Helpers
|
|||||||
|
|
||||||
ArrangeOverride(child);
|
ArrangeOverride(child);
|
||||||
|
|
||||||
var connect = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
var connector = mindNode.Root?.Items.OfType<ConnectionViewModel>().FirstOrDefault(p => p.SourceConnectorInfo?.DataItem == mindNode && p.SinkConnectorInfoFully?.DataItem == child);
|
||||||
connect?.SetSourcePort(mindNode.BottomConnector);
|
connector?.SetSourcePort(mindNode.BottomConnector);
|
||||||
connect?.SetSinkPort(child.TopConnector);
|
connector?.SetSinkPort(child.TopConnector);
|
||||||
connect?.SetVisible(child.Visible);
|
connector?.SetVisible(child.Visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,26 +14,11 @@ namespace AIStudio.Wpf.Mind.Models
|
|||||||
}
|
}
|
||||||
public MindNodeDesignerItem(MindNode item) : base(item)
|
public MindNodeDesignerItem(MindNode item) : base(item)
|
||||||
{
|
{
|
||||||
NodeLevel = item.NodeLevel;
|
|
||||||
MindType = item.MindType;
|
|
||||||
Spacing = item.Spacing;
|
Spacing = item.Spacing;
|
||||||
Offset = item.Offset;
|
Offset = item.Offset;
|
||||||
IsExpanded = item.IsExpanded;
|
IsExpanded = item.IsExpanded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[XmlAttribute]
|
|
||||||
public NodeLevel NodeLevel
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
[XmlAttribute]
|
|
||||||
public MindType MindType
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
[XmlIgnore]
|
[XmlIgnore]
|
||||||
public Size Spacing
|
public Size Spacing
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
using AIStudio.Wpf.DiagramDesigner;
|
||||||
using AIStudio.Wpf.DiagramModels;
|
using AIStudio.Wpf.DiagramModels;
|
||||||
using AIStudio.Wpf.DiagramModels.ViewModels;
|
using AIStudio.Wpf.DiagramModels.ViewModels;
|
||||||
using AIStudio.Wpf.Mind;
|
using AIStudio.Wpf.Mind;
|
||||||
@@ -9,16 +10,6 @@ namespace AIStudio.Wpf.Flowchart.Models
|
|||||||
|
|
||||||
public class MindNodeModel : DiagramNode
|
public class MindNodeModel : DiagramNode
|
||||||
{
|
{
|
||||||
public NodeLevel NodeLevel
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MindType MindType
|
|
||||||
{
|
|
||||||
get; set;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Size Spacing
|
public Size Spacing
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
@@ -35,9 +26,9 @@ namespace AIStudio.Wpf.Flowchart.Models
|
|||||||
get; set;
|
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.Spacing = Spacing;
|
||||||
mindNode.Offset = Offset;
|
mindNode.Offset = Offset;
|
||||||
|
|||||||
@@ -11,7 +11,12 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
{
|
{
|
||||||
MindType MindType
|
MindType MindType
|
||||||
{
|
{
|
||||||
get;set;
|
get; set;
|
||||||
|
}
|
||||||
|
|
||||||
|
MindNode RootItem
|
||||||
|
{
|
||||||
|
get;
|
||||||
}
|
}
|
||||||
|
|
||||||
SimpleCommand AddParentCommand
|
SimpleCommand AddParentCommand
|
||||||
|
|||||||
@@ -23,9 +23,21 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MindNode RootItem
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Items.OfType<MindNode>().FirstOrDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 命令
|
#region 命令
|
||||||
|
public SimpleCommand AddRootCommand
|
||||||
|
{
|
||||||
|
get; private set;
|
||||||
|
}
|
||||||
|
|
||||||
public SimpleCommand AddParentCommand
|
public SimpleCommand AddParentCommand
|
||||||
{
|
{
|
||||||
@@ -115,6 +127,11 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
DeleteSelfCommand = new SimpleCommand(MindLevelEnable, ExecuteDeleteSelfCommand);
|
DeleteSelfCommand = new SimpleCommand(MindLevelEnable, ExecuteDeleteSelfCommand);
|
||||||
MoveForwardCommand = new SimpleCommand(MindExecuteEnable, ExecuteMoveForwardCommand);
|
MoveForwardCommand = new SimpleCommand(MindExecuteEnable, ExecuteMoveForwardCommand);
|
||||||
MoveBackCommand = new SimpleCommand(MindExecuteEnable, ExecuteMoveBackCommand);
|
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)
|
public bool MindExecuteEnable(object para)
|
||||||
@@ -130,7 +147,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
{
|
{
|
||||||
if (MindExecuteEnable(obj) == false) return false;
|
if (MindExecuteEnable(obj) == false) return false;
|
||||||
|
|
||||||
return (SelectedItem as MindNode).NodeLevel != NodeLevel.Level1;
|
return (SelectedItem as MindNode).NodeLevel != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region 操作
|
#region 操作
|
||||||
@@ -138,9 +155,9 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
{
|
{
|
||||||
if (obj is MindType mindType)
|
if (obj is MindType mindType)
|
||||||
{
|
{
|
||||||
Items.OfType<MindNode>().ToList().ForEach(item => { item.MindType = mindType; });
|
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitLayout(true); });
|
||||||
|
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitConnectLayout(); });
|
||||||
Items.OfType<MindNode>().FirstOrDefault()?.LayoutUpdated();
|
RootItem?.LayoutUpdated();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,7 +180,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
|
|
||||||
if (items?.Count == 0)
|
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);
|
items.Add(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,7 +220,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
}
|
}
|
||||||
if (items?.Count == 0)
|
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)
|
if (node.Parent is MindNode parent)
|
||||||
@@ -249,7 +266,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
|
|
||||||
if (items?.Count == 0)
|
if (items?.Count == 0)
|
||||||
{
|
{
|
||||||
var node = new MindNode(this, pear.NodeLevel, this.MindType) { Text = "分支主题" };
|
var node = new MindNode(this) { Text = "分支主题" };
|
||||||
items.Add(node);
|
items.Add(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,16 +25,13 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
{
|
{
|
||||||
public class MindNode : DiagramItemViewModel
|
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)
|
public MindNode(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||||
@@ -67,7 +64,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
BuildMenuOptions();
|
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");
|
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();
|
MindLayout = layout != null ? (System.Activator.CreateInstance(layout) as IMindLayout) : new MindLayout();
|
||||||
@@ -76,6 +73,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
{
|
{
|
||||||
MindLayout.Appearance(this);
|
MindLayout.Appearance(this);
|
||||||
}
|
}
|
||||||
|
this.PropertyChanged -= this.Item_PropertyChanged;
|
||||||
this.PropertyChanged += this.Item_PropertyChanged;
|
this.PropertyChanged += this.Item_PropertyChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,8 +83,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
|
|
||||||
if (designerbase is MindNodeDesignerItem designer)
|
if (designerbase is MindNodeDesignerItem designer)
|
||||||
{
|
{
|
||||||
NodeLevel = designer.NodeLevel;
|
|
||||||
MindType = designer.MindType;
|
|
||||||
Spacing = designer.Spacing;
|
Spacing = designer.Spacing;
|
||||||
Offset = designer.Offset;
|
Offset = designer.Offset;
|
||||||
IsExpanded = designer.IsExpanded;
|
IsExpanded = designer.IsExpanded;
|
||||||
@@ -97,8 +93,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
{
|
{
|
||||||
var mindNodeModel = new MindNodeModel();
|
var mindNodeModel = new MindNodeModel();
|
||||||
|
|
||||||
mindNodeModel.NodeLevel = NodeLevel;
|
|
||||||
mindNodeModel.MindType = MindType;
|
|
||||||
mindNodeModel.Spacing = Spacing;
|
mindNodeModel.Spacing = Spacing;
|
||||||
mindNodeModel.Offset = Offset;
|
mindNodeModel.Offset = Offset;
|
||||||
mindNodeModel.IsExpanded = IsExpanded;
|
mindNodeModel.IsExpanded = IsExpanded;
|
||||||
@@ -111,7 +105,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
{
|
{
|
||||||
if (Command_Enable(obj) == false) return false;
|
if (Command_Enable(obj) == false) return false;
|
||||||
|
|
||||||
return NodeLevel != NodeLevel.Level1;
|
return NodeLevel != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region 属性
|
#region 属性
|
||||||
@@ -119,53 +113,36 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
[Browsable(false)]
|
|
||||||
private NodeLevel _nodeLevel;
|
public MindNode ParentNode
|
||||||
public NodeLevel NodeLevel
|
|
||||||
{
|
{
|
||||||
get
|
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
|
public MindType MindType
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _mindType;
|
return (Root as IMindDiagramViewModel)?.MindType ?? MindType.Mind;
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
SetProperty(ref _mindType, value);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -395,14 +372,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
#region 操作
|
#region 操作
|
||||||
public void AddChild(MindNode item, int index = -1)
|
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)
|
if (index >= 0)
|
||||||
{
|
{
|
||||||
this.Children.Insert(index, item);
|
this.Children.Insert(index, item);
|
||||||
@@ -412,7 +381,9 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
this.Children.Add(item);
|
this.Children.Add(item);
|
||||||
}
|
}
|
||||||
item.Parent = this;
|
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 });
|
Root?.DirectAddItemCommand.Execute(new SelectableDesignerItemViewModelBase[] { item, connector });
|
||||||
connector.ZIndex = -1;
|
connector.ZIndex = -1;
|
||||||
this.IsSelected = true;
|
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
|
#endregion
|
||||||
|
|
||||||
private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||||
@@ -458,14 +438,11 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
case nameof(NodeLevel):
|
case nameof(NodeLevel):
|
||||||
MindLayout?.Appearance(this);
|
MindLayout?.Appearance(this);
|
||||||
break;
|
break;
|
||||||
case nameof(MindType):
|
|
||||||
InitLayout(true);
|
|
||||||
break;
|
|
||||||
case nameof(Left):
|
case nameof(Left):
|
||||||
{
|
{
|
||||||
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
|
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
|
||||||
{
|
{
|
||||||
if (NodeLevel == NodeLevel.Level1)
|
if (NodeLevel == 0)
|
||||||
{
|
{
|
||||||
LayoutUpdated();
|
LayoutUpdated();
|
||||||
}
|
}
|
||||||
@@ -481,7 +458,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
{
|
{
|
||||||
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
|
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
|
||||||
{
|
{
|
||||||
if (NodeLevel == NodeLevel.Level1)
|
if (NodeLevel == 0)
|
||||||
{
|
{
|
||||||
LayoutUpdated();
|
LayoutUpdated();
|
||||||
}
|
}
|
||||||
@@ -516,7 +493,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
|||||||
public MindNode GetLevel2Node()
|
public MindNode GetLevel2Node()
|
||||||
{
|
{
|
||||||
var node = this;
|
var node = this;
|
||||||
while (node.Parent is MindNode mindNode && mindNode.NodeLevel == NodeLevel.Level2)
|
while (node.Parent is MindNode mindNode && mindNode.NodeLevel == 1)
|
||||||
{
|
{
|
||||||
node = mindNode;
|
node = mindNode;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user