DockPanelSkin.cs
上传用户:szlfmled
上传日期:2020-11-22
资源大小:978k
文件大小:15k
源码类别:

C#编程

开发平台:

C#

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Drawing;
  5. using System.Drawing.Drawing2D;
  6. using System.Drawing.Design;
  7. using System.Windows.Forms.Design;
  8. using System.ComponentModel;
  9. namespace WeifenLuo.WinFormsUI.Docking
  10. {
  11.     #region DockPanelSkin classes
  12.     /// <summary>
  13.     /// The skin to use when displaying the DockPanel.
  14.     /// The skin allows custom gradient color schemes to be used when drawing the
  15.     /// DockStrips and Tabs.
  16.     /// </summary>
  17.     [TypeConverter(typeof(DockPanelSkinConverter))]
  18.     public class DockPanelSkin
  19.     {
  20.         private AutoHideStripSkin m_autoHideStripSkin;
  21.         private DockPaneStripSkin m_dockPaneStripSkin;
  22.         public DockPanelSkin()
  23.         {
  24.             m_autoHideStripSkin = new AutoHideStripSkin();
  25.             m_dockPaneStripSkin = new DockPaneStripSkin();
  26.         }
  27.         /// <summary>
  28.         /// The skin used to display the auto hide strips and tabs.
  29.         /// </summary>
  30.         public AutoHideStripSkin AutoHideStripSkin
  31.         {
  32.             get { return m_autoHideStripSkin; }
  33.             set { m_autoHideStripSkin = value; }
  34.         }
  35.         /// <summary>
  36.         /// The skin used to display the Document and ToolWindow style DockStrips and Tabs.
  37.         /// </summary>
  38.         public DockPaneStripSkin DockPaneStripSkin
  39.         {
  40.             get { return m_dockPaneStripSkin; }
  41.             set { m_dockPaneStripSkin = value; }
  42.         }
  43.     }
  44.     /// <summary>
  45.     /// The skin used to display the auto hide strip and tabs.
  46.     /// </summary>
  47.     [TypeConverter(typeof(AutoHideStripConverter))]
  48.     public class AutoHideStripSkin
  49.     {
  50.         private DockPanelGradient m_dockStripGradient;
  51.         private TabGradient m_TabGradient;
  52.         public AutoHideStripSkin()
  53.         {
  54.             m_dockStripGradient = new DockPanelGradient();
  55.             m_dockStripGradient.StartColor = SystemColors.ControlLight;
  56.             m_dockStripGradient.EndColor = SystemColors.ControlLight;
  57.             m_TabGradient = new TabGradient();
  58.             m_TabGradient.TextColor = SystemColors.ControlDarkDark;
  59.         }
  60.         /// <summary>
  61.         /// The gradient color skin for the DockStrips.
  62.         /// </summary>
  63.         public DockPanelGradient DockStripGradient
  64.         {
  65.             get { return m_dockStripGradient; }
  66.             set { m_dockStripGradient = value; }
  67.         }
  68.         /// <summary>
  69.         /// The gradient color skin for the Tabs.
  70.         /// </summary>
  71.         public TabGradient TabGradient
  72.         {
  73.             get { return m_TabGradient; }
  74.             set { m_TabGradient = value; }
  75.         }
  76.     }
  77.     /// <summary>
  78.     /// The skin used to display the document and tool strips and tabs.
  79.     /// </summary>
  80.     [TypeConverter(typeof(DockPaneStripConverter))]
  81.     public class DockPaneStripSkin
  82.     {
  83.         private DockPaneStripGradient m_DocumentGradient;
  84.         private DockPaneStripToolWindowGradient m_ToolWindowGradient;
  85.         public DockPaneStripSkin()
  86.         {
  87.             m_DocumentGradient = new DockPaneStripGradient();
  88.             m_DocumentGradient.DockStripGradient.StartColor = SystemColors.Control;
  89.             m_DocumentGradient.DockStripGradient.EndColor = SystemColors.Control;
  90.             m_DocumentGradient.ActiveTabGradient.StartColor = SystemColors.ControlLightLight;
  91.             m_DocumentGradient.ActiveTabGradient.EndColor = SystemColors.ControlLightLight;
  92.             m_DocumentGradient.InactiveTabGradient.StartColor = SystemColors.ControlLight;
  93.             m_DocumentGradient.InactiveTabGradient.EndColor = SystemColors.ControlLight;
  94.             m_ToolWindowGradient = new DockPaneStripToolWindowGradient();
  95.             m_ToolWindowGradient.DockStripGradient.StartColor = SystemColors.ControlLight;
  96.             m_ToolWindowGradient.DockStripGradient.EndColor = SystemColors.ControlLight;
  97.             
  98.             m_ToolWindowGradient.ActiveTabGradient.StartColor = SystemColors.Control;
  99.             m_ToolWindowGradient.ActiveTabGradient.EndColor = SystemColors.Control;
  100.             
  101.             m_ToolWindowGradient.InactiveTabGradient.StartColor = Color.Transparent;
  102.             m_ToolWindowGradient.InactiveTabGradient.EndColor = Color.Transparent;
  103.             m_ToolWindowGradient.InactiveTabGradient.TextColor = SystemColors.ControlDarkDark;
  104.             
  105.             m_ToolWindowGradient.ActiveCaptionGradient.StartColor = SystemColors.GradientActiveCaption;
  106.             m_ToolWindowGradient.ActiveCaptionGradient.EndColor = SystemColors.ActiveCaption;
  107.             m_ToolWindowGradient.ActiveCaptionGradient.LinearGradientMode = LinearGradientMode.Vertical;
  108.             m_ToolWindowGradient.ActiveCaptionGradient.TextColor = SystemColors.ActiveCaptionText;
  109.             m_ToolWindowGradient.InactiveCaptionGradient.StartColor = SystemColors.GradientInactiveCaption;
  110.             m_ToolWindowGradient.InactiveCaptionGradient.EndColor = SystemColors.GradientInactiveCaption;
  111.             m_ToolWindowGradient.InactiveCaptionGradient.LinearGradientMode = LinearGradientMode.Vertical;
  112.             m_ToolWindowGradient.InactiveCaptionGradient.TextColor = SystemColors.ControlText;
  113.         }
  114.         /// <summary>
  115.         /// The skin used to display the Document style DockPane strip and tab.
  116.         /// </summary>
  117.         public DockPaneStripGradient DocumentGradient
  118.         {
  119.             get { return m_DocumentGradient; }
  120.             set { m_DocumentGradient = value; }
  121.         }
  122.         /// <summary>
  123.         /// The skin used to display the ToolWindow style DockPane strip and tab.
  124.         /// </summary>
  125.         public DockPaneStripToolWindowGradient ToolWindowGradient
  126.         {
  127.             get { return m_ToolWindowGradient; }
  128.             set { m_ToolWindowGradient = value; }
  129.         }
  130.     }
  131.     /// <summary>
  132.     /// The skin used to display the DockPane ToolWindow strip and tab.
  133.     /// </summary>
  134.     [TypeConverter(typeof(DockPaneStripGradientConverter))]
  135.     public class DockPaneStripToolWindowGradient : DockPaneStripGradient
  136.     {
  137.         private TabGradient m_activeCaptionGradient;
  138.         private TabGradient m_inactiveCaptionGradient;
  139.         public DockPaneStripToolWindowGradient()
  140.         {
  141.             m_activeCaptionGradient = new TabGradient();
  142.             m_inactiveCaptionGradient = new TabGradient();
  143.         }
  144.         /// <summary>
  145.         /// The skin used to display the active ToolWindow caption.
  146.         /// </summary>
  147.         public TabGradient ActiveCaptionGradient
  148.         {
  149.             get { return m_activeCaptionGradient; }
  150.             set { m_activeCaptionGradient = value; }
  151.         }
  152.         /// <summary>
  153.         /// The skin used to display the inactive ToolWindow caption.
  154.         /// </summary>
  155.         public TabGradient InactiveCaptionGradient
  156.         {
  157.             get { return m_inactiveCaptionGradient; }
  158.             set { m_inactiveCaptionGradient = value; }
  159.         }
  160.     }
  161.     /// <summary>
  162.     /// The skin used to display the DockPane strip and tab.
  163.     /// </summary>
  164.     [TypeConverter(typeof(DockPaneStripGradientConverter))]
  165.     public class DockPaneStripGradient
  166.     {
  167.         private DockPanelGradient m_dockStripGradient;
  168.         private TabGradient m_activeTabGradient;
  169.         private TabGradient m_inactiveTabGradient;
  170.         public DockPaneStripGradient()
  171.         {
  172.             m_dockStripGradient = new DockPanelGradient();
  173.             m_activeTabGradient = new TabGradient();
  174.             m_inactiveTabGradient = new TabGradient();
  175.         }
  176.         /// <summary>
  177.         /// The gradient color skin for the DockStrip.
  178.         /// </summary>
  179.         public DockPanelGradient DockStripGradient
  180.         {
  181.             get { return m_dockStripGradient; }
  182.             set { m_dockStripGradient = value; }
  183.         }
  184.         /// <summary>
  185.         /// The skin used to display the active DockPane tabs.
  186.         /// </summary>
  187.         public TabGradient ActiveTabGradient
  188.         {
  189.             get { return m_activeTabGradient; }
  190.             set { m_activeTabGradient = value; }
  191.         }
  192.         /// <summary>
  193.         /// The skin used to display the inactive DockPane tabs.
  194.         /// </summary>
  195.         public TabGradient InactiveTabGradient
  196.         {
  197.             get { return m_inactiveTabGradient; }
  198.             set { m_inactiveTabGradient = value; }
  199.         }
  200.     }
  201.     /// <summary>
  202.     /// The skin used to display the dock pane tab
  203.     /// </summary>
  204.     [TypeConverter(typeof(DockPaneTabGradientConverter))]
  205.     public class TabGradient : DockPanelGradient
  206.     {
  207.         private Color m_textColor;
  208.         public TabGradient()
  209.         {
  210.             m_textColor = SystemColors.ControlText;
  211.         }
  212.         /// <summary>
  213.         /// The text color.
  214.         /// </summary>
  215.         [DefaultValue(typeof(SystemColors), "ControlText")]
  216.         public Color TextColor
  217.         {
  218.             get { return m_textColor; }
  219.             set { m_textColor = value; }
  220.         }
  221.     }
  222.     /// <summary>
  223.     /// The gradient color skin.
  224.     /// </summary>
  225.     [TypeConverter(typeof(DockPanelGradientConverter))]
  226.     public class DockPanelGradient
  227.     {
  228.         private Color m_startColor;
  229.         private Color m_endColor;
  230.         private LinearGradientMode m_linearGradientMode;
  231.         public DockPanelGradient()
  232.         {
  233.             m_startColor = SystemColors.Control;
  234.             m_endColor = SystemColors.Control;
  235.             m_linearGradientMode = LinearGradientMode.Horizontal;
  236.         }
  237.         /// <summary>
  238.         /// The beginning gradient color.
  239.         /// </summary>
  240.         [DefaultValue(typeof(SystemColors), "Control")]
  241.         public Color StartColor
  242.         {
  243.             get { return m_startColor; }
  244.             set { m_startColor = value; }
  245.         }
  246.         /// <summary>
  247.         /// The ending gradient color.
  248.         /// </summary>
  249.         [DefaultValue(typeof(SystemColors), "Control")]
  250.         public Color EndColor
  251.         {
  252.             get { return m_endColor; }
  253.             set { m_endColor = value; }
  254.         }
  255.         /// <summary>
  256.         /// The gradient mode to display the colors.
  257.         /// </summary>
  258.         [DefaultValue(LinearGradientMode.Horizontal)]
  259.         public LinearGradientMode LinearGradientMode
  260.         {
  261.             get { return m_linearGradientMode; }
  262.             set { m_linearGradientMode = value; }
  263.         }
  264.     }
  265.     #endregion
  266.     #region Converters
  267.     public class DockPanelSkinConverter : ExpandableObjectConverter
  268.     {
  269.         public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
  270.         {
  271.             if (destinationType == typeof(DockPanelSkin))
  272.                 return true;
  273.             return base.CanConvertTo(context, destinationType);
  274.         }
  275.         public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
  276.         {
  277.             if (destinationType == typeof(String) && value is DockPanelSkin)
  278.             {
  279.                 return "DockPanelSkin";
  280.             }
  281.             return base.ConvertTo(context, culture, value, destinationType);
  282.         }
  283.     }
  284.     public class DockPanelGradientConverter : ExpandableObjectConverter
  285.     {
  286.         public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
  287.         {
  288.             if (destinationType == typeof(DockPanelGradient))
  289.                 return true;
  290.             return base.CanConvertTo(context, destinationType);
  291.         }
  292.         public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
  293.         {
  294.             if (destinationType == typeof(String) && value is DockPanelGradient)
  295.             {
  296.                 return "DockPanelGradient";
  297.             }
  298.             return base.ConvertTo(context, culture, value, destinationType);
  299.         }
  300.     }
  301.     public class AutoHideStripConverter : ExpandableObjectConverter
  302.     {
  303.         public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
  304.         {
  305.             if (destinationType == typeof(AutoHideStripSkin))
  306.                 return true;
  307.             return base.CanConvertTo(context, destinationType);
  308.         }
  309.         public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
  310.         {
  311.             if (destinationType == typeof(String) && value is AutoHideStripSkin)
  312.             {
  313.                 return "AutoHideStripSkin";
  314.             }
  315.             return base.ConvertTo(context, culture, value, destinationType);
  316.         }
  317.     }
  318.     public class DockPaneStripConverter : ExpandableObjectConverter
  319.     {
  320.         public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
  321.         {
  322.             if (destinationType == typeof(DockPaneStripSkin))
  323.                 return true;
  324.             return base.CanConvertTo(context, destinationType);
  325.         }
  326.         public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
  327.         {
  328.             if (destinationType == typeof(String) && value is DockPaneStripSkin)
  329.             {
  330.                 return "DockPaneStripSkin";
  331.             }
  332.             return base.ConvertTo(context, culture, value, destinationType);
  333.         }
  334.     }
  335.     public class DockPaneStripGradientConverter : ExpandableObjectConverter
  336.     {
  337.         public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
  338.         {
  339.             if (destinationType == typeof(DockPaneStripGradient))
  340.                 return true;
  341.             return base.CanConvertTo(context, destinationType);
  342.         }
  343.         public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
  344.         {
  345.             if (destinationType == typeof(String) && value is DockPaneStripGradient)
  346.             {
  347.                 return "DockPaneStripGradient";
  348.             }
  349.             return base.ConvertTo(context, culture, value, destinationType);
  350.         }
  351.     }
  352.     public class DockPaneTabGradientConverter : ExpandableObjectConverter
  353.     {
  354.         public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
  355.         {
  356.             if (destinationType == typeof(TabGradient))
  357.                 return true;
  358.             return base.CanConvertTo(context, destinationType);
  359.         }
  360.         public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
  361.         {
  362.             if (destinationType == typeof(String) && value is TabGradient)
  363.             {
  364.                 return "DockPaneTabGradient";
  365.             }
  366.             return base.ConvertTo(context, culture, value, destinationType);
  367.         }
  368.     }
  369.     #endregion
  370. }