379 lines
11 KiB
C#
379 lines
11 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.ComponentModel.Design;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
|
|
namespace DevComponents.DotNetBar.Design
|
|
{
|
|
/// <summary>
|
|
/// Summary description for SuperTabStripDesigner
|
|
/// </summary>
|
|
public class SuperTabStripDesigner : BarBaseControlDesigner
|
|
{
|
|
#region Protected variables
|
|
|
|
protected bool InternalRemove;
|
|
|
|
#endregion
|
|
|
|
#region Private variables
|
|
|
|
private SuperTabStrip _TabStrip;
|
|
private SuperTabItem _SelectItem;
|
|
|
|
#endregion
|
|
|
|
public SuperTabStripDesigner()
|
|
{
|
|
EnableItemDragDrop = true;
|
|
}
|
|
|
|
#region Public properties
|
|
|
|
public SuperTabStrip TabStrip
|
|
{
|
|
get { return (_TabStrip); }
|
|
set { _TabStrip = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Initialize
|
|
|
|
public override void Initialize(IComponent component)
|
|
{
|
|
base.Initialize(component);
|
|
|
|
if (component.Site.DesignMode == true)
|
|
{
|
|
_TabStrip = component as SuperTabStrip;
|
|
|
|
ISelectionService ss =
|
|
(ISelectionService) GetService(typeof (ISelectionService));
|
|
|
|
if (ss != null)
|
|
ss.SelectionChanged += OnSelectionChanged;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region InitializeNewComponent
|
|
|
|
#if FRAMEWORK20
|
|
public override void InitializeNewComponent(IDictionary defaultValues)
|
|
{
|
|
base.InitializeNewComponent(defaultValues);
|
|
|
|
SetDesignTimeDefaults();
|
|
}
|
|
#else
|
|
public override void OnSetComponentDefaults()
|
|
{
|
|
base.OnSetComponentDefaults();
|
|
SetDesignTimeDefaults();
|
|
}
|
|
#endif
|
|
#endregion
|
|
|
|
#region SetDesignTimeDefaults
|
|
|
|
private void SetDesignTimeDefaults()
|
|
{
|
|
if (Component != null && Component.Site != null && Component.Site.DesignMode == true)
|
|
{
|
|
_TabStrip.TabStyle = eSuperTabStyle.Office2007;
|
|
_TabStrip.TabFont = _TabStrip.Font;
|
|
_TabStrip.SelectedTabFont = new System.Drawing.Font(_TabStrip.TabFont, FontStyle.Bold);
|
|
CreateNewTab(null, null);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Verbs
|
|
|
|
public override DesignerVerbCollection Verbs
|
|
{
|
|
get
|
|
{
|
|
DesignerVerb[] verbs = new DesignerVerb[]
|
|
{
|
|
new DesignerVerb("Next Tab", SelectNextTab),
|
|
new DesignerVerb("Previous Tab", SelectPreviousTab),
|
|
new DesignerVerb("Create New Tab", CreateNewTab),
|
|
|
|
new DesignerVerb("Add Button", CreateButton),
|
|
new DesignerVerb("Add Text Box", CreateTextBox),
|
|
new DesignerVerb("Add Combo Box", CreateComboBox),
|
|
new DesignerVerb("Add Label", CreateLabel),
|
|
new DesignerVerb("Add Color Picker", CreateColorPicker),
|
|
new DesignerVerb("Add Progress bar", CreateProgressBar),
|
|
new DesignerVerb("Add Check box", CreateCheckBox),
|
|
new DesignerVerb("Add Switch Button", CreateSwitch),
|
|
new DesignerVerb("Add Micro-Chart", CreateMicroChart)
|
|
};
|
|
|
|
return (new DesignerVerbCollection(verbs));
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region CreateNewTab
|
|
public virtual SuperTabItem CreateNewTab()
|
|
{
|
|
IDesignerHost dh =
|
|
(IDesignerHost)GetService(typeof(IDesignerHost));
|
|
SuperTabItem tab = null;
|
|
if (dh != null)
|
|
{
|
|
DesignerTransaction dt = dh.CreateTransaction();
|
|
|
|
try
|
|
{
|
|
m_CreatingItem = true;
|
|
IComponentChangeService change =
|
|
GetService(typeof(IComponentChangeService)) as IComponentChangeService;
|
|
|
|
if (change != null)
|
|
change.OnComponentChanging(Component, null);
|
|
|
|
tab =
|
|
dh.CreateComponent(typeof(SuperTabItem)) as SuperTabItem;
|
|
|
|
if (tab != null)
|
|
{
|
|
tab.Text = tab.Name;
|
|
|
|
_TabStrip.Tabs.Add(tab);
|
|
}
|
|
|
|
if (change != null)
|
|
change.OnComponentChanged(Component, null, null, null);
|
|
OnitemCreated(tab);
|
|
}
|
|
catch
|
|
{
|
|
dt.Cancel();
|
|
}
|
|
finally
|
|
{
|
|
if (dt.Canceled == false)
|
|
dt.Commit();
|
|
m_CreatingItem = false;
|
|
}
|
|
}
|
|
return tab;
|
|
}
|
|
private void CreateNewTab(object sender, EventArgs e)
|
|
{
|
|
CreateNewTab();
|
|
}
|
|
#endregion
|
|
|
|
#region SelectNextTab
|
|
|
|
protected virtual void SelectNextTab(object sender, EventArgs e)
|
|
{
|
|
if (_TabStrip.SelectedTabIndex < _TabStrip.Tabs.Count - 1)
|
|
_TabStrip.SelectNextTab();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region SelectPreviousTab
|
|
|
|
protected virtual void SelectPreviousTab(object sender, EventArgs e)
|
|
{
|
|
if (_TabStrip.SelectedTabIndex > 0)
|
|
_TabStrip.SelectPreviousTab();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnSelectionChanged
|
|
|
|
private void OnSelectionChanged(object sender, EventArgs e)
|
|
{
|
|
if (_TabStrip != null && _TabStrip.IsDisposed == false)
|
|
{
|
|
ISelectionService ss = (ISelectionService) sender;
|
|
BaseItem item = null;
|
|
|
|
if (ss != null && ss.PrimarySelection != Control)
|
|
{
|
|
item = ss.PrimarySelection as BaseItem;
|
|
|
|
if (item != null && _TabStrip.Tabs.Contains(item) == false)
|
|
item = null;
|
|
}
|
|
|
|
if (_TabStrip.DesignTimeSelection != item)
|
|
{
|
|
_TabStrip.DesignTimeSelection = item;
|
|
|
|
if (item != null)
|
|
ClosePopups();
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ComponentChangeComponentAdded
|
|
|
|
protected override void ComponentChangeComponentAdded(object sender, ComponentEventArgs e)
|
|
{
|
|
ISelectionService ss = this.GetService(typeof (ISelectionService)) as ISelectionService;
|
|
|
|
if (ss != null && ss.PrimarySelection == _TabStrip)
|
|
{
|
|
if (e.Component is BaseItem)
|
|
{
|
|
if (m_InsertItemTransaction == null)
|
|
{
|
|
IDesignerHost dh = sender as IDesignerHost;
|
|
|
|
if (dh != null)
|
|
m_InsertItemTransaction = dh.CreateTransaction("Adding Item Clip");
|
|
}
|
|
|
|
IComponentChangeService cc =
|
|
GetService(typeof (IComponentChangeService)) as IComponentChangeService;
|
|
|
|
if (cc != null)
|
|
cc.OnComponentChanging(_TabStrip, TypeDescriptor.GetProperties(_TabStrip)["SubItems"]);
|
|
|
|
_TabStrip.Tabs.Add(e.Component as BaseItem);
|
|
|
|
if (cc != null)
|
|
cc.OnComponentChanged(_TabStrip, TypeDescriptor.GetProperties(_TabStrip)["SubItems"], null, null);
|
|
|
|
if (m_InsertItemTransaction != null)
|
|
{
|
|
m_InsertItemTransaction.Commit();
|
|
m_InsertItemTransaction = null;
|
|
}
|
|
|
|
RecalcLayout();
|
|
|
|
if (e.Component is SuperTabItem)
|
|
_TabStrip.SelectedTab = e.Component as SuperTabItem;
|
|
}
|
|
else if (e.Component is SuperTabControlPanel)
|
|
{
|
|
throw new Exception("Invalid component addition");
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OtherComponentRemoving
|
|
|
|
protected override void OtherComponentRemoving(object sender, ComponentEventArgs e)
|
|
{
|
|
BaseItem item = e.Component as BaseItem;
|
|
|
|
if (item != null)
|
|
{
|
|
if (item.Parent != null && item.Parent.SubItems.Contains(item))
|
|
item.Parent.SubItems.Remove(item);
|
|
|
|
DestroySubItems(item);
|
|
|
|
RecalcLayout();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region AssociatedComponents
|
|
|
|
public override ICollection AssociatedComponents
|
|
{
|
|
get
|
|
{
|
|
ArrayList list = new ArrayList(base.AssociatedComponents);
|
|
|
|
foreach (BaseItem tab in _TabStrip.Tabs)
|
|
list.Add(tab);
|
|
|
|
return (list);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region DragInProgress
|
|
|
|
protected override bool DragInProgress
|
|
{
|
|
get { return (base.DragInProgress); }
|
|
|
|
set
|
|
{
|
|
if (value == true)
|
|
{
|
|
if (_TabStrip != null)
|
|
_SelectItem = _TabStrip.SelectedTab;
|
|
}
|
|
else
|
|
{
|
|
if (_TabStrip != null)
|
|
_TabStrip.SelectedTab = _SelectItem;
|
|
}
|
|
|
|
base.DragInProgress = value;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnMouseDragBegin
|
|
|
|
protected override void OnMouseDragBegin(int x, int y)
|
|
{
|
|
base.OnMouseDragBegin(x, y);
|
|
|
|
if (DragInProgress == true)
|
|
_SelectItem = _TabStrip.SelectedTab;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Dispose
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
ISelectionService ss =
|
|
(ISelectionService)GetService(typeof(ISelectionService));
|
|
|
|
if (ss != null)
|
|
ss.SelectionChanged -= OnSelectionChanged;
|
|
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
#region GetHitTest
|
|
private const string SysBackstageBackButtonName = "sys_backstage_back_button";
|
|
protected override bool GetHitTest(Point pt)
|
|
{
|
|
if (_TabStrip.TabStyle == eSuperTabStyle.Office2010BackstageBlue)
|
|
{
|
|
Point clientPt = _TabStrip.PointToClient(pt);
|
|
BaseItem item = _TabStrip.HitTest(clientPt.X, clientPt.Y);
|
|
if (item != null && item.Name == SysBackstageBackButtonName)
|
|
return true;
|
|
}
|
|
return base.GetHitTest(pt);
|
|
}
|
|
#endregion
|
|
}
|
|
}
|