예제 #1
0
        public override void UpdateUIOverride(WorksheetUIUpdateContextBase updateContext)
        {
            this.Clear();

            WorksheetUIUpdateContext worksheetUIUpdateContext = updateContext as WorksheetUIUpdateContext;

            if (worksheetUIUpdateContext == null || !worksheetUIUpdateContext.WorksheetEditor.Selection.IsCellSelection)
            {
                return;
            }

            SheetViewport viewport = updateContext.SheetViewport;

            for (int paneIndex = 0; paneIndex < viewport.ViewportPanesCount; paneIndex++)
            {
                var       pane         = viewport.ViewportPanes[paneIndex];
                CellRange visibleRange = pane.VisibleRange;

                for (int i = visibleRange.FromIndex.RowIndex; i <= visibleRange.ToIndex.RowIndex; i++)
                {
                    CellIndex cellIndex = new CellIndex(i, Constants.ButtonColumnIndex);
                    if (this.Worksheet.UsedCellRange.Contains(cellIndex))
                    {
                        RadButton button = this.GetElementFromPool <RadButton>(pane.ViewportPaneType);
                        button.Content = "Show age";
                        button.Click  += this.Button_Click;
                        button.Tag     = cellIndex;

                        this.CalculateCellEditorSize(button, updateContext.GetVisibleCellBox(cellIndex));
                    }
                }
            }
        }
예제 #2
0
파일: Layer.cs 프로젝트: regous/ReoGrid
        public void UnregisterDataProvider(DataProvider dataprovider)
        {
            SheetViewport stport = (this.viewportController as NormalViewportController).View.Children.FirstOrDefault(x => x is SheetViewport) as SheetViewport;

            if (stport == null)
            {
                return;
            }
            CellsViewport cvport = stport.Children.FirstOrDefault(x => x is CellsViewport) as CellsViewport;

            if (cvport == null)
            {
                return;
            }
            cvport.UnregisterDataProvider(dataprovider);
        }
예제 #3
0
        internal void NextPage(PlatformGraphics pg)
        {
            this.hasMorePages = false;

            var sheet = this.CurrentWorksheet;

            if (sheet == null)
            {
                return;
            }

            // out of print areas
            if (this.CurrentRowIndex >= sheet.pageBreakRows.Count &&
                this.CurrentColIndex >= sheet.pageBreakCols.Count)
            {
                return;
            }

            int row = sheet.pageBreakRows[this.CurrentRowIndex];
            int col = sheet.pageBreakCols[this.CurrentColIndex];

            int endRow = sheet.pageBreakRows[this.CurrentRowIndex + 1];
            int endCol = sheet.pageBreakCols[this.CurrentColIndex + 1];

            switch (this.CurrentPrintSettings.PageOrder)
            {
            default:
            case PrintPageOrder.DownThenOver:
            {
                if (this.CurrentRowIndex < sheet.pageBreakRows.Count - 2)
                {
                    this.CurrentRowIndex++;

                    this.hasMorePages = true;
                }
                else
                {
                    if (this.CurrentColIndex < sheet.pageBreakCols.Count - 2)
                    {
                        this.CurrentRowIndex = 0;
                        this.CurrentColIndex++;

                        this.hasMorePages = true;
                    }
                    else
                    {
                        this.hasMorePages = false;
                    }
                }
            }
            break;

            case PrintPageOrder.OverThenDown:
            {
                if (this.CurrentColIndex < sheet.pageBreakCols.Count - 2)
                {
                    this.CurrentColIndex++;

                    this.hasMorePages = true;
                }
                else
                {
                    if (this.CurrentRowIndex < sheet.pageBreakRows.Count - 2)
                    {
                        this.CurrentColIndex = 0;
                        this.CurrentRowIndex++;

                        this.hasMorePages = true;
                    }
                    else
                    {
                        this.hasMorePages = false;
                    }
                }
            }
            break;
            }

            if (this.DrawingContext.Graphics == null)
            {
#if WINFORM
                this.DrawingContext.Graphics = new unvell.ReoGrid.WinForm.GDIRenderer(pg);
#endif // WINFORM
            }
            else
            {
                this.DrawingContext.Graphics.Reset();
            }

            var ig = this.DrawingContext.Renderer;
            ig.PlatformGraphics = pg;

#if DEBUG
            Debug.WriteLine(string.Format("print page {0,3},{1,3} - {2,3},{3,3}", row, col, endRow, endCol));
#endif // DEBUG

            GridRegion gr = new GridRegion(row, col, endRow, endCol);

            if (this.printViewportController == null)
            {
                this.printViewportController = new ViewportController(sheet);
            }
            else
            {
                this.printViewportController.worksheet = sheet;
            }

            this.PrintViewport        = new SheetViewport(this.printViewportController);
            this.PrintViewport.Bounds = this.CurrentPaperBounds;

            // refresh cells text boundary
            sheet.IterateCells(gr.ToRange(), (_unused_r, _unused_c, cell) =>
            {
                sheet.UpdateCellTextBounds(ig, cell, DrawMode.Print, this.CurrentPrintSettings.PageScaling, Core.UpdateFontReason.ScaleChanged);
                return(true);
            });

            this.PrintViewport.VisibleRegion = gr;
            this.PrintViewport.ScaleFactor   = this.CurrentPrintSettings.PageScaling;
            this.PrintViewport.ViewStart     = new Point(sheet.cols[col].Left, sheet.rows[row].Top);
            this.PrintViewport.UpdateView();

            this.PrintViewport.Draw(this.DrawingContext);

            if (this.CurrentPrintSettings.ShowMargins)
            {
                var m = this.CurrentPaperBounds;

                var p = this.DrawingContext.Renderer.GetPen(SolidColor.Gray);

                lock (p)
                {
                    ig.DrawLine(p, m.X - 50, m.Y, m.X, m.Y);
                    ig.DrawLine(p, m.Right + 50, m.Y, m.Right, m.Y);

                    ig.DrawLine(p, m.X - 50, m.Bottom, m.X, m.Bottom);
                    ig.DrawLine(p, m.Right + 50, m.Bottom, m.Right, m.Bottom);

                    ig.DrawLine(p, m.X, m.Y - 50, m.X, m.Y);
                    ig.DrawLine(p, m.X, m.Bottom + 50, m.X, m.Bottom);

                    ig.DrawLine(p, m.Right, m.Y - 50, m.Right, m.Y);
                    ig.DrawLine(p, m.Right, m.Bottom + 50, m.Right, m.Bottom);
                }
            }

            if (!this.hasMorePages)
            {
                this.NextWorksheet();

                this.hasMorePages = this.CurrentWorksheet != null;
            }
        }
예제 #4
0
        internal void NextPage(PlatformGraphics pg)
        {
            this.hasMorePages = false;

            var sheet = this.CurrentWorksheet;

            if (sheet == null)
            {
                return;
            }

            // out of print areas
            if (this.CurrentRowIndex >= sheet.pageBreakRows.Count &&
                this.CurrentColIndex >= sheet.pageBreakCols.Count)
            {
                return;
            }

            int row = sheet.pageBreakRows[this.CurrentRowIndex];
            int col = sheet.pageBreakCols[this.CurrentColIndex];

            int endRow = sheet.pageBreakRows[this.CurrentRowIndex + 1];
            int endCol = sheet.pageBreakCols[this.CurrentColIndex + 1];

            switch (this.CurrentPrintSettings.PageOrder)
            {
            default:
            case PrintPageOrder.DownThenOver:
            {
                if (this.CurrentRowIndex < sheet.pageBreakRows.Count - 2)
                {
                    this.CurrentRowIndex++;

                    this.hasMorePages = true;
                }
                else
                {
                    if (this.CurrentColIndex < sheet.pageBreakCols.Count - 2)
                    {
                        this.CurrentRowIndex = 0;
                        this.CurrentColIndex++;

                        this.hasMorePages = true;
                    }
                    else
                    {
                        this.hasMorePages = false;
                    }
                }
            }
            break;

            case PrintPageOrder.OverThenDown:
            {
                if (this.CurrentColIndex < sheet.pageBreakCols.Count - 2)
                {
                    this.CurrentColIndex++;

                    this.hasMorePages = true;
                }
                else
                {
                    if (this.CurrentRowIndex < sheet.pageBreakRows.Count - 2)
                    {
                        this.CurrentColIndex = 0;
                        this.CurrentRowIndex++;

                        this.hasMorePages = true;
                    }
                    else
                    {
                        this.hasMorePages = false;
                    }
                }
            }
            break;
            }

#if WINFORM
            // Always need a fresh GDIRenderer because the cachedGraphics of the used one is disposed
            if (this.DrawingContext.Graphics is WinForm.GDIRenderer renderer)
            {
                renderer.Dispose();
            }
            this.DrawingContext.Graphics = new WinForm.GDIRenderer(pg);
#else
            if (this.DrawingContext.Graphics != null)
#endif // WINFORM
            {
                this.DrawingContext.Graphics.Reset();
            }

            var ig = this.DrawingContext.Renderer;
            ig.PlatformGraphics = pg;

#if DEBUG
            Debug.WriteLine(string.Format("print page {0,3},{1,3} - {2,3},{3,3}", row, col, endRow, endCol));
#endif // DEBUG

            GridRegion gr = new GridRegion(row, col, endRow, endCol);

            if (this.printViewportController == null)
            {
                this.printViewportController = new ViewportController(sheet);
            }
            else
            {
                this.printViewportController.worksheet = sheet;
            }

            this.PrintViewport        = new SheetViewport(this.printViewportController);
            this.PrintViewport.Bounds = this.CurrentPaperBounds;

            this.PrintViewport.VisibleRegion = gr;
            this.PrintViewport.ScaleFactor   = this.CurrentPrintSettings.PageScaling;
            this.PrintViewport.ViewStart     = new Point(sheet.cols[col].Left, sheet.rows[row].Top);
            this.PrintViewport.UpdateView();

            this.PrintViewport.Draw(this.DrawingContext);

            if (this.CurrentPrintSettings.ShowMargins)
            {
                var m = this.CurrentPaperBounds;

                var p = this.DrawingContext.Renderer.GetPen(SolidColor.Gray);

                lock (p)
                {
                    ig.DrawLine(p, m.X - 50, m.Y, m.X, m.Y);
                    ig.DrawLine(p, m.Right + 50, m.Y, m.Right, m.Y);

                    ig.DrawLine(p, m.X - 50, m.Bottom, m.X, m.Bottom);
                    ig.DrawLine(p, m.Right + 50, m.Bottom, m.Right, m.Bottom);

                    ig.DrawLine(p, m.X, m.Y - 50, m.X, m.Y);
                    ig.DrawLine(p, m.X, m.Bottom + 50, m.X, m.Bottom);

                    ig.DrawLine(p, m.Right, m.Y - 50, m.Right, m.Y);
                    ig.DrawLine(p, m.Right, m.Bottom + 50, m.Right, m.Bottom);
                }
            }

            if (!this.hasMorePages)
            {
                this.NextWorksheet();

                this.hasMorePages = this.CurrentWorksheet != null;
            }
        }