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();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |