using System.Drawing;
using System.Windows.Forms;
namespace FastReport.Utils
{
///
/// The style of FastReport user interface.
///
public enum UIStyle
{
///
/// Specifies the Microsoft Visual Studio 2005 style.
///
VisualStudio2005,
///
/// Specifies the Microsoft Office 2003 style (blue).
///
Office2003,
}
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 ToolWindowColors
{
public class CaptionColors
{
public Color GradientBegin;
public Color GradientEnd;
public Color ForeColor = SystemColors.WindowText;
public Color HighlightButton;
}
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();
}
internal class FRColorTable : ProfessionalColorTable
{
public WorkspaceColors Workspace { get; } = new WorkspaceColors();
public ToolWindowColors ToolWindow { get; set; }
public FRColorTable()
{
ToolWindow = Workspace;
}
}
internal class FRVS2005ColorTable : FRColorTable
{
public override Color ToolStripBorder
{
get { return SeparatorDark; }
}
public FRVS2005ColorTable()
{
UseSystemColors = true;
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.Control;
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 = SystemColors.WindowText;
ToolWindow.Caption.GradientBegin = ToolStripGradientMiddle;
ToolWindow.Caption.GradientEnd = ToolStripGradientEnd;
ToolWindow.Caption.HighlightButton = ButtonSelectedHighlight;
}
}
internal class FROffice2003ColorTable : FRColorTable
{
private static Color _toolStripDropDownBackground = Color.FromArgb(250, 250, 250);
private static Color _buttonPressedGradientBegin = Color.FromArgb(248, 181, 106);
private static Color _buttonPressedGradientEnd = Color.FromArgb(255, 208, 134);
private static Color _buttonPressedGradientMiddle = Color.FromArgb(251, 140, 60);
private static Color _buttonSelectedGradientBegin = Color.FromArgb(255, 255, 222);
private static Color _buttonSelectedGradientEnd = Color.FromArgb(255, 203, 136);
private static Color _buttonSelectedGradientMiddle = Color.FromArgb(255, 225, 172);
private static Color _menuItemSelectedGradientBegin = Color.FromArgb(255, 213, 103);
private static Color _menuItemSelectedGradientEnd = Color.FromArgb(255, 228, 145);
private static Color _checkBackground = Color.FromArgb(255, 227, 149);
private static Color _gripDark = Color.FromArgb(111, 157, 217);
private static Color _gripLight = Color.FromArgb(255, 255, 255);
private static Color _imageMarginGradientBegin = Color.FromArgb(233, 238, 238);
private static Color _menuBorder = Color.FromArgb(134, 134, 134);
private static Color _overflowButtonGradientBegin = Color.FromArgb(167, 204, 251);
private static Color _overflowButtonGradientEnd = Color.FromArgb(101, 147, 207);
private static Color _overflowButtonGradientMiddle = Color.FromArgb(167, 204, 251);
private static Color _menuToolBack = Color.FromArgb(191, 219, 255);
private static Color _separatorDark = Color.FromArgb(154, 198, 255);
private static Color _separatorLight = Color.FromArgb(255, 255, 255);
private static Color _statusStripGradientBegin = Color.FromArgb(215, 229, 247);
private static Color _statusStripGradientEnd = Color.FromArgb(172, 201, 238);
private static Color _toolStripBorder = Color.FromArgb(111, 157, 217);
private static Color _toolStripContentPanelGradientBegin = Color.FromArgb(164, 195, 235);
private static Color _toolStripGradientBegin = Color.FromArgb(227, 239, 255);
private static Color _toolStripGradientEnd = Color.FromArgb(152, 186, 230);
private static Color _toolStripGradientMiddle = Color.FromArgb(222, 236, 255);
private static Color _buttonSelectedHighlightBorder = Color.FromArgb(121, 153, 194);
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 MenuBorder => _menuBorder;
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 OverflowButtonGradientBegin => _overflowButtonGradientBegin;
public override Color OverflowButtonGradientEnd => _overflowButtonGradientEnd;
public override Color OverflowButtonGradientMiddle => _overflowButtonGradientMiddle;
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 ToolStripContentPanelGradientBegin => _toolStripContentPanelGradientBegin;
public override Color ToolStripContentPanelGradientEnd => _menuToolBack;
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 FROffice2003ColorTable()
{
Workspace.ForeColor = Color.FromArgb(60, 60, 60);
Workspace.ControlBackColor = Color.FromArgb(182, 208, 248);
Workspace.WorkspaceBackColor = Color.FromArgb(144, 153, 174);
Workspace.GrayColor = Color.FromArgb(145, 180, 230);
Workspace.SplitterBackColor = Workspace.ControlBackColor;
Workspace.TabStrip.GradientBegin = ToolStripGradientBegin;
Workspace.TabStrip.GradientEnd = ToolStripGradientEnd;
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 = Workspace.ForeColor;
ToolWindow.Caption.GradientBegin = Color.FromArgb(154, 188, 234);
ToolWindow.Caption.GradientEnd = Color.FromArgb(154, 188, 234);
ToolWindow.Caption.HighlightButton = ButtonSelectedHighlight;
}
}
///
/// Contains conversion methods between FastReport's UIStyle to various enums.
///
public static class UIStyleUtils
{
private static ToolStripProfessionalRenderer FVS2005ToolStripRenderer;
private static ToolStripProfessionalRenderer FOffice2003ToolStripRenderer;
private static FRColorTable FVS2005ColorTable;
private static FRColorTable FOffice2003ColorTable;
internal const UIStyle DefaultStyle = UIStyle.Office2003;
///
/// Gets UI style names.
///
public static readonly string[] UIStyleNames = new string[] {
"VisualStudio 2005",
"Office 2003",
};
///
/// Returns toolstrip renderer for the given style.
///
/// UI style.
/// The renderer.
public static ToolStripProfessionalRenderer GetToolStripRenderer(UIStyle style)
{
if (FVS2005ToolStripRenderer == null)
{
FVS2005ToolStripRenderer = new ToolStripProfessionalRenderer(GetColorTable(UIStyle.VisualStudio2005));
// FVS2005ToolStripRenderer.RoundedEdges = false;
}
if (FOffice2003ToolStripRenderer == null)
{
FOffice2003ToolStripRenderer = new ToolStripProfessionalRenderer(GetColorTable(UIStyle.Office2003));
// FOffice2003ToolStripRenderer.RoundedEdges = false;
}
switch (style)
{
case UIStyle.Office2003:
return FOffice2003ToolStripRenderer;
default:
return FVS2005ToolStripRenderer;
}
}
internal static FRColorTable GetColorTable(UIStyle style)
{
if (FVS2005ColorTable == null)
FVS2005ColorTable = new FRVS2005ColorTable();
if (FOffice2003ColorTable == null)
FOffice2003ColorTable = new FROffice2003ColorTable();
switch (style)
{
case UIStyle.Office2003:
return FOffice2003ColorTable;
default:
return FVS2005ColorTable;
}
}
internal static Color GetControlColor(UIStyle style) => GetColorTable(style).Workspace.ControlBackColor;
internal static Color GetGrayColor(UIStyle style) => GetColorTable(style).Workspace.GrayColor;
}
}