DotNet 4.8.1 build of DotNetBar
This commit is contained in:
570
PROMS/DotNetBar Source Code/AdvTree/CellImages.cs
Normal file
570
PROMS/DotNetBar Source Code/AdvTree/CellImages.cs
Normal file
@@ -0,0 +1,570 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.ComponentModel;
|
||||
using DevComponents.DotNetBar;
|
||||
|
||||
namespace DevComponents.AdvTree
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents class that holds images for a cell.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If you plan to use alpha-blended images we recommend using PNG-24 format which
|
||||
/// supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support
|
||||
/// alpha-blending when used through Image class.
|
||||
/// </remarks>
|
||||
[ToolboxItem(false), TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))]
|
||||
public class CellImages
|
||||
{
|
||||
// Image variables
|
||||
private System.Drawing.Image m_Image=null;
|
||||
private System.Drawing.Image m_DisabledImageGenerated = null;
|
||||
private int m_ImageIndex=-1; // Image index if image from ImageList is used
|
||||
private System.Drawing.Image m_ImageMouseOver=null;
|
||||
private int m_ImageMouseOverIndex=-1; // Image index if image from ImageList is used
|
||||
private System.Drawing.Image m_ImageDisabled=null;
|
||||
// private bool m_DisabledImageCustom=false;
|
||||
private int m_ImageDisabledIndex=-1; // Image index if image from ImageList is used
|
||||
private System.Drawing.Image m_ImageExpanded=null;
|
||||
private int m_ImageExpandedIndex=-1;
|
||||
private Cell m_ParentCell=null;
|
||||
private Size m_LargestImageSize=Size.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes new instance of CellImages class.
|
||||
/// </summary>
|
||||
/// <param name="parentCell">Reference to parent cell.</param>
|
||||
public CellImages(Cell parentCell)
|
||||
{
|
||||
m_ParentCell=parentCell;
|
||||
}
|
||||
|
||||
#region Properties
|
||||
|
||||
internal System.Drawing.Image DisabledImageGenerated
|
||||
{
|
||||
get { return m_DisabledImageGenerated; }
|
||||
set
|
||||
{
|
||||
m_DisabledImageGenerated = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets default cell image. Setting this property to valid image will
|
||||
/// override any setting of ImageIndex property.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// <para>The image set through this property will be serialized with the cell. If you
|
||||
/// plan to use ImageList then use <see cref="ImageIndex">ImageIndex</see>
|
||||
/// property.</para>
|
||||
/// <para>
|
||||
/// <para>If you plan to use alpha-blended images we recommend using PNG-24 format
|
||||
/// which supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1
|
||||
/// do not support alpha-blending when used through Image class.</para>
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
/// <value>Image object or <strong>null (Nothing)</strong> if no image is assigned.</value>
|
||||
[Browsable(true),DefaultValue(null),Category("Images"),Description("Indicates default cell image"), DevCoSerialize()]
|
||||
public System.Drawing.Image Image
|
||||
{
|
||||
get {return m_Image;}
|
||||
set
|
||||
{
|
||||
ChangeImage(ref m_Image, value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets Image property to it's default value (null, VB nothing).
|
||||
/// </summary>
|
||||
public void ResetImage()
|
||||
{
|
||||
TypeDescriptor.GetProperties(this)["Image"].SetValue(this, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the image that is displayed when mouse is over the cell. Setting
|
||||
/// this property to valid image will override any setting of ImageMouseOverIndex
|
||||
/// property.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If you plan to use alpha-blended images we recommend using PNG-24 format which
|
||||
/// supports alpha-blending. As of this writting .NET Framework 1.0 and 1.1 do not support
|
||||
/// alpha-blending when used through Image class.
|
||||
/// </remarks>
|
||||
[Browsable(true),DefaultValue(null),Category("Images"),Description("Indicates cell image when mouse is over the cell"), DevCoSerialize()]
|
||||
public System.Drawing.Image ImageMouseOver
|
||||
{
|
||||
get {return m_ImageMouseOver;}
|
||||
set
|
||||
{
|
||||
ChangeImage(ref m_ImageMouseOver, value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets ImageMouseOver to it's default value (null, VB nothing).
|
||||
/// </summary>
|
||||
public void ResetImageMouseOver()
|
||||
{
|
||||
TypeDescriptor.GetProperties(this)["ImageMouseOver"].SetValue(this, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the image that is displayed when cell is disabled. If not assigned
|
||||
/// disabled image is created from default cell image. Setting this property to valid image
|
||||
/// will override any setting of ImageDisabledIndex property.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If you plan to use alpha-blended images we recommend using PNG-24 format which
|
||||
/// supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support
|
||||
/// alpha-blending when used through Image class.
|
||||
/// </remarks>
|
||||
[Browsable(true), DefaultValue(null), Category("Images"), Description("Indicates disabled cell image")]
|
||||
public System.Drawing.Image ImageDisabled
|
||||
{
|
||||
get { return m_ImageDisabled; }
|
||||
set
|
||||
{
|
||||
ChangeImage(ref m_ImageDisabled, value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets ImageDisabled to it's default value (null, VB nothing).
|
||||
/// </summary>
|
||||
public void ResetImageDisabled()
|
||||
{
|
||||
this.ImageDisabled = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets image that is displayed when Node that this cell belongs to is
|
||||
/// expanded. Setting this property to valid image will override any setting of
|
||||
/// ImageExpandedIndex property.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If you plan to use alpha-blended images we recommend using PNG-24 format which
|
||||
/// supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support
|
||||
/// alpha-blending when used through Image class.
|
||||
/// </remarks>
|
||||
[Browsable(true),DefaultValue(null),Category("Images"),Description("Indicates cell image when node associtaed with this cell is expanded"), DevCoSerialize()]
|
||||
public System.Drawing.Image ImageExpanded
|
||||
{
|
||||
get {return m_ImageExpanded;}
|
||||
set
|
||||
{
|
||||
ChangeImage(ref m_ImageExpanded, value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets ImageExpanded to it's default value (null, VB nothing).
|
||||
/// </summary>
|
||||
public void ResetImageExpanded()
|
||||
{
|
||||
TypeDescriptor.GetProperties(this)["ImageExpanded"].SetValue(this, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the Index of default cell image from ImageList specified on AdvTree
|
||||
/// control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If you plan to use alpha-blended images we recommend using PNG-24 format which
|
||||
/// supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support
|
||||
/// alpha-blending when used through Image class.
|
||||
/// </remarks>
|
||||
[Browsable(true),DefaultValue(-1),Category("ImageList Images"),Description("Indicates default cell image"), DevCoSerialize()]
|
||||
public int ImageIndex
|
||||
{
|
||||
get {return m_ImageIndex;}
|
||||
set
|
||||
{
|
||||
m_ImageIndex=value;
|
||||
this.OnImageChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private string _ImageKey = "";
|
||||
/// <summary>
|
||||
/// Gets or sets the key of the default cell image from ImageList specified on AdvTree control.
|
||||
/// </summary>
|
||||
[DefaultValue(""), Category("ImageList Images"), Description("Indicates the default cell image key"), DevCoSerialize()]
|
||||
public string ImageKey
|
||||
{
|
||||
get { return _ImageKey; }
|
||||
set
|
||||
{
|
||||
_ImageKey = value;
|
||||
this.OnImageChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Property Editor support for ImageIndex selection
|
||||
/// </summary>
|
||||
[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
|
||||
public System.Windows.Forms.ImageList ImageList
|
||||
{
|
||||
get
|
||||
{
|
||||
if(this.Parent!=null)
|
||||
{
|
||||
AdvTree tree=this.Parent.TreeControl;
|
||||
if(tree!=null)
|
||||
{
|
||||
return tree.ImageList;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks>
|
||||
/// If you plan to use alpha-blended images we recommend using PNG-24 format which
|
||||
/// supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support
|
||||
/// alpha-blending when used through Image class.
|
||||
/// </remarks>
|
||||
/// <summary>
|
||||
/// Gets or sets the Index of cell image when mouse is over the cell from ImageList
|
||||
/// specified on AdvTree control.
|
||||
/// </summary>
|
||||
[Browsable(true),DefaultValue(-1),Category("ImageList Images"),Description("Indicates cell image when mouse is over the cell"), DevCoSerialize()]
|
||||
public int ImageMouseOverIndex
|
||||
{
|
||||
get {return m_ImageMouseOverIndex;}
|
||||
set
|
||||
{
|
||||
m_ImageMouseOverIndex=value;
|
||||
this.OnImageChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private string _ImageMouseOverKey = "";
|
||||
/// <remarks>
|
||||
/// If you plan to use alpha-blended images we recommend using PNG-24 format which
|
||||
/// supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support
|
||||
/// alpha-blending when used through Image class.
|
||||
/// </remarks>
|
||||
/// <summary>
|
||||
/// Gets or sets the key of cell image when mouse is over the cell from ImageList
|
||||
/// specified on AdvTree control.
|
||||
/// </summary>
|
||||
[Browsable(true), DefaultValue(""), Category("ImageList Images"), Description("Indicates cell image when mouse is over the cell"), DevCoSerialize()]
|
||||
public string ImageMouseOverKey
|
||||
{
|
||||
get { return _ImageMouseOverKey; }
|
||||
set
|
||||
{
|
||||
_ImageMouseOverKey = value;
|
||||
this.OnImageChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks>
|
||||
/// If you plan to use alpha-blended images we recommend using PNG-24 format which
|
||||
/// supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support
|
||||
/// alpha-blending when used through Image class.
|
||||
/// </remarks>
|
||||
/// <summary>
|
||||
/// Gets or sets the Index of disabled cell image from ImageList specified on AdvTree
|
||||
/// control.
|
||||
/// </summary>
|
||||
[Browsable(true), DefaultValue(-1), Category("ImageList Images"), Description("Indicates disabled cell image")]
|
||||
public int ImageDisabledIndex
|
||||
{
|
||||
get { return m_ImageDisabledIndex; }
|
||||
set
|
||||
{
|
||||
m_ImageDisabledIndex = value;
|
||||
this.OnImageChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private string _ImageDisabledKey = "";
|
||||
/// <remarks>
|
||||
/// If you plan to use alpha-blended images we recommend using PNG-24 format which
|
||||
/// supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support
|
||||
/// alpha-blending when used through Image class.
|
||||
/// </remarks>
|
||||
/// <summary>
|
||||
/// Gets or sets the key of disabled cell image from ImageList specified on AdvTree
|
||||
/// control.
|
||||
/// </summary>
|
||||
[Browsable(true), DefaultValue(""), Category("ImageList Images"), Description("Indicates disabled cell image")]
|
||||
public string ImageDisabledKey
|
||||
{
|
||||
get { return _ImageDisabledKey; }
|
||||
set
|
||||
{
|
||||
_ImageDisabledKey = value;
|
||||
this.OnImageChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks>
|
||||
/// If you plan to use alpha-blended images we recommend using PNG-24 format which
|
||||
/// supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support
|
||||
/// alpha-blending when used through Image class.
|
||||
/// </remarks>
|
||||
/// <summary>
|
||||
/// Gets or sets the Index of cell image from ImageList specified on AdvTree control
|
||||
/// that is used when Node associated with this cell is expanded
|
||||
/// </summary>
|
||||
[Browsable(true),DefaultValue(-1),Category("ImageList Images"),Description("Indicates expanded cell image"), DevCoSerialize()]
|
||||
public int ImageExpandedIndex
|
||||
{
|
||||
get {return m_ImageExpandedIndex;}
|
||||
set
|
||||
{
|
||||
m_ImageExpandedIndex=value;
|
||||
this.OnImageChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private string _ImageExpandedKey = "";
|
||||
/// <remarks>
|
||||
/// If you plan to use alpha-blended images we recommend using PNG-24 format which
|
||||
/// supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support
|
||||
/// alpha-blending when used through Image class.
|
||||
/// </remarks>
|
||||
/// <summary>
|
||||
/// Gets or sets the key of cell image from ImageList specified on AdvTree control
|
||||
/// that is used when Node associated with this cell is expanded
|
||||
/// </summary>
|
||||
[Browsable(true), DefaultValue(""), Category("ImageList Images"), Description("Indicates expanded cell image"), DevCoSerialize()]
|
||||
public string ImageExpandedKey
|
||||
{
|
||||
get { return _ImageExpandedKey; }
|
||||
set
|
||||
{
|
||||
_ImageExpandedKey = value;
|
||||
this.OnImageChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the parent node of the cell.
|
||||
/// </summary>
|
||||
[Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
public Cell Parent
|
||||
{
|
||||
get {return m_ParentCell;}
|
||||
set {m_ParentCell=value;}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets whether CellImages object should be serialized or not. If object has all
|
||||
/// default values then this property will return <strong>false</strong>.
|
||||
/// </summary>
|
||||
internal bool ShouldSerialize
|
||||
{
|
||||
get
|
||||
{
|
||||
if(m_Image==null && m_ImageDisabled==null && m_ImageDisabledIndex==-1 &&
|
||||
m_ImageExpanded==null && m_ImageExpandedIndex==-1 && m_ImageIndex==-1 &&
|
||||
m_ImageMouseOver==null && m_ImageMouseOverIndex==-1)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns largest image size in this set of images.
|
||||
/// </summary>
|
||||
internal Size LargestImageSize
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_LargestImageSize;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
/// <summary>Makes a copy of a CellImages object.</summary>
|
||||
public virtual CellImages Copy()
|
||||
{
|
||||
CellImages ci=new CellImages(null);
|
||||
ci.Image=this.Image;
|
||||
// ci.ImageDisabled=this.ImageDisabled;
|
||||
// ci.ImageDisabledIndex=this.ImageDisabledIndex;
|
||||
ci.ImageExpanded = this.ImageExpanded == null ? null : (Image) this.ImageExpanded.Clone();
|
||||
ci.ImageExpandedIndex=this.ImageExpandedIndex;
|
||||
ci.ImageIndex=this.ImageIndex;
|
||||
ci.ImageMouseOver=this.ImageMouseOver == null? null : (Image)this.ImageMouseOver.Clone();
|
||||
ci.ImageMouseOverIndex=this.ImageMouseOverIndex;
|
||||
ci.ImageDisabledKey = this.ImageDisabledKey;
|
||||
ci.ImageExpandedKey = this.ImageExpandedKey;
|
||||
ci.ImageKey = this.ImageKey;
|
||||
ci.ImageMouseOverKey = this.ImageMouseOverKey;
|
||||
return ci;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Internals
|
||||
/// <summary>
|
||||
/// Changes the image and invokes largest image size calculation if the
|
||||
/// image size truly changed.
|
||||
/// </summary>
|
||||
/// <param name="currentImage"></param>
|
||||
/// <param name="newImage"></param>
|
||||
private void ChangeImage(ref System.Drawing.Image currentImage, System.Drawing.Image newImage)
|
||||
{
|
||||
// Early out if no real change
|
||||
if (currentImage == newImage)
|
||||
return;
|
||||
|
||||
// Hold onto previous image
|
||||
System.Drawing.Image previousImage = currentImage;
|
||||
|
||||
// Assign new image
|
||||
currentImage = newImage;
|
||||
|
||||
// If either current or previous is null, or the sizes don't match,
|
||||
// we need to resize ourselves and the parent.
|
||||
if (previousImage == null || currentImage == null || GetImageSize(previousImage) != GetImageSize(currentImage))
|
||||
{
|
||||
RefreshLargestImageSize();
|
||||
|
||||
if (this.Parent != null)
|
||||
this.Parent.OnImageChanged();
|
||||
}
|
||||
|
||||
// Dispose the generated disabled image, if applicable.
|
||||
DisposeGeneratedDisabledImage();
|
||||
}
|
||||
private Size GetImageSize(Image image)
|
||||
{
|
||||
try
|
||||
{
|
||||
return image.Size;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return Size.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnImageChanged()
|
||||
{
|
||||
RefreshLargestImageSize();
|
||||
if (this.Parent != null)
|
||||
this.Parent.OnImageChanged();
|
||||
DisposeGeneratedDisabledImage();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
DisposeGeneratedDisabledImage();
|
||||
if (BarUtilities.DisposeItemImages || _AutoDispose)
|
||||
{
|
||||
BarUtilities.DisposeImage(ref m_Image);
|
||||
BarUtilities.DisposeImage(ref m_ImageDisabled);
|
||||
BarUtilities.DisposeImage(ref m_ImageExpanded);
|
||||
BarUtilities.DisposeImage(ref m_ImageMouseOver);
|
||||
}
|
||||
}
|
||||
|
||||
internal void DisposeGeneratedDisabledImage()
|
||||
{
|
||||
if (m_DisabledImageGenerated != null)
|
||||
{
|
||||
m_DisabledImageGenerated.Dispose();
|
||||
m_DisabledImageGenerated = null;
|
||||
}
|
||||
}
|
||||
|
||||
internal void RefreshLargestImageSize()
|
||||
{
|
||||
m_LargestImageSize=Size.Empty;
|
||||
AdjustSize(m_Image,ref m_LargestImageSize);
|
||||
AdjustSize(m_ImageDisabled,ref m_LargestImageSize);
|
||||
AdjustSize(m_ImageExpanded,ref m_LargestImageSize);
|
||||
AdjustSize(m_ImageMouseOver,ref m_LargestImageSize);
|
||||
|
||||
AdjustSize(GetImageByIndex(m_ImageIndex),ref m_LargestImageSize);
|
||||
AdjustSize(GetImageByIndex(m_ImageDisabledIndex),ref m_LargestImageSize);
|
||||
AdjustSize(GetImageByIndex(m_ImageExpandedIndex),ref m_LargestImageSize);
|
||||
AdjustSize(GetImageByIndex(m_ImageMouseOverIndex),ref m_LargestImageSize);
|
||||
|
||||
AdjustSize(GetImageByKey(_ImageKey), ref m_LargestImageSize);
|
||||
AdjustSize(GetImageByKey(_ImageDisabledKey), ref m_LargestImageSize);
|
||||
AdjustSize(GetImageByKey(_ImageExpandedKey), ref m_LargestImageSize);
|
||||
AdjustSize(GetImageByKey(_ImageMouseOverKey), ref m_LargestImageSize);
|
||||
}
|
||||
private void AdjustSize(System.Drawing.Image image, ref Size size)
|
||||
{
|
||||
if(image!=null)
|
||||
{
|
||||
if(image.Width>size.Width)
|
||||
size.Width=image.Width;
|
||||
if(image.Height>size.Height)
|
||||
size.Height=image.Height;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Returns image from image list based on the image index.
|
||||
/// </summary>
|
||||
/// <param name="imageIndex">Index of the image to return.</param>
|
||||
/// <returns>Image object from image list.</returns>
|
||||
internal System.Drawing.Image GetImageByIndex(int imageIndex)
|
||||
{
|
||||
if (imageIndex >= 0 && this.Parent != null && this.Parent.TreeControl != null && this.Parent.TreeControl.ImageList != null && this.Parent.TreeControl.ImageList.Images.Count > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
return this.Parent.TreeControl.ImageList.Images[imageIndex];
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns image from image list based on the image key.
|
||||
/// </summary>
|
||||
/// <param name="key">Key of the image to return.</param>
|
||||
/// <returns>Image object from image list.</returns>
|
||||
internal System.Drawing.Image GetImageByKey(string key)
|
||||
{
|
||||
if (string.IsNullOrEmpty(key)) return null;
|
||||
|
||||
Cell parent = this.Parent;
|
||||
if (parent == null) return null;
|
||||
|
||||
AdvTree tree = parent.TreeControl;
|
||||
if (tree == null || tree.ImageList == null || !tree.ImageList.Images.ContainsKey(key)) return null;
|
||||
|
||||
return tree.ImageList.Images[key];
|
||||
}
|
||||
|
||||
private bool _AutoDispose = false;
|
||||
/// <summary>
|
||||
/// Indicates whether assigned images are automatically disposed when the cell and node are disposed. Default value is false.
|
||||
/// </summary>
|
||||
[Browsable(false), DefaultValue(false)]
|
||||
public bool AutoDispose
|
||||
{
|
||||
get { return _AutoDispose; }
|
||||
set
|
||||
{
|
||||
_AutoDispose = value;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user