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
{
///
/// 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();
}
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;
IComponentChangeService change=this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
if(change!=null)
change.OnComponentChanging(this.Component,null);
ButtonItem item=dh.CreateComponent(typeof(ButtonItem)) as ButtonItem;
item.Text=item.Name;
item.OptionGroup="navBar";
item.Image=BarFunctions.LoadBitmap("SystemImages.DefaultNavBarImage.png");
NavigationPanePanel panel=dh.CreateComponent(typeof(NavigationPanePanel)) as NavigationPanePanel;
panel.ParentItem=item;
navPane.Items.Add(item);
navPane.Controls.Add(panel);
panel.DockPadding.All=1;
panel.DockPadding.Bottom=0;
panel.Dock=DockStyle.Fill;
panel.SendToBack();
panel.ApplyLabelStyle();
panel.Style.Border=eBorderType.SingleLine;
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);
}
}
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;
// Check is any of the buttons or panel that we host
if(!m_InternalRemoving && e.Component is BaseItem)
{
BaseItem item=e.Component as BaseItem;
if(bar.NavigationBar.GetItem(item.Name)==item)
{
if(item is ButtonItem)
{
NavigationPanePanel panel=bar.GetPanel(item as ButtonItem);
if(panel!=null && dh!=null)
{
bar.Controls.Remove(panel);
dh.DestroyComponent(panel);
}
}
item.Parent.SubItems.Remove(item);
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)
bar.Items.Remove(navpane.ParentItem);
bar.RecalcLayout();
}
}
}
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;
}
}
#region Commented Out
// public override System.Collections.ICollection AssociatedComponents
// {
// get
// {
// ArrayList c=new ArrayList(base.AssociatedComponents);
// NavigationPane navpane=this.Control as NavigationPane;
// if(navpane!=null)
// {
// foreach(BaseItem item in navpane.Items)
// c.Add(item);
// }
// return c;
// }
// }
// private bool m_InternalRemoving=false;
// private void OnComponentRemoving(object sender,ComponentEventArgs e)
// {
// NavigationPane bar=this.Component as NavigationPane;
// IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost));
//
// if(e.Component!=this.Component)
// {
// // Check is any of the buttons or panel that we host
// if(!m_InternalRemoving && e.Component is BaseItem)
// {
// BaseItem item=e.Component as BaseItem;
// if(bar.NavigationBar.GetItem(item.Name)==item)
// {
// if(item is ButtonItem)
// {
// NavigationPanePanel panel=bar.GetPanel(item as ButtonItem);
// if(panel!=null && dh!=null)
// {
// bar.Controls.Remove(panel);
// dh.DestroyComponent(panel);
// }
// }
// item.Parent.SubItems.Remove(item);
// 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)
// bar.Items.Remove(navpane.ParentItem);
// bar.RecalcLayout();
// }
// }
// return;
// }
//
// m_InternalRemoving=true;
// try
// {
// // Unhook events
// IComponentChangeService cc=(IComponentChangeService)GetService(typeof(IComponentChangeService));
// if(cc!=null)
// cc.ComponentRemoving-=new ComponentEventHandler(this.OnComponentRemoving);
//
// if(dh==null || bar==null)
// return;
//
// foreach(BaseItem item in bar.Items)
// {
// DestroySubItems(item,dh);
// dh.DestroyComponent(item);
// }
// }
// finally
// {
// m_InternalRemoving=false;
// }
// }
// private void DestroySubItems(BaseItem parent, IDesignerHost dh)
// {
// foreach(BaseItem item in parent.SubItems)
// {
// DestroySubItems(item,dh);
// dh.DestroyComponent(item);
// }
// }
// private void OnSelectionChanged(object sender, EventArgs e)
// {
// ISelectionService ss = (ISelectionService)sender;
// if(ss.PrimarySelection!=this.Control)
// {
// NavigationPane bar=this.Control as NavigationPane;
// if(ss.PrimarySelection is BaseItem)
// {
// BaseItem item=ss.PrimarySelection as BaseItem;
// if(!bar.Items.Contains(item))
// {
// foreach(BaseItem panel in bar.Items)
// {
// if(panel.SubItems.Contains(item))
// return;
// }
// ((IOwner)bar).SetFocusItem(null);
// }
// }
// else
// {
// ((IOwner)bar).SetFocusItem(null);
// ((IOwner)bar).OnApplicationDeactivate(); // Closes all popups
// }
// }
// }
// private BaseItem m_SelectItem=null;
// protected override void WndProc(ref Message m)
// {
// NavigationPane navpane=this.Control as NavigationPane;
// if(navpane==null || navpane.IsDisposed)
// {
// base.WndProc(ref m);
// return;
// }
// NavigationBar navbar=navpane.NavigationBar;
// if(navbar==null || navbar.ItemsContainer==null || navbar.IsDisposed)
// {
// base.WndProc(ref m);
// return;
// }
//
// switch(m.Msg)
// {
// case NativeFunctions.WM_LBUTTONDOWN:
// case NativeFunctions.WM_RBUTTONDOWN:
// {
// Point pos=navbar.PointToClient(System.Windows.Forms.Control.MousePosition);
// MouseEventArgs e=new MouseEventArgs(MouseButtons.Left,0,pos.X,pos.Y,0);
// BaseItem focusItem=((IOwner)navbar).GetFocusItem();
// navbar.ItemsContainer.InternalMouseDown(e);
// if(focusItem==((IOwner)navbar).GetFocusItem())
// {
// if(m.Msg==NativeFunctions.WM_RBUTTONDOWN)
// return;
//
// ((IOwner)navbar).SetFocusItem(null);
// }
//
// if(m.Msg==NativeFunctions.WM_LBUTTONDOWN)
// {
// if(navbar.HitTestSplitter(e.X,e.Y))
// navbar.SplitterMouseDown(e);
// if(navbar.IsSplitterMouseDown || navbar.ClientRectangle.Contains(pos))
// return;
// }
// break;
// }
// case NativeFunctions.WM_RBUTTONUP:
// case NativeFunctions.WM_LBUTTONUP:
// {
// Point pos=navbar.PointToClient(System.Windows.Forms.Control.MousePosition);
// MouseEventArgs e=new MouseEventArgs(MouseButtons.Left,0,pos.X,pos.Y,0);
// navbar.ItemsContainer.InternalMouseUp(e);
//
// // Design-time splitter support
// if(navbar.IsSplitterMouseDown)
// {
// navbar.SplitterMouseUp(e);
// IComponentChangeService change=this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
// if(change!=null)
// {
// change.OnComponentChanging(this.Control,TypeDescriptor.GetProperties(this.Control).Find("NavigationBarHeight",true));
// change.OnComponentChanged(this.Component,TypeDescriptor.GetProperties(this.Control).Find("NavigationBarHeight",true),0,navpane.NavigationBarHeight);
// }
// }
// else
// navbar.SplitterMouseUp(e);
//
// if(((IOwner)navbar).GetFocusItem()!=null)
// {
// m_SelectItem=((IOwner)navbar).GetFocusItem();
// NativeFunctions.PostMessage(m.HWnd.ToInt32(),NativeFunctions.WM_USER+101,0,0);
// }
// else
// {
// ISelectionService selection = (ISelectionService) this.GetService(typeof(ISelectionService));
// if(selection.PrimarySelection!=navpane && !(selection.PrimarySelection.GetType() == typeof(NavigationPanePanel)))
// {
// ArrayList arr=new ArrayList(1);
// arr.Add(navpane);
// selection.SetSelectedComponents(arr,SelectionTypes.Click);
// }
// }
//
// break;
// }
// case NativeFunctions.WM_MOUSEMOVE:
// {
// Point pos=navbar.PointToClient(System.Windows.Forms.Control.MousePosition);
// MouseEventArgs e=new MouseEventArgs(System.Windows.Forms.Control.MouseButtons,0,pos.X,pos.Y,0);
// navbar.SplitterMouseMove(e);
// break;
// }
// case NativeFunctions.WM_MOUSELEAVE:
// {
// navbar.SplitterMouseLeave();
// break;
// }
// case NativeFunctions.WM_USER+101:
// {
// if(ProcessPendingSelection())
// return;
// break;
// }
// }
//
// base.WndProc(ref m);
// }
//
// private bool ProcessPendingSelection()
// {
// NavigationPane navpane=this.Control as NavigationPane;
// NavigationBar navbar=navpane.NavigationBar;
// if(navbar==null)
// return false;
// if(m_SelectItem!=null)
// {
// Point pos=navbar.PointToClient(System.Windows.Forms.Control.MousePosition);
// if(m_SelectItem is ButtonItem && !((ButtonItem)m_SelectItem).Checked)
// {
// ButtonItem button=m_SelectItem as ButtonItem;
// IComponentChangeService change=this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
// if(change!=null)
// change.OnComponentChanging(button,TypeDescriptor.GetProperties(button).Find("Checked",true));
// m_SelectItem.InternalClick(MouseButtons.Left,pos);
// button.Checked=true;
// if(change!=null)
// change.OnComponentChanged(button,TypeDescriptor.GetProperties(button).Find("Checked",true),null,null);
// }
// ISelectionService selection = (ISelectionService) this.GetService(typeof(ISelectionService));
// ArrayList arr=new ArrayList(1);
// arr.Add(m_SelectItem);
// selection.SetSelectedComponents(arr,SelectionTypes.Click);
//
// m_SelectItem=null;
// return true;
// }
// return false;
// }
// public override void Initialize(IComponent component)
// {
// base.Initialize(component);
// if(!component.Site.DesignMode)
// return;
//
// ISelectionService ss =(ISelectionService)GetService(typeof(ISelectionService));
// if(ss!=null)
// ss.SelectionChanged+=new EventHandler(OnSelectionChanged);
//
// // If our component is removed we need to clean-up
// IComponentChangeService cc=(IComponentChangeService)GetService(typeof(IComponentChangeService));
// if(cc!=null)
// cc.ComponentRemoving+=new ComponentEventHandler(this.OnComponentRemoving);
// }
//
#endregion
}
}