440 lines
15 KiB
C#
440 lines
15 KiB
C#
using DevComponents.DotNetBar.Metro;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.ComponentModel.Design;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using DevComponents.DotNetBar.Controls;
|
|
using System.Drawing;
|
|
using System.Collections;
|
|
|
|
namespace DevComponents.DotNetBar.Design
|
|
{
|
|
/// <summary>
|
|
/// Represents Windows Forms designer for SideNav control.
|
|
/// </summary>
|
|
public class SideNavDesigner: BarBaseControlDesigner
|
|
{
|
|
#region Private Variables
|
|
#endregion
|
|
|
|
#region Internal Implementation
|
|
|
|
public SideNavDesigner()
|
|
{
|
|
this.EnableItemDragDrop = true;
|
|
this.AcceptExternalControls = false;
|
|
}
|
|
|
|
public override void Initialize(IComponent component)
|
|
{
|
|
base.Initialize(component);
|
|
if (!component.Site.DesignMode)
|
|
return;
|
|
SideNav c = component as SideNav;
|
|
if (c != null)
|
|
{
|
|
c.SetDesignMode();
|
|
}
|
|
this.EnableDragDrop(false);
|
|
}
|
|
|
|
public override bool CanParent(Control control)
|
|
{
|
|
if (control is SideNavPanel && !this.Control.Controls.Contains(control))
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
public override DesignerVerbCollection Verbs
|
|
{
|
|
get
|
|
{
|
|
DesignerVerb[] verbs = null;
|
|
verbs = new DesignerVerb[]
|
|
{
|
|
new DesignerVerb("Create Tab", new EventHandler(CreateSideNavTab)),
|
|
new DesignerVerb("Create Button", new EventHandler(CreateButton)),
|
|
new DesignerVerb("Create Separator", new EventHandler(CreateSeparator))};
|
|
|
|
return new DesignerVerbCollection(verbs);
|
|
}
|
|
}
|
|
|
|
private void CreateSeparator(object sender, EventArgs e)
|
|
{
|
|
SideNav r = this.Control as SideNav;
|
|
if (r != null)
|
|
{
|
|
CreateSeparator(GetNewItemContainer());
|
|
}
|
|
}
|
|
|
|
private void CreateSeparator(BaseItem parent)
|
|
{
|
|
if (parent == null)
|
|
return;
|
|
Separator item = null;
|
|
|
|
IDesignerHost dh = (IDesignerHost)GetService(typeof(IDesignerHost));
|
|
if (dh != null)
|
|
{
|
|
DesignerTransaction trans = dh.CreateTransaction("Adding new item");
|
|
try
|
|
{
|
|
m_CreatingItem = true;
|
|
item = dh.CreateComponent(typeof(Separator)) as Separator;
|
|
if (item == null)
|
|
return;
|
|
|
|
TypeDescriptor.GetProperties(item)["FixedSize"].SetValue(item, new Size(3,1));
|
|
TypeDescriptor.GetProperties(item)["SeparatorOrientation"].SetValue(item, eDesignMarkerOrientation.Vertical);
|
|
item.Padding.Left = 6;
|
|
item.Padding.Right = 6;
|
|
|
|
IComponentChangeService cc = this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
|
|
if (parent != this.GetDefaultNewItemContainer() && cc != null)
|
|
cc.OnComponentChanging(parent, TypeDescriptor.GetProperties(typeof(BaseItem))["SubItems"]);
|
|
|
|
parent.SubItems.Add(item);
|
|
this.RecalcLayout();
|
|
|
|
if (parent != this.GetDefaultNewItemContainer() && cc != null)
|
|
cc.OnComponentChanged(parent, TypeDescriptor.GetProperties(typeof(BaseItem))["SubItems"], null, null);
|
|
|
|
OnitemCreated(item);
|
|
}
|
|
catch
|
|
{
|
|
trans.Cancel();
|
|
}
|
|
finally
|
|
{
|
|
if (!trans.Canceled)
|
|
trans.Commit();
|
|
m_CreatingItem = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
private BaseItem GetNewItemContainer()
|
|
{
|
|
SideNav r = this.Control as SideNav;
|
|
return r.SideNavStrip.GetBaseItemContainer();
|
|
}
|
|
|
|
protected override void CreateButton(object sender, EventArgs e)
|
|
{
|
|
SideNav r = this.Control as SideNav;
|
|
if (r != null)
|
|
{
|
|
CreateSideNavButton(GetNewItemContainer());
|
|
}
|
|
}
|
|
|
|
protected virtual SideNavItem CreateSideNavButton(BaseItem parent)
|
|
{
|
|
if (parent == null)
|
|
return null;
|
|
SideNavItem item = null;
|
|
|
|
IDesignerHost dh = (IDesignerHost)GetService(typeof(IDesignerHost));
|
|
if (dh != null)
|
|
{
|
|
DesignerTransaction trans = dh.CreateTransaction("Adding new item");
|
|
try
|
|
{
|
|
m_CreatingItem = true;
|
|
item = dh.CreateComponent(typeof(SideNavItem)) as SideNavItem;
|
|
if (item == null)
|
|
return null;
|
|
|
|
TypeDescriptor.GetProperties(item)["Text"].SetValue(item, item.Name);
|
|
TypeDescriptor.GetProperties(item)["Symbol"].SetValue(item, "\uf10c");
|
|
|
|
IComponentChangeService cc = this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
|
|
if (parent != this.GetDefaultNewItemContainer() && cc != null)
|
|
cc.OnComponentChanging(parent, TypeDescriptor.GetProperties(typeof(BaseItem))["SubItems"]);
|
|
|
|
parent.SubItems.Add(item);
|
|
this.RecalcLayout();
|
|
|
|
if (parent != this.GetDefaultNewItemContainer() && cc != null)
|
|
cc.OnComponentChanged(parent, TypeDescriptor.GetProperties(typeof(BaseItem))["SubItems"], null, null);
|
|
|
|
OnitemCreated(item);
|
|
}
|
|
catch
|
|
{
|
|
trans.Cancel();
|
|
}
|
|
finally
|
|
{
|
|
if (!trans.Canceled)
|
|
trans.Commit();
|
|
m_CreatingItem = false;
|
|
}
|
|
}
|
|
return item;
|
|
}
|
|
|
|
protected override void CreateTextBox(object sender, EventArgs e)
|
|
{
|
|
SideNav r = this.Control as SideNav;
|
|
if (r != null)
|
|
{
|
|
CreateTextBox(GetNewItemContainer());
|
|
}
|
|
}
|
|
|
|
protected override void CreateComboBox(object sender, EventArgs e)
|
|
{
|
|
SideNav r = this.Control as SideNav;
|
|
if (r != null)
|
|
{
|
|
CreateComboBox(GetNewItemContainer());
|
|
}
|
|
}
|
|
|
|
protected override void CreateLabel(object sender, EventArgs e)
|
|
{
|
|
SideNav r = this.Control as SideNav;
|
|
if (r != null)
|
|
{
|
|
CreateLabel(GetNewItemContainer());
|
|
}
|
|
}
|
|
|
|
protected override void CreateColorPicker(object sender, EventArgs e)
|
|
{
|
|
SideNav r = this.Control as SideNav;
|
|
if (r != null)
|
|
{
|
|
CreateColorPicker(GetNewItemContainer());
|
|
}
|
|
}
|
|
|
|
protected override void CreateProgressBar(object sender, EventArgs e)
|
|
{
|
|
SideNav r = this.Control as SideNav;
|
|
if (r != null)
|
|
{
|
|
CreateProgressBar(GetNewItemContainer());
|
|
}
|
|
}
|
|
|
|
protected override void CreateRatingItem(object sender, EventArgs e)
|
|
{
|
|
SideNav r = this.Control as SideNav;
|
|
if (r != null)
|
|
{
|
|
CreateRatingItem(GetNewItemContainer());
|
|
}
|
|
}
|
|
|
|
protected override void CreateSwitch(object sender, EventArgs e)
|
|
{
|
|
SideNav r = this.Control as SideNav;
|
|
if (r != null)
|
|
{
|
|
CreateSwitch(GetNewItemContainer());
|
|
}
|
|
}
|
|
|
|
protected override void ComponentChangeComponentAdded(object sender, ComponentEventArgs e)
|
|
{
|
|
if (m_AddingItem)
|
|
{
|
|
m_AddingItem = false;
|
|
IComponentChangeService cc = this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
|
|
if (cc != null)
|
|
cc.OnComponentChanging(this.Control, null);
|
|
this.GetNewItemContainer().SubItems.Add(e.Component as BaseItem);
|
|
if (cc != null)
|
|
cc.OnComponentChanged(this.Control, null, null, null);
|
|
m_InsertItemTransaction.Commit();
|
|
m_InsertItemTransaction = null;
|
|
this.RecalcLayout();
|
|
}
|
|
}
|
|
|
|
#if FRAMEWORK20
|
|
public override void InitializeNewComponent(IDictionary defaultValues)
|
|
{
|
|
base.InitializeNewComponent(defaultValues);
|
|
SetDesignTimeDefaults();
|
|
}
|
|
#else
|
|
public override void OnSetComponentDefaults()
|
|
{
|
|
SetDesignTimeDefaults();
|
|
base.OnSetComponentDefaults();
|
|
}
|
|
#endif
|
|
|
|
private void SetDesignTimeDefaults()
|
|
{
|
|
CreateSideNavTab("Menu", true);
|
|
CreateSeparator(GetNewItemContainer());
|
|
CreateSideNavTab("Home");
|
|
SideNav c = this.Control as SideNav;
|
|
|
|
c.Size = new Size(400, 200);
|
|
c.Dock = DockStyle.Left;
|
|
}
|
|
|
|
protected override BaseItem GetItemContainer()
|
|
{
|
|
SideNav tab = this.Control as SideNav;
|
|
if (tab != null)
|
|
return tab.SideNavStrip.GetBaseItemContainer();
|
|
return null;
|
|
}
|
|
|
|
protected override System.Windows.Forms.Control GetItemContainerControl()
|
|
{
|
|
SideNav tab = this.Control as SideNav;
|
|
if (tab != null)
|
|
return tab.SideNavStrip;
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Support for popup menu closing.
|
|
/// </summary>
|
|
protected override void DesignTimeSelectionChanged(ISelectionService ss)
|
|
{
|
|
if (ss == null)
|
|
return;
|
|
if (this.Control == null || this.Control.IsDisposed)
|
|
return;
|
|
|
|
base.DesignTimeSelectionChanged(ss);
|
|
|
|
SideNav r = this.Control as SideNav;
|
|
if (r == null) return;
|
|
|
|
BaseItem container = r.SideNavStrip.GetBaseItemContainer();
|
|
if (container == null) return;
|
|
|
|
if (ss.PrimarySelection is SideNavItem)
|
|
{
|
|
SideNavItem item = ss.PrimarySelection as SideNavItem;
|
|
if (container.SubItems.Contains(item) && !item.IsSystemMenu && item.Panel != null)
|
|
{
|
|
TypeDescriptor.GetProperties(item)["Checked"].SetValue(item, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Triggered when some other component on the form is removed.
|
|
/// </summary>
|
|
protected override void OtherComponentRemoving(object sender, ComponentEventArgs e)
|
|
{
|
|
SideNav r = this.Control as SideNav;
|
|
if (r != null)
|
|
{
|
|
BaseItem container = r.SideNavStrip.GetBaseItemContainer();
|
|
|
|
if (e.Component is SideNavItem && container != null && container.SubItems != null &&
|
|
container.SubItems.Contains(((SideNavItem)e.Component)))
|
|
{
|
|
IDesignerHost dh = this.GetService(typeof(IDesignerHost)) as IDesignerHost;
|
|
if (dh != null && ((SideNavItem)e.Component).Panel != null)
|
|
dh.DestroyComponent(((SideNavItem)e.Component).Panel);
|
|
}
|
|
}
|
|
base.OtherComponentRemoving(sender, e);
|
|
}
|
|
|
|
protected override void ComponentRemoved(object sender, ComponentEventArgs e)
|
|
{
|
|
SideNav r = this.Control as SideNav;
|
|
if (e.Component is BaseItem && r != null)
|
|
{
|
|
BaseItem item = e.Component as BaseItem;
|
|
if (r.Items.Contains(item))
|
|
r.Items.Remove(item);
|
|
DestroySubItems(item);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Design-Time Item Creation
|
|
protected virtual void CreateSideNavTab(object sender, EventArgs e)
|
|
{
|
|
CreateSideNavTab(string.Empty);
|
|
}
|
|
|
|
private void CreateSideNavTab(string text)
|
|
{
|
|
CreateSideNavTab(text, false);
|
|
}
|
|
private void CreateSideNavTab(string text, bool isSysMenu)
|
|
{
|
|
IDesignerHost dh = (IDesignerHost)GetService(typeof(IDesignerHost));
|
|
if (dh != null)
|
|
{
|
|
DesignerTransaction trans = dh.CreateTransaction("Creating SideNav Tab");
|
|
IComponentChangeService cc = (IComponentChangeService)GetService(typeof(IComponentChangeService));
|
|
SideNav tab = this.Control as SideNav;
|
|
try
|
|
{
|
|
m_CreatingItem = true;
|
|
OnSubItemsChanging();
|
|
SideNavItem item = dh.CreateComponent(typeof(SideNavItem)) as SideNavItem;
|
|
if (string.IsNullOrEmpty(text))
|
|
TypeDescriptor.GetProperties(item)["Text"].SetValue(item, item.Name);
|
|
else
|
|
TypeDescriptor.GetProperties(item)["Text"].SetValue(item, text);
|
|
if (isSysMenu)
|
|
{
|
|
TypeDescriptor.GetProperties(item)["Symbol"].SetValue(item, "\uf0c9");
|
|
TypeDescriptor.GetProperties(item)["IsSystemMenu"].SetValue(item, true);
|
|
}
|
|
else
|
|
{
|
|
TypeDescriptor.GetProperties(item)["Symbol"].SetValue(item, "\uf015");
|
|
SideNavPanel panel = dh.CreateComponent(typeof (SideNavPanel)) as SideNavPanel;
|
|
TypeDescriptor.GetProperties(panel)["Dock"].SetValue(panel, DockStyle.Fill);
|
|
|
|
cc.OnComponentChanging(this.Control, TypeDescriptor.GetProperties(typeof (Control))["Controls"]);
|
|
this.Control.Controls.Add(panel);
|
|
panel.SendToBack();
|
|
cc.OnComponentChanged(this.Control, TypeDescriptor.GetProperties(typeof (Control))["Controls"],
|
|
null, null);
|
|
|
|
TypeDescriptor.GetProperties(item)["Panel"].SetValue(item, panel);
|
|
}
|
|
|
|
SimpleItemContainer cont = (SimpleItemContainer)tab.SideNavStrip.GetBaseItemContainer();
|
|
cc.OnComponentChanging(cont, TypeDescriptor.GetProperties(typeof(BaseItem))["SubItems"]);
|
|
cont.SubItems.Add(item);
|
|
cc.OnComponentChanged(cont, TypeDescriptor.GetProperties(typeof(BaseItem))["SubItems"], null, null);
|
|
if (tab.SelectedItem == null && !isSysMenu)
|
|
TypeDescriptor.GetProperties(item)["Checked"].SetValue(item, true);
|
|
|
|
this.RecalcLayout();
|
|
OnSubItemsChanged();
|
|
}
|
|
catch
|
|
{
|
|
trans.Cancel();
|
|
throw;
|
|
}
|
|
finally
|
|
{
|
|
if (!trans.Canceled)
|
|
trans.Commit();
|
|
m_CreatingItem = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|