/// <summary> /// this function checks if the user hit the expand (+) or collapse (-) icon. /// if it was hit it will return true /// </summary> /// <param name="e">mouse click event arguments</param> /// <returns>returns true if the icon was hit, false otherwise</returns> internal bool IsIconHit(DataGridViewCellMouseEventArgs e) { if (e.ColumnIndex < 0) { return(false); } if (!isGroupRow) { return(false); } KryptonOutlookGrid grid = (KryptonOutlookGrid)DataGridView; Rectangle rowBounds = grid.GetRowDisplayRectangle(Index, false); int rowHeadersWidth = grid.RowHeadersVisible ? grid.RowHeadersWidth : 0; int l = e.X + grid.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false).Left; if (isGroupRow && (l >= rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + group.Level * StaticValues._groupLevelMultiplier) && (l <= rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + group.Level * StaticValues._groupLevelMultiplier + 11) && (e.Y >= rowBounds.Height - 18) && (e.Y <= rowBounds.Height - 7)) { return(true); } return(false); }
//internal bool IsNodeIconHit(DataGridViewCellMouseEventArgs e) //{ // if (e.ColumnIndex < 0) return false; // if (!this.HasChildren) return false; // DataGridViewCell cell = this.Cells[e.ColumnIndex]; // if (cell.GetType() is KryptonDataGridViewTreeTextCell) { // cell. // } // KryptonOutlookGrid grid = (KryptonOutlookGrid)this.DataGridView; // Rectangle glyphRect = new Rectangle(rect.X + this.GlyphMargin, rect.ContentBounds.Y, INDENT_WIDTH, this.ContentBounds.Height - 1); // if ((e.X <= glyphRect.X + 11) && // (e.X >= glyphRect.X) && // (e.Y >= glyphRect.Y + (glyphRect.Height / 2) - 4) && // (e.Y <= glyphRect.Y + (glyphRect.Height / 2) - 4 + 11)) // if (this.isGroupRow && // (l >= rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + group.Level * StaticValues._groupLevelMultiplier) && // (l <= rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + group.Level * StaticValues._groupLevelMultiplier + 11) && // (e.Y >= rowBounds.Height - 18) && // (e.Y <= rowBounds.Height - 7)) // return true; // return false; //} internal bool IsGroupImageHit(DataGridViewCellMouseEventArgs e) { if (e.ColumnIndex < 0) { return(false); } if (!isGroupRow || group.GroupImage == null) { return(false); } KryptonOutlookGrid grid = (KryptonOutlookGrid)DataGridView; Rectangle rowBounds = grid.GetRowDisplayRectangle(Index, false); int rowHeadersWidth = grid.RowHeadersVisible ? grid.RowHeadersWidth : 0; int l = e.X + grid.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false).Left; int offsetHeight; if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) { offsetHeight = StaticValues._2013OffsetHeight; } else { offsetHeight = StaticValues._defaultOffsetHeight; } if (isGroupRow && (l >= rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 18 + group.Level * StaticValues._groupLevelMultiplier) && (l <= rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 18 + group.Level * StaticValues._groupLevelMultiplier + 16) && (e.Y >= rowBounds.Height - offsetHeight) && (e.Y <= rowBounds.Height - 6)) { return(true); } return(false); }
public static void SetupDGV(KryptonOutlookGrid grid, EntityTypes typeOfData) { grid.ClearEverything(); if (grid.GroupBox != null) { grid.GroupBox.Visible = true; grid.HideColumnOnGrouping = false; } grid.FillMode = FillMode.GROUPSANDNODES; grid.ShowLines = true; List <DataGridViewColumn> columnsToAdd = new List <DataGridViewColumn>(); switch (typeOfData) { case EntityTypes.Client: { DataGridViewColumn clientIDColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Client ID", Name = "clientIDColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(clientIDColumn); DataGridViewColumn clientNameColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Client Name", Name = "clientNameColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(clientNameColumn); grid.Columns.AddRange(columnsToAdd.ToArray()); grid.AddInternalColumn(clientIDColumn, new OutlookGridDefaultGroup() { OneItemText = "1 client", XXXItemsText = " clients" }, SortOrder.None, -1, -1); grid.AddInternalColumn(clientNameColumn, new OutlookGridAlphabeticGroup() { OneItemText = "1 client", XXXItemsText = " clients" }, SortOrder.None, -1, -1); break; } case EntityTypes.Realtor: { DataGridViewColumn realtorIDColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Realtor ID", Name = "realtorIDColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(realtorIDColumn); DataGridViewColumn realtorNameColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Realtor Name", Name = "realtorNameColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(realtorNameColumn); grid.Columns.AddRange(columnsToAdd.ToArray()); grid.AddInternalColumn(realtorIDColumn, new OutlookGridDefaultGroup() { OneItemText = "1 realtor", XXXItemsText = " realtors" }, SortOrder.None, -1, -1); grid.AddInternalColumn(realtorNameColumn, new OutlookGridAlphabeticGroup() { OneItemText = "1 realtor", XXXItemsText = " realtors" }, SortOrder.None, -1, -1); break; } case EntityTypes.TitleCompany: { DataGridViewColumn companyIDColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Company ID", Name = "companyIDColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(companyIDColumn); DataGridViewColumn companyNameColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Company Name", Name = "companyNameColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(companyNameColumn); grid.Columns.AddRange(columnsToAdd.ToArray()); grid.AddInternalColumn(companyIDColumn, new OutlookGridDefaultGroup() { OneItemText = "1 title company", XXXItemsText = " title companies" }, SortOrder.None, -1, -1); grid.AddInternalColumn(companyNameColumn, new OutlookGridAlphabeticGroup() { OneItemText = "1 title company", XXXItemsText = " title companies" }, SortOrder.None, -1, -1); break; } case EntityTypes.Rate: { DataGridViewColumn rateIdColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Rate ID", Name = "rateIdColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(rateIdColumn); DataGridViewColumn rateDescriptionColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Description", Name = "rateDescriptionColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(rateDescriptionColumn); DataGridViewColumn rateAmountColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Amount", Name = "rateAmountColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(rateAmountColumn); grid.Columns.AddRange(columnsToAdd.ToArray()); grid.AddInternalColumn(rateIdColumn, new OutlookGridDefaultGroup() { OneItemText = "1 rate", XXXItemsText = " rates" }, SortOrder.None, -1, -1); grid.AddInternalColumn(rateDescriptionColumn, new OutlookGridAlphabeticGroup() { OneItemText = "rate", XXXItemsText = " rates" }, SortOrder.None, -1, -1); grid.AddInternalColumn(rateAmountColumn, new OutlookGridAlphabeticGroup() { OneItemText = "rate", XXXItemsText = " rates" }, SortOrder.None, -1, -1); break; } case EntityTypes.BillingItem: { DataGridViewColumn billingIdColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Billing ID", Name = "billingIdColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(billingIdColumn); DataGridViewColumn billingDescriptionColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Description", Name = "billingDescriptionColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(billingDescriptionColumn); DataGridViewColumn rateColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Rate", Name = "rateColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(rateColumn); DataGridViewColumn timeColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Time Entry", Name = "timeColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(timeColumn); grid.Columns.AddRange(columnsToAdd.ToArray()); grid.AddInternalColumn(billingIdColumn, new OutlookGridDefaultGroup() { OneItemText = "1 billing item", XXXItemsText = " billing items" }, SortOrder.None, -1, -1); grid.AddInternalColumn(billingDescriptionColumn, new OutlookGridAlphabeticGroup() { OneItemText = "1 billing item", XXXItemsText = " billing items" }, SortOrder.None, -1, -1); grid.AddInternalColumn(rateColumn, new OutlookGridAlphabeticGroup() { OneItemText = "1 billing item", XXXItemsText = " billing items" }, SortOrder.None, -1, -1); grid.AddInternalColumn(timeColumn, new OutlookGridAlphabeticGroup() { OneItemText = "1 billing item", XXXItemsText = " billing items" }, SortOrder.None, -1, -1); break; } case EntityTypes.Survey: { DataGridViewColumn surveyIDColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Survey ID", Name = "surveyIDColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(surveyIDColumn); DataGridViewColumn jobNumberColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Job Number", Name = "jobNumberColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(jobNumberColumn); DataGridViewColumn abstractNumberColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "Abstract", Name = "abstractNumberColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(abstractNumberColumn); DataGridViewColumn acresColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "# of Acres", Name = "acresColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(acresColumn); DataGridViewColumn countyColumn = new KryptonDataGridViewTextBoxColumn { HeaderText = "County", Name = "countyColumn", SortMode = DataGridViewColumnSortMode.Programmatic, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }; columnsToAdd.Add(countyColumn); grid.Columns.AddRange(columnsToAdd.ToArray()); grid.AddInternalColumn(surveyIDColumn, new OutlookGridDefaultGroup() { OneItemText = "1 survey", XXXItemsText = " surveys" }, SortOrder.None, -1, -1); grid.AddInternalColumn(jobNumberColumn, new OutlookGridAlphabeticGroup() { OneItemText = "1 survey", XXXItemsText = " surveys" }, SortOrder.None, -1, -1); grid.AddInternalColumn(abstractNumberColumn, new OutlookGridAlphabeticGroup() { OneItemText = "1 survey", XXXItemsText = " surveys" }, SortOrder.None, -1, -1); grid.AddInternalColumn(acresColumn, new OutlookGridAlphabeticGroup() { OneItemText = "1 survey", XXXItemsText = " surveys" }, SortOrder.None, -1, -1); grid.AddInternalColumn(countyColumn, new OutlookGridAlphabeticGroup() { OneItemText = "1 survey", XXXItemsText = " surveys" }, SortOrder.None, -1, -1); break; } } }
/// <summary> /// the main difference with a Group row and a regular row is the way it is painted on the control. /// the Paint method is therefore overridden and specifies how the Group row is painted. /// Note: this method is not implemented optimally. It is merely used for demonstration purposes /// </summary> /// <param name="graphics"></param> /// <param name="clipBounds"></param> /// <param name="rowBounds"></param> /// <param name="rowIndex"></param> /// <param name="rowState"></param> /// <param name="isFirstDisplayedRow"></param> /// <param name="isLastVisibleRow"></param> protected override void Paint(System.Drawing.Graphics graphics, System.Drawing.Rectangle clipBounds, Rectangle rowBounds, int rowIndex, DataGridViewElementStates rowState, bool isFirstDisplayedRow, bool isLastVisibleRow) { if (isGroupRow) { KryptonOutlookGrid grid = (KryptonOutlookGrid)DataGridView; int rowHeadersWidth = grid.RowHeadersVisible ? grid.RowHeadersWidth : 0; int groupLevelIndentation = group.Level * StaticValues._groupLevelMultiplier; int gridwidth = grid.Columns.GetColumnsWidth(DataGridViewElementStates.Visible); Rectangle myRowBounds = rowBounds; myRowBounds.Width = gridwidth; IPaletteBack paletteBack = grid.StateNormal.DataCell.Back; IPaletteBorder paletteBorder = grid.StateNormal.DataCell.Border; PaletteState state = PaletteState.Normal; if (grid.PreviousSelectedGroupRow == rowIndex && (KryptonManager.CurrentGlobalPalette.GetRenderer() != KryptonManager.RenderOffice2013)) { state = PaletteState.CheckedNormal; } using (RenderContext renderContext = new RenderContext(grid, graphics, myRowBounds, grid.Renderer)) { using (GraphicsPath path = grid.Renderer.RenderStandardBorder.GetBackPath(renderContext, myRowBounds, paletteBorder, VisualOrientation.Top, PaletteState.Normal)) { //Back IDisposable unused = grid.Renderer.RenderStandardBack.DrawBack(renderContext, myRowBounds, path, paletteBack, VisualOrientation.Top, state, null); // We never save the memento for reuse later if (unused != null) { unused.Dispose(); unused = null; } } } // Draw the botton : solid line for 2007 palettes or dot line for 2010 palettes, full background for 2013 if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2010) { using (Pen focusPen = new Pen(Color.Gray)) { focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; graphics.DrawLine(focusPen, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset, rowBounds.Bottom - 1, gridwidth + 1, rowBounds.Bottom - 1); } } else if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) { using (SolidBrush br = new SolidBrush(Color.FromArgb(225, 225, 225))) { graphics.FillRectangle(br, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset, rowBounds.Bottom - StaticValues._2013GroupRowHeight, gridwidth + 1, StaticValues._2013GroupRowHeight - 1); } } else { using (SolidBrush br = new SolidBrush(paletteBorder.GetBorderColor1(state))) { graphics.FillRectangle(br, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset, rowBounds.Bottom - 2, gridwidth + 1, 2); } } //Draw right vertical bar if (grid.CellBorderStyle == DataGridViewCellBorderStyle.SingleVertical || grid.CellBorderStyle == DataGridViewCellBorderStyle.Single) { using (SolidBrush br = new SolidBrush(paletteBorder.GetBorderColor1(state))) { graphics.FillRectangle(br, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + gridwidth, rowBounds.Top, 1, rowBounds.Height); } } //Set the icon and lines according to the renderer if (group.Collapsed) { if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2010 || KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) { graphics.DrawImage(Properties.Resources.CollapseIcon2010, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + groupLevelIndentation, rowBounds.Bottom - 18, 11, 11); } else { graphics.DrawImage(Properties.Resources.ExpandIcon, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + groupLevelIndentation, rowBounds.Bottom - 18, 11, 11); } } else { if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2010 || KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) { graphics.DrawImage(Properties.Resources.ExpandIcon2010, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + groupLevelIndentation, rowBounds.Bottom - 18, 11, 11); } else { graphics.DrawImage(Properties.Resources.CollapseIcon, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + groupLevelIndentation, rowBounds.Bottom - 18, 11, 11); } } //Draw image group int imageoffset = 0; if (group.GroupImage != null) { if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2010 || KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) { graphics.DrawImage(group.GroupImage, rowHeadersWidth - grid.HorizontalScrollingOffset + StaticValues._ImageOffsetwidth + groupLevelIndentation, rowBounds.Bottom - StaticValues._2013OffsetHeight, StaticValues._groupImageSide, StaticValues._groupImageSide); imageoffset = StaticValues._ImageOffsetwidth; } else { graphics.DrawImage(group.GroupImage, rowHeadersWidth - grid.HorizontalScrollingOffset + StaticValues._ImageOffsetwidth + groupLevelIndentation, rowBounds.Bottom - StaticValues._defaultOffsetHeight, StaticValues._groupImageSide, StaticValues._groupImageSide); imageoffset = StaticValues._ImageOffsetwidth; } } //Draw text, using the current grid font int offsetText = rowHeadersWidth - grid.HorizontalScrollingOffset + 18 + imageoffset + groupLevelIndentation; if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) { TextRenderer.DrawText(graphics, group.Text, grid.GridPalette.GetContentShortTextFont(PaletteContentStyle.LabelBoldControl, state), new Rectangle(offsetText, rowBounds.Bottom - StaticValues._2013OffsetHeight, rowBounds.Width - offsetText, rowBounds.Height), grid.GridPalette.GetContentShortTextColor1(PaletteContentStyle.LabelNormalControl, state), TextFormatFlags.EndEllipsis | TextFormatFlags.SingleLine | TextFormatFlags.PreserveGraphicsClipping); } else { TextRenderer.DrawText(graphics, group.Text, grid.GridPalette.GetContentShortTextFont(PaletteContentStyle.LabelBoldControl, state), new Rectangle(offsetText, rowBounds.Bottom - StaticValues._defaultOffsetHeight, rowBounds.Width - offsetText, rowBounds.Height), grid.GridPalette.GetContentShortTextColor1(PaletteContentStyle.LabelNormalControl, state), TextFormatFlags.EndEllipsis | TextFormatFlags.SingleLine | TextFormatFlags.PreserveGraphicsClipping); } ////Debug Hits ////ExpandCollaspe icon //graphics.DrawRectangle(new Pen(Color.Red), new Rectangle(rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + group.Level * 15, rowBounds.Bottom - 18, 11, 11)); ////Image //if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) // graphics.DrawRectangle(new Pen(Color.Blue), new Rectangle(rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + StaticValues._ImageOffsetwidth + groupLevelIndentation, rowBounds.Bottom - StaticValues._2013OffsetHeight, StaticValues._groupImageSide, StaticValues._groupImageSide)); //else // graphics.DrawRectangle(new Pen(Color.Blue), new Rectangle(rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + StaticValues._ImageOffsetwidth + groupLevelIndentation, rowBounds.Bottom - StaticValues._defaultOffsetHeight, StaticValues._groupImageSide, StaticValues._groupImageSide)); } else { base.Paint(graphics, clipBounds, rowBounds, rowIndex, rowState, isFirstDisplayedRow, isLastVisibleRow); } }
/// <summary> /// Initializes a new instance of the <see cref="OutlookGridRowComparer2"/> class. /// </summary> /// <param name="kryptonOutlookGrid">The KryptonOutlookGrid owning the rows and columns.</param> /// <param name="sortedColumnsList">A list of the sorted columns.</param> public OutlookGridRowComparer2(KryptonOutlookGrid kryptonOutlookGrid, List <OutlookGridColumn> sortedColumnsList) { outlookGrid = kryptonOutlookGrid; sortedColumns = sortedColumnsList; }