internal TablixCornerRow(Tablix owner, int rowIndex, List <Microsoft.ReportingServices.ReportIntermediateFormat.TablixCornerCell> rowDef)
 {
     m_owner       = owner;
     m_rowIndex    = rowIndex;
     m_rowDef      = rowDef;
     m_cellROMDefs = new TablixCornerCell[rowDef.Count];
 }
Exemple #2
0
        internal ShimTableRow(Tablix owner, int rowIndex, Microsoft.ReportingServices.ReportRendering.TableRow renderRow)
            : base(owner, rowIndex)
        {
            m_cells  = new List <ShimTableCell>();
            m_height = new ReportSize(renderRow.Height);
            TableCellCollection tableCellCollection = renderRow.TableCellCollection;

            if (tableCellCollection == null)
            {
                return;
            }
            int count = tableCellCollection.Count;

            m_rowCellDefinitionMapping = new int[owner.RenderTable.Columns.Count];
            int num = 0;

            for (int i = 0; i < count; i++)
            {
                int colSpan = tableCellCollection[i].ColSpan;
                for (int j = 0; j < colSpan; j++)
                {
                    m_rowCellDefinitionMapping[num] = ((j == 0) ? i : (-1));
                    num++;
                }
                m_cells.Add(new ShimTableCell(owner, rowIndex, i, colSpan, tableCellCollection[i].ReportItem));
            }
        }
Exemple #3
0
 internal ShimTableMember(IDefinitionPath parentDefinitionPath, Tablix owner, int columnIndex, TableColumnCollection columns)
     : base(parentDefinitionPath, owner, null, columnIndex, isColumn: true)
 {
     m_column                  = columns[columnIndex];
     m_isFixedHeader           = m_column.FixedHeader;
     m_rowDefinitionStartIndex = (m_rowDefinitionEndIndex = columnIndex);
 }
 internal TablixCell(Cell cell, Tablix owner, int rowIndex, int colIndex)
 {
     m_cell        = cell;
     m_owner       = owner;
     m_rowIndex    = rowIndex;
     m_columnIndex = colIndex;
 }
 internal TablixCornerRow(Tablix owner, int rowIndex, Microsoft.ReportingServices.ReportRendering.ReportItem cornerDef)
 {
     m_owner       = owner;
     m_rowIndex    = rowIndex;
     m_cornerDef   = cornerDef;
     m_cellROMDefs = new TablixCornerCell[m_owner.Rows];
 }
Exemple #6
0
 internal TablixCornerCell(Tablix owner, int rowIndex, int colIndex, Microsoft.ReportingServices.ReportIntermediateFormat.TablixCornerCell cellDef)
 {
     m_owner       = owner;
     m_rowIndex    = rowIndex;
     m_columnIndex = colIndex;
     m_cellDef     = cellDef;
 }
 private void VisitTablix(Microsoft.ReportingServices.OnDemandReportRendering.Tablix tablixDef)
 {
     if (tablixDef.Corner != null)
     {
         TablixCornerRowCollection rowCollection = tablixDef.Corner.RowCollection;
         for (int i = 0; i < rowCollection.Count; i++)
         {
             TablixCornerRow tablixCornerRow = rowCollection[i];
             if (tablixCornerRow == null)
             {
                 continue;
             }
             for (int j = 0; j < tablixCornerRow.Count; j++)
             {
                 Microsoft.ReportingServices.OnDemandReportRendering.TablixCornerCell tablixCornerCell = tablixCornerRow[j];
                 if (tablixCornerCell != null)
                 {
                     Visit(tablixCornerCell.CellContents.ReportItem);
                 }
             }
         }
     }
     VisitTablixMemberCollection(tablixDef.ColumnHierarchy.MemberCollection, -1, isTopLevel: true);
     VisitTablixMemberCollection(tablixDef.RowHierarchy.MemberCollection, -1, isTopLevel: true);
 }
Exemple #8
0
 internal ShimTableMemberCollection(IDefinitionPath parentDefinitionPath, Tablix owner, ShimTableMember parent, Microsoft.ReportingServices.ReportRendering.TableGroup tableGroup)
     : base(parentDefinitionPath, owner, isColumnGroup: false)
 {
     m_rowDefinitionStartIndex = owner.GetCurrentMemberCellDefinitionIndex();
     m_children = CreateInnerHierarchy(owner, parent, tableGroup.GroupHeader, tableGroup.GroupFooter, tableGroup.SubGroups, tableGroup.DetailRows, ref m_dynamicSubgroupChildIndex);
     m_rowDefinitionEndIndex = owner.GetCurrentMemberCellDefinitionIndex();
 }
Exemple #9
0
 internal TablixCornerCell(Tablix owner, int rowIndex, int colIndex, Microsoft.ReportingServices.ReportRendering.ReportItem cornerReportItem)
 {
     m_owner            = owner;
     m_rowIndex         = rowIndex;
     m_columnIndex      = colIndex;
     m_cornerReportItem = cornerReportItem;
 }
        internal static ReportItem CreateItem(IReportScope reportScope, IDefinitionPath parentDefinitionPath, int indexIntoParentCollectionDef, Microsoft.ReportingServices.ReportIntermediateFormat.ReportItem reportItemDef, RenderingContext renderingContext)
        {
            ReportItem reportItem = null;

            switch (reportItemDef.ObjectType)
            {
            case ObjectType.Textbox:
                reportItem = new TextBox(reportScope, parentDefinitionPath, indexIntoParentCollectionDef, (Microsoft.ReportingServices.ReportIntermediateFormat.TextBox)reportItemDef, renderingContext);
                break;

            case ObjectType.Rectangle:
                reportItem = new Rectangle(reportScope, parentDefinitionPath, indexIntoParentCollectionDef, (Microsoft.ReportingServices.ReportIntermediateFormat.Rectangle)reportItemDef, renderingContext);
                break;

            case ObjectType.Image:
                reportItem = new Image(reportScope, parentDefinitionPath, indexIntoParentCollectionDef, (Microsoft.ReportingServices.ReportIntermediateFormat.Image)reportItemDef, renderingContext);
                break;

            case ObjectType.Line:
                reportItem = new Line(reportScope, parentDefinitionPath, indexIntoParentCollectionDef, (Microsoft.ReportingServices.ReportIntermediateFormat.Line)reportItemDef, renderingContext);
                break;

            case ObjectType.Subreport:
                reportItem = new SubReport(reportScope, parentDefinitionPath, indexIntoParentCollectionDef, (Microsoft.ReportingServices.ReportIntermediateFormat.SubReport)reportItemDef, renderingContext);
                break;

            case ObjectType.Tablix:
                reportItem = new Tablix(parentDefinitionPath, indexIntoParentCollectionDef, (Microsoft.ReportingServices.ReportIntermediateFormat.Tablix)reportItemDef, renderingContext);
                break;

            case ObjectType.Chart:
                reportItem = new Chart(parentDefinitionPath, indexIntoParentCollectionDef, (Microsoft.ReportingServices.ReportIntermediateFormat.Chart)reportItemDef, renderingContext);
                break;

            case ObjectType.GaugePanel:
                reportItem = new GaugePanel(parentDefinitionPath, indexIntoParentCollectionDef, (Microsoft.ReportingServices.ReportIntermediateFormat.GaugePanel)reportItemDef, renderingContext);
                break;

            case ObjectType.CustomReportItem:
            {
                Microsoft.ReportingServices.ReportIntermediateFormat.CustomReportItem customReportItem = (Microsoft.ReportingServices.ReportIntermediateFormat.CustomReportItem)reportItemDef;
                reportItem = new CustomReportItem(reportScope, parentDefinitionPath, indexIntoParentCollectionDef, customReportItem, renderingContext);
                if (!((CustomReportItem)reportItem).Initialize(renderingContext))
                {
                    reportItem = CreateItem(reportScope, parentDefinitionPath, customReportItem.AltReportItemIndexInParentCollectionDef, customReportItem.AltReportItem, renderingContext);
                    reportItem.ReportItemDef.RepeatedSibling = customReportItem.RepeatedSibling;
                    reportItem.ReportItemDef.RepeatWith      = customReportItem.RepeatWith;
                    ProcessAlternateCustomReportItem(customReportItem, reportItem, renderingContext);
                }
                break;
            }

            case ObjectType.Map:
                reportItem = new Map(reportScope, parentDefinitionPath, indexIntoParentCollectionDef, (Microsoft.ReportingServices.ReportIntermediateFormat.Map)reportItemDef, renderingContext);
                break;
            }
            return(reportItem);
        }
Exemple #11
0
 internal ShimTableMember(IDefinitionPath parentDefinitionPath, Tablix owner, ShimTableMember parent, int parentCollectionIndex, TableRow staticRow, KeepWithGroup keepWithGroup, bool isFixedTableHeader)
     : base(parentDefinitionPath, owner, parent, parentCollectionIndex, isColumn: false)
 {
     m_innerStaticRow          = staticRow;
     m_rowDefinitionStartIndex = owner.GetAndIncrementMemberCellDefinitionIndex();
     m_rowDefinitionEndIndex   = owner.GetCurrentMemberCellDefinitionIndex();
     m_keepWithGroup           = keepWithGroup;
     m_isFixedHeader           = isFixedTableHeader;
 }
 private static void CollectTextBoxes(Microsoft.ReportingServices.OnDemandReportRendering.Tablix tablix, PageContext pageContext, bool useForPageHFEval, Dictionary <string, List <object> > textBoxes)
 {
     if (tablix != null && useForPageHFEval && ShouldBeCollected(tablix))
     {
         TablixInstance tablixInstance = (TablixInstance)tablix.Instance;
         CollectTablixMembersContents(tablix, null, -1, TablixState.ColMembers, tablixInstance.NoRows, pageContext, useForPageHFEval: true, textBoxes);
         CollectTablixMembersContents(tablix, null, 0, TablixState.RowMembers, tablixInstance.NoRows, pageContext, useForPageHFEval: true, textBoxes);
     }
 }
Exemple #13
0
 internal ShimTableMember(IDefinitionPath parentDefinitionPath, Tablix owner, ShimTableMember parent, int parentCollectionIndex, TableRowsCollection renderRows)
     : base(parentDefinitionPath, owner, parent, parentCollectionIndex, isColumn: false)
 {
     m_rowDefinitionStartIndex = owner.GetCurrentMemberCellDefinitionIndex();
     m_isDetailGroup           = true;
     m_renderDetails           = renderRows;
     m_children = new ShimTableMemberCollection(this, (Tablix)m_owner, this, renderRows[0]);
     m_group    = new Group(owner, this);
     m_rowDefinitionEndIndex = owner.GetCurrentMemberCellDefinitionIndex();
 }
 internal ShimMatrixMember(IDefinitionPath parentDefinitionPath, Tablix owner, ShimMatrixMember parent, int parentCollectionIndex, bool isColumn, int renderCollectionIndex, ShimRenderGroups renderGroups, MatrixMemberInfoCache matrixMemberCellIndexes)
     : base(parentDefinitionPath, owner, parent, parentCollectionIndex, isColumn)
 {
     m_renderCollectionIndex          = renderCollectionIndex;
     m_currentMatrixMemberCellIndexes = matrixMemberCellIndexes;
     m_definitionStartIndex           = owner.GetCurrentMemberCellDefinitionIndex();
     m_group = new Group(owner, renderGroups, this);
     GenerateInnerHierarchy(owner, parent, isColumn, ((MatrixMember)m_group.CurrentShimRenderGroup).Children);
     m_definitionEndIndex = owner.GetCurrentMemberCellDefinitionIndex();
 }
Exemple #15
0
 internal static void AddDetailCellToCurrentPage(Microsoft.ReportingServices.OnDemandReportRendering.Tablix tablix, int colMemberIndexCell, int rowMemberIndexCell, PageContext context, bool useForPageHFEval, Interactivity interactivity)
 {
     if (rowMemberIndexCell >= 0)
     {
         TablixCell tablixCell = tablix.Body.RowCollection[rowMemberIndexCell][colMemberIndexCell];
         if (tablixCell != null && tablixCell.CellContents != null)
         {
             RegisterItem.RegisterHiddenItem(tablixCell.CellContents.ReportItem, context, useForPageHFEval, interactivity);
         }
     }
 }
 private static void CollectDetailCellContents(Microsoft.ReportingServices.OnDemandReportRendering.Tablix tablix, int colMemberIndexCell, int rowMemberIndexCell, PageContext context, bool useForPageHFEval, Dictionary <string, List <object> > textBoxes)
 {
     if (rowMemberIndexCell >= 0)
     {
         TablixCell tablixCell = tablix.Body.RowCollection[rowMemberIndexCell][colMemberIndexCell];
         if (tablixCell != null && tablixCell.CellContents != null)
         {
             CollectTextBoxes(tablixCell.CellContents.ReportItem, context, useForPageHFEval, textBoxes);
         }
     }
 }
Exemple #17
0
 internal ShimTableMember(IDefinitionPath parentDefinitionPath, Tablix owner, ShimTableMember parent, int parentCollectionIndex, ShimRenderGroups renderGroups)
     : base(parentDefinitionPath, owner, parent, parentCollectionIndex, isColumn: false)
 {
     m_rowDefinitionStartIndex = owner.GetCurrentMemberCellDefinitionIndex();
     if (renderGroups != null)
     {
         m_children = new ShimTableMemberCollection(this, (Tablix)m_owner, this, (TableGroup)renderGroups[0]);
     }
     m_group = new Group(owner, renderGroups, this);
     m_rowDefinitionEndIndex = owner.GetCurrentMemberCellDefinitionIndex();
 }
 internal ShimMatrixMember(IDefinitionPath parentDefinitionPath, Tablix owner, ShimMatrixMember parent, int parentCollectionIndex, bool isColumn, int renderCollectionIndex, MatrixMember staticOrSubtotal, bool isAfterSubtotal, MatrixMemberInfoCache matrixMemberCellIndexes)
     : base(parentDefinitionPath, owner, parent, parentCollectionIndex, isColumn)
 {
     m_renderCollectionIndex          = renderCollectionIndex;
     m_isAfterSubtotal                = isAfterSubtotal;
     m_currentMatrixMemberCellIndexes = matrixMemberCellIndexes;
     m_definitionStartIndex           = owner.GetCurrentMemberCellDefinitionIndex();
     m_staticOrSubtotal               = staticOrSubtotal;
     GenerateInnerHierarchy(owner, parent, isColumn, staticOrSubtotal.Children);
     m_definitionEndIndex = owner.GetCurrentMemberCellDefinitionIndex();
 }
Exemple #19
0
        internal ShimTableMemberCollection(IDefinitionPath parentDefinitionPath, Tablix owner, ShimTableMember parent, TableDetailRowCollection detailRows)
            : base(parentDefinitionPath, owner, isColumnGroup: false)
        {
            m_rowDefinitionStartIndex = owner.GetCurrentMemberCellDefinitionIndex();
            int count = detailRows.Count;

            m_children = new ShimTableMember[count];
            for (int i = 0; i < count; i++)
            {
                m_children[i] = new ShimTableMember(this, owner, parent, i, detailRows[i], KeepWithGroup.None, isFixedTableHeader: false);
            }
            m_rowDefinitionEndIndex = owner.GetCurrentMemberCellDefinitionIndex();
        }
Exemple #20
0
 internal ShimTableRowCollection(Tablix owner)
     : base(owner)
 {
     m_rows = new List <TablixRow>();
     AppendTableRows(owner.RenderTable.TableHeader);
     if (owner.RenderTable.TableGroups != null)
     {
         AppendTableGroups(owner.RenderTable.TableGroups[0]);
     }
     else if (owner.RenderTable.DetailRows != null)
     {
         AppendTableRows(owner.RenderTable.DetailRows[0]);
     }
     AppendTableRows(owner.RenderTable.TableFooter);
 }
Exemple #21
0
 internal InternalTablixMember(IReportScope reportScope, IDefinitionPath parentDefinitionPath, Tablix owner, TablixMember parent, Microsoft.ReportingServices.ReportIntermediateFormat.TablixMember memberDef, int index)
     : base(parentDefinitionPath, owner, parent, index)
 {
     if (memberDef.IsStatic)
     {
         m_reportScope = reportScope;
     }
     m_owner     = owner;
     m_memberDef = memberDef;
     if (m_memberDef.Grouping != null)
     {
         m_group = new Group(base.OwnerTablix, m_memberDef, this);
     }
     m_memberDef.ROMScopeInstance = ReportScope.ReportScopeInstance;
     m_memberDef.ResetVisibilityComputationCache();
 }
 private static void RegisterHiddenItem(Microsoft.ReportingServices.OnDemandReportRendering.Tablix tablix, PageContext pageContext, bool useForPageHFEval, Interactivity interactivity)
 {
     if (tablix != null)
     {
         bool flag = false;
         if (useForPageHFEval)
         {
             flag = HeaderFooterEval.AddToCurrentPage(tablix);
         }
         if (flag || interactivity != null)
         {
             TablixInstance tablixInstance = (TablixInstance)tablix.Instance;
             WalkTablix.AddMembersToCurrentPage(tablix, null, -1, WalkTablix.State.ColMembers, createDetail: false, tablixInstance.NoRows, pageContext, flag, interactivity);
             WalkTablix.AddMembersToCurrentPage(tablix, null, 0, WalkTablix.State.RowMembers, createDetail: true, tablixInstance.NoRows, pageContext, flag, interactivity);
         }
     }
 }
        internal static ReportItem CreateShim(IDefinitionPath parentDefinitionPath, int indexIntoParentCollectionDef, bool inSubtotal, Microsoft.ReportingServices.ReportRendering.ReportItem renderReportItem, RenderingContext renderingContext)
        {
            ReportItem result = null;

            if (renderReportItem is Microsoft.ReportingServices.ReportRendering.TextBox)
            {
                result = new TextBox(parentDefinitionPath, indexIntoParentCollectionDef, inSubtotal, (Microsoft.ReportingServices.ReportRendering.TextBox)renderReportItem, renderingContext);
            }
            else if (renderReportItem is Microsoft.ReportingServices.ReportRendering.Rectangle)
            {
                result = new Rectangle(parentDefinitionPath, indexIntoParentCollectionDef, inSubtotal, (Microsoft.ReportingServices.ReportRendering.Rectangle)renderReportItem, renderingContext);
            }
            else if (renderReportItem is Microsoft.ReportingServices.ReportRendering.Image)
            {
                result = new Image(parentDefinitionPath, indexIntoParentCollectionDef, inSubtotal, (Microsoft.ReportingServices.ReportRendering.Image)renderReportItem, renderingContext);
            }
            else if (renderReportItem is Microsoft.ReportingServices.ReportRendering.List)
            {
                result = new Tablix(parentDefinitionPath, indexIntoParentCollectionDef, inSubtotal, (Microsoft.ReportingServices.ReportRendering.List)renderReportItem, renderingContext);
            }
            else if (renderReportItem is Microsoft.ReportingServices.ReportRendering.Table)
            {
                result = new Tablix(parentDefinitionPath, indexIntoParentCollectionDef, inSubtotal, (Microsoft.ReportingServices.ReportRendering.Table)renderReportItem, renderingContext);
            }
            else if (renderReportItem is Microsoft.ReportingServices.ReportRendering.Matrix)
            {
                result = new Tablix(parentDefinitionPath, indexIntoParentCollectionDef, inSubtotal, (Microsoft.ReportingServices.ReportRendering.Matrix)renderReportItem, renderingContext);
            }
            else if (renderReportItem is Microsoft.ReportingServices.ReportRendering.Chart)
            {
                result = new Chart(parentDefinitionPath, indexIntoParentCollectionDef, inSubtotal, (Microsoft.ReportingServices.ReportRendering.Chart)renderReportItem, renderingContext);
            }
            else if (renderReportItem is Microsoft.ReportingServices.ReportRendering.CustomReportItem)
            {
                result = new CustomReportItem(parentDefinitionPath, indexIntoParentCollectionDef, inSubtotal, (Microsoft.ReportingServices.ReportRendering.CustomReportItem)renderReportItem, renderingContext);
            }
            else if (renderReportItem is Microsoft.ReportingServices.ReportRendering.SubReport)
            {
                result = new SubReport(parentDefinitionPath, indexIntoParentCollectionDef, inSubtotal, (Microsoft.ReportingServices.ReportRendering.SubReport)renderReportItem, renderingContext);
            }
            else if (renderReportItem is Microsoft.ReportingServices.ReportRendering.Line)
            {
                result = new Line(parentDefinitionPath, indexIntoParentCollectionDef, inSubtotal, (Microsoft.ReportingServices.ReportRendering.Line)renderReportItem, renderingContext);
            }
            return(result);
        }
 private void GenerateInnerHierarchy(Tablix owner, ShimMatrixMember parent, bool isColumn, MatrixMemberCollection children)
 {
     if (children != null)
     {
         MatrixMemberInfoCache matrixMemberInfoCache = null;
         if (m_isColumn)
         {
             matrixMemberInfoCache = ((children.MatrixHeadingDef.SubHeading == null) ? new MatrixMemberInfoCache((m_staticOrSubtotal != null) ? m_staticOrSubtotal.MemberCellIndex : AdjustedRenderCollectionIndex, -1) : new MatrixMemberInfoCache(-1, children.Count));
             m_currentMatrixMemberCellIndexes.Children[AdjustedRenderCollectionIndex] = matrixMemberInfoCache;
         }
         m_children = new ShimMatrixMemberCollection(this, owner, isColumn, this, children, matrixMemberInfoCache);
     }
     else
     {
         owner.GetAndIncrementMemberCellDefinitionIndex();
     }
 }
Exemple #25
0
        private TablixMember[] CreateInnerHierarchy(Tablix owner, ShimTableMember parent, TableHeaderFooterRows headerRows, TableHeaderFooterRows footerRows, TableGroupCollection subGroups, TableRowsCollection detailRows, ref int dynamicSubgroupChildIndex)
        {
            List <ShimTableMember> list = new List <ShimTableMember>();
            bool noKeepWith             = subGroups == null && detailRows == null;

            CreateHeaderFooter(list, headerRows, DetermineKeepWithGroup(isHeader: true, headerRows, noKeepWith), owner, parent, parent == null && owner.RenderTable.FixedHeader);
            if (subGroups != null)
            {
                dynamicSubgroupChildIndex = list.Count;
                CreateInnerDynamicGroups(list, subGroups, owner, parent);
            }
            else if (detailRows != null)
            {
                dynamicSubgroupChildIndex = list.Count;
                list.Add(new ShimTableMember(this, owner, parent, dynamicSubgroupChildIndex, detailRows));
            }
            CreateHeaderFooter(list, footerRows, DetermineKeepWithGroup(isHeader: false, footerRows, noKeepWith), owner, parent, isFixedTableHeader: false);
            return(list.ToArray());
        }
Exemple #26
0
 internal ShimTableMemberCollection(IDefinitionPath parentDefinitionPath, Tablix owner, bool isColumnGroup)
     : base(parentDefinitionPath, owner, isColumnGroup)
 {
     if (m_isColumnGroup)
     {
         int count = owner.RenderTable.Columns.Count;
         m_children = new ShimTableMember[count];
         for (int i = 0; i < count; i++)
         {
             m_children[i] = new ShimTableMember(this, owner, i, owner.RenderTable.Columns);
         }
     }
     else
     {
         m_rowDefinitionStartIndex = owner.GetCurrentMemberCellDefinitionIndex();
         m_children = CreateInnerHierarchy(owner, null, owner.RenderTable.TableHeader, owner.RenderTable.TableFooter, owner.RenderTable.TableGroups, owner.RenderTable.DetailRows, ref m_dynamicSubgroupChildIndex);
         m_rowDefinitionEndIndex = owner.GetCurrentMemberCellDefinitionIndex();
     }
 }
        internal static bool AddToCurrentPage(Microsoft.ReportingServices.OnDemandReportRendering.Tablix tablix)
        {
            TablixInstance tablixInstance = (TablixInstance)tablix.Instance;

            if (tablixInstance.NoRows)
            {
                if (tablix.NoRowsMessage != null)
                {
                    string text = null;
                    text = ((!tablix.NoRowsMessage.IsExpression) ? tablix.NoRowsMessage.Value : tablixInstance.NoRowsMessage);
                    if (text != null)
                    {
                        return(false);
                    }
                }
                if (tablix.HideStaticsIfNoRows)
                {
                    return(false);
                }
            }
            return(true);
        }
Exemple #28
0
 internal TablixBody(Tablix owner)
 {
     m_owner = owner;
 }
Exemple #29
0
 internal ShimListMemberCollection(IDefinitionPath parentDefinitionPath, Tablix owner, ListContentCollection renderListContents)
     : base(parentDefinitionPath, owner, isColumnGroup: false)
 {
     m_renderGroups = new ShimRenderGroups(renderListContents);
 }
Exemple #30
0
 internal ShimListMemberCollection(IDefinitionPath parentDefinitionPath, Tablix owner)
     : base(parentDefinitionPath, owner, isColumnGroup: true)
 {
 }