protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { CardDataGridView grid = (CardDataGridView)DataGridView; int cardIndex = rowIndex; IList <Card> _cards = grid.GetCardsFromGrid(); if (_cards != null) { int?color = _cards[cardIndex].TimeGroupColor; if (color != null) { cellStyle.BackColor = _colors[color.Value]; } } base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); }
public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) { if (this.RowIndex < 0) { return; } // Set the value of the editing control to the current cell value. base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); DataGridViewTrackEditingControl ctl = DataGridView.EditingControl as DataGridViewTrackEditingControl; ctl.Font = dataGridViewCellStyle.Font; ctl.Width = GetSize(this.RowIndex).Width; ctl.SelectionBackColor = dataGridViewCellStyle.BackColor; ctl.ParityText = (StringWithParity)this.Value; CardDataGridView grid = (CardDataGridView)DataGridView; ctl.variant = grid.GetVariant(rowIndex, this.ColumnIndex); ctl.originalLength = ctl.Text.Length; if (ctl.variant != null) { bool ali = grid.GetVariant(rowIndex, this.ColumnIndex).Alignment == null; int alignment = ali ? 0 : (int)grid.GetVariant(rowIndex, this.ColumnIndex).Alignment; ctl.Margin = new Padding(alignment * CalculateFontSize(ctl.Font).Width + 3, 3, 3, 3); ctl.SelectionAlignment = HorizontalAlignment.Left; ctl.Modified = false; if (ali) { if (ctl.variant.HasSS) { ctl.SelectionAlignment = HorizontalAlignment.Left; } else if (ctl.variant.HasES) { ctl.SelectionAlignment = HorizontalAlignment.Right; } else { ctl.SelectionAlignment = HorizontalAlignment.Center; } } } else { ctl.Margin = new Padding(3, 3, 3, 3); ctl.SelectionAlignment = HorizontalAlignment.Center; } }
protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { CardDataGridView grid = DataGridView as CardDataGridView; int cardIndex = rowIndex; IDataGridViewProgressColumnValue columnValue = (IDataGridViewProgressColumnValue)this.DataGridView.DataSource; int progressVal = value != null ?(int)value:0; // Need to convert to float before division; otherwise C# returns int which is 0 for anything but 100%. float percentage = ((float)progressVal / (float)columnValue.MaximumValue); Brush backColorBrush = new SolidBrush(cellStyle.BackColor); Brush foreColorBrush = new SolidBrush(cellStyle.ForeColor); // Draws the cell grid base.Paint(g, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, (paintParts & ~DataGridViewPaintParts.ContentForeground)); if (percentage > 0.0) { // Draw the progress bar and the text g.FillRectangle(new SolidBrush(Color.FromArgb(163, 189, 242)), cellBounds.X + 2, cellBounds.Y + 2, Convert.ToInt32((percentage * cellBounds.Width - 4)), cellBounds.Height - 4); g.DrawString(progressVal.ToString() + "(" + ((int)(percentage * 100)).ToString() + "%)", cellStyle.Font, foreColorBrush, cellBounds.X + 6, cellBounds.Y + 2); } else { // draw the text if (this.DataGridView.CurrentRow.Index == rowIndex) { g.DrawString(progressVal.ToString() + "%", cellStyle.Font, new SolidBrush(cellStyle.SelectionForeColor), cellBounds.X + 6, cellBounds.Y + 2); } else { g.DrawString(progressVal.ToString() + "%", cellStyle.Font, foreColorBrush, cellBounds.X + 6, cellBounds.Y + 2); } } }
public override void DetachEditingControl() { if (DataGridView == null) { return; } DataGridViewTrackEditingControl ctl = DataGridView.EditingControl as DataGridViewTrackEditingControl; if (ctl != null && ctl.Modified) { StringWithParity text = ctl.ParityText; CardDataGridView grid = (CardDataGridView)DataGridView; Card card = grid.GetCard(this.RowIndex); if (card != null) { card.SetTrackString(this.ColumnIndex - (int)Presentation.cardGridColumn.TRACK1_COLUMN, text); } //maybe this will slow the programm, but it is needed. // otherwise we will get alignment bugs once content changed. ListCardUtil.SetAlignment(grid.GetActualCardsFromGrid(), 0); if (crf.Properties.Settings.Default.autoResize && (ctl.Text.Length > ctl.originalLength || ctl.Text.Length < ctl.originalLength - 10) ) { grid.AutoResizeColumn(this.ColumnIndex); #if DEBUG CardDataGridView.RESIZECOLUMNCOUNT++; grid.UpdateStatusStripTextWhenResizing(); #endif } } base.DetachEditingControl(); }
protected override Size GetPreferredSize(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex, Size constraintSize) { if (DataGridView == null) { return(new Size(0, 0)); } CardDataGridView grid = (CardDataGridView)DataGridView; Variant variant = grid.GetVariant(rowIndex, this.ColumnIndex); StringWithParity value = (StringWithParity)GetValue(rowIndex); Size size = new Size(0, 0); if (fontSize.Width == -1) { fontSize = CalculateFontSize(cellStyle.Font); } if ((value != null) && (variant != null)) { string sValue = value.ToString(); int alignment = 0; if (variant.Alignment != null) { alignment = variant.Alignment.Value; } size.Width = fontSize.Width * (sValue.Length + alignment); size.Height = fontSize.Height; } size.Width += _editingControl.Margin.Left + _editingControl.Margin.Right + 1; size.Height += _editingControl.Margin.Bottom + _editingControl.Margin.Top + 1; return(size); }
protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { if (value == null || DataGridView == null) { return; } CardDataGridView grid = (CardDataGridView)DataGridView; Variant variant = grid.GetVariant(rowIndex, this.ColumnIndex); //group might be empty. int?alignment = null; if (null != variant) { //issue 5: A card with SS and ES should not be aligned by the previous card. // if (variant.HasSS && variant.HasES) // { // cellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft; // } // else if (variant.Alignment != null) { alignment = variant.Alignment.Value; } else { if (variant.HasSS) { cellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft; } else if (variant.HasES) { cellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; } else { cellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; } } } /* * base.Paint(graphics, clipBounds, cellBounds, rowIndex, * cellState, value.ToString(), formattedValue, errorText, * cellStyle, advancedBorderStyle, paintParts); */ base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, null, null, errorText, cellStyle, advancedBorderStyle, paintParts); Image img = GetRtfImage(rowIndex, value, base.Selected, cellStyle, alignment); if (alignment == null) { alignment = 0; } if (fontSize.Width == -1) { fontSize = CalculateFontSize(cellStyle.Font); } if (img != null) { graphics.DrawImage(img, cellBounds.Left + _editingControl.Margin.Left + fontSize.Width * alignment.Value, cellBounds.Top + _editingControl.Margin.Top); } }