using System.Windows.Forms;
using System.Drawing;
using System.Collections.Generic;
using System.Linq;
#pragma warning disable CS1591
namespace FastReport.Utils
{
///
/// The style of FastReport user interface.
///
public enum UIStyle
{
///
/// The default light gray style.
///
Light,
///
/// Blue style.
///
Blue,
///
/// Light Blue style.
///
LightBlue,
///
/// Dark style.
///
Dark,
///
/// Custom style
///
Custom1,
///
/// Custom style
///
Custom2,
///
/// Custom style
///
Custom3,
///
/// Custom style
///
Custom4,
///
/// Custom style
///
Custom5
}
public class TabStripColors
{
public Color GradientBegin;
public Color GradientEnd;
public Color Border;
public int BorderWidth = 1;
public Color ActiveTabForeground = SystemColors.WindowText;
public Color ActiveTabBackground = SystemColors.Window;
public Color InactiveTabForeground;
}
public class CaptionColors
{
public Color GradientBegin;
public Color GradientEnd;
public Color ForeColor = SystemColors.WindowText;
public Color BorderColor;
public Color HighlightButton;
}
public class ToolWindowColors
{
public CaptionColors Caption { get; } = new CaptionColors();
public TabStripColors TabStrip { get; } = new TabStripColors();
public Color ControlBackColor;
}
public class ZoomControlColors
{
public Color GradientBegin;
public Color GradientEnd;
public Color Foreground;
}
public class WorkspaceColors : ToolWindowColors
{
public Color ForeColor;
public Color WorkspaceBackColor;
public Color GrayColor;
public Color SplitterBackColor;
public ZoomControlColors ZoomControl { get; } = new ZoomControlColors();
}
public class RibbonColors
{
public Color GradientBegin;
public Color GradientEnd;
public Color BorderColor;
}
public class FRColorTable : ProfessionalColorTable
{
public CaptionColors WindowTitle { get; } = new CaptionColors();
public WorkspaceColors Workspace { get; } = new WorkspaceColors();
public ToolWindowColors ToolWindow { get; set; }
public RibbonColors Ribbon { get; } = new RibbonColors();
public FRColorTable()
{
ToolWindow = Workspace;
}
}
public class LightColorTable : FRColorTable
{
private static Color _color = Color.SteelBlue;
private static Color _color2 = SystemColors.Control;
public override Color ComboBoxStaticBorder => SystemColors.ControlLight;// Color.Transparent;
public override Color ButtonCheckedGradientBegin => ButtonSelectedGradientBegin;
public override Color ButtonCheckedGradientMiddle => ButtonSelectedGradientMiddle;
public override Color ButtonCheckedGradientEnd => ButtonSelectedGradientEnd;
public override Color ButtonSelectedHighlightBorder => _color;
public override Color StatusStripGradientBegin => _color;
public override Color StatusStripGradientEnd => _color;
public override Color StatusStripForeground => SystemColors.Window;
public override Color ToolStripBorder => SeparatorDark;
public override Color MenuStripGradientBegin => _color2;
public override Color MenuStripGradientEnd => _color2;
public override Color ToolStripPanelGradientBegin => _color2;
public override Color ToolStripPanelGradientEnd => _color2;
public override Color MenuItemBorder => _color;
public override Color MenuQATGradientBegin => ToolStripGradientEnd;
public override Color MenuQATGradientMiddle => ToolStripGradientEnd;
public override Color MenuQATGradientEnd => ToolStripGradientEnd;
public LightColorTable()
{
UseSystemColors = true;
WindowTitle.GradientBegin = WindowTitle.GradientEnd = SystemColors.Control;
WindowTitle.BorderColor = SystemColors.ActiveBorder;
WindowTitle.HighlightButton = SystemColors.ControlLight;
Workspace.ForeColor = Color.FromArgb(60, 60, 60);
Workspace.ControlBackColor = SystemColors.Control;
Workspace.WorkspaceBackColor = Color.FromArgb(220, 220, 220);
Workspace.GrayColor = Color.FromArgb(232, 232, 232);
Workspace.SplitterBackColor = SystemColors.ControlLight;
Workspace.TabStrip.GradientBegin = Workspace.TabStrip.GradientEnd = SystemColors.Control;
Workspace.TabStrip.Border = ToolStripBorder;
Workspace.TabStrip.ActiveTabForeground = SystemColors.WindowText;
Workspace.TabStrip.InactiveTabForeground = SystemColors.ControlDarkDark;
Workspace.ZoomControl.GradientBegin = StatusStripGradientBegin;
Workspace.ZoomControl.GradientEnd = StatusStripGradientEnd;
Workspace.ZoomControl.Foreground = StatusStripForeground;
ToolWindow.Caption.GradientBegin = ToolStripGradientMiddle;
ToolWindow.Caption.GradientEnd = ToolStripGradientEnd;
ToolWindow.Caption.HighlightButton = ButtonSelectedHighlight;
Ribbon.GradientBegin = Ribbon.GradientEnd = SystemColors.Window;
Ribbon.BorderColor = ToolStripBorder;
}
}
public class BlueColorTable : LightColorTable
{
private static Color _color = Color.FromArgb(220, 230, 242);
public override Color ComboBoxStaticBorder => ToolStripGradientEnd;
public override Color ComboBoxDisabledBackground => _color;
public override Color MenuStripGradientBegin => StatusStripGradientBegin;
public override Color MenuStripGradientEnd => StatusStripGradientEnd;
public override Color TopLevelMenuItemForeground => StatusStripForeground;
public override Color ToolStripPanelGradientBegin => StatusStripGradientBegin;
public override Color ToolStripPanelGradientEnd => StatusStripGradientEnd;
public override Color ToolStripGradientBegin => Color.FromArgb(231, 242, 255);
public override Color ToolStripGradientMiddle => _color;
public override Color ToolStripGradientEnd => Color.FromArgb(190, 205, 222);
public override Color ToolStripBorder => Color.FromArgb(150, 165, 180);
public override Color MenuQATGradientBegin => ToolStripGradientMiddle;
public override Color MenuQATGradientMiddle => ToolStripGradientMiddle;
public override Color MenuQATGradientEnd => ToolStripGradientEnd;
public BlueColorTable()
{
WindowTitle.GradientBegin = WindowTitle.GradientEnd = WindowTitle.BorderColor = MenuStripGradientBegin;
WindowTitle.ForeColor = TopLevelMenuItemForeground;
WindowTitle.HighlightButton = Color.FromArgb(80, 150, 207);
Workspace.ControlBackColor = _color;
Workspace.WorkspaceBackColor = _color;
Workspace.GrayColor = Color.FromArgb(190, 205, 222);
Workspace.SplitterBackColor = Color.FromArgb(162, 176, 191);
Workspace.TabStrip.GradientBegin = Workspace.TabStrip.GradientEnd = _color;
Workspace.TabStrip.Border = ToolStripBorder;
ToolWindow.Caption.GradientBegin = //ToolStripGradientBegin;
ToolWindow.Caption.GradientEnd = Workspace.ControlBackColor;// ToolStripGradientMiddle;
ToolWindow.Caption.HighlightButton = ButtonCheckedGradientBegin;
Ribbon.GradientBegin = Ribbon.GradientEnd = ToolStripGradientMiddle;
Ribbon.BorderColor = ToolStripBorder;
}
}
public class LightBlueColorTable : LightColorTable
{
public override Color MenuStripGradientBegin => StatusStripGradientBegin;
public override Color MenuStripGradientEnd => StatusStripGradientEnd;
public override Color TopLevelMenuItemForeground => StatusStripForeground;
public override Color ToolStripGradientBegin => Color.FromArgb(250, 250, 250);
public override Color ToolStripGradientMiddle => Color.FromArgb(240, 240, 240);
public override Color ToolStripGradientEnd => Color.FromArgb(234, 234, 234);
public LightBlueColorTable()
{
WindowTitle.GradientBegin = WindowTitle.GradientEnd = WindowTitle.BorderColor = MenuStripGradientBegin;
WindowTitle.ForeColor = TopLevelMenuItemForeground;
WindowTitle.HighlightButton = Color.FromArgb(80, 150, 207);
Workspace.TabStrip.ActiveTabBackground = Workspace.TabStrip.Border = StatusStripGradientBegin;
Workspace.TabStrip.ActiveTabForeground = SystemColors.Window;
Workspace.TabStrip.BorderWidth = 2;
ToolWindow = new ToolWindowColors();
ToolWindow.TabStrip.GradientBegin = ToolWindow.TabStrip.GradientEnd = SystemColors.Control;
ToolWindow.TabStrip.Border = ToolStripBorder;
ToolWindow.TabStrip.ActiveTabForeground = SystemColors.WindowText;
ToolWindow.TabStrip.InactiveTabForeground = SystemColors.ControlDarkDark;
ToolWindow.Caption.GradientBegin = ToolWindow.Caption.GradientEnd = ToolStripGradientMiddle;
//ToolStripGradientEnd;
ToolWindow.Caption.HighlightButton = ButtonSelectedHighlight;
ToolWindow.ControlBackColor = SystemColors.Control;
Ribbon.GradientBegin = Ribbon.GradientEnd = SystemColors.Control;
Ribbon.BorderColor = ToolStripBorder;
}
}
public class DarkColorTable : FRColorTable
{
private static Color _foreground = Color.FromArgb(0, 0, 0);
private static Color _disabledForeground = Color.FromArgb(128, 128, 128);
private static Color _comboBoxBackground = Color.FromArgb(255, 255, 255);
private static Color _comboBoxDisabledBackground = Color.FromArgb(204, 207, 212);
private static Color _toolStripDropDownBackground = Color.FromArgb(250, 250, 250);
private static Color _buttonPressedGradientBegin = Color.FromArgb(252, 214, 165);
private static Color _buttonPressedGradientEnd = Color.FromArgb(250, 230, 150);
private static Color _buttonPressedGradientMiddle = Color.FromArgb(254, 185, 96);
private static Color _buttonSelectedGradientBegin = Color.FromArgb(255, 247, 200);
private static Color _buttonSelectedGradientMiddle = Color.FromArgb(255, 247, 200);
private static Color _buttonSelectedGradientEnd = Color.FromArgb(255, 219, 89);
private static Color _buttonSelectedHighlightBorder = Color.FromArgb(112, 112, 112);
private static Color _menuItemBorder = Color.FromArgb(112, 112, 112);
private static Color _topLevelMenuItemForeground = Color.FromArgb(255, 255, 255);
private static Color _topLevelMenuItemDisabledForeground = Color.FromArgb(140, 140, 140);
private static Color _menuItemSelectedGradientBegin = Color.FromArgb(255, 247, 200);
private static Color _menuItemSelectedGradientEnd = Color.FromArgb(255, 219, 89);
private static Color _checkBackground = Color.FromArgb(255, 227, 149);
private static Color _gripDark = Color.FromArgb(112, 112, 112);
private static Color _gripLight = Color.FromArgb(214, 214, 214);
private static Color _imageMarginGradientBegin = Color.FromArgb(238, 238, 238);
private static Color _menuBorder = Color.FromArgb(134, 134, 134);
private static Color _menuToolBack = Color.FromArgb(83, 83, 83);
private static Color _separatorDark = Color.FromArgb(152, 159, 170);
private static Color _separatorLight = Color.FromArgb(240, 240, 240);
private static Color _statusStripGradientBegin = Color.FromArgb(70, 70, 70);
private static Color _statusStripGradientEnd = Color.FromArgb(51, 51, 51);
private static Color _statusStripForeground = Color.FromArgb(255, 255, 255);
private static Color _toolStripBorder = Color.FromArgb(76, 83, 92);
private static Color _toolStripGradientBegin = Color.FromArgb(214, 217, 222);
private static Color _toolStripGradientMiddle = Color.FromArgb(204, 207, 212);
private static Color _toolStripGradientEnd = Color.FromArgb(152, 158, 166);
public override Color Foreground => _foreground;
public override Color DisabledForeground => _disabledForeground;
public override Color ComboBoxStaticBorder => ToolStripGradientEnd;
public override Color ComboBoxBackground => _comboBoxBackground;
public override Color ComboBoxDisabledBackground => _comboBoxDisabledBackground;
public override Color TopLevelMenuItemForeground => _topLevelMenuItemForeground;
public override Color TopLevelMenuItemDisabledForeground => _topLevelMenuItemDisabledForeground;
public override Color StatusStripForeground => _statusStripForeground;
public override int StatusStripGradientAngle => 90;
public override bool StatusStripGradientGlass => true;
public override bool MenuItemGradientGlass => true;
public override Color MenuQATGradientBegin => _toolStripGradientBegin;
public override Color MenuQATGradientMiddle => _toolStripGradientBegin;
public override Color MenuQATGradientEnd => _toolStripGradientBegin;
public override Color ButtonCheckedGradientBegin => _buttonPressedGradientBegin;
public override Color ButtonCheckedGradientEnd => _buttonPressedGradientEnd;
public override Color ButtonCheckedGradientMiddle => _buttonPressedGradientMiddle;
public override Color ButtonPressedGradientBegin => _buttonPressedGradientBegin;
public override Color ButtonPressedGradientEnd => _buttonPressedGradientEnd;
public override Color ButtonPressedGradientMiddle => _buttonPressedGradientMiddle;
public override Color ButtonSelectedGradientBegin => _buttonSelectedGradientBegin;
public override Color ButtonSelectedGradientEnd => _buttonSelectedGradientEnd;
public override Color ButtonSelectedGradientMiddle => _buttonSelectedGradientMiddle;
public override Color ButtonSelectedHighlightBorder => _buttonSelectedHighlightBorder;
public override Color CheckBackground => _checkBackground;
public override Color GripDark => _gripDark;
public override Color GripLight => _gripLight;
public override Color ImageMarginGradientBegin => _imageMarginGradientBegin;
public override Color ImageMarginGradientMiddle => _imageMarginGradientBegin;
public override Color ImageMarginGradientEnd => _imageMarginGradientBegin;
public override Color MenuBorder => _menuBorder;
public override Color MenuItemBorder => _menuItemBorder;
public override Color MenuItemPressedGradientBegin => _toolStripGradientBegin;
public override Color MenuItemPressedGradientEnd => _toolStripGradientEnd;
public override Color MenuItemPressedGradientMiddle => _toolStripGradientMiddle;
public override Color MenuItemSelectedGradientBegin => _menuItemSelectedGradientBegin;
public override Color MenuItemSelectedGradientEnd => _menuItemSelectedGradientEnd;
public override Color MenuStripGradientBegin => _menuToolBack;
public override Color MenuStripGradientEnd => _menuToolBack;
public override Color RaftingContainerGradientBegin => _menuToolBack;
public override Color RaftingContainerGradientEnd => _menuToolBack;
public override Color SeparatorDark => _separatorDark;
public override Color SeparatorLight => _separatorLight;
public override Color StatusStripGradientBegin => _statusStripGradientBegin;
public override Color StatusStripGradientEnd => _statusStripGradientEnd;
public override Color ToolStripBorder => _toolStripBorder;
public override Color ToolStripDropDownBackground => _toolStripDropDownBackground;
public override Color ToolStripGradientBegin => _toolStripGradientBegin;
public override Color ToolStripGradientEnd => _toolStripGradientEnd;
public override Color ToolStripGradientMiddle => _toolStripGradientMiddle;
public override Color ToolStripPanelGradientBegin => _menuToolBack;
public override Color ToolStripPanelGradientEnd => _menuToolBack;
public DarkColorTable()
{
WindowTitle.GradientBegin = WindowTitle.GradientEnd = WindowTitle.BorderColor = MenuStripGradientBegin;
WindowTitle.ForeColor = TopLevelMenuItemForeground;
WindowTitle.HighlightButton = Color.FromArgb(100, 100, 100);
Workspace.ForeColor = Color.FromArgb(240, 240, 240);
Workspace.ControlBackColor = Color.FromArgb(204, 207, 212);
Workspace.WorkspaceBackColor = Color.FromArgb(61, 61, 61);
Workspace.GrayColor = Color.FromArgb(143, 150, 160);
Workspace.SplitterBackColor = StatusStripGradientBegin;
Workspace.TabStrip.GradientBegin = Workspace.TabStrip.GradientEnd = Color.FromArgb(83, 83, 83);
Workspace.TabStrip.Border = ToolStripBorder;
Workspace.TabStrip.ActiveTabForeground = SystemColors.WindowText;
Workspace.TabStrip.InactiveTabForeground = Color.FromArgb(255, 255, 255);
Workspace.ZoomControl.GradientBegin = Color.FromArgb(194, 197, 202);
Workspace.ZoomControl.GradientEnd = Color.FromArgb(61, 61, 61);
Workspace.ZoomControl.Foreground = Color.FromArgb(255, 255, 255);
ToolWindow.Caption.GradientBegin = //Color.FromArgb(238, 239, 240);
ToolWindow.Caption.GradientEnd = Workspace.ControlBackColor; //Color.FromArgb(191, 196, 203);
ToolWindow.Caption.HighlightButton = ButtonSelectedHighlight;
Ribbon.GradientBegin = ToolStripGradientMiddle;
Ribbon.GradientEnd = ToolStripGradientMiddle;
Ribbon.BorderColor = GripDark;// Color.FromArgb(160, 164, 174);
}
}
///
/// Contains conversion methods from FastReport's UIStyle to various enums.
///
public static class UIStyleUtils
{
private class StyleInfo
{
public string Name { get; }
public UIStyle Style { get; }
public FRColorTable ColorTable { get; }
public ToolStripProfessionalRenderer Renderer { get; }
public StyleInfo(string name, UIStyle style, FRColorTable colorTable)
{
Name = name;
Style = style;
ColorTable = colorTable;
Renderer = new ToolStripProfessionalRenderer(colorTable);
}
}
private static List styles;
private static List Styles
{
get
{
if (styles == null)
{
styles = new List()
{
new StyleInfo("Light", UIStyle.Light, new LightColorTable()),
new StyleInfo("Blue", UIStyle.Blue, new BlueColorTable()),
new StyleInfo("Light Blue", UIStyle.LightBlue, new LightBlueColorTable()),
new StyleInfo("Dark", UIStyle.Dark, new DarkColorTable()),
};
}
return styles;
}
}
internal const UIStyle DefaultStyle = UIStyle.LightBlue;
private static StyleInfo GetStyle(UIStyle style) => Styles.Where(s => s.Style == style).FirstOrDefault();
///
/// Gets UI style names.
///
public static string[] UIStyleNames => Styles.Select(s => s.Name).ToArray();
///
/// Returns toolstrip renderer for the given style.
///
/// UI style.
/// The renderer.
public static ToolStripProfessionalRenderer GetToolStripRenderer(UIStyle style) => GetStyle(style).Renderer;
///
/// Adds a new style or replaces existing one.
///
/// The name of style.
/// The style index to add.
/// The color table.
public static void AddStyle(string name, UIStyle style, FRColorTable colorTable)
{
var st = new StyleInfo(name, style, colorTable);
var s = GetStyle(style);
if (s != null)
Styles[Styles.IndexOf(s)] = st;
else
Styles.Add(st);
}
internal static FRColorTable GetColorTable(UIStyle style) => GetStyle(style).ColorTable;
internal static Color GetControlColor(UIStyle style) => GetColorTable(style).Workspace.ControlBackColor;
internal static Color GetGrayColor(UIStyle style) => GetColorTable(style).Workspace.GrayColor;
}
}
#pragma warning restore CS1591