SourceCode/PROMS/DotNetBar Source Code/NavigationBarDesigner.cs

209 lines
6.4 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;
using System.ComponentModel.Design.Serialization;
using System.CodeDom;
namespace DevComponents.DotNetBar
{
/// <summary>
/// Provides design time support for NavigationBar control.
/// </summary>
public class NavigationBarDesigner:BarBaseControlDesigner
{
/// <summary>
/// Default constructor
/// </summary>
public NavigationBarDesigner()
{
this.EnableItemDragDrop=false;
}
public override DesignerVerbCollection Verbs
{
get
{
DesignerVerb[] verbs;
verbs = new DesignerVerb[]
{
new DesignerVerb("Create New Button", new EventHandler(CreateNewButton)),
};
return new DesignerVerbCollection(verbs);
}
}
private void CreateNewButton(object sender, EventArgs e)
{
IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost));
NavigationBar navbar=this.Control as NavigationBar;
if(navbar==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");
navbar.Items.Add(item);
if(navbar.Items.Count==1)
item.Checked=true;
navbar.RecalcLayout();
if(change!=null)
change.OnComponentChanged(this.Component,null,null,null);
}
protected override bool OnMouseDown(ref Message m)
{
if(base.OnMouseDown(ref m))
return true;
NavigationBar navbar=this.GetItemContainerControl() as NavigationBar;
if(navbar==null || navbar.IsDisposed || !navbar.SplitterVisible)
return false;
Point pos=navbar.PointToClient(System.Windows.Forms.Control.MousePosition);
MouseEventArgs e=new MouseEventArgs(MouseButtons.Left,0,pos.X,pos.Y,0);
if(m.Msg==NativeFunctions.WM_LBUTTONDOWN)
{
if(navbar.HitTestSplitter(e.X,e.Y))
navbar.SplitterMouseDown(e);
if(navbar.IsSplitterMouseDown /*|| navbar.ClientRectangle.Contains(pos)*/)
return true;;
}
return false;
}
protected override bool OnMouseUp(ref Message m)
{
NavigationBar navbar=this.GetItemContainerControl() as NavigationBar;
if(navbar!=null && !navbar.IsDisposed && navbar.SplitterVisible)
{
Point pos=navbar.PointToClient(System.Windows.Forms.Control.MousePosition);
MouseEventArgs e=new MouseEventArgs(MouseButtons.Left,0,pos.X,pos.Y,0);
// Design-time splitter support
if(navbar.IsSplitterMouseDown)
{
navbar.SplitterMouseUp(e);
this.OnNavigationBarHeightChanged(navbar.Height);
}
else
navbar.SplitterMouseUp(e);
}
if(base.OnMouseUp(ref m))
return true;
return false;
}
protected virtual void OnNavigationBarHeightChanged(int newHeight)
{
// 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.Control,TypeDescriptor.GetProperties(this.Control).Find("NavigationBarHeight",true),0,newHeight);
// }
}
protected override bool OnMouseMove(ref Message m)
{
if(base.OnMouseMove(ref m))
return true;
NavigationBar navbar=this.GetItemContainerControl() as NavigationBar;
if(navbar!=null && !navbar.IsDisposed && navbar.SplitterVisible)
{
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);
}
return false;
}
protected override bool OnMouseLeave(ref Message m)
{
if(base.OnMouseLeave(ref m))
return true;
NavigationBar navbar=this.GetItemContainerControl() as NavigationBar;
if(navbar!=null && !navbar.IsDisposed && navbar.SplitterVisible)
navbar.SplitterMouseLeave();
return false;
}
protected override void OnItemSelected(BaseItem item)
{
base.OnItemSelected(item);
if(item is ButtonItem && !((ButtonItem)item).Checked)
{
ButtonItem button=item as ButtonItem;
IComponentChangeService change=this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
if(change!=null)
change.OnComponentChanging(button,TypeDescriptor.GetProperties(button).Find("Checked",true));
button.Checked=true;
if(change!=null)
change.OnComponentChanged(button,TypeDescriptor.GetProperties(button).Find("Checked",true),null,null);
}
}
}
// public class NavigationBarSerializer : CodeDomSerializer
// {
// public override object Serialize(IDesignerSerializationManager manager, object value)
// {
// // first, locate and invoke the default serializer for
// CodeDomSerializer baseSerializer = (CodeDomSerializer)manager.GetSerializer(
// typeof(NavigationBar).BaseType,
// typeof(CodeDomSerializer));
//
// object codeObject = baseSerializer.Serialize(manager, value);
//
// // now add some custom code
// if (codeObject is CodeStatementCollection)
// {
//
// // // add a custom comment to the code.
// CodeStatementCollection statements =
// (CodeStatementCollection)codeObject;
//
// // call a custom method.
// CodeExpression targetObject =
// base.SerializeToReferenceExpression(manager, value);
// if(targetObject != null)
// {
//
// CodeMethodInvokeExpression methodCall =
// new CodeMethodInvokeExpression(targetObject, "RecalcLayout");
// statements.Add(methodCall);
// }
//
// }
//
// // finally, return the statements that have been created
// return codeObject;
// }
//
// /// The default serializer can handle the deserialization just fine. We override this
// /// because it is an abstract member.
// /// </summary>
// public override object Deserialize(IDesignerSerializationManager manager, object codeDomObject)
// {
// // delegate straight through to the default serializer
// //
// CodeDomSerializer baseSerializer = (CodeDomSerializer)manager.GetSerializer(typeof(NavigationBar).BaseType, typeof(CodeDomSerializer));
//
// return baseSerializer.Deserialize(manager, codeDomObject);
// }
// }
}