221 lines
8.2 KiB
C#

using System;
using System.Text;
using System.ComponentModel.Design;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections;
namespace DevComponents.DotNetBar.Design
{
/// <summary>
/// Represents Windows Forms designer for ButtonX control.
/// </summary>
public class ButtonXDesigner : BarBaseControlDesigner
{
#region Constructor
public ButtonXDesigner()
{
this.EnableItemDragDrop=false;
this.PassiveContainer = true;
}
public override void Initialize(IComponent component)
{
base.Initialize(component);
if (!component.Site.DesignMode)
return;
((ButtonX)component).SetDesignMode(true);
}
#endregion
#region Internal Implementation
#if FRAMEWORK20
public override void InitializeNewComponent(IDictionary defaultValues)
{
base.InitializeNewComponent(defaultValues);
SetDesignTimeDefaults();
}
#else
public override void OnSetComponentDefaults()
{
base.OnSetComponentDefaults();
SetDesignTimeDefaults();
}
#endif
private void SetDesignTimeDefaults()
{
ButtonX button = this.Control as ButtonX;
if (button == null)
return;
button.ColorTable = eButtonColor.OrangeWithBackground;
button.Style = eDotNetBarStyle.StyleManagerControlled;
}
public override DesignerVerbCollection Verbs
{
get
{
Bar bar = this.Control as Bar;
DesignerVerb[] verbs = null;
verbs = new DesignerVerb[]
{
new DesignerVerb("Add Button", new EventHandler(CreateButton)),
new DesignerVerb("Add Horizontal Container", new EventHandler(CreateHorizontalContainer)),
new DesignerVerb("Add Vertical Container", new EventHandler(CreateVerticalContainer)),
new DesignerVerb("Add Gallery Container", new EventHandler(CreateGalleryContainer)),
new DesignerVerb("Add Scrollable Container", new EventHandler(CreateScrollContainer)),
new DesignerVerb("Add Text Box", new EventHandler(CreateTextBox)),
new DesignerVerb("Add Combo Box", new EventHandler(CreateComboBox)),
new DesignerVerb("Add Label", new EventHandler(CreateLabel)),
new DesignerVerb("Add Check Box", new EventHandler(CreateCheckBox)),
new DesignerVerb("Add Micro-Chart", new EventHandler(CreateMicroChart)),
new DesignerVerb("Add Switch Button", new EventHandler(CreateSwitch)),
new DesignerVerb("Add Slider", new EventHandler(CreateSliderItem)),
new DesignerVerb("Add Rating Item", new EventHandler(CreateRatingItem)),
new DesignerVerb("Add Control Container", new EventHandler(CreateControlContainer)),
new DesignerVerb("Add Color Picker", new EventHandler(CreateColorPicker))};
return new DesignerVerbCollection(verbs);
}
}
protected override void OnitemCreated(BaseItem item)
{
TypeDescriptor.GetProperties(item)["GlobalItem"].SetValue(item, false);
}
private void CreateScrollContainer(object sender, EventArgs e)
{
GalleryContainer item = CreateComponent(typeof(GalleryContainer)) as GalleryContainer;
TypeDescriptor.GetProperties(item)["MinimumSize"].SetValue(item, new Size(150, 200));
TypeDescriptor.GetProperties(((GalleryContainer)item).BackgroundStyle)["Class"].SetValue(((GalleryContainer)item).BackgroundStyle, "");
TypeDescriptor.GetProperties(item)["EnableGalleryPopup"].SetValue(item, false);
TypeDescriptor.GetProperties(item)["LayoutOrientation"].SetValue(item, DevComponents.DotNetBar.eOrientation.Vertical);
TypeDescriptor.GetProperties(item)["MultiLine"].SetValue(item, false);
TypeDescriptor.GetProperties(item)["PopupUsesStandardScrollbars"].SetValue(item, false);
item.NeedRecalcSize = true;
this.RecalcLayout();
}
private void CreateVerticalContainer(object sender, EventArgs e)
{
CreateContainer(this.GetItemContainer(), eOrientation.Vertical);
}
private void CreateHorizontalContainer(object sender, EventArgs e)
{
CreateContainer(this.GetItemContainer(), eOrientation.Horizontal);
}
private void CreateContainer(BaseItem parent, eOrientation orientation)
{
try
{
m_CreatingItem = true;
DesignerSupport.CreateItemContainer(this, parent, orientation);
}
finally
{
m_CreatingItem = false;
}
this.RecalcLayout();
}
protected override BaseItem GetItemContainer()
{
ButtonX button = this.Control as ButtonX;
if (button != null)
return button.InternalItem;
return base.GetItemContainer();
}
public override bool CanParent(Control control)
{
return false;
}
protected override void OnMouseDragBegin(int x, int y)
{
ButtonX ctrl = this.GetItemContainerControl() as ButtonX;
if (ctrl != null)
{
ISelectionService ss = GetService(typeof(ISelectionService)) as ISelectionService;
bool selected = false;
if (ss != null) selected = ss.PrimarySelection == this.Component;
ButtonItem container = this.GetItemContainer() as ButtonItem;
Point pos = ctrl.PointToClient(new Point(x, y));
MouseEventArgs e = new MouseEventArgs(MouseButtons.Left, 0, pos.X, pos.Y, 0);
if (container != null &&
(!container.SubItemsRect.IsEmpty && container.SubItemsRect.Contains(pos) ||
(!container.ShowSubItems || container.SubItemsExpandWidth <= 1) && selected)
&& container.SubItems.Count > 0)
{
container.Expanded = !container.Expanded;
return;
}
}
base.OnMouseDragBegin(x, y);
}
protected override bool OnMouseDown(ref Message m, MouseButtons button)
{
return false;
}
protected override bool OnMouseUp(ref Message m)
{
ButtonX ctrl = this.GetItemContainerControl() as ButtonX;
if (ctrl != null)
{
if (ctrl.Expanded && !this.DragInProgress)
return true;
}
bool bProcessed = false;
BaseItem container = this.GetItemContainer();
IOwner owner = this.GetIOwner();
if (ctrl == null || owner == null || container == null)
return false;
Point pos = ctrl.PointToClient(System.Windows.Forms.Control.MousePosition);
MouseEventArgs e = new MouseEventArgs(MouseButtons.Left, 0, pos.X, pos.Y, 0);
container.InternalMouseUp(e);
if (this.DragItem != null)
{
MouseDragDrop(pos.X, pos.Y);
return true;
}
return bProcessed;
}
/// <summary>
/// Triggered when some other component on the form is removed.
/// </summary>
protected override void OtherComponentRemoving(object sender, ComponentEventArgs e)
{
bool callBase = true;
if (e.Component is BaseItem)
{
BaseItem item = e.Component as BaseItem;
BaseItem parent = this.GetItemContainer();
if (item!=null && parent!=null && parent.SubItems.Contains(item))
{
parent.SubItems.Remove(item);
this.RecalcLayout();
callBase = false;
}
}
if(callBase)
base.OtherComponentRemoving(sender, e);
}
#endregion
}
}