mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-04-01 14:46:36 +08:00
可以切换MindType
This commit is contained in:
@@ -11,22 +11,27 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
{
|
||||
MindType MindType
|
||||
{
|
||||
get;set;
|
||||
get; set;
|
||||
}
|
||||
|
||||
MindNode RootItem
|
||||
{
|
||||
get;
|
||||
}
|
||||
|
||||
SimpleCommand AddParentCommand
|
||||
{
|
||||
get;
|
||||
get;
|
||||
}
|
||||
|
||||
SimpleCommand AddChildCommand
|
||||
{
|
||||
get;
|
||||
get;
|
||||
}
|
||||
|
||||
SimpleCommand AddPeerCommand
|
||||
{
|
||||
get;
|
||||
get;
|
||||
}
|
||||
|
||||
SimpleCommand DeleteSelfCommand
|
||||
@@ -52,6 +57,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
SimpleCommand ChangeMindThemeCommand
|
||||
{
|
||||
get;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,9 +23,21 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MindNode RootItem
|
||||
{
|
||||
get
|
||||
{
|
||||
return Items.OfType<MindNode>().FirstOrDefault();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 命令
|
||||
public SimpleCommand AddRootCommand
|
||||
{
|
||||
get; private set;
|
||||
}
|
||||
|
||||
public SimpleCommand AddParentCommand
|
||||
{
|
||||
@@ -64,7 +76,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
{
|
||||
return this._changeMindTypeCommand ?? (this._changeMindTypeCommand = new SimpleCommand(MindExecuteEnable, this.ExecutedChangeMindTypeCommand));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public SimpleCommand ChangeMindThemeCommand
|
||||
{
|
||||
@@ -115,6 +127,11 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
DeleteSelfCommand = new SimpleCommand(MindLevelEnable, ExecuteDeleteSelfCommand);
|
||||
MoveForwardCommand = new SimpleCommand(MindExecuteEnable, ExecuteMoveForwardCommand);
|
||||
MoveBackCommand = new SimpleCommand(MindExecuteEnable, ExecuteMoveBackCommand);
|
||||
|
||||
MindNode level1node = new MindNode(this) { Left = 200, Top = 200, Text = "思维导图" };
|
||||
level1node.InitLayout(true);
|
||||
Items.Add(level1node);
|
||||
level1node.IsSelected = true;
|
||||
}
|
||||
|
||||
public bool MindExecuteEnable(object para)
|
||||
@@ -130,7 +147,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
{
|
||||
if (MindExecuteEnable(obj) == false) return false;
|
||||
|
||||
return (SelectedItem as MindNode).NodeLevel != NodeLevel.Level1;
|
||||
return (SelectedItem as MindNode).NodeLevel != 0;
|
||||
}
|
||||
|
||||
#region 操作
|
||||
@@ -138,9 +155,9 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
{
|
||||
if (obj is MindType mindType)
|
||||
{
|
||||
Items.OfType<MindNode>().ToList().ForEach(item => { item.MindType = mindType; });
|
||||
|
||||
Items.OfType<MindNode>().FirstOrDefault()?.LayoutUpdated();
|
||||
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitLayout(true); });
|
||||
Items.OfType<MindNode>().ToList().ForEach(item => { item.InitConnectLayout(); });
|
||||
RootItem?.LayoutUpdated();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,7 +180,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
|
||||
if (items?.Count == 0)
|
||||
{
|
||||
var node = new MindNode(this, (NodeLevel)Math.Min((int)parent.NodeLevel + 1, (int)NodeLevel.Level3), this.MindType) { Text = "分支主题" };
|
||||
var node = new MindNode(this) { Text = "分支主题" };
|
||||
items.Add(node);
|
||||
}
|
||||
|
||||
@@ -203,7 +220,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
}
|
||||
if (items?.Count == 0)
|
||||
{
|
||||
items.Add(new MindNode(this, node.NodeLevel, this.MindType) { Text = "分支主题" });
|
||||
items.Add(new MindNode(this) { Text = "分支主题" });
|
||||
}
|
||||
|
||||
if (node.Parent is MindNode parent)
|
||||
@@ -249,7 +266,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
|
||||
if (items?.Count == 0)
|
||||
{
|
||||
var node = new MindNode(this, pear.NodeLevel, this.MindType) { Text = "分支主题" };
|
||||
var node = new MindNode(this) { Text = "分支主题" };
|
||||
items.Add(node);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,16 +25,13 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
{
|
||||
public class MindNode : DiagramItemViewModel
|
||||
{
|
||||
public MindNode(NodeLevel nodeLevel, MindType mindType = MindType.Mind) : this(null, nodeLevel, mindType)
|
||||
public MindNode() : this(null)
|
||||
{
|
||||
}
|
||||
|
||||
public MindNode(IDiagramViewModel root, NodeLevel nodeLevel, MindType mindType = MindType.Mind) : base(root)
|
||||
public MindNode(IDiagramViewModel root) : base(root)
|
||||
{
|
||||
NodeLevel = nodeLevel;
|
||||
MindType = mindType;
|
||||
|
||||
InitLayout(true);
|
||||
}
|
||||
|
||||
public MindNode(IDiagramViewModel root, SelectableItemBase designer) : base(root, designer)
|
||||
@@ -67,7 +64,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
BuildMenuOptions();
|
||||
}
|
||||
|
||||
protected void InitLayout(bool initAppearance)
|
||||
public void InitLayout(bool initAppearance)
|
||||
{
|
||||
var layout = GlobalType.AllTypes.Where(p => typeof(IMindLayout).IsAssignableFrom(p)).FirstOrDefault(p => p.Name == MindType.ToString() + "Layout");
|
||||
MindLayout = layout != null ? (System.Activator.CreateInstance(layout) as IMindLayout) : new MindLayout();
|
||||
@@ -76,6 +73,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
{
|
||||
MindLayout.Appearance(this);
|
||||
}
|
||||
this.PropertyChanged -= this.Item_PropertyChanged;
|
||||
this.PropertyChanged += this.Item_PropertyChanged;
|
||||
}
|
||||
|
||||
@@ -85,8 +83,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
|
||||
if (designerbase is MindNodeDesignerItem designer)
|
||||
{
|
||||
NodeLevel = designer.NodeLevel;
|
||||
MindType = designer.MindType;
|
||||
Spacing = designer.Spacing;
|
||||
Offset = designer.Offset;
|
||||
IsExpanded = designer.IsExpanded;
|
||||
@@ -97,8 +93,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
{
|
||||
var mindNodeModel = new MindNodeModel();
|
||||
|
||||
mindNodeModel.NodeLevel = NodeLevel;
|
||||
mindNodeModel.MindType = MindType;
|
||||
mindNodeModel.Spacing = Spacing;
|
||||
mindNodeModel.Offset = Offset;
|
||||
mindNodeModel.IsExpanded = IsExpanded;
|
||||
@@ -111,7 +105,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
{
|
||||
if (Command_Enable(obj) == false) return false;
|
||||
|
||||
return NodeLevel != NodeLevel.Level1;
|
||||
return NodeLevel != 0;
|
||||
}
|
||||
|
||||
#region 属性
|
||||
@@ -119,53 +113,36 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
[Browsable(false)]
|
||||
private NodeLevel _nodeLevel;
|
||||
public NodeLevel NodeLevel
|
||||
|
||||
public MindNode ParentNode
|
||||
{
|
||||
get
|
||||
{
|
||||
return _nodeLevel;
|
||||
return Parent as MindNode;
|
||||
}
|
||||
set
|
||||
|
||||
}
|
||||
|
||||
public int NodeLevel
|
||||
{
|
||||
get
|
||||
{
|
||||
SetProperty(ref _nodeLevel, value);
|
||||
if (ParentNode == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return ParentNode.NodeLevel + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
//public MindNode ParentNode
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return Parent as MindNode;
|
||||
// }
|
||||
|
||||
//}
|
||||
|
||||
//public int NodeLevel
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// if (ParentNode == null)
|
||||
// {
|
||||
// return 0;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return ParentNode.NodeLevel + 1;
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
private MindType _mindType;
|
||||
public MindType MindType
|
||||
{
|
||||
get
|
||||
{
|
||||
return _mindType;
|
||||
}
|
||||
set
|
||||
{
|
||||
SetProperty(ref _mindType, value);
|
||||
return (Root as IMindDiagramViewModel)?.MindType ?? MindType.Mind;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -395,14 +372,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
#region 操作
|
||||
public void AddChild(MindNode item, int index = -1)
|
||||
{
|
||||
if (this.NodeLevel == NodeLevel.Level1)
|
||||
{
|
||||
item.NodeLevel = NodeLevel.Level2;
|
||||
}
|
||||
else
|
||||
{
|
||||
item.NodeLevel = NodeLevel.Level3;
|
||||
}
|
||||
if (index >= 0)
|
||||
{
|
||||
this.Children.Insert(index, item);
|
||||
@@ -412,7 +381,9 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
this.Children.Add(item);
|
||||
}
|
||||
item.Parent = this;
|
||||
ConnectionViewModel connector = MindLayout?.GetConnectionViewModel(this, item);
|
||||
item.InitLayout(true);
|
||||
|
||||
ConnectionViewModel connector = MindLayout?.GetOrSetConnectionViewModel(this, item);
|
||||
Root?.DirectAddItemCommand.Execute(new SelectableDesignerItemViewModelBase[] { item, connector });
|
||||
connector.ZIndex = -1;
|
||||
this.IsSelected = true;
|
||||
@@ -440,6 +411,15 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void InitConnectLayout()
|
||||
{
|
||||
var connector = Root?.Items.OfType<ConnectionViewModel>().Where(p => p.IsFullConnection).FirstOrDefault(p => p.SinkConnectorInfoFully.DataItem == this);
|
||||
if (connector != null)
|
||||
{
|
||||
MindLayout?.GetOrSetConnectionViewModel(connector.SourceConnectorInfo.DataItem as MindNode, connector.SinkConnectorInfoFully.DataItem as MindNode, connector);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
@@ -458,14 +438,11 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
case nameof(NodeLevel):
|
||||
MindLayout?.Appearance(this);
|
||||
break;
|
||||
case nameof(MindType):
|
||||
InitLayout(true);
|
||||
break;
|
||||
case nameof(Left):
|
||||
{
|
||||
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
|
||||
{
|
||||
if (NodeLevel == NodeLevel.Level1)
|
||||
if (NodeLevel == 0)
|
||||
{
|
||||
LayoutUpdated();
|
||||
}
|
||||
@@ -481,7 +458,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
{
|
||||
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
|
||||
{
|
||||
if (NodeLevel == NodeLevel.Level1)
|
||||
if (NodeLevel == 0)
|
||||
{
|
||||
LayoutUpdated();
|
||||
}
|
||||
@@ -516,7 +493,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
|
||||
public MindNode GetLevel2Node()
|
||||
{
|
||||
var node = this;
|
||||
while (node.Parent is MindNode mindNode && mindNode.NodeLevel == NodeLevel.Level2)
|
||||
while (node.Parent is MindNode mindNode && mindNode.NodeLevel == 1)
|
||||
{
|
||||
node = mindNode;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user