完成参数分组构建功能
This commit is contained in:
@@ -10,5 +10,11 @@ namespace Deedy.Activity
|
||||
public class ParamDefineAttribute : Attribute, IInitialSortable
|
||||
{
|
||||
public int InitialSort { get; set; } = 0;
|
||||
public ParamDefineAttribute() { }
|
||||
public string Title { get; set; } = "参数名称";
|
||||
public string Remark { get; set; } = "参数描述";
|
||||
public string Default { get; set; } = "";
|
||||
public string DesignValue { get; set; } = "";
|
||||
public string GroupName { get; set; } = "";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Security.Policy;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@@ -8,6 +10,64 @@ namespace Deedy.Activity
|
||||
{
|
||||
public class ParamGroupAttribute : Attribute, IInitialSortable
|
||||
{
|
||||
protected internal ParamGroupAttribute() { }
|
||||
public ParamGroupAttribute(string groupName, int initialSort = 0, bool canAddNew = false)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(groupName)) throw new ArgumentNullException("参数分组名称不可为「null」或「空白字符」");
|
||||
if (groupName == RuntimeParams || groupName == WorkingParams || groupName == DefaultParams) throw new ArgumentException("不可以用系统保留名称做为自定义分组名称...");
|
||||
this.GroupName = groupName;
|
||||
this.InitialSort = initialSort;
|
||||
this.CanAddNew = canAddNew;
|
||||
}
|
||||
public const string RuntimeParams = "系统参数";
|
||||
public const string WorkingParams = "工作参数";
|
||||
public const string DefaultParams = "其它参数";
|
||||
public int InitialSort { get; set; } = 0;
|
||||
private string _GroupName = "";
|
||||
public string GroupName
|
||||
{
|
||||
get
|
||||
{
|
||||
if (string.IsNullOrEmpty(_GroupName)) _GroupName = DefaultParams;
|
||||
return _GroupName;
|
||||
}
|
||||
private set
|
||||
{
|
||||
if (value == _GroupName) return;
|
||||
if (string.IsNullOrEmpty(value) || string.IsNullOrEmpty(value.Trim())) _GroupName = DefaultParams;
|
||||
else _GroupName = value;
|
||||
}
|
||||
}
|
||||
[AllowNull]
|
||||
private string _Description;
|
||||
|
||||
public string Description
|
||||
{
|
||||
get { return string.IsNullOrEmpty(_Description) ? _GroupName : _Description; }
|
||||
set { _Description = string.IsNullOrEmpty(value) ? _GroupName : value; }
|
||||
}
|
||||
|
||||
public bool CanAddNew { get; protected internal set; }
|
||||
|
||||
public ParamDefineCollection Params { get; protected internal set; } = [];
|
||||
|
||||
internal static ParamGroupAttribute CreateRuntimeGroup() => new()
|
||||
{
|
||||
GroupName = RuntimeParams,
|
||||
Description = "运行时需要的参数,自定义参数尽量不要放置到此分组中...",
|
||||
InitialSort = int.MinValue
|
||||
};
|
||||
internal static ParamGroupAttribute CreateWorkingParams() => new()
|
||||
{
|
||||
GroupName = WorkingParams,
|
||||
Description = "动作执行时的工作逻辑所需要的参数",
|
||||
InitialSort = int.MinValue + 1
|
||||
};
|
||||
internal static ParamGroupAttribute CreateDefaultGroup() => new()
|
||||
{
|
||||
GroupName = DefaultParams,
|
||||
Description = "所有未分组参数均会被默认放置到此分组中",
|
||||
InitialSort = int.MaxValue
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
@@ -38,8 +39,8 @@ namespace Deedy.Activity
|
||||
public IActionViewer? ActionViewer { get; protected internal set; }
|
||||
|
||||
public IElement RootElement => (this.ParentElement == null) ? this : this.ParentElement.RootElement;
|
||||
|
||||
public Runtime Runtime => throw new NotImplementedException();
|
||||
public Runtime? Runtime { get; protected internal set; }
|
||||
public ParamDefineCollection ParamsMapping { get; set; } = [];
|
||||
|
||||
public event PropertyChangedEventHandler? PropertyChanged;
|
||||
|
||||
|
||||
@@ -3,8 +3,10 @@ using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Documents;
|
||||
|
||||
namespace Deedy.Activity
|
||||
{
|
||||
@@ -12,6 +14,42 @@ namespace Deedy.Activity
|
||||
[DebuggerDisplay("Count = {Count}")]
|
||||
public class ParamGroupCollection : InitialSortedObservableCollection<ParamGroupAttribute>
|
||||
{
|
||||
internal ParamGroupCollection() { }
|
||||
private ParamGroupAttribute _DefaultGroup = ParamGroupAttribute.CreateDefaultGroup();
|
||||
internal ParamGroupCollection()
|
||||
{
|
||||
this.Add(ParamGroupAttribute.CreateRuntimeGroup());
|
||||
this.Add(ParamGroupAttribute.CreateWorkingParams());
|
||||
this.Add(_DefaultGroup);
|
||||
}
|
||||
public override void Add(ParamGroupAttribute item)
|
||||
{
|
||||
foreach (var oldItem in this)
|
||||
{
|
||||
if (oldItem.GroupName == item.GroupName) return;
|
||||
}
|
||||
base.Add(item);
|
||||
}
|
||||
public void AddFromType(Type type)
|
||||
{
|
||||
var pgas = type.GetCustomAttributes<ParamGroupAttribute>(true);
|
||||
foreach (var attr in pgas) this.Add(attr);
|
||||
}
|
||||
public void AppendParamDefine(ParamDefineAttribute paramDefine)
|
||||
{
|
||||
foreach (var item in this)
|
||||
{
|
||||
if (item.GroupName == paramDefine.GroupName)
|
||||
{
|
||||
item.Params.Add(paramDefine);
|
||||
return;
|
||||
}
|
||||
}
|
||||
paramDefine.GroupName = ParamGroupAttribute.DefaultParams;
|
||||
this._DefaultGroup.Params.Add(paramDefine);
|
||||
}
|
||||
public void AppendParamRange(IEnumerable<ParamDefineAttribute> paramDefines)
|
||||
{
|
||||
foreach (var paramDefine in paramDefines) this.AppendParamDefine(paramDefine);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,9 @@ namespace Deedy.Activity
|
||||
|
||||
public ElementCollection Elements { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
|
||||
|
||||
public Runtime Runtime => throw new NotImplementedException();
|
||||
public Runtime? Runtime => throw new NotImplementedException();
|
||||
|
||||
public ParamDefineCollection ParamsMapping { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
|
||||
|
||||
public event PropertyChangedEventHandler? PropertyChanged;
|
||||
|
||||
|
||||
@@ -152,15 +152,7 @@ namespace Deedy.Activity
|
||||
if (oldIndex < 0) @this.Help_Insert(element, (uint)newIndex);
|
||||
else @this.Elements.Move(oldIndex, newIndex);
|
||||
}
|
||||
/// <summary>
|
||||
/// 帮助一个IElement节点构建参数映射表
|
||||
/// </summary>
|
||||
/// <param name="element">需要构建参数映射表的Element节点</param>
|
||||
/// <param name="output">消息输出器</param>
|
||||
public static void Help_BuildParamMapping(this IElement element, Output? output = null)
|
||||
{
|
||||
//TODO:构建元素的参数映射表
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将一个元素插入到当前节点前方「前提:当前节点的父级必须是可变容器节点」
|
||||
/// </summary>
|
||||
|
||||
@@ -91,5 +91,32 @@ namespace Deedy.Activity
|
||||
}
|
||||
[UnsafeAccessor(UnsafeAccessorKind.Method, Name = "set_ParentElement")]
|
||||
private static extern void ActionSetter_ParentElement(BasalAction action, IElement? value);
|
||||
/// <summary>
|
||||
/// 帮助一个IElement节点构建参数映射表
|
||||
/// </summary>
|
||||
/// <param name="element">需要构建参数映射表的Element节点</param>
|
||||
/// <param name="output">消息输出器</param>
|
||||
public static void Help_BuildParamMapping(this IElement element, Output? output = null)
|
||||
{
|
||||
//TODO:构建元素的参数映射表
|
||||
if (element == null) return;
|
||||
if (element.ParamsMapping == null) element.ParamsMapping = new();
|
||||
}
|
||||
/// <summary>
|
||||
/// 构建一个元素的参数分组,为设计器准备的辅助方法
|
||||
/// </summary>
|
||||
/// <param name="element"></param>
|
||||
/// <param name="output"></param>
|
||||
/// <returns></returns>
|
||||
public static ParamGroupCollection Help_BuildParamGroup(this IElement element, Output? output = null)
|
||||
{
|
||||
ParamGroupCollection result = new();
|
||||
if (element != null)
|
||||
{
|
||||
result.AddFromType(element.GetType());
|
||||
result.AppendParamRange(element.ParamsMapping);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
@@ -8,7 +9,7 @@ namespace Deedy.Activity
|
||||
{
|
||||
public interface IActivity
|
||||
{
|
||||
public Runtime Runtime { get; }
|
||||
public Runtime? Runtime { get; }
|
||||
public void ReadyToWorking(IElement? element = null, Output? output = null);
|
||||
public void ReadyToEditing(Runtime runtime);
|
||||
public void ReadyToRunning(Runtime runtime);
|
||||
|
||||
@@ -19,6 +19,8 @@ namespace Deedy.Activity
|
||||
public int DepthLevel { get; }
|
||||
public IElement? ParentElement { get; }
|
||||
public IElement RootElement { get; }
|
||||
public ParamDefineCollection ParamsMapping { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 将当前节点链接到一个节点上
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user