private void DrawData(List <RollColumn> visibleColumns)
        {
            // Prevent exceptions with small TAStudio windows
            if (visibleColumns.Count == 0)
            {
                return;
            }

            if (QueryItemText != null)
            {
                if (HorizontalOrientation)
                {
                    int startRow = FirstVisibleRow;
                    int range    = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1;

                    _renderer.PrepDrawString(_font, _foreColor);
                    int lastVisible = LastVisibleColumnIndex;
                    for (int j = FirstVisibleColumn; j <= lastVisible; j++)
                    {
                        RollColumn col       = visibleColumns[j];
                        int        colHeight = GetHColHeight(j);

                        for (int i = 0, f = 0; f < range; i++, f++)
                        {
                            f += _lagFrames[i];

                            int baseX = RowsToPixels(i) + (col.Rotatable ? CellWidth : 0);
                            int baseY = GetHColTop(j) - _vBar.Value;

                            if (!col.Rotatable)
                            {
                                Bitmap image         = null;
                                int    bitmapOffsetX = 0;
                                int    bitmapOffsetY = 0;

                                QueryItemIcon?.Invoke(f + startRow, col, ref image, ref bitmapOffsetX, ref bitmapOffsetY);

                                if (image != null)
                                {
                                    int x = baseX + CellWidthPadding + bitmapOffsetX;
                                    int y = baseY + CellHeightPadding + bitmapOffsetY;
                                    _renderer.DrawBitmap(image, new Point(x, y));
                                }
                            }

                            string text;
                            int    strOffsetX = 0;
                            int    strOffsetY = 0;
                            QueryItemText(f + startRow, col, out text, ref strOffsetX, ref strOffsetY);

                            int textWidth = _renderer.MeasureString(text, _font).Width;
                            if (col.Rotatable)
                            {
                                // Center Text
                                int textX = Math.Max(((colHeight - textWidth) / 2), CellWidthPadding) + strOffsetX;
                                int textY = CellWidthPadding + strOffsetY;
                                var point = new Point(baseX - textY, baseY + textX);

                                _renderer.PrepDrawString(_font, _foreColor, rotate: true);
                                DrawString(text, null, point);
                                _renderer.PrepDrawString(_font, _foreColor, rotate: false);
                            }
                            else
                            {
                                // Center Text
                                int textX = Math.Max(((CellWidth - textWidth) / 2), CellWidthPadding) + strOffsetX;
                                int textY = CellHeightPadding + strOffsetY;
                                var point = new Point(baseX + textX, baseY + textY);

                                DrawString(text, ColumnWidth, point);
                            }
                        }
                    }
                }
                else
                {
                    int startRow = FirstVisibleRow;
                    int range    = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1;

                    _renderer.PrepDrawString(_font, _foreColor);
                    int xPadding = CellWidthPadding + 1 - _hBar.Value;
                    for (int i = 0, f = 0; f < range; i++, f++)                     // Vertical
                    {
                        f += _lagFrames[i];
                        int lastVisible = LastVisibleColumnIndex;
                        for (int j = FirstVisibleColumn; j <= lastVisible; j++)                         // Horizontal
                        {
                            RollColumn col = visibleColumns[j];

                            string text;
                            int    strOffsetX = 0;
                            int    strOffsetY = 0;
                            Point  point      = new Point(col.Left.Value + xPadding, RowsToPixels(i) + CellHeightPadding);

                            Bitmap image         = null;
                            int    bitmapOffsetX = 0;
                            int    bitmapOffsetY = 0;

                            QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY);

                            if (image != null)
                            {
                                _renderer.DrawBitmap(image, new Point(point.X + bitmapOffsetX, point.Y + bitmapOffsetY + CellHeightPadding));
                            }

                            QueryItemText(f + startRow, visibleColumns[j], out text, ref strOffsetX, ref strOffsetY);

                            bool rePrep = false;
                            if (_selectedItems.Contains(new Cell {
                                Column = visibleColumns[j], RowIndex = f + startRow
                            }))
                            {
                                _renderer.PrepDrawString(_font, SystemColors.HighlightText);
                                rePrep = true;
                            }

                            DrawString(text, col.Width, new Point(point.X + strOffsetX, point.Y + strOffsetY));

                            if (rePrep)
                            {
                                _renderer.PrepDrawString(_font, _foreColor);
                            }
                        }
                    }
                }
            }
        }
Beispiel #2
0
        private void DrawData(PaintEventArgs e, List <RollColumn> visibleColumns)
        {
            // Prevent exceptions with small TAStudio windows
            if (visibleColumns.Count == 0)
            {
                return;
            }
            if (QueryItemText != null)
            {
                if (HorizontalOrientation)
                {
                    int startRow = FirstVisibleRow;
                    int range    = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1;

                    _gdi.PrepDrawString(_normalFont, _foreColor);
                    for (int i = 0, f = 0; f < range; i++, f++)
                    {
                        f += _lagFrames[i];
                        int LastVisible = LastVisibleColumnIndex;
                        for (int j = FirstVisibleColumn; j <= LastVisible; j++)
                        {
                            Bitmap image         = null;
                            int    x             = 0;
                            int    y             = 0;
                            int    bitmapOffsetX = 0;
                            int    bitmapOffsetY = 0;

                            QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY);

                            if (image != null)
                            {
                                x = RowsToPixels(i) + CellWidthPadding + bitmapOffsetX;
                                y = (j * CellHeight) + (CellHeightPadding * 2) + bitmapOffsetY;
                                _gdi.DrawBitmap(image, new Point(x, y), true);
                            }

                            string text;
                            int    strOffsetX = 0;
                            int    strOffsetY = 0;
                            QueryItemText(f + startRow, visibleColumns[j], out text, ref strOffsetX, ref strOffsetY);

                            // Center Text
                            x = RowsToPixels(i) + ((CellWidth - (text.Length * _charSize.Width)) / 2);
                            y = (j * CellHeight) + CellHeightPadding - _vBar.Value;
                            var point = new Point(x + strOffsetX, y + strOffsetY);

                            var rePrep = false;
                            if (j == 1)
                            {
                                if (_selectedItems.Contains(new Cell {
                                    Column = visibleColumns[j], RowIndex = i + startRow
                                }))
                                {
                                    _gdi.PrepDrawString(_rotatedFont, SystemColors.HighlightText);
                                    rePrep = true;
                                }
                                else if (j == 1)
                                {
                                    // 1. not sure about this; 2. repreps may be excess, but if we render one column at a time, we do need to change back after rendering the header
                                    rePrep = true;
                                    _gdi.PrepDrawString(_rotatedFont, _foreColor);
                                }
                            }

                            if (!string.IsNullOrWhiteSpace(text))
                            {
                                _gdi.DrawString(text, point);
                            }

                            if (rePrep)
                            {
                                _gdi.PrepDrawString(_normalFont, _foreColor);
                            }
                        }
                    }
                }
                else
                {
                    int startRow = FirstVisibleRow;
                    int range    = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1;

                    _gdi.PrepDrawString(_normalFont, _foreColor);
                    int xPadding = CellWidthPadding + 1 - _hBar.Value;
                    for (int i = 0, f = 0; f < range; i++, f++)                     // Vertical
                    {
                        f += _lagFrames[i];
                        int LastVisible = LastVisibleColumnIndex;
                        for (int j = FirstVisibleColumn; j <= LastVisible; j++)                         // Horizontal
                        {
                            RollColumn col = visibleColumns[j];

                            string text;
                            int    strOffsetX = 0;
                            int    strOffsetY = 0;
                            Point  point      = new Point(col.Left.Value + xPadding, RowsToPixels(i) + CellHeightPadding);

                            Bitmap image         = null;
                            int    bitmapOffsetX = 0;
                            int    bitmapOffsetY = 0;

                            QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY);

                            if (image != null)
                            {
                                _gdi.DrawBitmap(image, new Point(point.X + bitmapOffsetX, point.Y + bitmapOffsetY + CellHeightPadding), true);
                            }

                            QueryItemText(f + startRow, visibleColumns[j], out text, ref strOffsetX, ref strOffsetY);

                            bool rePrep = false;
                            if (_selectedItems.Contains(new Cell {
                                Column = visibleColumns[j], RowIndex = f + startRow
                            }))
                            {
                                _gdi.PrepDrawString(_normalFont, SystemColors.HighlightText);
                                rePrep = true;
                            }

                            if (!string.IsNullOrWhiteSpace(text))
                            {
                                _gdi.DrawString(text, new Point(point.X + strOffsetX, point.Y + strOffsetY));
                            }

                            if (rePrep)
                            {
                                _gdi.PrepDrawString(_normalFont, _foreColor);
                            }
                        }
                    }
                }
            }
        }
        private void DrawData(PaintEventArgs e, List <ListColumn> visibleColumns)
        {
            // Prevent exceptions with small windows
            if (visibleColumns.Count == 0)
            {
                return;
            }

            if (QueryItemText != null || QueryItemTextAdvanced != null)
            {
                int startRow = FirstVisibleRow;
                int range    = Math.Min(LastVisibleRow, ItemCount - 1) - startRow + 1;

                sBrush = new SolidBrush(CellFontColor);

                int xPadding = CellWidthPadding + 1 - _hBar.Value;
                for (int i = 0, f = 0; f < range; i++, f++)                 // Vertical
                {
                    //f += _lagFrames[i];
                    int LastVisible = LastVisibleColumnIndex;
                    for (int j = FirstVisibleColumn; j <= LastVisible; j++)                     // Horizontal
                    {
                        ListColumn col = visibleColumns[j];

                        string text       = "";
                        int    strOffsetX = 0;
                        int    strOffsetY = 0;
                        Point  point      = new Point(col.Left.Value + xPadding, RowsToPixels(i) + CellHeightPadding);

                        Bitmap image         = null;
                        int    bitmapOffsetX = 0;
                        int    bitmapOffsetY = 0;

                        QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY);

                        if (image != null)
                        {
                            e.Graphics.DrawImage(image, new Point(point.X + bitmapOffsetX, point.Y + bitmapOffsetY + CellHeightPadding));
                        }

                        QueryItemText?.Invoke(f + startRow, _columns.IndexOf(visibleColumns[j]), out text);
                        QueryItemTextAdvanced?.Invoke(f + startRow, visibleColumns[j], out text, ref strOffsetX, ref strOffsetY);

                        bool rePrep = false;
                        if (_selectedItems.Contains(new Cell {
                            Column = visibleColumns[j], RowIndex = f + startRow
                        }))
                        {
                            sBrush = new SolidBrush(InvertColor(CellBackgroundHighlightColor));
                            rePrep = true;
                        }

                        if (!string.IsNullOrWhiteSpace(text))
                        {
                            ResizeTextToFit(ref text, col.Width.Value, CellFont);
                            e.Graphics.DrawString(text, CellFont, sBrush, (PointF)(new Point(point.X + strOffsetX, point.Y + strOffsetY)));
                        }

                        if (rePrep)
                        {
                            sBrush = new SolidBrush(CellFontColor);
                        }
                    }
                }
            }
        }
Beispiel #4
0
        private void DrawData(List <RollColumn> visibleColumns, int firstVisibleRow, int lastVisibleRow)
        {
            if (QueryItemText == null)
            {
                return;
            }

            if (!visibleColumns.Any())
            {
                return;
            }

            int startRow = firstVisibleRow;
            int range    = Math.Min(lastVisibleRow, RowCount - 1) - startRow + 1;

            _renderer.PrepDrawString(Font, _foreColor);

            if (HorizontalOrientation)
            {
                for (int j = 0; j < visibleColumns.Count; j++)
                {
                    RollColumn col       = visibleColumns[j];
                    int        colHeight = GetHColHeight(j);

                    for (int i = 0, f = 0; f < range; i++, f++)
                    {
                        f += _lagFrames[i];

                        int baseX = RowsToPixels(i) + (col.Rotatable ? CellWidth : 0);
                        int baseY = GetHColTop(j) - _vBar.Value;

                        if (!col.Rotatable)
                        {
                            Bitmap image         = null;
                            int    bitmapOffsetX = 0;
                            int    bitmapOffsetY = 0;

                            QueryItemIcon?.Invoke(f + startRow, col, ref image, ref bitmapOffsetX, ref bitmapOffsetY);

                            if (image != null)
                            {
                                int x = baseX + CellWidthPadding + bitmapOffsetX;
                                int y = baseY + CellHeightPadding + bitmapOffsetY;
                                _renderer.DrawBitmap(image, new Point(x, y));
                            }
                        }

                        int strOffsetX = 0;
                        int strOffsetY = 0;
                        QueryItemText(f + startRow, col, out var text, ref strOffsetX, ref strOffsetY);

                        int textWidth = (int)_renderer.MeasureString(text, Font).Width;
                        if (col.Rotatable)
                        {
                            // Center Text
                            int textX = Math.Max(((colHeight - textWidth) / 2), CellWidthPadding) + strOffsetX;
                            int textY = CellWidthPadding + strOffsetY;

                            _renderer.PrepDrawString(Font, _foreColor, rotate: true);
                            DrawString(text, new Rectangle(baseX - textY, baseY + textX, 999, CellHeight));
                            _renderer.PrepDrawString(Font, _foreColor, rotate: false);
                        }
                        else
                        {
                            // Center Text
                            int textX = Math.Max(((CellWidth - textWidth) / 2), CellWidthPadding) + strOffsetX;
                            int textY = CellHeightPadding + strOffsetY;

                            DrawString(text, new Rectangle(baseX + textX, baseY + textY, MaxColumnWidth, CellHeight));
                        }
                    }
                }
            }
            else
            {
                int xPadding = CellWidthPadding + 1 - _hBar.Value;
                for (int i = 0, f = 0; f < range; i++, f++)                 // Vertical
                {
                    f += _lagFrames[i];
                    foreach (var column in visibleColumns)
                    {
                        RollColumn col = column;

                        int   strOffsetX = 0;
                        int   strOffsetY = 0;
                        Point point      = new Point(col.Left + xPadding, RowsToPixels(i) + CellHeightPadding);

                        Bitmap image         = null;
                        int    bitmapOffsetX = 0;
                        int    bitmapOffsetY = 0;

                        QueryItemIcon?.Invoke(f + startRow, column, ref image, ref bitmapOffsetX, ref bitmapOffsetY);

                        if (image != null)
                        {
                            _renderer.DrawBitmap(image, new Point(point.X + bitmapOffsetX, point.Y + bitmapOffsetY + CellHeightPadding));
                        }

                        QueryItemText(f + startRow, column, out var text, ref strOffsetX, ref strOffsetY);

                        bool rePrep = false;
                        if (_selectedItems.Contains(new Cell {
                            Column = column, RowIndex = f + startRow
                        }))
                        {
                            _renderer.PrepDrawString(Font, SystemColors.HighlightText);
                            rePrep = true;
                        }

                        DrawString(text, new Rectangle(point.X + strOffsetX, point.Y + strOffsetY, col.Width, ColumnHeight));

                        if (rePrep)
                        {
                            _renderer.PrepDrawString(Font, _foreColor);
                        }
                    }
                }
            }
        }
        private void GDIP_DrawData(PaintEventArgs e, List <RollColumn> visibleColumns)
        {
            // Prevent exceptions with small TAStudio windows
            if (visibleColumns.Count == 0)
            {
                return;
            }

            bool isRotated = false;

            if (QueryItemText != null)
            {
                if (HorizontalOrientation)
                {
                    int startRow = FirstVisibleRow;
                    int range    = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1;

                    sBrush = new SolidBrush(_foreColor);
                    for (int i = 0, f = 0; f < range; i++, f++)
                    {
                        f += _lagFrames[i];
                        int LastVisible = LastVisibleColumnIndex;
                        for (int j = FirstVisibleColumn; j <= LastVisible; j++)
                        {
                            Bitmap image         = null;
                            int    x             = 0;
                            int    y             = 0;
                            int    bitmapOffsetX = 0;
                            int    bitmapOffsetY = 0;

                            QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY);

                            if (image != null)
                            {
                                x = RowsToPixels(i) + CellWidthPadding + bitmapOffsetX;
                                y = (j * CellHeight) + (CellHeightPadding * 2) + bitmapOffsetY;
                                e.Graphics.DrawImage(image, new Point(x, y));
                            }

                            string text;
                            int    strOffsetX = 0;
                            int    strOffsetY = 0;
                            QueryItemText(f + startRow, visibleColumns[j], out text, ref strOffsetX, ref strOffsetY);

                            // Center Text
                            x = RowsToPixels(i) + ((CellWidth - (int)Math.Round((text.Length * _charSizeF.Width))) / 2);
                            y = (j * CellHeight) + CellHeightPadding - _vBar.Value;
                            var point = new Point(x + strOffsetX, y + strOffsetY);

                            var rePrep = false;
                            if (j == 1)
                            {
                                if (_selectedItems.Contains(new Cell {
                                    Column = visibleColumns[j], RowIndex = i + startRow
                                }))
                                {
                                    isRotated = true;
                                    sBrush    = new SolidBrush(SystemColors.HighlightText);
                                    rePrep    = true;
                                }
                                else if (j == 1)
                                {
                                    // 1. not sure about this; 2. repreps may be excess, but if we render one column at a time, we do need to change back after rendering the header
                                    rePrep    = true;
                                    isRotated = true;
                                    sBrush    = new SolidBrush(SystemColors.HighlightText);
                                }
                            }

                            if (!string.IsNullOrWhiteSpace(text))
                            {
                                //_gdi.DrawString(text, point);
                                if (isRotated)
                                {
                                    SizeF sz = e.Graphics.VisibleClipBounds.Size;
                                    e.Graphics.TranslateTransform(sz.Width / 2, sz.Height / 2);
                                    e.Graphics.RotateTransform(90);
                                    sz = e.Graphics.MeasureString(text, _commonFont);
                                    e.Graphics.DrawString(text, _commonFont, sBrush, -(sz.Width / 2), -(sz.Height / 2));
                                }
                                else
                                {
                                    //e.Graphics.DrawString(text, _commonFont, sBrush, (PointF)point);
                                    GDIP_DrawString(e, text, _commonFont, point, new Pen(sBrush).Color);
                                }
                            }

                            if (rePrep)
                            {
                                isRotated = false;
                                sBrush    = new SolidBrush(_foreColor);
                            }
                        }
                    }
                }
                else
                {
                    int startRow = FirstVisibleRow;
                    int range    = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1;

                    sBrush = new SolidBrush(_foreColor);

                    int xPadding = CellWidthPadding + 1 - _hBar.Value;
                    for (int i = 0, f = 0; f < range; i++, f++)                     // Vertical
                    {
                        f += _lagFrames[i];
                        int LastVisible = LastVisibleColumnIndex;
                        for (int j = FirstVisibleColumn; j <= LastVisible; j++)                         // Horizontal
                        {
                            RollColumn col = visibleColumns[j];

                            string text;
                            int    strOffsetX = 0;
                            int    strOffsetY = 0;
                            Point  point      = new Point(col.Left.Value + xPadding, RowsToPixels(i) + CellHeightPadding);

                            Bitmap image         = null;
                            int    bitmapOffsetX = 0;
                            int    bitmapOffsetY = 0;

                            QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY);

                            if (image != null)
                            {
                                e.Graphics.DrawImage(image, new Point(point.X + bitmapOffsetX, point.Y + bitmapOffsetY + CellHeightPadding));
                            }

                            QueryItemText(f + startRow, visibleColumns[j], out text, ref strOffsetX, ref strOffsetY);

                            bool rePrep = false;
                            if (_selectedItems.Contains(new Cell {
                                Column = visibleColumns[j], RowIndex = f + startRow
                            }))
                            {
                                sBrush    = new SolidBrush(SystemColors.HighlightText);
                                isRotated = false;
                                rePrep    = true;
                            }

                            if (!string.IsNullOrWhiteSpace(text))
                            {
                                //e.Graphics.DrawString(text, _commonFont, sBrush, (PointF)(new Point(point.X + strOffsetX, point.Y + strOffsetY)));
                                GDIP_DrawString(e, text, _commonFont, new Point(point.X + strOffsetX, point.Y + strOffsetY), new Pen(sBrush).Color);
                            }

                            if (rePrep)
                            {
                                isRotated = false;
                                sBrush    = new SolidBrush(_foreColor);
                            }
                        }
                    }
                }
            }
        }