mind的拷贝完成

This commit is contained in:
艾竹
2023-03-25 22:10:49 +08:00
parent b36bd4b228
commit 5e5da021ab
13 changed files with 189 additions and 103 deletions

View File

@@ -98,13 +98,12 @@ namespace AIStudio.Wpf.Mind.ViewModels
public void InitLayout(bool initAppearance)
{
var layout = GlobalType.AllTypes.Where(p => typeof(IMindLayout).IsAssignableFrom(p)).FirstOrDefault(p => p.Name == MindType.ToString() + "Layout");
var layout = TypeHelper.GetType(MindType.ToString() + "Layout");
MindLayout = layout != null ? (System.Activator.CreateInstance(layout) as IMindLayout) : new MindLayout();
IsInnerConnector = true;
MindLayout.Appearance(this, MindThemeModel, initAppearance);
this.PropertyChanged -= this.Item_PropertyChanged;
IsInnerConnector = true;
MindLayout.Appearance(this, MindThemeModel, initAppearance);
this.PropertyChanged += this.Item_PropertyChanged;
}
@@ -231,14 +230,51 @@ namespace AIStudio.Wpf.Mind.ViewModels
get; set;
}
public PointBase DesiredPosition
public PointBase? DesiredPosition
{
get; set;
}
public PointBase Offset
{
get; set;
get
{
PointBase point;
if (NodeLevel == 0)
{
if (DesiredPosition == null)
{
point = new PointBase();
}
else
{
point = new PointBase(Position.X - DesiredPosition.Value.X, Position.Y - DesiredPosition.Value.Y);
}
}
else
{
if (DesiredPosition == null)
{
point = new PointBase();
}
else
{
point = new PointBase(Position.X - DesiredPosition.Value.X - RootNode.Offset.X, Position.Y - DesiredPosition.Value.Y - RootNode.Offset.Y);
}
}
return point;
}
set
{
if (NodeLevel == 0)
{
DesiredPosition = new PointBase(Position.X - value.X, Position.Y - value.Y);
}
else
{
DesiredPosition = new PointBase(Position.X - value.X - RootNode.Offset.X, Position.Y - value.Y - RootNode.Offset.Y);
}
}
}
private ConnectorOrientation _connectorOrientation = ConnectorOrientation.Left;
@@ -494,7 +530,31 @@ namespace AIStudio.Wpf.Mind.ViewModels
{
foreach (var child in item.Children.ToList())
{
item.RemoveChild(child);
item.RemoveChild(child, removeall);
}
}
}
}
public void Remove(bool removeall = false)
{
this.PropertyChanged -= Item_PropertyChanged;
if (this.ParentNode != null)
{
this.ParentNode.Children.Remove(this);
}
var connectors = Root?.Items.OfType<ConnectionViewModel>().Where(p => p.SinkConnectorInfoFully?.DataItem == this).ToList();
Root?.DirectRemoveItemCommand.Execute(this);
Root?.DirectRemoveItemCommand.Execute(connectors);
if (removeall)
{
if (this.Children?.Count > 0)
{
foreach (var child in this.Children.ToList())
{
child.Remove(removeall);
}
}
}
@@ -519,9 +579,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (GetLevel1Node()?.LayoutUpdating == true) return;
if (Root == null) return;
if (GetLevel1Node()?.LayoutUpdating == true) return;
switch (e.PropertyName)
{
@@ -535,28 +593,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
case nameof(NodeLevel):
MindLayout?.Appearance(this);
break;
case nameof(Left):
{
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
{
if (NodeLevel > 0 && IsSelected)
{
UpdateOffsetX((double)valuePropertyChangedEventArgs.OldValue, (double)valuePropertyChangedEventArgs.NewValue);
}
}
break;
}
case nameof(Top):
{
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
{
if (NodeLevel > 0 && IsSelected)
{
UpdateOffsetY((double)valuePropertyChangedEventArgs.OldValue, (double)valuePropertyChangedEventArgs.NewValue);
}
}
break;
}
case nameof(Text):
{
ItemWidth = Math.Max(ItemWidth, GetTextDisplayWidthHelper.GetTextDisplayWidth(Text, new FontFamily(FontViewModel.FontFamily), FontViewModel.FontStyle, FontViewModel.FontWeight, FontViewModel.FontStretch, FontViewModel.FontSize) + 30);