代码片段
IsInStartedSubtree
bool IsInStartedSubtree(IUANode node)
{
if (node.Status == NodeStatus.Detached)
{
return false;
}
while (node != null)
{
if (node.Status == NodeStatus.Started)
{
return true;
}
node = node.Owner;
}
return false;
}
获取动态链接的 NodePath
static class DynamicLinkPath{
public static string MakeAbsolutePath(IUANode target);
public static string MakeRelativePath(IUANode startNode, IUANode targetNode);
public static string MakePath(IUANode startNode, IUANode targetNode);
}
获取两个节点间的相对路径
private static string CreateRelativePath(IUANode source, IUANode target)
{
string result = "";
var srcPath = GetCurrentProjectBrowsePath(source);
var tarPath = GetCurrentProjectBrowsePath(target);
var srcArr = srcPath.Split("/");
var tarArr = tarPath.Split("/");
var max = Math.Max(srcPath.Count(), tarPath.Count());
int i = 0;
for (; i < max; i++)
{
result = "..";
if (srcArr[i] != tarArr[i])
{
break;
}
}
for (int j = srcArr.Count() - 1; j > i; j--)
{
result = result + "/..";
}
for (int k = i; k < tarArr.Count(); k++)
{
result = result + "/" + tarArr[k];
}
return result;
}
获取节点的BrowsePath
private static string GetCurrentProjectBrowsePath(IUANode node)
{
if (node.Owner == Project.Current || node.BrowseName == "Root")
return node.BrowseName;
return GetCurrentProjectBrowsePath(node.Owner) + "/" + node.BrowseName;
}
判断变量是否有dynamiclink
if (IUAVariable.Refs.GetNode(Optix.CoreBase.ReferenceTypes.HasDynamicLink) != null)
{
Log.Warning(item.BrowseName + " has a dynamic link");
}
判断变量是否有converter
if (IUAVariable.Refs.GetNode(FTOptix.CoreBase.ReferenceTypes.HasConverter) != null)
{
Log.Warning(item.BrowseName + " has a converter");
}
根据table 的列名创建 DataGrid的列
// Create columns based on the header
foreach (var columnName in header)
{
var newDataGridColumn = InformationModel.MakeObject<DataGridColumn>(columnName);
newDataGridColumn.Title = columnName;
newDataGridColumn.DataItemTemplate = InformationModel.MakeObject<DataGridLabelItemTemplate>("DataItemTemplate");
var dynamicLink = InformationModel.MakeVariable<DynamicLink>("DynamicLink", FTOptix.Core.DataTypes.NodePath);
dynamicLink.Value = "{Item}/" + NodePath.EscapeNodePathBrowseName(columnName);
newDataGridColumn.DataItemTemplate.GetVariable("Text").Refs.AddReference(FTOptix.CoreBase.ReferenceTypes.HasDynamicLink, dynamicLink);
newDataGridColumn.OrderBy = dynamicLink.Value;
dataGrid.Columns.Add(newDataGridColumn);
lastDynamicLink = dynamicLink;
}