This commit is contained in:
艾竹
2023-03-28 22:09:24 +08:00
parent 43b5d82fae
commit 72da084f15
5 changed files with 73 additions and 64 deletions

View File

@@ -150,8 +150,8 @@ namespace AIStudio.Wpf.Mind.Helpers
double lefttop = mindNode.MiddlePosition.Y - Math.Min(mindNode.DesiredSize.Height, rights.SumOrDefault(p => p.DesiredSize.Height)) / 2;
foreach (var child in rights)
{
child.Left = left + child.Spacing.Width + child.Offset.X;
child.Top = lefttop + child.DesiredSize.Height / 2 - child.ItemHeight / 2 + child.Offset.Y;
child.Left = left + child.Spacing.Width + child.Offset.X - child.RootNode.Offset.X;
child.Top = lefttop + child.DesiredSize.Height / 2 - child.ItemHeight / 2 + child.Offset.Y - child.RootNode.Offset.Y;
child.DesiredPosition = new PointBase(left + child.Spacing.Width, lefttop + child.DesiredSize.Height / 2 - child.ItemHeight / 2);
lefttop += child.DesiredSize.Height;
@@ -168,8 +168,8 @@ namespace AIStudio.Wpf.Mind.Helpers
double righttop = mindNode.MiddlePosition.Y - Math.Min(mindNode.DesiredSize.Height, lefts.SumOrDefault(p => p.DesiredSize.Height)) / 2;
foreach (var child in lefts)
{
child.Left = right - child.Spacing.Width - child.ItemWidth + child.Offset.X;
child.Top = righttop + child.DesiredSize.Height / 2 - child.ItemHeight / 2 + child.Offset.Y;
child.Left = right - child.Spacing.Width - child.ItemWidth + child.Offset.X - child.RootNode.Offset.X;
child.Top = righttop + child.DesiredSize.Height / 2 - child.ItemHeight / 2 + child.Offset.Y - child.RootNode.Offset.Y;
child.DesiredPosition = new PointBase(right - child.Spacing.Width - child.ItemWidth, righttop + child.DesiredSize.Height / 2 - child.ItemHeight / 2);
righttop += child.DesiredSize.Height;
@@ -183,6 +183,7 @@ namespace AIStudio.Wpf.Mind.Helpers
}
mindNode.DesiredPosition = mindNode.Position;
//mindNode.Offset = new PointBase();
}
else
{
@@ -194,8 +195,8 @@ namespace AIStudio.Wpf.Mind.Helpers
{
foreach (var child in mindNode.Children)
{
child.Left = left + child.Spacing.Width + child.Offset.X;
child.Top = top + child.DesiredSize.Height / 2 - child.ItemHeight / 2 + child.Offset.Y;
child.Left = left + child.Spacing.Width + child.Offset.X - child.RootNode.Offset.X;
child.Top = top + child.DesiredSize.Height / 2 - child.ItemHeight / 2 + child.Offset.Y - child.RootNode.Offset.Y;
child.DesiredPosition = new PointBase(left + child.Spacing.Width, top + child.DesiredSize.Height / 2 - child.ItemHeight / 2);
top += child.DesiredSize.Height;
@@ -216,8 +217,8 @@ namespace AIStudio.Wpf.Mind.Helpers
{
foreach (var child in mindNode.Children)
{
child.Left = right - child.Spacing.Width - child.ItemWidth + child.Offset.X;
child.Top = top + child.DesiredSize.Height / 2 - child.ItemHeight / 2 + child.Offset.Y;
child.Left = right - child.Spacing.Width - child.ItemWidth + child.Offset.X - child.RootNode.Offset.X;
child.Top = top + child.DesiredSize.Height / 2 - child.ItemHeight / 2 + child.Offset.Y - child.RootNode.Offset.Y;
child.DesiredPosition = new PointBase(right - child.Spacing.Width - child.ItemWidth, top + child.DesiredSize.Height / 2 - child.ItemHeight / 2);
top += child.DesiredSize.Height;

View File

@@ -124,8 +124,8 @@ namespace AIStudio.Wpf.Mind.Models
public LinkInfoItem(LinkInfo linkinfo)
{
Url = linkinfo.Url;
Text = linkinfo.Text;
Url = linkinfo?.Url;
Text = linkinfo?.Text;
}
[XmlAttribute]
@@ -152,8 +152,8 @@ namespace AIStudio.Wpf.Mind.Models
public ImageInfoItem(ImageInfo imageInfo)
{
Url = imageInfo.Url;
Text = imageInfo.Text;
Url = imageInfo?.Url;
Text = imageInfo?.Text;
}
public string Url

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Windows;
using System.Xml.Serialization;
using AIStudio.Wpf.DiagramDesigner;
@@ -69,8 +70,22 @@ namespace AIStudio.Wpf.Flowchart.Models
mindNode.Spacing = Spacing;
mindNode.Offset = Offset;
mindNode.IsExpanded = IsExpanded;
mindNode.LinkInfo = new LinkInfo(LinkInfoModel?.Url, LinkInfoModel?.Text);
mindNode.ImageInfo = new ImageInfo(ImageInfoModel?.Url, ImageInfoModel?.Text);
if (string.IsNullOrEmpty(LinkInfoModel?.Url) && string.IsNullOrEmpty(LinkInfoModel?.Text))
{
mindNode.LinkInfo = null;
}
else
{
mindNode.LinkInfo = new LinkInfo(LinkInfoModel?.Url, LinkInfoModel?.Text);
}
if (string.IsNullOrEmpty(ImageInfoModel?.Url) && string.IsNullOrEmpty(ImageInfoModel?.Text))
{
mindNode.ImageInfo = null;
}
else
{
mindNode.ImageInfo = new ImageInfo(ImageInfoModel?.Url, ImageInfoModel?.Text);
}
mindNode.Remark = Remark;
mindNode.Priority = Priority;
mindNode.Rate = Rate;
@@ -82,8 +97,6 @@ namespace AIStudio.Wpf.Flowchart.Models
mindNode.InitLayout(false);
return mindNode;
}
}
public class LinkInfoModel
@@ -95,8 +108,8 @@ namespace AIStudio.Wpf.Flowchart.Models
public LinkInfoModel(LinkInfo linkinfo)
{
Url = linkinfo.Url;
Text = linkinfo.Text;
Url = linkinfo?.Url;
Text = linkinfo?.Text;
}
public string Url
@@ -119,8 +132,8 @@ namespace AIStudio.Wpf.Flowchart.Models
public ImageInfoModel(ImageInfo imageInfo)
{
Url = imageInfo.Url;
Text = imageInfo.Text;
Url = imageInfo?.Url;
Text = imageInfo?.Text;
}
public string Url

View File

@@ -751,7 +751,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
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))
{
@@ -759,7 +758,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
}
else if (item.ParentId == Guid.Empty)
{
item.Offset = new PointBase(OffsetX, OffsetX);
//item.Offset = new PointBase(item.Offset.X - OffsetX, item.Offset.Y - OffsetY);
parents.Add(item);
item.InitLayout(false);
}
@@ -1145,12 +1144,15 @@ namespace AIStudio.Wpf.Mind.ViewModels
private void Move(MindNode rootitem, double? left, double? top)
{
if (left == null)
left = (PageSize.Width - rootitem.ItemWidth) / 2;
if (top == null)
top = (PageSize.Height - rootitem.ItemHeight) / 2;
var offset = rootitem.Offset;
rootitem.Left = left.Value;
rootitem.Top = top.Value;
rootitem.Offset = offset;
rootitem?.LayoutUpdated();
FitViewModel = new FitViewModel() { BoundingRect = rootitem.GetBounds() };
}
@@ -1354,7 +1356,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
item.IsSelected = false;
}
});
}
}
}
#endregion

View File

@@ -108,7 +108,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
public void ThemeChange()
{
MindThemeHelper.ThemeChange(this, MindThemeModel);
}
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
@@ -119,8 +119,22 @@ namespace AIStudio.Wpf.Mind.ViewModels
Spacing = designer.Spacing;
Offset = designer.Offset;
IsExpanded = designer.IsExpanded;
LinkInfo = new LinkInfo(designer.LinkInfoItem?.Url, designer.LinkInfoItem?.Text);
ImageInfo = new ImageInfo(designer.ImageInfoItem?.Url, designer.ImageInfoItem?.Text);
if (string.IsNullOrEmpty(designer.LinkInfoItem?.Url) && string.IsNullOrEmpty(designer.LinkInfoItem?.Text))
{
LinkInfo = null;
}
else
{
LinkInfo = new LinkInfo(designer.LinkInfoItem?.Url, designer.LinkInfoItem?.Text);
}
if (string.IsNullOrEmpty(designer.ImageInfoItem?.Url) && string.IsNullOrEmpty(designer.ImageInfoItem?.Text))
{
ImageInfo = null;
}
else
{
ImageInfo = new ImageInfo(designer.ImageInfoItem?.Url, designer.ImageInfoItem?.Text);
}
Remark = designer.Remark;
Priority = designer.Priority;
Rate = designer.Rate;
@@ -235,44 +249,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
public PointBase Offset
{
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);
}
}
get; set;
}
private ConnectorOrientation _connectorOrientation = ConnectorOrientation.Left;
@@ -547,6 +524,22 @@ namespace AIStudio.Wpf.Mind.ViewModels
switch (e.PropertyName)
{
case nameof(Left):
{
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
{
UpdateOffsetX((double)valuePropertyChangedEventArgs.OldValue, (double)valuePropertyChangedEventArgs.NewValue);
}
break;
}
case nameof(Top):
{
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
{
UpdateOffsetY((double)valuePropertyChangedEventArgs.OldValue, (double)valuePropertyChangedEventArgs.NewValue);
}
break;
}
case nameof(IsExpanded):
case nameof(ItemWidth):
case nameof(ItemHeight):