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