464 lines
14 KiB
C#
464 lines
14 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
|
|
{
|
|
/// <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();
|
|
}
|
|
|
|
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;
|
|
}
|
|
/// <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;
|
|
|
|
// 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.")});
|
|
|
|
}
|
|
|
|
/// <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;
|
|
}
|
|
}
|
|
|
|
#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
|
|
}
|
|
}
|