98 lines
4.5 KiB
MQL5
98 lines
4.5 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| UTheme.mqh |
| |||
//| Copyright 2026, DearMQL5 GUI Engine |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
#property copyright "Copyright 2026, DearMQL5 GUI Engine"
| |||
#property link "https://www.mql5.com"
| |||
#property strict
| |||
| |||
/// Visual style parameters, ARGB color palette, and layout metrics.
| |||
struct SUTheme
| |||
{
| |||
// Colors (ARGB: 0xAARRGGBB)
| |||
uint window_bg; ///< Window body background color
| |||
uint window_titlebar; ///< Window title bar background
| |||
uint window_titlebar_active; ///< Title bar background when focused
| |||
uint window_border; ///< Window outer border outline
| |||
uint text; ///< Primary foreground text color
| |||
uint text_dim; ///< Secondary muted text color
| |||
uint widget_bg; ///< Normal widget background (edit, slider track)
| |||
uint widget_hover; ///< Widget background when mouse is hovering
| |||
uint widget_active; ///< Widget background when clicked/pressed
| |||
uint button_bg; ///< Normal button background
| |||
uint button_hover; ///< Button hovered background
| |||
uint button_active; ///< Button pressed background
| |||
uint accent; ///< Institutional accent color (emerald / cyan)
| |||
uint accent_hover; ///< Accent color when hovered
| |||
uint danger; ///< Danger / panic button color (red)
| |||
uint success; ///< Success / profitable metric color (green)
| |||
uint separator; ///< Horizontal divider color
| |||
| |||
// Layout Spacing & Metrics
| |||
int padding_x; ///< Horizontal internal padding inside widgets/windows
| |||
int padding_y; ///< Vertical internal padding inside widgets/windows
| |||
int item_spacing_x; ///< Horizontal gap between adjacent widgets on SameLine
| |||
int item_spacing_y; ///< Vertical gap between rows
| |||
int window_title_height; ///< Height of window title bar
| |||
int widget_height; ///< Standard height of single-line interactive widgets
| |||
int corner_radius; ///< Corner rounding radius (0 = sharp square)
| |||
string font_name; ///< Primary typography face (e.g. "Segoe UI", "Arial")
| |||
int font_size; ///< Primary font size in points
| |||
| |||
/// Applies default professional institutional Dark Theme.
| |||
void SetDarkDefaults(void)
| |||
{
| |||
window_bg = 0xF0181A1F; // Very dark slate grey (94% opacity)
| |||
window_titlebar = 0xFF21252B; // Medium slate
| |||
window_titlebar_active = 0xFF2C313C; // Focused slate
| |||
window_border = 0xFF3E4451; // Subtle grey border
| |||
text = 0xFFECEFF4; // Clean crisp off-white
| |||
text_dim = 0xFF8A93A4; // Dim grey for labels
| |||
widget_bg = 0xFF282C34; // Input background
| |||
widget_hover = 0xFF353B45; // Hovered state
| |||
widget_active = 0xFF4B5263; // Pressed state
| |||
button_bg = 0xFF2D3748; // Cool slate button
| |||
button_hover = 0xFF3D4D66; // Hovered button
| |||
button_active = 0xFF4A5D7C; // Clicked button
| |||
accent = 0xFF00A389; // Institutional cyan/emerald
| |||
accent_hover = 0xFF00C2A3; // Vibrant cyan
| |||
danger = 0xFFE06C75; // Coral red
| |||
success = 0xFF98C379; // Soft forest green
| |||
separator = 0xFF3E4451; // Clean separator
| |||
| |||
padding_x = 8;
| |||
padding_y = 6;
| |||
item_spacing_x = 8;
| |||
item_spacing_y = 6;
| |||
window_title_height = 24;
| |||
widget_height = 22;
| |||
corner_radius = 3;
| |||
font_name = "Segoe UI";
| |||
font_size = 9;
| |||
}
| |||
};
| |||
| |||
/// Global theme access and style stack manager.
| |||
class UTheme
| |||
{
| |||
private:
| |||
static SUTheme s_current;
| |||
| |||
public:
| |||
/// Returns the active global theme configuration.
| |||
static SUTheme Get(void)
| |||
{
| |||
if(s_current.widget_height == 0)
| |||
s_current.SetDarkDefaults();
| |||
return(s_current);
| |||
}
| |||
| |||
/// Overrides the active global theme.
| |||
static void Set(const SUTheme &theme)
| |||
{
| |||
s_current = theme;
| |||
}
| |||
};
| |||
| |||
SUTheme UTheme::s_current;
|