This commit is contained in:
艾竹
2023-03-26 23:23:34 +08:00
parent 90e94a7ec0
commit 43b5d82fae
31 changed files with 1692 additions and 518 deletions

View File

@@ -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;
}
}
}