mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-18 07:26:36 +08:00
do redo
This commit is contained in:
@@ -87,8 +87,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
MoveBackCommand = (Root as IMindDiagramViewModel)?.MoveBackCommand;
|
||||
BuildMenuOptions();
|
||||
Tags = new ObservableCollection<string>();
|
||||
LinkInfo = new LinkInfo();
|
||||
ImageInfo = new ImageInfo();
|
||||
}
|
||||
|
||||
protected override void InitNew()
|
||||
@@ -103,14 +101,14 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
|
||||
this.PropertyChanged -= this.Item_PropertyChanged;
|
||||
IsInnerConnector = true;
|
||||
MindLayout.Appearance(this, MindThemeModel, initAppearance);
|
||||
MindLayout.Appearance(this, MindThemeModel, initAppearance);
|
||||
this.PropertyChanged += this.Item_PropertyChanged;
|
||||
}
|
||||
|
||||
public void ThemeChange()
|
||||
{
|
||||
MindThemeHelper.ThemeChange(this, MindThemeModel);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
|
||||
{
|
||||
@@ -121,8 +119,8 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
Spacing = designer.Spacing;
|
||||
Offset = designer.Offset;
|
||||
IsExpanded = designer.IsExpanded;
|
||||
LinkInfo = new LinkInfo() { Link = designer.LinkInfoItem?.Link, Text = designer.LinkInfoItem?.Text };
|
||||
ImageInfo = new ImageInfo() { Url = designer.ImageInfoItem?.Url, Text = designer.ImageInfoItem?.Text };
|
||||
LinkInfo = new LinkInfo(designer.LinkInfoItem?.Url, designer.LinkInfoItem?.Text);
|
||||
ImageInfo = new ImageInfo(designer.ImageInfoItem?.Url, designer.ImageInfoItem?.Text);
|
||||
Remark = designer.Remark;
|
||||
Priority = designer.Priority;
|
||||
Rate = designer.Rate;
|
||||
@@ -306,15 +304,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
}
|
||||
set
|
||||
{
|
||||
if (_linkInfo != null)
|
||||
{
|
||||
_linkInfo.PropertyChanged -= Item_PropertyChanged;
|
||||
}
|
||||
SetProperty(ref _linkInfo, value);
|
||||
if (_linkInfo != null)
|
||||
{
|
||||
_linkInfo.PropertyChanged += Item_PropertyChanged; ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -327,15 +317,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
}
|
||||
set
|
||||
{
|
||||
if (_imageInfo != null)
|
||||
{
|
||||
_imageInfo.PropertyChanged -= Item_PropertyChanged;
|
||||
}
|
||||
SetProperty(ref _imageInfo, value);
|
||||
if (_imageInfo != null)
|
||||
{
|
||||
_imageInfo.PropertyChanged += Item_PropertyChanged;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -491,52 +473,35 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
#endregion
|
||||
|
||||
#region 操作
|
||||
public void AddChild(MindNode item, int index = -1)
|
||||
public void AddTo(MindNode parent, int index = -1, bool isSelected = true)
|
||||
{
|
||||
//parent为空,为根节点
|
||||
if (index >= 0)
|
||||
{
|
||||
this.Children.Insert(index, item);
|
||||
parent?.Children.Insert(index, this);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Children.Add(item);
|
||||
parent?.Children.Add(this);
|
||||
}
|
||||
item.Parent = this;
|
||||
item.ParentId = this.Id;
|
||||
item.InitLayout(true);//因为节点的层级不同的样式,所以需要Parent确定后才能初始化
|
||||
this.Parent = parent;
|
||||
this.ParentId = parent?.Id ?? Guid.Empty;
|
||||
this.InitLayout(true);//因为节点的层级不同的样式,所以需要Parent确定后才能初始化
|
||||
this.InitConnectLayout();
|
||||
|
||||
ConnectionViewModel connector = MindLayout?.GetOrSetConnectionViewModel(this, item);
|
||||
Root?.Add(new SelectableDesignerItemViewModelBase[] { item, connector });
|
||||
connector.ZIndex = -1;
|
||||
connector.IsSelected = false;
|
||||
item.IsSelected = false;
|
||||
this.IsSelected = true;
|
||||
}
|
||||
Root?.Add(this);
|
||||
|
||||
public void RemoveChild(MindNode item, bool removeall = false)
|
||||
{
|
||||
item.PropertyChanged -= Item_PropertyChanged;
|
||||
|
||||
this.Children.Remove(item);
|
||||
|
||||
var connectors = Root?.Items.OfType<ConnectionViewModel>().Where(p => p.SinkConnectorInfoFully?.DataItem == item).ToList();
|
||||
|
||||
Root?.Remove(item);
|
||||
Root?.Remove(connectors);
|
||||
|
||||
if (removeall)
|
||||
if (isSelected)
|
||||
{
|
||||
if (item.Children?.Count > 0)
|
||||
if (parent != null)
|
||||
{
|
||||
foreach (var child in item.Children.ToList())
|
||||
{
|
||||
item.RemoveChild(child, removeall);
|
||||
}
|
||||
parent.IsSelected = false;
|
||||
}
|
||||
this.IsSelected = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void Remove(bool removeall = false)
|
||||
public void RemoveFrom()
|
||||
{
|
||||
this.PropertyChanged -= Item_PropertyChanged;
|
||||
if (this.ParentNode != null)
|
||||
@@ -548,16 +513,16 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
Root?.Remove(this);
|
||||
Root?.Remove(connectors);
|
||||
|
||||
if (removeall)
|
||||
{
|
||||
if (this.Children?.Count > 0)
|
||||
{
|
||||
foreach (var child in this.Children.ToList())
|
||||
{
|
||||
child.Remove(removeall);
|
||||
}
|
||||
}
|
||||
}
|
||||
//if (removeall)
|
||||
//{
|
||||
// if (this.Children?.Count > 0)
|
||||
// {
|
||||
// foreach (var child in this.Children.ToList())
|
||||
// {
|
||||
// child.RemoveFrom(removeall);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
public void InitConnectLayout()
|
||||
@@ -570,16 +535,15 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
else if (ParentNode != null)
|
||||
{
|
||||
connector = MindLayout?.GetOrSetConnectionViewModel(ParentNode, this, null);
|
||||
Root?.Add(new SelectableDesignerItemViewModelBase[] { connector });
|
||||
Root?.Add(new SelectableDesignerItemViewModelBase[] { connector });
|
||||
connector.ZIndex = -1;
|
||||
connector.IsSelected = false;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (GetLevel1Node()?.LayoutUpdating == true) return;
|
||||
if (GetLevel1Node()?.LayoutUpdating == true) return;
|
||||
|
||||
switch (e.PropertyName)
|
||||
{
|
||||
@@ -601,7 +565,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
case nameof(Rate):
|
||||
case nameof(Priority):
|
||||
case nameof(Remark):
|
||||
case nameof(LinkInfo.Link):
|
||||
{
|
||||
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
|
||||
{
|
||||
@@ -616,16 +579,31 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
}
|
||||
break;
|
||||
}
|
||||
case nameof(ImageInfo.Url):
|
||||
case nameof(LinkInfo):
|
||||
{
|
||||
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
|
||||
{
|
||||
if (string.IsNullOrEmpty(valuePropertyChangedEventArgs.OldValue?.ToString()) && !string.IsNullOrEmpty(valuePropertyChangedEventArgs.NewValue?.ToString()))
|
||||
if (valuePropertyChangedEventArgs.OldValue == null && valuePropertyChangedEventArgs.NewValue != null)
|
||||
{
|
||||
ItemWidth += 24;
|
||||
}
|
||||
else if (valuePropertyChangedEventArgs.OldValue != null && valuePropertyChangedEventArgs.NewValue == null)
|
||||
{
|
||||
ItemWidth -= 24;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case nameof(ImageInfo):
|
||||
{
|
||||
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
|
||||
{
|
||||
if (valuePropertyChangedEventArgs.OldValue == null && valuePropertyChangedEventArgs.NewValue != null)
|
||||
{
|
||||
ItemWidth = Math.Max(ItemWidth, 160);
|
||||
ItemHeight += 135;
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(valuePropertyChangedEventArgs.OldValue?.ToString()) && string.IsNullOrEmpty(valuePropertyChangedEventArgs.NewValue?.ToString()))
|
||||
else if (valuePropertyChangedEventArgs.OldValue != null && valuePropertyChangedEventArgs.NewValue == null)
|
||||
{
|
||||
ItemHeight -= 135;
|
||||
}
|
||||
@@ -664,6 +642,32 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
return node;
|
||||
}
|
||||
|
||||
public List<MindNode> GetParent()
|
||||
{
|
||||
var node = this;
|
||||
List<MindNode> mindnode = new List<MindNode>();
|
||||
while (node.ParentNode != null)
|
||||
{
|
||||
mindnode.Add(node.ParentNode);
|
||||
node = node.ParentNode;
|
||||
}
|
||||
return mindnode;
|
||||
}
|
||||
|
||||
public List<MindNode> GetChildren()
|
||||
{
|
||||
List<MindNode> mindnode = new List<MindNode>();
|
||||
if (this.Children != null)
|
||||
{
|
||||
foreach (var child in this.Children)
|
||||
{
|
||||
mindnode.Add(child);
|
||||
mindnode.AddRange(child.GetChildren());
|
||||
}
|
||||
}
|
||||
return mindnode;
|
||||
}
|
||||
|
||||
protected void UpdateOffsetX(double oldvalue, double newvalue)
|
||||
{
|
||||
Offset += new VectorBase(newvalue - oldvalue, 0);
|
||||
@@ -682,61 +686,63 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class LinkInfo : BindableBase
|
||||
public class LinkInfo
|
||||
{
|
||||
private string _link;
|
||||
public string Link
|
||||
public string Url
|
||||
{
|
||||
get
|
||||
{
|
||||
return _link;
|
||||
}
|
||||
set
|
||||
{
|
||||
SetProperty(ref _link, value);
|
||||
}
|
||||
get; set;
|
||||
}
|
||||
|
||||
private string _text;
|
||||
public string Text
|
||||
{
|
||||
get
|
||||
{
|
||||
return _text;
|
||||
}
|
||||
set
|
||||
{
|
||||
SetProperty(ref _text, value);
|
||||
}
|
||||
get; set;
|
||||
}
|
||||
|
||||
public LinkInfo()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public LinkInfo(string url, string text)
|
||||
{
|
||||
Url = url;
|
||||
Text = text;
|
||||
}
|
||||
|
||||
public LinkInfo(LinkInfo info)
|
||||
{
|
||||
Url = info?.Url;
|
||||
Text = info?.Text;
|
||||
}
|
||||
}
|
||||
|
||||
public class ImageInfo : BindableBase
|
||||
public class ImageInfo
|
||||
{
|
||||
private string _url;
|
||||
public string Url
|
||||
{
|
||||
get
|
||||
{
|
||||
return _url;
|
||||
}
|
||||
set
|
||||
{
|
||||
SetProperty(ref _url, value);
|
||||
}
|
||||
get; set;
|
||||
}
|
||||
|
||||
private string _text;
|
||||
public string Text
|
||||
{
|
||||
get
|
||||
{
|
||||
return _text;
|
||||
}
|
||||
set
|
||||
{
|
||||
SetProperty(ref _text, value);
|
||||
}
|
||||
get; set;
|
||||
}
|
||||
|
||||
public ImageInfo()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public ImageInfo(string url, string text)
|
||||
{
|
||||
Url = url;
|
||||
Text = text;
|
||||
}
|
||||
|
||||
public ImageInfo(ImageInfo info)
|
||||
{
|
||||
Url = info?.Url;
|
||||
Text = info?.Text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user