using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Design; using System.Drawing.Drawing2D; using System.IO; using System.Reflection; using System.Windows.Forms; namespace DevComponents.DotNetBar.SuperGrid.Style { /// /// RowHeaderVisualStyle /// public class RowHeaderVisualStyle : BaseRowHeaderVisualStyle { #region Static data static Image _ActiveRowImageCache; static Image _EditingRowImageCache; static Image _InfoRowImageCache; /// /// Empty /// public new static RowHeaderVisualStyle Empty { get { return (new RowHeaderVisualStyle()); } } #endregion #region Private variables private Background _ActiveRowBackground; private Background _DirtyMarkerBackground; private Color _ActiveRowIndicatorColor = Color.Empty; private Image _ActiveRowImage; private int _ActiveRowImageIndex = -1; private Image _EditingRowImage; private int _EditingRowImageIndex = -1; private Image _InfoRowImage; private int _InfoRowImageIndex = -1; #endregion #region Public properties #region ActiveRowBackground /// /// Gets or sets the ActiveRow background /// [Description("Indicates the ActiveRow background")] public Background ActiveRowBackground { get { if (_ActiveRowBackground == null) { _ActiveRowBackground = Background.Empty; UpdateChangeHandler(null, _ActiveRowBackground); } return (_ActiveRowBackground); } set { if (_ActiveRowBackground != value) { UpdateChangeHandler(_ActiveRowBackground, value); _ActiveRowBackground = value; OnPropertyChangedEx("ActiveRowBackground", VisualChangeType.Render); } } } /// /// Gets whether property should be serialized. /// [EditorBrowsable(EditorBrowsableState.Never)] private bool ShouldSerializeActiveRowBackground() { return (_ActiveRowBackground != null && _ActiveRowBackground.IsEmpty == false); } /// /// Resets property to its default value. /// [EditorBrowsable(EditorBrowsableState.Never)] private void ResetActiveRowBackground() { ActiveRowBackground = null; } #endregion #region ActiveRowImage /// /// Gets or sets the Active Row Image /// [DefaultValue(null), Category("Appearance")] [Description("Indicates the Active Row image")] public Image ActiveRowImage { get { return (_ActiveRowImage); } set { if (_ActiveRowImage != value) { _ActiveRowImage = value; OnPropertyChangedEx("ActiveRowImage", VisualChangeType.Layout); } } } #endregion #region ActiveRowImageIndex /// /// Gets or sets the Active Row image index /// [Browsable(true), DefaultValue(-1)] [Category("Appearance"), Description("Indicates the Active Row image index")] [Editor("DevComponents.SuperGrid.Design.ImageIndexEditor, DevComponents.SuperGrid.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=26d81176cfa2b486", typeof(UITypeEditor))] [TypeConverter(typeof(ImageIndexConverter))] public int ActiveRowImageIndex { get { return (_ActiveRowImageIndex); } set { if (_ActiveRowImageIndex != value) { _ActiveRowImageIndex = value; OnPropertyChangedEx("ActiveRowImageIndex", VisualChangeType.Layout); } } } [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] private void ResetActiveRowImageIndex() { _ActiveRowImageIndex = -1; } #endregion #region ActiveRowIndicatorColor /// /// Gets or sets the Active Row Indicator color /// [Description("Indicates the Active Row Indicator color")] public Color ActiveRowIndicatorColor { get { return (_ActiveRowIndicatorColor); } set { if (_ActiveRowIndicatorColor != value) { _ActiveRowIndicatorColor = value; OnPropertyChangedEx("ActiveRowIndicatorColor", VisualChangeType.Render); } } } /// /// Gets whether property should be serialized. /// [EditorBrowsable(EditorBrowsableState.Never)] private bool ShouldSerializeActiveRowIndicatorColor() { return (_ActiveRowIndicatorColor.IsEmpty == false); } /// /// Resets property to its default value. /// [EditorBrowsable(EditorBrowsableState.Never)] private void ResetActiveRowIndicatorColor() { _ActiveRowIndicatorColor = Color.Empty; } #endregion #region DirtyMarkerBackground /// /// Gets or sets the DirtyRow marker background /// [Description("Indicates the DirtyRow marker background")] public Background DirtyMarkerBackground { get { if (_DirtyMarkerBackground == null) { _DirtyMarkerBackground = Background.Empty; UpdateChangeHandler(null, _DirtyMarkerBackground); } return (_DirtyMarkerBackground); } set { if (_DirtyMarkerBackground != value) { UpdateChangeHandler(_DirtyMarkerBackground, value); _DirtyMarkerBackground = value; OnPropertyChangedEx("DirtyMarkerBackground", VisualChangeType.Render); } } } /// /// Gets whether property should be serialized. /// [EditorBrowsable(EditorBrowsableState.Never)] private bool ShouldSerializeDirtyMarkerBackground() { return (_DirtyMarkerBackground != null && _DirtyMarkerBackground.IsEmpty == false); } /// /// Resets property to its default value. /// [EditorBrowsable(EditorBrowsableState.Never)] private void ResetDirtyMarkerBackground() { DirtyMarkerBackground = null; } #endregion #region EditingRowImage /// /// Gets or sets the Editing Row Image /// [DefaultValue(null), Category("Appearance")] [Description("Indicates the Editing Row image")] public Image EditingRowImage { get { return (_EditingRowImage); } set { if (_EditingRowImage != value) { _EditingRowImage = value; OnPropertyChangedEx("EditingRowImage", VisualChangeType.Layout); } } } #endregion #region EditingRowImageIndex /// /// Gets or sets the Editing Row image index /// [Browsable(true), DefaultValue(-1)] [Category("Appearance"), Description("Indicates the Editing Row image index")] [Editor("DevComponents.SuperGrid.Design.ImageIndexEditor, DevComponents.SuperGrid.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=26d81176cfa2b486", typeof(UITypeEditor))] [TypeConverter(typeof(ImageIndexConverter))] public int EditingRowImageIndex { get { return (_EditingRowImageIndex); } set { if (_EditingRowImageIndex != value) { _EditingRowImageIndex = value; OnPropertyChangedEx("EditingRowImageIndex", VisualChangeType.Layout); } } } [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] private void ResetEditingRowImageIndex() { _EditingRowImageIndex = -1; } #endregion #region InfoRowImage /// /// Gets or sets the Info Row Image /// [DefaultValue(null), Category("Appearance")] [Description("Indicates the Info Row image")] public Image InfoRowImage { get { return (_InfoRowImage); } set { if (_InfoRowImage != value) { _InfoRowImage = value; OnPropertyChangedEx("InfoRowImage", VisualChangeType.Layout); } } } #endregion #region InfoRowImageIndex /// /// Gets or sets the Info Row image index /// [Browsable(true), DefaultValue(-1)] [Category("Appearance"), Description("Indicates the Info Row image index")] [Editor("DevComponents.SuperGrid.Design.ImageIndexEditor, DevComponents.SuperGrid.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=26d81176cfa2b486", typeof(UITypeEditor))] [TypeConverter(typeof(ImageIndexConverter))] public int InfoRowImageIndex { get { return (_InfoRowImageIndex); } set { if (_InfoRowImageIndex != value) { _InfoRowImageIndex = value; OnPropertyChangedEx("InfoRowImageIndex", VisualChangeType.Layout); } } } [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] private void ResetInfoRowImageIndex() { _InfoRowImageIndex = -1; } #endregion #endregion #region GetActiveRowImage internal Image GetActiveRowImage(GridPanel panel) { if (_ActiveRowImage != null) return (_ActiveRowImage); if (_ActiveRowImageIndex >= 0 && panel != null) { ImageList imageList = panel.ImageList; if (imageList != null && _ActiveRowImageIndex < imageList.Images.Count) return (imageList.Images[_ActiveRowImageIndex]); } return (GetActiveRowImage()); } #region GetActiveRowImage private Image GetActiveRowImage() { if (_ActiveRowImage != null) return (_ActiveRowImage); if (_ActiveRowImageCache == null) { Rectangle r = new Rectangle(0, 0, Dpi.Width4, Dpi.Height7); Image image = new Bitmap(Dpi.Width4, Dpi.Height7); using (Graphics g = Graphics.FromImage(image)) { using (GraphicsPath path = new GraphicsPath()) { Point pt = new Point(r.Right, r.Y + r.Height / 2); Point[] pts = { pt, new Point(pt.X - Dpi.Width4, pt.Y + Dpi.Height4), new Point(pt.X - Dpi.Width4, pt.Y - Dpi.Height4), pt }; path.AddLines(pts); Color color = ActiveRowIndicatorColor; if (color.IsEmpty) color = Color.Black; using (Brush br = new SolidBrush(color)) g.FillPath(br, path); } } _ActiveRowImageCache = image; } return (_ActiveRowImageCache); } #endregion #endregion #region GetEditingRowImage internal Image GetEditingRowImage(GridPanel panel) { if (_EditingRowImage != null) return (_EditingRowImage); if (_EditingRowImageIndex >= 0 && panel != null) { ImageList imageList = panel.ImageList; if (imageList != null && _EditingRowImageIndex < imageList.Images.Count) return (imageList.Images[_EditingRowImageIndex]); } if (_EditingRowImageCache == null) _EditingRowImageCache = panel.GetResourceImage("Pencil"); return (_EditingRowImageCache); } #endregion #region GetInfoRowImage internal Image GetInfoRowImage(GridPanel panel) { if (_InfoRowImage != null) return (_InfoRowImage); if (_InfoRowImageIndex >= 0 && panel != null) { ImageList imageList = panel.ImageList; if (imageList != null && _InfoRowImageIndex < imageList.Images.Count) return (imageList.Images[_InfoRowImageIndex]); } if (_InfoRowImageCache == null) _InfoRowImageCache = panel.GetResourceImage("InfoImage"); return (_InfoRowImageCache); } #endregion #region ApplyStyle /// /// Applies the style to instance of this style. /// /// Style to apply. public void ApplyStyle(RowHeaderVisualStyle style) { if (style != null) { base.ApplyStyle(style); if (style._ActiveRowIndicatorColor.IsEmpty == false) _ActiveRowIndicatorColor = style._ActiveRowIndicatorColor; if (style._ActiveRowBackground != null && style._ActiveRowBackground.IsEmpty == false) _ActiveRowBackground = style._ActiveRowBackground.Copy(); if (style._DirtyMarkerBackground != null && style._DirtyMarkerBackground.IsEmpty == false) _DirtyMarkerBackground = style._DirtyMarkerBackground.Copy(); if (style.ActiveRowImageIndex >= 0) { _ActiveRowImage = null; _ActiveRowImageIndex = style.ActiveRowImageIndex; } if (style.ActiveRowImage != null) { _ActiveRowImage = style.ActiveRowImage; _ActiveRowImageIndex = -1; } if (style.EditingRowImageIndex >= 0) { _EditingRowImage = null; _EditingRowImageIndex = style.EditingRowImageIndex; } if (style.EditingRowImage != null) { _EditingRowImage = style.EditingRowImage; _EditingRowImageIndex = -1; } if (style.InfoRowImageIndex >= 0) { _InfoRowImage = null; _InfoRowImageIndex = style.InfoRowImageIndex; } if (style.InfoRowImage != null) { _InfoRowImage = style.InfoRowImage; _InfoRowImageIndex = -1; } } } #endregion #region Copy /// /// Returns the copy of the style. /// /// Copy of the style. public new RowHeaderVisualStyle Copy() { RowHeaderVisualStyle copy = new RowHeaderVisualStyle(); CopyTo(copy); return (copy); } #endregion #region CopyTo /// /// Returns the copy of the style. /// /// Copy of the style. public void CopyTo(RowHeaderVisualStyle copy) { base.CopyTo(copy); if (_ActiveRowIndicatorColor.IsEmpty == false) copy.ActiveRowIndicatorColor = _ActiveRowIndicatorColor; if (_ActiveRowBackground != null) copy.ActiveRowBackground = _ActiveRowBackground.Copy(); if (_DirtyMarkerBackground != null) copy.DirtyMarkerBackground = _DirtyMarkerBackground.Copy(); copy.ActiveRowImage = _ActiveRowImage; copy.ActiveRowImageIndex = _ActiveRowImageIndex; copy.EditingRowImage = _EditingRowImage; copy.EditingRowImageIndex = _EditingRowImageIndex; copy.InfoRowImage = _InfoRowImage; copy.InfoRowImageIndex = _InfoRowImageIndex; } #endregion #region IDisposable /// /// Dispose /// public override void Dispose() { DirtyMarkerBackground = null; ActiveRowBackground = null; base.Dispose(); } #endregion } }