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