195 lines
6.7 KiB
C#
195 lines
6.7 KiB
C#
namespace DevComponents.DotNetBar
|
|
{
|
|
using System;
|
|
using System.Drawing;
|
|
|
|
/// <summary>
|
|
/// Adds neccessary functions to base item so it supports images properly.
|
|
/// If your item implements images you should derive from this class instead of BaseItem
|
|
/// </summary>
|
|
[System.ComponentModel.ToolboxItem(false),System.ComponentModel.DesignTimeVisible(false)]
|
|
public abstract class ImageItem:BaseItem
|
|
{
|
|
private System.Drawing.Size m_SubItemsImageSize; // Biggest Image size for the sub items, they would access this property so they know how to draw themself
|
|
private System.Drawing.Size m_ImageSize;
|
|
internal static System.Drawing.Size _InitalImageSize=new System.Drawing.Size(16,16);
|
|
/// <summary>
|
|
/// Create new instance of ImageItem.
|
|
/// </summary>
|
|
public ImageItem():this("","") {}
|
|
/// <summary>
|
|
/// Create new instance of ImageItem and assigns the item name.
|
|
/// </summary>
|
|
/// <param name="sName">Item name.</param>
|
|
public ImageItem(string sName):this(sName,"") {}
|
|
/// <summary>
|
|
/// Create new instance of ImageItem and assigns the item name and text.
|
|
/// </summary>
|
|
/// <param name="sName">Item name.</param>
|
|
/// <param name="ItemText">Item text.</param>
|
|
public ImageItem(string sName, string ItemText):base(sName, ItemText)
|
|
{
|
|
m_SubItemsImageSize=_InitalImageSize;
|
|
m_ImageSize=_InitalImageSize;
|
|
}
|
|
|
|
[System.ComponentModel.Browsable(false),System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
|
|
public virtual System.Drawing.Size ImageSize
|
|
{
|
|
get
|
|
{
|
|
return m_ImageSize;
|
|
}
|
|
set
|
|
{
|
|
m_ImageSize=value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// When parent items does recalc size for its sub-items it should query
|
|
/// image size and store biggest image size into this property.
|
|
/// </summary>
|
|
[System.ComponentModel.Browsable(false),System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
|
|
public virtual System.Drawing.Size SubItemsImageSize
|
|
{
|
|
get
|
|
{
|
|
return m_SubItemsImageSize;
|
|
}
|
|
set
|
|
{
|
|
m_SubItemsImageSize=value;
|
|
}
|
|
}
|
|
|
|
protected internal override void OnItemAdded(BaseItem objItem)
|
|
{
|
|
base.OnItemAdded(objItem);
|
|
ImageItem objImageItem=objItem as ImageItem;
|
|
if(objImageItem!=null)
|
|
{
|
|
Size newSize = m_SubItemsImageSize;
|
|
if(objImageItem.ImageSize.Width>m_SubItemsImageSize.Width)
|
|
newSize.Width = objImageItem.ImageSize.Width;
|
|
if(objImageItem.ImageSize.Height>m_SubItemsImageSize.Height)
|
|
newSize.Height = objImageItem.ImageSize.Height;
|
|
this.SubItemsImageSize = newSize;
|
|
}
|
|
}
|
|
|
|
/*public override void AddSubItem(BaseItem objItem, int Position)
|
|
{
|
|
base.AddSubItem(objItem, Position);
|
|
ImageItem objImageItem=objItem as ImageItem;
|
|
if(objImageItem!=null)
|
|
{
|
|
if(objImageItem.ImageSize.Width>m_SubItemsImageSize.Width)
|
|
m_SubItemsImageSize.Width=objImageItem.ImageSize.Width;
|
|
if(objImageItem.ImageSize.Height>m_SubItemsImageSize.Height)
|
|
m_SubItemsImageSize.Height=objImageItem.ImageSize.Height;
|
|
}
|
|
}*/
|
|
|
|
/// <summary>
|
|
/// Must be called by any sub item that implements the image when image has changed
|
|
/// </summary>
|
|
public virtual void OnSubItemImageSizeChanged(BaseItem objItem)
|
|
{
|
|
ImageItem objImageItem=objItem as ImageItem;
|
|
if(objImageItem==null)
|
|
return;
|
|
if(this.SubItems.Count==1)
|
|
{
|
|
this.SubItemsImageSize = new Size(objImageItem.ImageSize.Width, objImageItem.ImageSize.Height);
|
|
}
|
|
else
|
|
{
|
|
Size newSize = m_SubItemsImageSize;
|
|
if(objImageItem.ImageSize.Width>m_SubItemsImageSize.Width)
|
|
newSize.Width=objImageItem.ImageSize.Width;
|
|
if(objImageItem.ImageSize.Height>m_SubItemsImageSize.Height)
|
|
newSize.Height = objImageItem.ImageSize.Height;
|
|
this.SubItemsImageSize = newSize;
|
|
}
|
|
}
|
|
|
|
protected override void OnIsOnCustomizeDialogChanged()
|
|
{
|
|
if(this.IsOnCustomizeDialog && m_ImageSize.Width==_InitalImageSize.Width && m_ImageSize.Height==_InitalImageSize.Height)
|
|
m_ImageSize=new System.Drawing.Size(16,16);
|
|
base.OnIsOnCustomizeDialogChanged();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called after image on an item has changed.
|
|
/// </summary>
|
|
[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
|
|
public virtual void OnImageChanged(){}
|
|
|
|
/// <summary>
|
|
/// Refreshes internal image size structure.
|
|
/// </summary>
|
|
[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
|
|
public virtual void RefreshImageSize()
|
|
{
|
|
this.SubItemsImageSize=Dpi.Size(_InitalImageSize);
|
|
m_ImageSize=_InitalImageSize;
|
|
this.OnImageChanged();
|
|
if(m_SubItems!=null)
|
|
{
|
|
foreach(BaseItem item in this.SubItems)
|
|
{
|
|
if(item is ImageItem)
|
|
((ImageItem)item).RefreshImageSize();
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Occurs after an item has been removed.
|
|
/// </summary>
|
|
/// <param name="item">Item being removed.</param>
|
|
protected internal override void OnAfterItemRemoved(BaseItem item, int itemIndex)
|
|
{
|
|
base.OnAfterItemRemoved(item, itemIndex);
|
|
if (item != null)
|
|
this.RefreshSubItemImageSize();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Refreshes internal image size structure.
|
|
/// </summary>
|
|
[System.ComponentModel.Browsable(false),System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
|
|
public virtual void RefreshSubItemImageSize()
|
|
{
|
|
this.SubItemsImageSize=System.Drawing.Size.Empty;
|
|
if(m_SubItems!=null)
|
|
{
|
|
foreach(BaseItem item in this.SubItems)
|
|
{
|
|
ImageItem objImageItem=item as ImageItem;
|
|
if(objImageItem!=null)
|
|
{
|
|
Size newSize = m_SubItemsImageSize;
|
|
if(objImageItem.ImageSize.Width>m_SubItemsImageSize.Width)
|
|
newSize.Width=objImageItem.ImageSize.Width;
|
|
if(objImageItem.ImageSize.Height>m_SubItemsImageSize.Height)
|
|
newSize.Height=objImageItem.ImageSize.Height;
|
|
this.SubItemsImageSize = newSize;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (this.SubItemsImageSize.IsEmpty)
|
|
this.SubItemsImageSize = Dpi.Size(_InitalImageSize);
|
|
}
|
|
|
|
protected override void ScaleItem(SizeF factor)
|
|
{
|
|
base.ScaleItem(factor); // Notify children first so they can update image size and so we can pick it up next
|
|
RefreshSubItemImageSize();
|
|
}
|
|
}
|
|
}
|