Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
 protected virtual XTreeLevelInfoIT[] getRootsInternal(XTreeStructInfo treeStruct, XParamsCollection treeParams, XTreePath treePath)
 {
     return(treeStruct.RootTreeLevels);
 }
Beispiel #5
0
 public virtual XTreeLevelInfoIT[] GetRoots(XTreeStructInfo treeStruct, XParamsCollection treeParams)
 {
     return(getRootsInternal(treeStruct, treeParams, null));
 }
Beispiel #6
0
 public XTreeLevelInfoITRef(XTreeLevelInfoITRef parent, XTreeLevelInfoIT levelInfo)
 {
     LevelInfo         = levelInfo;
     m_parent          = parent;
     m_ownerTreeStruct = parent.OwnerTreeStruct;
 }