/// <summary> /// Handles the Paint event of the panel control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="PaintEventArgs"/> instance containing the event data.</param> private void panel_Paint(object sender, PaintEventArgs e) { if (minColumnWidth == 0 || rowHeight == 0) { return; } AllocTitleBrush(); // Paint each column for (int c = 0; c < columnCount; c++) { // Find starting row in this column int gi = 0; int ci = -1; bool blankLine = false; for (int r = 0; r < vScrollBar.Value; r++) { NextRow(c, ref gi, ref ci, ref blankLine); } // Paint each visible row for (int r = 0; r < fullRowsDisplayed + partialRowsDisplayed; r++) { Rectangle rect = new Rectangle(columnX[c], rowHeight * r, columnWidth[c], rowHeight); if (blankLine) { e.Graphics.FillRectangle(SystemBrushes.Window, rect); continue; } ColorGroup g = colorGroups[c][gi]; if (ci == -1) { e.Graphics.FillRectangle(SystemBrushes.Window, rect); e.Graphics.DrawString(g.Title, titleFont, titleBrush, rect, StringFormat.GenericDefault); } else { Color color = g.Colors[ci]; bool sel = (selGroup == g) && (selIndex == ci); // Background color e.Graphics.FillRectangle(sel ? SystemBrushes.Highlight : SystemBrushes.Window, rect); // Draw color box Brush colorBrush = new SolidBrush(color); Rectangle colorRect = new Rectangle(rect.X + colorBoxOffset, rect.Y + colorBoxOffset, colorBoxWidth, rect.Height - 2 * colorBoxOffset); e.Graphics.FillRectangle(colorBrush, colorRect); e.Graphics.DrawRectangle(SystemPens.WindowText, colorRect); colorBrush.Dispose(); // Text Rectangle textRect = new Rectangle(rect.X + colorTextOffset, rect.Y, rect.Width - colorTextOffset, rect.Height); e.Graphics.DrawString(" " + color.Name, colorFont, sel ? SystemBrushes.HighlightText : SystemBrushes.WindowText, textRect, StringFormat.GenericDefault); } NextRow(c, ref gi, ref ci, ref blankLine); } } }
/// <summary> /// Generate color groups. /// </summary> /// <returns>Array of color groups.</returns> public override ColorGroup[] GenerateColorGroups() { redColors = new ColorGroup("Red Colors"); redColors.Add(Color.IndianRed); redColors.Add(Color.LightCoral); redColors.Add(Color.Salmon); redColors.Add(Color.DarkSalmon); redColors.Add(Color.LightSalmon); redColors.Add(Color.Red); redColors.Add(Color.Crimson); redColors.Add(Color.Firebrick); redColors.Add(Color.DarkRed); pinkColors = new ColorGroup("Pink Colors"); pinkColors.Add(Color.Pink); pinkColors.Add(Color.LightPink); pinkColors.Add(Color.HotPink); pinkColors.Add(Color.DeepPink); pinkColors.Add(Color.MediumVioletRed); pinkColors.Add(Color.PaleVioletRed); orangeColors = new ColorGroup("Orange Colors"); orangeColors.Add(Color.LightSalmon); orangeColors.Add(Color.Coral); orangeColors.Add(Color.Tomato); orangeColors.Add(Color.OrangeRed); orangeColors.Add(Color.DarkOrange); orangeColors.Add(Color.Orange); yellowColors = new ColorGroup("Yellow Colors"); yellowColors.Add(Color.Gold); yellowColors.Add(Color.Yellow); yellowColors.Add(Color.LightYellow); yellowColors.Add(Color.LemonChiffon); yellowColors.Add(Color.LightGoldenrodYellow); yellowColors.Add(Color.PapayaWhip); yellowColors.Add(Color.Moccasin); yellowColors.Add(Color.PeachPuff); yellowColors.Add(Color.PaleGoldenrod); yellowColors.Add(Color.Khaki); yellowColors.Add(Color.DarkKhaki); purpleColors = new ColorGroup("Purple Colors"); purpleColors.Add(Color.Lavender); purpleColors.Add(Color.Thistle); purpleColors.Add(Color.Plum); purpleColors.Add(Color.Violet); purpleColors.Add(Color.Orchid); purpleColors.Add(Color.Fuchsia); purpleColors.Add(Color.Magenta); purpleColors.Add(Color.MediumOrchid); purpleColors.Add(Color.MediumPurple); purpleColors.Add(Color.BlueViolet); purpleColors.Add(Color.DarkViolet); purpleColors.Add(Color.DarkOrchid); purpleColors.Add(Color.DarkMagenta); purpleColors.Add(Color.Purple); purpleColors.Add(Color.Indigo); purpleColors.Add(Color.DarkSlateBlue); purpleColors.Add(Color.SlateBlue); purpleColors.Add(Color.MediumSlateBlue); greenColors = new ColorGroup("Green Colors"); greenColors.Add(Color.GreenYellow); greenColors.Add(Color.Chartreuse); greenColors.Add(Color.LawnGreen); greenColors.Add(Color.Lime); greenColors.Add(Color.LimeGreen); greenColors.Add(Color.PaleGreen); greenColors.Add(Color.LightGreen); greenColors.Add(Color.MediumSpringGreen); greenColors.Add(Color.SpringGreen); greenColors.Add(Color.MediumSeaGreen); greenColors.Add(Color.SeaGreen); greenColors.Add(Color.ForestGreen); greenColors.Add(Color.Green); greenColors.Add(Color.DarkGreen); greenColors.Add(Color.YellowGreen); greenColors.Add(Color.OliveDrab); greenColors.Add(Color.Olive); greenColors.Add(Color.DarkOliveGreen); greenColors.Add(Color.MediumAquamarine); greenColors.Add(Color.DarkSeaGreen); greenColors.Add(Color.LightSeaGreen); greenColors.Add(Color.DarkCyan); greenColors.Add(Color.Teal); blueColors = new ColorGroup("Blue Colors"); blueColors.Add(Color.Cyan); blueColors.Add(Color.LightCyan); blueColors.Add(Color.PaleTurquoise); blueColors.Add(Color.Aquamarine); blueColors.Add(Color.Turquoise); blueColors.Add(Color.MediumTurquoise); blueColors.Add(Color.DarkTurquoise); blueColors.Add(Color.CadetBlue); blueColors.Add(Color.SteelBlue); blueColors.Add(Color.LightSteelBlue); blueColors.Add(Color.PowderBlue); blueColors.Add(Color.LightBlue); blueColors.Add(Color.SkyBlue); blueColors.Add(Color.LightSkyBlue); blueColors.Add(Color.DeepSkyBlue); blueColors.Add(Color.DodgerBlue); blueColors.Add(Color.CornflowerBlue); blueColors.Add(Color.RoyalBlue); blueColors.Add(Color.Blue); blueColors.Add(Color.MediumBlue); blueColors.Add(Color.DarkBlue); blueColors.Add(Color.Navy); blueColors.Add(Color.MidnightBlue); brownColors = new ColorGroup("Brown Colors"); brownColors.Add(Color.Cornsilk); brownColors.Add(Color.BlanchedAlmond); brownColors.Add(Color.Bisque); brownColors.Add(Color.NavajoWhite); brownColors.Add(Color.Wheat); brownColors.Add(Color.BurlyWood); brownColors.Add(Color.Tan); brownColors.Add(Color.RosyBrown); brownColors.Add(Color.SandyBrown); brownColors.Add(Color.Goldenrod); brownColors.Add(Color.DarkGoldenrod); brownColors.Add(Color.Peru); brownColors.Add(Color.Chocolate); brownColors.Add(Color.SaddleBrown); brownColors.Add(Color.Sienna); brownColors.Add(Color.Brown); brownColors.Add(Color.Maroon); whiteColors = new ColorGroup("White Colors"); whiteColors.Add(Color.White); whiteColors.Add(Color.Snow); whiteColors.Add(Color.Honeydew); whiteColors.Add(Color.MintCream); whiteColors.Add(Color.Azure); whiteColors.Add(Color.AliceBlue); whiteColors.Add(Color.GhostWhite); whiteColors.Add(Color.WhiteSmoke); whiteColors.Add(Color.SeaShell); whiteColors.Add(Color.Beige); whiteColors.Add(Color.OldLace); whiteColors.Add(Color.FloralWhite); whiteColors.Add(Color.Ivory); whiteColors.Add(Color.AntiqueWhite); whiteColors.Add(Color.Linen); whiteColors.Add(Color.LavenderBlush); whiteColors.Add(Color.MistyRose); grayColors = new ColorGroup("Gray Colors"); grayColors.Add(Color.Gainsboro); grayColors.Add(Color.LightGray); grayColors.Add(Color.Silver); grayColors.Add(Color.DarkGray); grayColors.Add(Color.Gray); grayColors.Add(Color.DimGray); grayColors.Add(Color.LightSlateGray); grayColors.Add(Color.SlateGray); grayColors.Add(Color.DarkSlateGray); grayColors.Add(Color.Black); return(new ColorGroup[] { redColors, pinkColors, orangeColors, yellowColors, purpleColors, greenColors, blueColors, brownColors, whiteColors, grayColors }); }
/// <summary> /// Changes the sel key. /// </summary> /// <param name="key">The key.</param> private void ChangeSelKey(Keys key) { int column = -1; int row = -1; int gi = -1; int ci = -1; bool blankLine = false; if (!GetSelColorLocation(ref column, ref row, ref gi, ref ci)) { column = 0; gi = 0; ci = 0; } else if (key == Keys.Up) { if (ci > 0 || gi > 0) // go up only if not at first row { PrevRow(column, ref gi, ref ci); if (ci == -1) // if we hit title line, go up another line { PrevRow(column, ref gi, ref ci); } } } else if (key == Keys.Down) { if (gi < colorGroups[column].Length - 1 || ci < colorGroups[column][gi].Colors.Length - 1) // go down only if not at last row { NextRow(column, ref gi, ref ci, ref blankLine); if (ci == -1) // if we hit title line, go down another line { NextRow(column, ref gi, ref ci, ref blankLine); } } } else if (key == Keys.Home) // goto top of current column { gi = 0; ci = 0; } else if (key == Keys.End) // goto bottom of current column { gi = colorGroups[column].Length - 1; ci = colorGroups[gi][ci].Colors.Length - 1; } else if (key == Keys.PageUp) // goto top of previous group { gi = Math.Max(0, gi - 1); ci = 0; } else if (key == Keys.PageDown) // goto top of next group { gi = Math.Min(colorGroups[column].Length - 1, gi + 1); ci = 0; } else // Left or Right { if (key == Keys.Left && column > 0) { column--; } else if (key == Keys.Right && column < columnCount - 1) { column++; } gi = 0; ci = -1; for (int r = 0; r < row; r++) { NextRow(column, ref gi, ref ci, ref blankLine); } if (blankLine || ci == -1) // if gone too far, or hit title line, go back up one line { PrevRow(column, ref gi, ref ci); } } selGroup = colorGroups[column][gi]; selIndex = ci; ScrollToMakeSelColorVisible(); }
/// <summary> /// Organizes the color groups depending on the number of columns being displayed. /// </summary> /// <param name="groups">Array of array of color groups.</param> /// <remarks>REALLY need an example!</remarks> public override void SplitColorGroups(ColorGroup[][] groups) { groups[0] = new ColorGroup[1]; AddColorGroup(systemColors); }