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 description for NavigationPaneDesigner.
///
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;
}
///
/// Triggered when some other component on the form is removed.
///
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.")});
}
///
/// 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.
///
[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;
}
}
}
}