#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