#if FRAMEWORK20 using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Drawing; using DevComponents.AdvTree; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using DevComponents.DotNetBar.Controls; namespace DevComponents.DotNetBar { /// /// Defines Advanced Property Grid Node for Color type. /// public class PropertyNodeColor : PropertyNode { #region Constructors /// /// Initializes a new instance of the PropertyNode class. /// /// public PropertyNodeColor(PropertyDescriptor property) : base(property) { } #endregion #region Internal Implementation private Image _SwatchImage = null; protected override void UpdateDisplayedValue(object propertyValue, bool refreshSubProperties) { base.UpdateDisplayedValue(propertyValue, refreshSubProperties); if (IsDisposing || IsDisposed) return; Cell cell = this.EditCell; if (propertyValue is Color) { Color color = (Color)propertyValue; if (_SwatchImage == null || !((Color)_SwatchImage.Tag).Equals(color)) { DisposeSwatchImage(); _SwatchImage = CreateSwatchImage(color); cell.Images.Image = _SwatchImage; } } else { DisposeSwatchImage(); cell.Images.Image = null; } } protected override bool IsTypeEditorPaintValueSupported { get { return false; } } private Image CreateSwatchImage(Color color) { Rectangle r = new Rectangle(0, 0, 20, 13); Bitmap image = new Bitmap(r.Width, r.Height, PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(image)) { DisplayHelp.DrawRectangle(g, SwatchBorderColor, r); r.Inflate(-1, -1); if (color == Color.Empty) { using (HatchBrush brush = new HatchBrush(HatchStyle.BackwardDiagonal, SwatchHatchForeColor, SwatchBackColor)) g.FillRectangle(brush, r); } else if (color == Color.Transparent || color.A < 255) { using (HatchBrush brush = new HatchBrush(HatchStyle.LargeCheckerBoard, SwatchHatchForeColor, SwatchBackColor)) g.FillRectangle(brush, r); if (color != Color.Transparent) { using (SolidBrush brush = new SolidBrush(color)) g.FillRectangle(brush, r); } } else { using (SolidBrush brush = new SolidBrush(color)) g.FillRectangle(brush, r); } } image.Tag = color; return image; } private Color _SwatchHatchForeColor = ColorScheme.GetColor(0xC5C5C5); private Color SwatchHatchForeColor { get { return _SwatchHatchForeColor; } } private Color _SwatchBorderColor = Color.Black; private Color SwatchBorderColor { get { return _SwatchBorderColor; } } private Color _SwatchBackColor = Color.White; private Color SwatchBackColor { get { return _SwatchBackColor; } } private void DisposeSwatchImage() { if (_SwatchImage != null) { _SwatchImage.Dispose(); _SwatchImage = null; Cell cell = this.EditCell; if (cell != null) cell.Images.Image = null; } } protected override void Dispose(bool disposing) { DisposeSwatchImage(); base.Dispose(disposing); } #endregion } } #endif