421 lines
15 KiB
C#
421 lines
15 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Drawing.Design;
|
|
using System.Windows.Forms.Design;
|
|
using System.ComponentModel;
|
|
|
|
namespace LSLEditor.Docking
|
|
{
|
|
#region DockPanelSkin classes
|
|
/// <summary>
|
|
/// The skin to use when displaying the DockPanel.
|
|
/// The skin allows custom gradient color schemes to be used when drawing the
|
|
/// DockStrips and Tabs.
|
|
/// </summary>
|
|
[TypeConverter(typeof(DockPanelSkinConverter))]
|
|
public class DockPanelSkin
|
|
{
|
|
private AutoHideStripSkin m_autoHideStripSkin;
|
|
private DockPaneStripSkin m_dockPaneStripSkin;
|
|
|
|
public DockPanelSkin()
|
|
{
|
|
m_autoHideStripSkin = new AutoHideStripSkin();
|
|
m_dockPaneStripSkin = new DockPaneStripSkin();
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the auto hide strips and tabs.
|
|
/// </summary>
|
|
public AutoHideStripSkin AutoHideStripSkin
|
|
{
|
|
get { return m_autoHideStripSkin; }
|
|
set { m_autoHideStripSkin = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the Document and ToolWindow style DockStrips and Tabs.
|
|
/// </summary>
|
|
public DockPaneStripSkin DockPaneStripSkin
|
|
{
|
|
get { return m_dockPaneStripSkin; }
|
|
set { m_dockPaneStripSkin = value; }
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the auto hide strip and tabs.
|
|
/// </summary>
|
|
[TypeConverter(typeof(AutoHideStripConverter))]
|
|
public class AutoHideStripSkin
|
|
{
|
|
private DockPanelGradient m_dockStripGradient;
|
|
private TabGradient m_TabGradient;
|
|
|
|
public AutoHideStripSkin()
|
|
{
|
|
m_dockStripGradient = new DockPanelGradient();
|
|
m_dockStripGradient.StartColor = SystemColors.ControlLight;
|
|
m_dockStripGradient.EndColor = SystemColors.ControlLight;
|
|
|
|
m_TabGradient = new TabGradient();
|
|
m_TabGradient.TextColor = SystemColors.ControlDarkDark;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The gradient color skin for the DockStrips.
|
|
/// </summary>
|
|
public DockPanelGradient DockStripGradient
|
|
{
|
|
get { return m_dockStripGradient; }
|
|
set { m_dockStripGradient = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The gradient color skin for the Tabs.
|
|
/// </summary>
|
|
public TabGradient TabGradient
|
|
{
|
|
get { return m_TabGradient; }
|
|
set { m_TabGradient = value; }
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the document and tool strips and tabs.
|
|
/// </summary>
|
|
[TypeConverter(typeof(DockPaneStripConverter))]
|
|
public class DockPaneStripSkin
|
|
{
|
|
private DockPaneStripGradient m_DocumentGradient;
|
|
private DockPaneStripToolWindowGradient m_ToolWindowGradient;
|
|
|
|
public DockPaneStripSkin()
|
|
{
|
|
m_DocumentGradient = new DockPaneStripGradient();
|
|
m_DocumentGradient.DockStripGradient.StartColor = SystemColors.Control;
|
|
m_DocumentGradient.DockStripGradient.EndColor = SystemColors.Control;
|
|
m_DocumentGradient.ActiveTabGradient.StartColor = SystemColors.ControlLightLight;
|
|
m_DocumentGradient.ActiveTabGradient.EndColor = SystemColors.ControlLightLight;
|
|
m_DocumentGradient.InactiveTabGradient.StartColor = SystemColors.ControlLight;
|
|
m_DocumentGradient.InactiveTabGradient.EndColor = SystemColors.ControlLight;
|
|
|
|
m_ToolWindowGradient = new DockPaneStripToolWindowGradient();
|
|
m_ToolWindowGradient.DockStripGradient.StartColor = SystemColors.ControlLight;
|
|
m_ToolWindowGradient.DockStripGradient.EndColor = SystemColors.ControlLight;
|
|
|
|
m_ToolWindowGradient.ActiveTabGradient.StartColor = SystemColors.Control;
|
|
m_ToolWindowGradient.ActiveTabGradient.EndColor = SystemColors.Control;
|
|
|
|
m_ToolWindowGradient.InactiveTabGradient.StartColor = Color.Transparent;
|
|
m_ToolWindowGradient.InactiveTabGradient.EndColor = Color.Transparent;
|
|
m_ToolWindowGradient.InactiveTabGradient.TextColor = SystemColors.ControlDarkDark;
|
|
|
|
m_ToolWindowGradient.ActiveCaptionGradient.StartColor = SystemColors.GradientActiveCaption;
|
|
m_ToolWindowGradient.ActiveCaptionGradient.EndColor = SystemColors.ActiveCaption;
|
|
m_ToolWindowGradient.ActiveCaptionGradient.LinearGradientMode = LinearGradientMode.Vertical;
|
|
m_ToolWindowGradient.ActiveCaptionGradient.TextColor = SystemColors.ActiveCaptionText;
|
|
|
|
m_ToolWindowGradient.InactiveCaptionGradient.StartColor = SystemColors.GradientInactiveCaption;
|
|
m_ToolWindowGradient.InactiveCaptionGradient.EndColor = SystemColors.GradientInactiveCaption;
|
|
m_ToolWindowGradient.InactiveCaptionGradient.LinearGradientMode = LinearGradientMode.Vertical;
|
|
m_ToolWindowGradient.InactiveCaptionGradient.TextColor = SystemColors.ControlText;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the Document style DockPane strip and tab.
|
|
/// </summary>
|
|
public DockPaneStripGradient DocumentGradient
|
|
{
|
|
get { return m_DocumentGradient; }
|
|
set { m_DocumentGradient = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the ToolWindow style DockPane strip and tab.
|
|
/// </summary>
|
|
public DockPaneStripToolWindowGradient ToolWindowGradient
|
|
{
|
|
get { return m_ToolWindowGradient; }
|
|
set { m_ToolWindowGradient = value; }
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the DockPane ToolWindow strip and tab.
|
|
/// </summary>
|
|
[TypeConverter(typeof(DockPaneStripGradientConverter))]
|
|
public class DockPaneStripToolWindowGradient : DockPaneStripGradient
|
|
{
|
|
private TabGradient m_activeCaptionGradient;
|
|
private TabGradient m_inactiveCaptionGradient;
|
|
|
|
public DockPaneStripToolWindowGradient()
|
|
{
|
|
m_activeCaptionGradient = new TabGradient();
|
|
m_inactiveCaptionGradient = new TabGradient();
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the active ToolWindow caption.
|
|
/// </summary>
|
|
public TabGradient ActiveCaptionGradient
|
|
{
|
|
get { return m_activeCaptionGradient; }
|
|
set { m_activeCaptionGradient = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the inactive ToolWindow caption.
|
|
/// </summary>
|
|
public TabGradient InactiveCaptionGradient
|
|
{
|
|
get { return m_inactiveCaptionGradient; }
|
|
set { m_inactiveCaptionGradient = value; }
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the DockPane strip and tab.
|
|
/// </summary>
|
|
[TypeConverter(typeof(DockPaneStripGradientConverter))]
|
|
public class DockPaneStripGradient
|
|
{
|
|
private DockPanelGradient m_dockStripGradient;
|
|
private TabGradient m_activeTabGradient;
|
|
private TabGradient m_inactiveTabGradient;
|
|
|
|
public DockPaneStripGradient()
|
|
{
|
|
m_dockStripGradient = new DockPanelGradient();
|
|
m_activeTabGradient = new TabGradient();
|
|
m_inactiveTabGradient = new TabGradient();
|
|
}
|
|
|
|
/// <summary>
|
|
/// The gradient color skin for the DockStrip.
|
|
/// </summary>
|
|
public DockPanelGradient DockStripGradient
|
|
{
|
|
get { return m_dockStripGradient; }
|
|
set { m_dockStripGradient = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the active DockPane tabs.
|
|
/// </summary>
|
|
public TabGradient ActiveTabGradient
|
|
{
|
|
get { return m_activeTabGradient; }
|
|
set { m_activeTabGradient = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the inactive DockPane tabs.
|
|
/// </summary>
|
|
public TabGradient InactiveTabGradient
|
|
{
|
|
get { return m_inactiveTabGradient; }
|
|
set { m_inactiveTabGradient = value; }
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The skin used to display the dock pane tab
|
|
/// </summary>
|
|
[TypeConverter(typeof(DockPaneTabGradientConverter))]
|
|
public class TabGradient : DockPanelGradient
|
|
{
|
|
private Color m_textColor;
|
|
|
|
public TabGradient()
|
|
{
|
|
m_textColor = SystemColors.ControlText;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The text color.
|
|
/// </summary>
|
|
[DefaultValue(typeof(SystemColors), "ControlText")]
|
|
public Color TextColor
|
|
{
|
|
get { return m_textColor; }
|
|
set { m_textColor = value; }
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The gradient color skin.
|
|
/// </summary>
|
|
[TypeConverter(typeof(DockPanelGradientConverter))]
|
|
public class DockPanelGradient
|
|
{
|
|
private Color m_startColor;
|
|
private Color m_endColor;
|
|
private LinearGradientMode m_linearGradientMode;
|
|
|
|
public DockPanelGradient()
|
|
{
|
|
m_startColor = SystemColors.Control;
|
|
m_endColor = SystemColors.Control;
|
|
m_linearGradientMode = LinearGradientMode.Horizontal;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The beginning gradient color.
|
|
/// </summary>
|
|
[DefaultValue(typeof(SystemColors), "Control")]
|
|
public Color StartColor
|
|
{
|
|
get { return m_startColor; }
|
|
set { m_startColor = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The ending gradient color.
|
|
/// </summary>
|
|
[DefaultValue(typeof(SystemColors), "Control")]
|
|
public Color EndColor
|
|
{
|
|
get { return m_endColor; }
|
|
set { m_endColor = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The gradient mode to display the colors.
|
|
/// </summary>
|
|
[DefaultValue(LinearGradientMode.Horizontal)]
|
|
public LinearGradientMode LinearGradientMode
|
|
{
|
|
get { return m_linearGradientMode; }
|
|
set { m_linearGradientMode = value; }
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Converters
|
|
public class DockPanelSkinConverter : ExpandableObjectConverter
|
|
{
|
|
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(DockPanelSkin))
|
|
return true;
|
|
|
|
return base.CanConvertTo(context, destinationType);
|
|
}
|
|
|
|
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(String) && value is DockPanelSkin)
|
|
{
|
|
return "DockPanelSkin";
|
|
}
|
|
return base.ConvertTo(context, culture, value, destinationType);
|
|
}
|
|
}
|
|
|
|
public class DockPanelGradientConverter : ExpandableObjectConverter
|
|
{
|
|
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(DockPanelGradient))
|
|
return true;
|
|
|
|
return base.CanConvertTo(context, destinationType);
|
|
}
|
|
|
|
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(String) && value is DockPanelGradient)
|
|
{
|
|
return "DockPanelGradient";
|
|
}
|
|
return base.ConvertTo(context, culture, value, destinationType);
|
|
}
|
|
}
|
|
|
|
public class AutoHideStripConverter : ExpandableObjectConverter
|
|
{
|
|
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(AutoHideStripSkin))
|
|
return true;
|
|
|
|
return base.CanConvertTo(context, destinationType);
|
|
}
|
|
|
|
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(String) && value is AutoHideStripSkin)
|
|
{
|
|
return "AutoHideStripSkin";
|
|
}
|
|
return base.ConvertTo(context, culture, value, destinationType);
|
|
}
|
|
}
|
|
|
|
public class DockPaneStripConverter : ExpandableObjectConverter
|
|
{
|
|
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(DockPaneStripSkin))
|
|
return true;
|
|
|
|
return base.CanConvertTo(context, destinationType);
|
|
}
|
|
|
|
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(String) && value is DockPaneStripSkin)
|
|
{
|
|
return "DockPaneStripSkin";
|
|
}
|
|
return base.ConvertTo(context, culture, value, destinationType);
|
|
}
|
|
}
|
|
|
|
public class DockPaneStripGradientConverter : ExpandableObjectConverter
|
|
{
|
|
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(DockPaneStripGradient))
|
|
return true;
|
|
|
|
return base.CanConvertTo(context, destinationType);
|
|
}
|
|
|
|
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(String) && value is DockPaneStripGradient)
|
|
{
|
|
return "DockPaneStripGradient";
|
|
}
|
|
return base.ConvertTo(context, culture, value, destinationType);
|
|
}
|
|
}
|
|
|
|
public class DockPaneTabGradientConverter : ExpandableObjectConverter
|
|
{
|
|
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(TabGradient))
|
|
return true;
|
|
|
|
return base.CanConvertTo(context, destinationType);
|
|
}
|
|
|
|
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
|
|
{
|
|
if (destinationType == typeof(String) && value is TabGradient)
|
|
{
|
|
return "DockPaneTabGradient";
|
|
}
|
|
return base.ConvertTo(context, culture, value, destinationType);
|
|
}
|
|
}
|
|
#endregion
|
|
}
|