238 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			238 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Windows.Forms;
 | |
| using System.Windows.Forms.Design;
 | |
| using System.Collections;
 | |
| using System.Drawing;
 | |
| using System.ComponentModel.Design;
 | |
| using System.ComponentModel;
 | |
| 
 | |
| namespace DevComponents.DotNetBar.Design
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// Summary description for NavigationPaneDesigner.
 | |
| 	/// </summary>
 | |
| 	public class NavigationPaneDesigner:NavigationBarDesigner
 | |
| 	{
 | |
| 		public override void Initialize(IComponent component) 
 | |
| 		{
 | |
| 			base.Initialize(component);
 | |
| 			if(!component.Site.DesignMode)
 | |
| 				return;
 | |
| 			NavigationPane pane=this.Control as NavigationPane;
 | |
| 			if(pane!=null)
 | |
| 				pane.SetDesignMode();
 | |
| 		}
 | |
| 		public override DesignerVerbCollection Verbs 
 | |
| 		{
 | |
| 			get 
 | |
| 			{
 | |
| 				DesignerVerb[] verbs;
 | |
| 				verbs = new DesignerVerb[]
 | |
| 				{
 | |
| 					new DesignerVerb("Create New Pane", new EventHandler(CreateNewPane)),
 | |
| 				};
 | |
| 				return new DesignerVerbCollection(verbs);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| #if FRAMEWORK20
 | |
|         public override void InitializeNewComponent(IDictionary defaultValues)
 | |
|         {
 | |
|             base.InitializeNewComponent(defaultValues);
 | |
|             SetDesignTimeDefaults();
 | |
|         }
 | |
| #else
 | |
| 		public override void OnSetComponentDefaults()
 | |
| 		{
 | |
| 			base.OnSetComponentDefaults();
 | |
| 			SetDesignTimeDefaults();
 | |
| 		}
 | |
| #endif
 | |
| 
 | |
|         private void SetDesignTimeDefaults()
 | |
|         {
 | |
|             CreateNewPane();
 | |
|             NavigationPane pane = this.Control as NavigationPane;
 | |
|             pane.Style = eDotNetBarStyle.StyleManagerControlled;
 | |
|         }
 | |
| 
 | |
| 		private void CreateNewPane(object sender, EventArgs e)
 | |
| 		{
 | |
| 			CreateNewPane();
 | |
| 		}
 | |
| 
 | |
| 		private void CreateNewPane()
 | |
| 		{
 | |
| 			IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost));
 | |
| 			NavigationPane navPane=this.Control as NavigationPane;
 | |
| 			if(navPane==null || dh==null)
 | |
| 				return;
 | |
| 
 | |
|             DesignerTransaction dt = dh.CreateTransaction();
 | |
|             try
 | |
|             {
 | |
|                 IComponentChangeService change = this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
 | |
|                 if (change != null)
 | |
|                     change.OnComponentChanging(this.Component, null);
 | |
| 
 | |
|                 ButtonItem item = null;
 | |
|                 try
 | |
|                 {
 | |
|                     m_CreatingItem = true;
 | |
|                     item = dh.CreateComponent(typeof(ButtonItem)) as ButtonItem;
 | |
|                     item.Text = item.Name;
 | |
|                     item.OptionGroup = "navBar";
 | |
|                     item.Image = Helpers.LoadBitmap("SystemImages.DefaultNavBarImage.png");
 | |
|                 }
 | |
|                 finally
 | |
|                 {
 | |
|                     m_CreatingItem = false;
 | |
|                 }
 | |
| 
 | |
|                 NavigationPanePanel panel = dh.CreateComponent(typeof(NavigationPanePanel)) as NavigationPanePanel;
 | |
|                 panel.ParentItem = item;
 | |
|                 navPane.Items.Add(item);
 | |
|                 navPane.Controls.Add(panel);
 | |
|                 panel.Dock = DockStyle.Fill;
 | |
|                 panel.SendToBack();
 | |
|                 panel.ApplyPanelStyle();
 | |
|                 panel.ColorSchemeStyle = navPane.Style;
 | |
|                 if (Helpers.IsOffice2007Style(navPane.Style))
 | |
|                     panel.ColorScheme = navPane.NavigationBar.GetColorScheme();
 | |
|                 panel.Style.BackColor2.ColorSchemePart = eColorSchemePart.None;
 | |
|                 panel.Style.Border = eBorderType.None;
 | |
|                 panel.Style.BorderColor.ColorSchemePart = eColorSchemePart.PanelBorder;
 | |
| 
 | |
|                 if (navPane.Items.Count == 1)
 | |
|                     item.Checked = true;
 | |
|                 navPane.RecalcLayout();
 | |
|                 if (change != null)
 | |
|                     change.OnComponentChanged(this.Component, null, null, null);
 | |
| 
 | |
|                 if (change != null)
 | |
|                 {
 | |
|                     change.OnComponentChanging(panel, null);
 | |
|                     change.OnComponentChanged(panel, null, null, null);
 | |
|                 }
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 dt.Cancel();
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 if (!dt.Canceled) dt.Commit();
 | |
|             }
 | |
| 		}
 | |
| 
 | |
| 		public override bool CanParent(Control c)
 | |
| 		{
 | |
| 			if(c is NavigationPanePanel)
 | |
| 				return true;
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		protected override BaseItem GetItemContainer()
 | |
| 		{
 | |
| 			NavigationPane bar=this.Control as NavigationPane;
 | |
| 			if(bar!=null)
 | |
| 				return bar.NavigationBar.GetBaseItemContainer();
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		protected override System.Windows.Forms.Control GetItemContainerControl()
 | |
| 		{
 | |
| 			NavigationPane bar=this.Control as NavigationPane;
 | |
| 			if(bar!=null)
 | |
| 				return bar.NavigationBar;
 | |
| 			return null;
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// Triggered when some other component on the form is removed.
 | |
| 		/// </summary>
 | |
| 		protected override void OtherComponentRemoving(object sender, ComponentEventArgs e)
 | |
| 		{
 | |
| 			base.OtherComponentRemoving(sender,e);
 | |
| 
 | |
| 			NavigationPane bar=this.Component as NavigationPane;
 | |
| 			if(bar==null || bar.IsDisposed)
 | |
| 				return;
 | |
| 
 | |
| 			IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost));
 | |
| 			if(dh==null)
 | |
| 				return;
 | |
|             IComponentChangeService cc = (IComponentChangeService)GetService(typeof(IComponentChangeService));
 | |
| 
 | |
| 			// Check is any of the buttons or panel that we host
 | |
| 			if(!m_InternalRemoving && e.Component is BaseItem && dh.TransactionDescription.StartsWith("Delete "))
 | |
| 			{
 | |
|                 ButtonItem item = e.Component as ButtonItem;
 | |
|                 if (item != null)
 | |
|                 {
 | |
|                     NavigationPanePanel panel = bar.GetPanel(item);
 | |
|                     if (panel != null && dh != null)
 | |
|                     {
 | |
|                         DesignerTransaction dt = dh.CreateTransaction("Removing associated NavigationPanePanel");
 | |
|                         panel.ParentItem = null;
 | |
|                         if (cc != null) cc.OnComponentChanging(bar, TypeDescriptor.GetProperties(bar)["Controls"]);
 | |
|                         bar.Controls.Remove(panel);
 | |
|                         if (cc != null) cc.OnComponentChanged(bar, TypeDescriptor.GetProperties(bar)["Controls"], null, null);
 | |
|                         dh.DestroyComponent(panel);
 | |
|                         dt.Commit();
 | |
|                         bar.RecalcLayout();
 | |
|                     }
 | |
|                 }
 | |
| 			}
 | |
| 			else if(!m_InternalRemoving && e.Component is NavigationPanePanel)
 | |
| 			{
 | |
| 				if(bar.Controls.Contains(e.Component as NavigationPanePanel))
 | |
| 				{
 | |
| 					NavigationPanePanel navpane=e.Component as NavigationPanePanel;
 | |
|                     if (navpane.ParentItem != null)
 | |
|                     {
 | |
|                         BaseItem item = navpane.ParentItem;
 | |
|                         navpane.ParentItem = null;
 | |
|                         if (cc != null) cc.OnComponentChanging(bar, TypeDescriptor.GetProperties(bar)["Items"]);
 | |
|                         bar.Items.Remove(item);
 | |
|                         if (cc != null) cc.OnComponentChanged(bar, TypeDescriptor.GetProperties(bar)["Items"], null, null);
 | |
|                         dh.DestroyComponent(item);
 | |
|                     }
 | |
| 					bar.RecalcLayout();
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
|             if (bar.CheckedButton == null && bar.Items.Count > 0 && bar.Items[0] is ButtonItem)
 | |
|             {
 | |
|                 ButtonItem buttonItem = (ButtonItem)bar.Items[0];
 | |
|                 buttonItem.Checked = true;
 | |
|             }
 | |
| 		}
 | |
| 
 | |
|         protected override void PreFilterProperties(IDictionary properties)
 | |
|         {
 | |
|             base.PreFilterProperties(properties);
 | |
|             properties["Expanded"] = TypeDescriptor.CreateProperty(typeof(NavigationPaneDesigner), (PropertyDescriptor)properties["Expanded"], new Attribute[]
 | |
| 				{
 | |
| 					new DefaultValueAttribute(true),
 | |
| 					new BrowsableAttribute(true),
 | |
| 					new CategoryAttribute("Title"),
 | |
|                     new DescriptionAttribute("Indicates whether navigation pane can be collapsed.")});
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets whether navigation pane is expanded. Default value is true. 
 | |
|         /// When control is collapsed it is reduced in size so it consumes less space.
 | |
|         /// </summary>
 | |
|         [Browsable(true), Category("Title"), DefaultValue(true), Description("Indicates whether navigation pane can be collapsed.")]
 | |
|         public bool Expanded
 | |
|         {
 | |
|             get { return (bool)ShadowProperties["Expanded"]; }
 | |
|             set
 | |
|             {
 | |
|                 // this value is not passed to the actual control at design-time
 | |
|                 this.ShadowProperties["Expanded"] = value;
 | |
|             }
 | |
|         }
 | |
| 	}
 | |
| }
 |