664 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			664 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Text;
 | 
						|
using System.Drawing;
 | 
						|
using System.Drawing.Design;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Collections;
 | 
						|
using DevComponents.DotNetBar.Rendering;
 | 
						|
using System.Windows.Forms;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Represents compact tree bread-crumb control.
 | 
						|
    /// </summary>
 | 
						|
    [ToolboxBitmap(typeof(CrumbBar), "CrumbBar.CrumbBar.ico"), ToolboxItem(true), Designer("DevComponents.DotNetBar.Design.CrumbBarDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf"), System.Runtime.InteropServices.ComVisible(false), DefaultEvent("SelectedItemChanged")]
 | 
						|
    public class CrumbBar : ItemControl
 | 
						|
    {
 | 
						|
        #region Private Variables
 | 
						|
        private CrumbBarItemsCollection _Items = null;
 | 
						|
        private CrumbBarViewContainer _ViewContainer = null;
 | 
						|
        private Office2007Renderer _VistaRenderer = null;
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Events
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs before SelectedItem has changed and provides opportunity to cancel the change. Set Cancel property on event arguments to true to cancel the change.
 | 
						|
        /// </summary>
 | 
						|
        [Description("Occurs before SelectedItem has changed and provides opportunity to cancel the change.")]
 | 
						|
        public event CrumBarSelectionEventHandler SelectedItemChanging;
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs after SelectedItem has changed. The change of the selected item at this point cannot be canceled. For that use SelectedItemChanging event.
 | 
						|
        /// </summary>
 | 
						|
        public event CrumBarSelectionEventHandler SelectedItemChanged;
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Constructor
 | 
						|
        /// <summary>
 | 
						|
        /// Initializes a new instance of the CrumbBar class.
 | 
						|
        /// </summary>
 | 
						|
        public CrumbBar()
 | 
						|
            : base()
 | 
						|
        {
 | 
						|
            _Items = new CrumbBarItemsCollection(this);
 | 
						|
 | 
						|
            _ViewContainer = new CrumbBarViewContainer();
 | 
						|
            _ViewContainer.GlobalItem = false;
 | 
						|
            _ViewContainer.ContainerControl = this;
 | 
						|
            _ViewContainer.Displayed = true;
 | 
						|
            _ViewContainer.Style = eDotNetBarStyle.StyleManagerControlled;
 | 
						|
            this.ColorScheme.Style = eDotNetBarStyle.StyleManagerControlled;
 | 
						|
            _ViewContainer.SetOwner(this);
 | 
						|
            InitializeVistaRenderer();
 | 
						|
            this.SetBaseItemContainer(_ViewContainer);
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Internal Implementation
 | 
						|
        private CrumbBarItem FindCrumbBarItem(IList subitems, string name)
 | 
						|
        {
 | 
						|
            foreach (CrumbBarItem item in subitems)
 | 
						|
            {
 | 
						|
                if (item.Name == name)
 | 
						|
                {
 | 
						|
                    return item;
 | 
						|
                }
 | 
						|
                CrumbBarItem childItem = FindCrumbBarItem(item.SubItems, name);
 | 
						|
                if ((childItem != null)) return childItem;
 | 
						|
            }
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Finds CrumbBarItem with specified name.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="name">Name of item to look for</param>
 | 
						|
        /// <returns>Item or null if no item was found.</returns>
 | 
						|
        public CrumbBarItem FindByName(string name)
 | 
						|
        {
 | 
						|
            return FindCrumbBarItem(this.Items, name);
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        private CrumbBarItem _SelectedItem;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets currently selected item.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(null), Category("Appearance"), Description("Indicates currently selected item")]
 | 
						|
        public CrumbBarItem SelectedItem
 | 
						|
        {
 | 
						|
            get { return _SelectedItem; }
 | 
						|
            set 
 | 
						|
            {
 | 
						|
                SetSelectedItem(value, eEventSource.Code);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        internal void OnItemsCleared()
 | 
						|
        {
 | 
						|
            this.SelectedItem = null;
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Sets the currently selected item in the control.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="selection">Reference to selected item.</param>
 | 
						|
        /// <param name="source">Source of the event.</param>
 | 
						|
        public void SetSelectedItem(CrumbBarItem selection, eEventSource source)
 | 
						|
        {
 | 
						|
            bool raiseChangedEvents = selection != _SelectedItem;
 | 
						|
 | 
						|
            if (raiseChangedEvents)
 | 
						|
            {
 | 
						|
                CrumbBarSelectionEventArgs eventArgs = new CrumbBarSelectionEventArgs(selection);
 | 
						|
                OnSelectedItemChanging(eventArgs);
 | 
						|
                if (eventArgs.Cancel) return;
 | 
						|
                selection = eventArgs.NewSelectedItem;
 | 
						|
            }
 | 
						|
 | 
						|
            if (_SelectedItem != null)
 | 
						|
                _SelectedItem.IsSelected = false;
 | 
						|
 | 
						|
            ArrayList newItems = new ArrayList();
 | 
						|
            if (selection == null)
 | 
						|
                selection = GetFirstVisibleItem();
 | 
						|
            _ViewContainer.Expanded = false; // closes any open popups
 | 
						|
            _ViewContainer.RestoreOverflowItems();
 | 
						|
 | 
						|
            if (selection != null)
 | 
						|
            {
 | 
						|
                CrumbBarItem current = selection;
 | 
						|
                while (current != null)
 | 
						|
                {
 | 
						|
                    newItems.Insert(0, GetItemView(current, true));
 | 
						|
                    current = current.Parent as CrumbBarItem;
 | 
						|
                }
 | 
						|
 | 
						|
                UpdateSelectedItemImage(selection);
 | 
						|
            }
 | 
						|
            else
 | 
						|
                UpdateSelectedItemImage(null);
 | 
						|
 | 
						|
            // Remove current view items
 | 
						|
            _ViewContainer.ClearViewItems();
 | 
						|
            if (selection != null)
 | 
						|
            {
 | 
						|
                _ViewContainer.SubItems.AddRange((BaseItem[])newItems.ToArray(typeof(BaseItem)));
 | 
						|
            }
 | 
						|
            _ViewContainer.NeedRecalcSize = true;
 | 
						|
 | 
						|
            _SelectedItem = selection;
 | 
						|
            if (_SelectedItem != null)
 | 
						|
                _SelectedItem.IsSelected = true;
 | 
						|
 | 
						|
            this.RecalcLayout();
 | 
						|
 | 
						|
            if (raiseChangedEvents)
 | 
						|
            {
 | 
						|
                CrumbBarSelectionEventArgs eventArgs = new CrumbBarSelectionEventArgs(selection);
 | 
						|
                OnSelectedItemChanged(eventArgs);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        internal void RefreshView()
 | 
						|
        {
 | 
						|
            UpdateSelectedItemImage(_SelectedItem);
 | 
						|
        }
 | 
						|
 | 
						|
        private void UpdateSelectedItemImage(CrumbBarItem selection)
 | 
						|
        {
 | 
						|
            if (selection == null)
 | 
						|
            {
 | 
						|
                _ViewContainer.ImageLabel.Visible = false;
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            CompositeImage image = selection.GetImage();
 | 
						|
            if (image != null)
 | 
						|
            {
 | 
						|
                _ViewContainer.ImageLabel.Visible = true;
 | 
						|
                if (image.IsIcon)
 | 
						|
                    _ViewContainer.ImageLabel.Icon = image.Icon;
 | 
						|
                else
 | 
						|
                    _ViewContainer.ImageLabel.Image = image.Image;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                _ViewContainer.ImageLabel.Visible = false;
 | 
						|
            }            
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Shows the selected item popup menu if it has menu items.
 | 
						|
        /// </summary>
 | 
						|
        /// <returns>true if popup was shown otherwise false</returns>
 | 
						|
        public bool ShowSelectedItemPopupMenu()
 | 
						|
        {
 | 
						|
            CrumbBarItem selectedItem = this.SelectedItem;
 | 
						|
            if (selectedItem == null) throw new NullReferenceException("SelectedItem is null");
 | 
						|
            CrumbBarItemView view = GetItemView(selectedItem, false) as CrumbBarItemView;
 | 
						|
            if (view != null && !view.Expanded && view.AttachedItem != null && view.AttachedItem.SubItems.Count > 0)
 | 
						|
            {
 | 
						|
                view.Expanded = true;
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        private object GetItemView(CrumbBarItem current, bool canCreateNewView)
 | 
						|
        {
 | 
						|
            for (int i = 2; i < _ViewContainer.SubItems.Count; i++)
 | 
						|
            {
 | 
						|
                CrumbBarItemView view = _ViewContainer.SubItems[i] as CrumbBarItemView;
 | 
						|
                if (view != null && view.AttachedItem == current) return view;
 | 
						|
            }
 | 
						|
            if(canCreateNewView)
 | 
						|
                return CrumbBarItemView.CreateViewForItem(current);
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
        [EditorBrowsable(EditorBrowsableState.Never)]
 | 
						|
        public CrumbBarItem GetFirstVisibleItem()
 | 
						|
        {
 | 
						|
            foreach (CrumbBarItem crumbBarItem in Items)
 | 
						|
            {
 | 
						|
                if (crumbBarItem.Visible) return crumbBarItem;
 | 
						|
            }
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets whether an item is in selected path to the currently selected item as either one of the parents of selected item
 | 
						|
        /// or selected item itself.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="item">Item to test.</param>
 | 
						|
        /// <returns>true if item is in selected path otherwise false.</returns>
 | 
						|
        public bool GetIsInSelectedPath(CrumbBarItem item)
 | 
						|
        {
 | 
						|
            for (int i = 2; i < _ViewContainer.SubItems.Count; i++)
 | 
						|
            {
 | 
						|
                CrumbBarItemView view = _ViewContainer.SubItems[i] as CrumbBarItemView;
 | 
						|
                if (view != null && view.AttachedItem == item) return true;
 | 
						|
            }
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets collection of items assigned to the control.
 | 
						|
        /// </summary>
 | 
						|
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Editor("DevComponents.DotNetBar.Design.CrumbBarItemCollectionEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor))]
 | 
						|
#if FRAMEWORK20
 | 
						|
        [Browsable(false)]
 | 
						|
#else
 | 
						|
        [Browsable(true)]
 | 
						|
#endif
 | 
						|
        public CrumbBarItemsCollection Items
 | 
						|
        {
 | 
						|
            get { return _Items; }
 | 
						|
        }
 | 
						|
 | 
						|
        private eCrumbBarStyle _Style = eCrumbBarStyle.Vista;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the visual style of the control. Default value is Windows Vista style.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(eCrumbBarStyle.Vista), Category("Appearance"), Description("Indicates visual style of the control.")]
 | 
						|
        public eCrumbBarStyle Style
 | 
						|
        {
 | 
						|
            get { return _Style; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _Style)
 | 
						|
                {
 | 
						|
                    eCrumbBarStyle oldValue = _Style;
 | 
						|
                    _Style = value;
 | 
						|
                    OnStyleChanged(oldValue, value);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        protected virtual void OnStyleChanged(eCrumbBarStyle oldValue, eCrumbBarStyle newValue)
 | 
						|
        {
 | 
						|
            this.Invalidate();
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the color table used by the Vista style renderer.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false)]
 | 
						|
        public Office2007ColorTable VistaColorTable
 | 
						|
        {
 | 
						|
            get { return _VistaRenderer.ColorTable; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the renderer control will be rendered with.
 | 
						|
        /// </summary>
 | 
						|
        /// <returns>The current renderer.</returns>
 | 
						|
        public override Rendering.BaseRenderer GetRenderer()
 | 
						|
        {
 | 
						|
            if (this.RenderMode == eRenderMode.Global && _Style == eCrumbBarStyle.Vista)
 | 
						|
                return _VistaRenderer;
 | 
						|
            return base.GetRenderer();
 | 
						|
        }
 | 
						|
 | 
						|
        private void InitializeVistaRenderer()
 | 
						|
        {
 | 
						|
            _VistaRenderer = new Office2007Renderer();
 | 
						|
            Office2007ColorTable colorTable = _VistaRenderer.ColorTable;
 | 
						|
            colorTable.CrumbBarItemView = GetCrumbBarVistaColorTable();
 | 
						|
            // Popup menu style
 | 
						|
            colorTable.Menu.Background = new LinearGradientColorTable(ColorScheme.GetColor("FFF0F0F0"));
 | 
						|
            colorTable.Menu.Border = new LinearGradientColorTable(ColorScheme.GetColor("FF646464"));
 | 
						|
            colorTable.Menu.Side = new LinearGradientColorTable(ColorScheme.GetColor("FFF1F1F1"));
 | 
						|
            colorTable.Menu.SideBorder = new LinearGradientColorTable(ColorScheme.GetColor("FFE2E3E3"));
 | 
						|
            colorTable.Menu.SideBorderLight = new LinearGradientColorTable(ColorScheme.GetColor("FFFFFFFF"));
 | 
						|
            Office2007ButtonItemColorTable menu = colorTable.ButtonItemColors[0];
 | 
						|
            menu.Default.Text = Color.Black;
 | 
						|
            menu.MouseOver.Background = new LinearGradientColorTable(ColorScheme.GetColor("34C5EBFF"), ColorScheme.GetColor("7081D8FF"), 90);
 | 
						|
            menu.MouseOver.OuterBorder = new LinearGradientColorTable(ColorScheme.GetColor("FF96DBFA"));
 | 
						|
            menu.MouseOver.InnerBorder = new LinearGradientColorTable(ColorScheme.GetColor("A0FFFFFF"));
 | 
						|
            menu.MouseOver.Text = Color.Black;
 | 
						|
            menu.Pressed = menu.MouseOver;
 | 
						|
        }
 | 
						|
 | 
						|
        private CrumbBarItemViewColorTable GetCrumbBarVistaColorTable()
 | 
						|
        {
 | 
						|
            return GetCrumbBarVistaColorTable(new ColorFactory());
 | 
						|
        }
 | 
						|
 | 
						|
        internal static CrumbBarItemViewColorTable GetCrumbBarVistaColorTable(ColorFactory factory)
 | 
						|
        {
 | 
						|
            CrumbBarItemViewColorTable viewColorTable = new CrumbBarItemViewColorTable();
 | 
						|
            CrumbBarItemViewStateColorTable crumbBarViewTable = new CrumbBarItemViewStateColorTable();
 | 
						|
            viewColorTable.Default = crumbBarViewTable;
 | 
						|
            crumbBarViewTable.Foreground = Color.Black;
 | 
						|
            crumbBarViewTable = new CrumbBarItemViewStateColorTable();
 | 
						|
            viewColorTable.MouseOver = crumbBarViewTable;
 | 
						|
            crumbBarViewTable.Foreground = Color.Black;
 | 
						|
            crumbBarViewTable.Background = new BackgroundColorBlendCollection();
 | 
						|
            crumbBarViewTable.Background.AddRange(new BackgroundColorBlend[]{
 | 
						|
                new BackgroundColorBlend(factory.GetColor(ColorScheme.GetColor("EAF6FD")), 0f),
 | 
						|
                new BackgroundColorBlend(factory.GetColor(ColorScheme.GetColor("D7EFFC")), .5f),
 | 
						|
                new BackgroundColorBlend(factory.GetColor(ColorScheme.GetColor("BDE6FD")), .5f),
 | 
						|
                new BackgroundColorBlend(factory.GetColor(ColorScheme.GetColor("A6D9F4")), 1f)});
 | 
						|
            crumbBarViewTable.Border = factory.GetColor(ColorScheme.GetColor("3C7FB1"));
 | 
						|
            crumbBarViewTable.BorderLight = factory.GetColor(ColorScheme.GetColor("E0FFFFFF"));
 | 
						|
            crumbBarViewTable = new CrumbBarItemViewStateColorTable();
 | 
						|
            viewColorTable.MouseOverInactive = crumbBarViewTable;
 | 
						|
            crumbBarViewTable.Foreground = Color.Black;
 | 
						|
            crumbBarViewTable.Background = new BackgroundColorBlendCollection();
 | 
						|
            crumbBarViewTable.Background.AddRange(new BackgroundColorBlend[]{
 | 
						|
                new BackgroundColorBlend(factory.GetColor(ColorScheme.GetColor("FFF2F2F2")), 0f),
 | 
						|
                new BackgroundColorBlend(factory.GetColor(ColorScheme.GetColor("FFEAEAEA")), .5f),
 | 
						|
                new BackgroundColorBlend(factory.GetColor(ColorScheme.GetColor("FFDCDCDC")), .5f),
 | 
						|
                new BackgroundColorBlend(factory.GetColor(ColorScheme.GetColor("FFCFCFCF")), 1f)});
 | 
						|
            crumbBarViewTable.Border = factory.GetColor(ColorScheme.GetColor("FF8E8F8F"));
 | 
						|
            crumbBarViewTable.BorderLight = factory.GetColor(ColorScheme.GetColor("E0FFFFFF"));
 | 
						|
            crumbBarViewTable = new CrumbBarItemViewStateColorTable();
 | 
						|
            viewColorTable.Pressed = crumbBarViewTable;
 | 
						|
            crumbBarViewTable.Foreground = Color.Black;
 | 
						|
            crumbBarViewTable.Background = new BackgroundColorBlendCollection();
 | 
						|
            crumbBarViewTable.Background.AddRange(new BackgroundColorBlend[]{
 | 
						|
                new BackgroundColorBlend(factory.GetColor(ColorScheme.GetColor("FFC2E4F6")), 0f),
 | 
						|
                new BackgroundColorBlend(factory.GetColor(ColorScheme.GetColor("FFC2E4F6")), .5f),
 | 
						|
                new BackgroundColorBlend(factory.GetColor(ColorScheme.GetColor("FFA9D9F2")), .5f),
 | 
						|
                new BackgroundColorBlend(factory.GetColor(ColorScheme.GetColor("FF90CBEB")), 1f)});
 | 
						|
            crumbBarViewTable.Border = factory.GetColor(ColorScheme.GetColor("FF6E8D9F"));
 | 
						|
            crumbBarViewTable.BorderLight = factory.GetColor(ColorScheme.GetColor("906E8D9F"));
 | 
						|
 | 
						|
            return viewColorTable;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Raises the SelectedItemChanging event. 
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e">Provides event arguments.</param>
 | 
						|
        protected virtual void OnSelectedItemChanging(CrumbBarSelectionEventArgs e)
 | 
						|
        {
 | 
						|
            CrumBarSelectionEventHandler eh = SelectedItemChanging;
 | 
						|
            if (eh != null) eh(this, e);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Raises the SelectedItemChanged event. 
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e">Provides event arguments.</param>
 | 
						|
        protected virtual void OnSelectedItemChanged(CrumbBarSelectionEventArgs e)
 | 
						|
        {
 | 
						|
            CrumBarSelectionEventHandler eh = SelectedItemChanged;
 | 
						|
            if (eh != null) eh(this, e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override Size DefaultSize
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return new Size(200, 22);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
#if FRAMEWORK20
 | 
						|
 | 
						|
        private Size _PreferredSize = Size.Empty;
 | 
						|
        [Localizable(true), Browsable(false)]
 | 
						|
        public new System.Windows.Forms.Padding Padding
 | 
						|
        {
 | 
						|
            get { return base.Padding; }
 | 
						|
            set { base.Padding = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        public override Size GetPreferredSize(Size proposedSize)
 | 
						|
        {
 | 
						|
            if (!_PreferredSize.IsEmpty) return _PreferredSize;
 | 
						|
 | 
						|
            if (!BarFunctions.IsHandleValid(this))
 | 
						|
                return base.GetPreferredSize(proposedSize);
 | 
						|
 | 
						|
            if (this.Items.Count == 0 || !BarFunctions.IsHandleValid(this) || _ViewContainer.SubItems.Count == 0)
 | 
						|
                return new Size(base.GetPreferredSize(proposedSize).Width, 22);
 | 
						|
 | 
						|
            int height = ElementStyleLayout.VerticalStyleWhiteSpace(this.GetBackgroundStyle());
 | 
						|
            height += _ViewContainer.CalculatedHeight > 0 ? _ViewContainer.CalculatedHeight : 20;
 | 
						|
 | 
						|
            _PreferredSize = new Size(proposedSize.Width, height);
 | 
						|
            return _PreferredSize;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(true), DefaultValue(false), EditorBrowsable(EditorBrowsableState.Always), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
 | 
						|
        public override bool AutoSize
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.AutoSize;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (this.AutoSize != value)
 | 
						|
                {
 | 
						|
                    base.AutoSize = value;
 | 
						|
                    InvalidateAutoSize();
 | 
						|
                    AdjustSize();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void InvalidateAutoSize()
 | 
						|
        {
 | 
						|
            _PreferredSize = Size.Empty;
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
 | 
						|
        {
 | 
						|
            if (this.AutoSize)
 | 
						|
            {
 | 
						|
                Size preferredSize = base.PreferredSize;
 | 
						|
                if (preferredSize.Width > 0)
 | 
						|
                    width = preferredSize.Width;
 | 
						|
                if (preferredSize.Height > 0)
 | 
						|
                    height = preferredSize.Height;
 | 
						|
            }
 | 
						|
            base.SetBoundsCore(x, y, width, height, specified);
 | 
						|
        }
 | 
						|
 | 
						|
        private void AdjustSize()
 | 
						|
        {
 | 
						|
            if (this.AutoSize)
 | 
						|
            {
 | 
						|
                System.Drawing.Size prefSize = base.PreferredSize;
 | 
						|
                if (prefSize.Width > 0 && prefSize.Height > 0)
 | 
						|
                    this.Size = base.PreferredSize;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public override Image BackgroundImage
 | 
						|
        {
 | 
						|
            get { return base.BackgroundImage; }
 | 
						|
            set { base.BackgroundImage = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnHandleCreated(EventArgs e)
 | 
						|
        {
 | 
						|
            base.OnHandleCreated(e);
 | 
						|
#if FRAMEWORK20
 | 
						|
            if (this.AutoSize)
 | 
						|
                this.AdjustSize();
 | 
						|
#endif
 | 
						|
        }
 | 
						|
#endif
 | 
						|
        private string _PathSeparator = System.IO.Path.PathSeparator.ToString();
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the delimiter string that the tree node path uses.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue("\\"), Browsable(false), Description("Indicates the delimiter string that the tree node path uses.")]
 | 
						|
        public string PathSeparator
 | 
						|
        {
 | 
						|
            get { return _PathSeparator; }
 | 
						|
            set { _PathSeparator = value; }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Returns full path to the given node.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="item">Node to return path to.</param>
 | 
						|
        /// <returns>Full path to the node.</returns>
 | 
						|
        internal static string GetFullPath(CrumbBarItem item, string pathSeparator)
 | 
						|
        {
 | 
						|
            if (item == null)
 | 
						|
                throw new ArgumentNullException("node");
 | 
						|
 | 
						|
            StringBuilder sb = new StringBuilder(item.Text);
 | 
						|
            item = item.Parent as CrumbBarItem;
 | 
						|
            while (item != null)
 | 
						|
            {
 | 
						|
                sb.Insert(0, item.Text + pathSeparator);
 | 
						|
                item = item.Parent as CrumbBarItem;
 | 
						|
            }
 | 
						|
 | 
						|
            return sb.ToString();
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Property Hiding
 | 
						|
        [Browsable(false)]
 | 
						|
        public override eBarImageSize ImageSize
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.ImageSize;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.ImageSize = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        [Browsable(false)]
 | 
						|
        public override System.Windows.Forms.ImageList ImagesLarge
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.ImagesLarge;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.ImagesLarge = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        [Browsable(false)]
 | 
						|
        public override System.Windows.Forms.ImageList ImagesMedium
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.ImagesMedium;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.ImagesMedium = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        [Browsable(false)]
 | 
						|
        public override Font KeyTipsFont
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.KeyTipsFont;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.KeyTipsFont = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        [Browsable(false)]
 | 
						|
        public override bool ShowShortcutKeysInToolTips
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.ShowShortcutKeysInToolTips;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.ShowShortcutKeysInToolTips = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        [Browsable(false)]
 | 
						|
        public override bool ThemeAware
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.ThemeAware;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.ThemeAware = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public override string Text
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return base.Text;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                base.Text = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Licensing
 | 
						|
#if !TRIAL
 | 
						|
        private string m_LicenseKey = "";
 | 
						|
        [Browsable(false), DefaultValue("")]
 | 
						|
        public string LicenseKey
 | 
						|
        {
 | 
						|
            get { return m_LicenseKey; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (NativeFunctions.ValidateLicenseKey(value))
 | 
						|
                    return;
 | 
						|
                m_LicenseKey = (!NativeFunctions.CheckLicenseKey(value) ? "9dsjkhds7" : value);
 | 
						|
            }
 | 
						|
        }
 | 
						|
#endif
 | 
						|
        protected override void OnPaint(PaintEventArgs e)
 | 
						|
        {
 | 
						|
            base.OnPaint(e);
 | 
						|
#if !TRIAL
 | 
						|
            if (NativeFunctions.keyValidated2 != 266)
 | 
						|
                TextDrawing.DrawString(e.Graphics, "Invalid License", this.Font, Color.FromArgb(180, Color.Red), this.ClientRectangle, eTextFormat.Bottom | eTextFormat.HorizontalCenter);
 | 
						|
#else
 | 
						|
            if (NativeFunctions.ColorExpAlt() || !NativeFunctions.CheckedThrough)
 | 
						|
		    {
 | 
						|
			    e.Graphics.Clear(SystemColors.Control);
 | 
						|
                return;
 | 
						|
            }
 | 
						|
#endif
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
 | 
						|
    #region Event support
 | 
						|
    /// <summary>
 | 
						|
    /// Defines delegate for CrumbBar selection events.
 | 
						|
    /// </summary>
 | 
						|
    public delegate void CrumBarSelectionEventHandler(object sender, CrumbBarSelectionEventArgs e);
 | 
						|
    /// <summary>
 | 
						|
    /// Provides data for CrumbBar selection events.
 | 
						|
    /// </summary>
 | 
						|
    public class CrumbBarSelectionEventArgs : CancelEventArgs
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets newly selected item.
 | 
						|
        /// </summary>
 | 
						|
        public CrumbBarItem NewSelectedItem = null;
 | 
						|
        /// <summary>
 | 
						|
        /// Initializes a new instance of the CrumbBarSelectionEventArgs class.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="newSelectedItem"></param>
 | 
						|
        public CrumbBarSelectionEventArgs(CrumbBarItem newSelectedItem)
 | 
						|
        {
 | 
						|
            NewSelectedItem = newSelectedItem;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    #endregion
 | 
						|
}
 |