mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-19 16:06:35 +08:00
mind的拷贝完成
This commit is contained in:
@@ -4,6 +4,7 @@ using System.Linq;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using AIStudio.Wpf.DiagramDesigner;
|
||||
using AIStudio.Wpf.DiagramDesigner.Geometrys;
|
||||
using AIStudio.Wpf.Mind.Helpers;
|
||||
|
||||
namespace AIStudio.Wpf.Mind.ViewModels
|
||||
@@ -426,7 +427,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
|
||||
if (items?.Count == 0)
|
||||
{
|
||||
var node = new MindNode(this) { Text = $"分支主题{parent.Children.Count + 1}"};
|
||||
var node = new MindNode(this) { Text = $"分支主题{parent.Children.Count + 1}" };
|
||||
items.Add(node);
|
||||
}
|
||||
|
||||
@@ -463,7 +464,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
else
|
||||
{
|
||||
node = SelectedItem as MindNode;
|
||||
}
|
||||
}
|
||||
|
||||
if (node.Parent is MindNode parent)
|
||||
{
|
||||
@@ -616,6 +617,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
protected override bool Delete(object parameter)
|
||||
{
|
||||
List<MindNode> nodes = new List<MindNode>();
|
||||
List<SelectableDesignerItemViewModelBase> others = new List<SelectableDesignerItemViewModelBase>();
|
||||
if (parameter is MindNode node1)
|
||||
{
|
||||
nodes.Add(node1);
|
||||
@@ -627,6 +629,8 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
else
|
||||
{
|
||||
nodes.AddRange(SelectedItems.OfType<MindNode>());
|
||||
|
||||
others = SelectedItems.Where(p => !(p is MindNode)).ToList();
|
||||
}
|
||||
|
||||
if (nodes.FirstOrDefault()?.IsEditing != false)
|
||||
@@ -641,16 +645,14 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
() => {
|
||||
foreach (var node in nodes)
|
||||
{
|
||||
if (node.NodeLevel == 0)
|
||||
{
|
||||
DirectRemoveItemCommand.Execute(node);
|
||||
}
|
||||
else
|
||||
{
|
||||
node.ParentNode?.RemoveChild(node, true);
|
||||
}
|
||||
node.Remove(true);
|
||||
}
|
||||
RootItems.ForEach(p => p.LayoutUpdated());
|
||||
|
||||
if (others.Any())
|
||||
{
|
||||
base.Delete(others);
|
||||
}
|
||||
},
|
||||
() => {
|
||||
foreach (var node in nodes)
|
||||
@@ -669,9 +671,11 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
#region 复制,粘贴
|
||||
protected override void FixOtherInfo(List<SelectableDesignerItemViewModelBase> items)
|
||||
{
|
||||
|
||||
List<MindNode> parents = new List<MindNode>();
|
||||
foreach (var item in items.OfType<MindNode>())
|
||||
{
|
||||
//item.DesiredPosition = new PointBase(item.DesiredPosition?.X ?? 0 + OffsetX, item.DesiredPosition?.Y ?? 0 + OffsetY);
|
||||
var parent = Items.OfType<MindNode>().FirstOrDefault(p => p.Id == item.ParentId);
|
||||
if (parent != null && !items.Contains(parent))
|
||||
{
|
||||
@@ -679,6 +683,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
}
|
||||
else if (item.ParentId == Guid.Empty)
|
||||
{
|
||||
item.Offset = new PointBase(OffsetX, OffsetX);
|
||||
parents.Add(item);
|
||||
item.InitLayout(false);
|
||||
}
|
||||
@@ -806,7 +811,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
if (obj is string mindThemeModel)
|
||||
{
|
||||
MindThemeModel = MindThemeHelper.GetTheme(mindThemeModel);
|
||||
if (mindThemeModel.StartsWith("CoolLightYellow"))
|
||||
if (MindThemeModel?.Dark == true)
|
||||
{
|
||||
PageBackground = Colors.Black;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user