protected override void CreateBricksForRecord(XRDataRecord record, PanelBrick parentBrick, bool isHeader, ref float actualHeight)
        {
            XRTreeListNode     node = record as XRTreeListNode;
            PrintNodeEventArgs args = new PrintNodeEventArgs(node);

            if (!isHeader)
            {
                TreeList.OnPrintNode(args);
            }

            if (args.SuppressType == NodeSuppressType.Leave)
            {
                int nodeLevel = node.Level;

                TreeListNodeBrick nodeBrick = new TreeListNodeBrick(TreeList, (DataContainerBrick)parentBrick, isHeader);
                nodeBrick.Style     = XRControlStyle.Default.Clone() as XRControlStyle;
                nodeBrick.Separable = false;

                RecordPrintCache cache = new TreeListNodePrintCache(nodeBrick, node.Level);

                List <VisualBrick>   childBricks    = new List <VisualBrick>();
                List <XRFieldHeader> visibleHeaders = TreeList.VisibleHeaders;

                for (int i = 0; i < visibleHeaders.Count; i++)
                {
                    VisualBrick valueBrick = CreateCellBrick(TreeList, parentBrick, node, i, isHeader);
                    childBricks.Add(valueBrick);
                }

                CorrectBrickBounds(nodeBrick, childBricks, nodeLevel * TreeList.NodeIndent, actualHeight);
                float nodeHeight = nodeBrick.Rect.Height;

                VisualBrickHelper.SetBrickBounds(nodeBrick, nodeBrick.Rect, TreeList.Dpi);

                parentBrick.Bricks.Add(nodeBrick);

                actualHeight += nodeHeight;

                if (!IsDesignMode)
                {
                    if (isHeader)
                    {
                        ((DataContainerBrick)parentBrick).PrintCache.HeaderCache = cache;
                    }
                    else
                    {
                        ((DataContainerBrick)parentBrick).PrintCache.RecordsCache.Add(cache);
                    }
                }
            }

            if (args.SuppressType != NodeSuppressType.SuppressWithChildren)
            {
                foreach (XRTreeListNode childNode in node.Nodes)
                {
                    CreateBricksForRecord(childNode, parentBrick, isHeader, ref actualHeight);
                }
            }
        }
Esempio n. 2
0
        protected override bool AfterPrintOnPage(IList <int> indices, RectangleF brickBounds, RectangleF clipRect, Page page, int pageIndex, int pageCount, Action <Brick, RectangleF> callback)
        {
            bool result = base.AfterPrintOnPage(indices, brickBounds, clipRect, page, pageIndex, pageCount, callback);

            if (!IsHeaderBrick)
            {
                TreeListNodePrintCache currentCache = parentBrick.PrintCache.GetCacheByBrick(this) as TreeListNodePrintCache;
                int cacheIndex = parentBrick.PrintCache.RecordsCache.IndexOf(currentCache);

                if (cacheIndex > 0)
                {
                    TreeListNodePrintCache prevCache = parentBrick.PrintCache.RecordsCache[cacheIndex - 1] as TreeListNodePrintCache;
                    if (currentCache.NodeLevel < prevCache.NodeLevel)
                    {
                        ((TreeListNodeBrick)currentCache.Brick).AddCellPosition(XRDataCellPosition.HigherLevel);
                        ((TreeListNodeBrick)prevCache.Brick).AddCellPosition(XRDataCellPosition.LowerLevel);
                    }
                }
            }

            return(result);
        }