public virtual XTreeMenuInfo GetMenu(XGetTreeMenuRequest request, IXExecutionContext context, XTreePageInfoStd treePage) { XTreeStructInfo treeStructInfo = treePage.TreeStruct; XTreeLevelInfoIT treelevel = treeStructInfo.Executor.GetTreeLevel(treeStructInfo, request.Params, request.Path); XTreeMenuInfo treemenu = treelevel.GetMenu(request, context); if (treemenu == null) { treemenu = treePage.DefaultLevelMenu.GetMenu(treelevel, request, context); } return(treemenu); }
public XTreeLevelInfoITRef(XTreeStructInfo ownerTreeStruct, XTreeLevelInfoIT levelInfo) { LevelInfo = levelInfo; m_ownerTreeStruct = ownerTreeStruct; m_children = new XTreeLevelInfoITRef[levelInfo.ChildTreeLevelsInfoMetadata.Length]; int i = -1; foreach (XTreeLevelInfoIT childLevelInfo in levelInfo.ChildTreeLevelsInfoMetadata) { m_children[++i] = new XTreeLevelInfoITRef(this, childLevelInfo); } }
/// <summary> /// Возвращает метаописание уровня (i:tree-level) иерархии, соответствующего "пути" /// </summary> /// <returns>Объект-описатель уровня иерархии</returns> public virtual XTreeLevelInfoIT GetTreeLevel(XTreeStructInfo treeStruct, XParamsCollection treeParams, XTreePath treePath) { string[] nodesTypes = treePath.GetNodeTypes(); string sIgnoreType = String.Empty; // наименование игнорируемого типа из переданного пути (в случае рекурсии) XTreeLevelInfoIT treelevel = null; XTreeLevelInfoIT[] treelevels; bool bFound; for (int i = nodesTypes.Length - 1; i >= 0; i--) { if (sIgnoreType != nodesTypes[i]) { bFound = false; if (treelevel == null) { treelevels = getRootsInternal(treeStruct, treeParams, treePath); } else { treelevels = treelevel.GetChildTreeLevelsRuntime(treeParams); } foreach (XTreeLevelInfoIT childLevel in treelevels) { if (childLevel.ObjectType == nodesTypes[i]) { treelevel = childLevel; bFound = true; break; } } if (!bFound) { throw new XTreeStructException("Не найдено описания уровня иерархии, соответствующего заданному пути"); } // если у текущего уровня стоит признак рекурсии, то надо пропускать все // последующие типы в пути до тех пор, пока не встретится другой тип: if (treelevel.IsRecursive) { sIgnoreType = nodesTypes[i]; } else { sIgnoreType = String.Empty; } } } return(treelevel); }
protected virtual XTreeLevelInfoIT[] getRootsInternal(XTreeStructInfo treeStruct, XParamsCollection treeParams, XTreePath treePath) { return(treeStruct.RootTreeLevels); }
public virtual XTreeLevelInfoIT[] GetRoots(XTreeStructInfo treeStruct, XParamsCollection treeParams) { return(getRootsInternal(treeStruct, treeParams, null)); }
public XTreeLevelInfoITRef(XTreeLevelInfoITRef parent, XTreeLevelInfoIT levelInfo) { LevelInfo = levelInfo; m_parent = parent; m_ownerTreeStruct = parent.OwnerTreeStruct; }