mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-20 08:26:36 +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)
|
||||
{
|
||||
_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();
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user