308 lines
14 KiB
MQL5
308 lines
14 KiB
MQL5
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| AI Canvas Theme.mqh |
|
||
|
|
//| Copyright 2026, Allan Munene Mutiiria. |
|
||
|
|
//| https://t.me/Forex_Algo_Trader |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
#property copyright "Copyright 2026, Allan Munene Mutiiria."
|
||
|
|
#property link "https://t.me/Forex_Algo_Trader"
|
||
|
|
|
||
|
|
//--- Include guard
|
||
|
|
#ifndef AI_CANVAS_THEME_MQH
|
||
|
|
#define AI_CANVAS_THEME_MQH
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Layout Dimensions |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
#define AI_SIDEBAR_W_EXPANDED 150 // Expanded sidebar width
|
||
|
|
#define AI_SIDEBAR_W_COLLAPSED 50 // Collapsed sidebar width
|
||
|
|
#define AI_MAIN_W 550 // Main content area width
|
||
|
|
#define AI_HEADER_H 40 // Header bar height
|
||
|
|
#define AI_FOOTER_H 46 // Footer bar height
|
||
|
|
#define AI_DISPLAY_H 280 // Chat display pane height
|
||
|
|
#define AI_PROMPT_H 130 // Prompt input pane height
|
||
|
|
#define AI_PAD 10 // Section vertical padding
|
||
|
|
#define AI_SIDE_PAD 6 // Side horizontal padding
|
||
|
|
#define AI_TEXT_PAD 10 // Text inset padding
|
||
|
|
#define AI_MARGIN 5 // Generic margin
|
||
|
|
#define AI_BUTTON_H 32 // Standard button height
|
||
|
|
#define AI_LINE_GAP 5 // Inter-line gap
|
||
|
|
#define AI_SS 4 // Super-sampling factor
|
||
|
|
#define AI_DASHBOARD_X_DEFAULT 10 // Default dashboard X anchor
|
||
|
|
#define AI_DASHBOARD_Y_DEFAULT 20 // Default dashboard Y anchor
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Font Sizes |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
#define AI_FONT_TITLE 14 // Title font size
|
||
|
|
#define AI_FONT_BODY 10 // Body text font size
|
||
|
|
#define AI_FONT_LABEL 10 // Button label font size
|
||
|
|
#define AI_FONT_SNIPPET 9 // Snippet preview font size
|
||
|
|
#define AI_FONT_TIMESTAMP 8 // Timestamp font size
|
||
|
|
#define AI_FONT_BUTTON 11 // Toolbar button font size
|
||
|
|
#define AI_FONT_HEADING 12 // Heading font size
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Glyph Codes (Webdings/Wingdings character mappings) |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
#define AI_GLYPH_CLOSE "r" // Close X glyph
|
||
|
|
#define AI_GLYPH_SEARCH "L" // Search magnifier glyph
|
||
|
|
#define AI_GLYPH_TOGGLE_LEFT "9" // Sidebar collapse arrow
|
||
|
|
#define AI_GLYPH_TOGGLE_RIGHT ":" // Sidebar expand arrow
|
||
|
|
#define AI_GLYPH_REGEN "q" // Regenerate icon
|
||
|
|
#define AI_GLYPH_SEND "@" // Send icon
|
||
|
|
#define AI_GLYPH_CHART "?" // Chart icon
|
||
|
|
#define AI_GLYPH_DELETE "V" // Delete X glyph
|
||
|
|
#define AI_GLYPH_EXPORT "7" // Export icon
|
||
|
|
#define AI_GLYPH_SCROLL_UP "5" // Scroll up arrow
|
||
|
|
#define AI_GLYPH_SCROLL_DOWN "6" // Scroll down arrow
|
||
|
|
#define AI_GLYPH_THEME "[" // Theme toggle glyph
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Active Theme Flag |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
bool g_ai_darkTheme = false; // True when dark theme is active
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Panel and Background Colors |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
color g_ai_bg, g_ai_panelAlt, g_ai_headerBg, g_ai_sidebarBg, g_ai_promptBg;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Border Colors |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
color g_ai_border, g_ai_borderAccent;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Text Colors |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
color g_ai_titleText, g_ai_subText, g_ai_bodyText;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Bubble Colors |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
color g_ai_userBubbleText, g_ai_aiBubbleText, g_ai_userBubbleBg, g_ai_aiBubbleBg;
|
||
|
|
color g_ai_timestampText;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Accent Colors |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
color g_ai_accent, g_ai_accentHover;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Button Colors |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
color g_ai_buttonSendBg, g_ai_buttonSendBgHover;
|
||
|
|
color g_ai_buttonDisabledBg, g_ai_buttonDisabledIcon;
|
||
|
|
color g_ai_buttonChartBg, g_ai_buttonChartBgHover;
|
||
|
|
color g_ai_buttonSignalBg, g_ai_buttonSignalBgHover;
|
||
|
|
color g_ai_buttonClearBg, g_ai_buttonClearBgHover;
|
||
|
|
color g_ai_buttonNewChatBg, g_ai_buttonNewChatBgHover;
|
||
|
|
color g_ai_buttonHistoryBg, g_ai_buttonHistoryBgHover;
|
||
|
|
color g_ai_buttonSearchBg, g_ai_buttonSearchBgHover;
|
||
|
|
color g_ai_buttonToggleBg, g_ai_buttonToggleBgHover;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Close Button Colors |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
color g_ai_closeBg, g_ai_closeBgHover, g_ai_closeColor, g_ai_closeColorHover;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Chat Item Colors |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
color g_ai_chatItemBg, g_ai_chatItemBgHover, g_ai_chatItemActiveText, g_ai_chatItemDelHover;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Scrollbar Colors |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
color g_ai_scrollSlider, g_ai_scrollSliderHover, g_ai_scrollSliderDrag;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Editor Colors |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
color g_ai_caretColor, g_ai_selectionBg;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Loading and Note Colors |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
color g_ai_loadingPrep, g_ai_loadingThink, g_ai_responseTimeNote;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Toast Notification Palette |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
color g_ai_toastBg, g_ai_toastBorder, g_ai_toastSuccess, g_ai_toastError;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Apply theme palette - true for dark, false for light |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
void Ai_ApplyTheme(bool dark)
|
||
|
|
{
|
||
|
|
//--- Store active theme flag
|
||
|
|
g_ai_darkTheme = dark;
|
||
|
|
|
||
|
|
//--- Dark theme palette
|
||
|
|
if(dark)
|
||
|
|
{
|
||
|
|
//--- Panel and background colors
|
||
|
|
g_ai_bg = C'22,26,36';
|
||
|
|
g_ai_panelAlt = C'28,33,46';
|
||
|
|
g_ai_headerBg = C'30,35,48';
|
||
|
|
g_ai_sidebarBg = C'24,29,40';
|
||
|
|
g_ai_promptBg = C'34,30,24';
|
||
|
|
|
||
|
|
//--- Border colors lifted above panel for visibility
|
||
|
|
g_ai_border = C'95,105,125';
|
||
|
|
g_ai_borderAccent = C'130,140,160';
|
||
|
|
|
||
|
|
//--- Text colors
|
||
|
|
g_ai_titleText = C'225,230,240';
|
||
|
|
g_ai_subText = C'140,150,170';
|
||
|
|
g_ai_bodyText = C'215,220,232';
|
||
|
|
|
||
|
|
//--- Bubble colors
|
||
|
|
g_ai_userBubbleText = C'200,210,225';
|
||
|
|
g_ai_aiBubbleText = C'140,180,255';
|
||
|
|
g_ai_userBubbleBg = C'40,48,65';
|
||
|
|
g_ai_aiBubbleBg = C'35,55,90';
|
||
|
|
g_ai_timestampText = C'105,115,135';
|
||
|
|
|
||
|
|
//--- Accent and send button colors
|
||
|
|
g_ai_accent = C'88,160,255';
|
||
|
|
g_ai_accentHover = C'120,180,255';
|
||
|
|
g_ai_buttonSendBg = C'58,130,246';
|
||
|
|
g_ai_buttonSendBgHover = C'90,150,255';
|
||
|
|
g_ai_buttonDisabledBg = C'70,75,85';
|
||
|
|
g_ai_buttonDisabledIcon = C'130,135,145';
|
||
|
|
|
||
|
|
//--- Action button colors
|
||
|
|
g_ai_buttonChartBg = C'40,90,55';
|
||
|
|
g_ai_buttonChartBgHover = C'55,115,75';
|
||
|
|
g_ai_buttonSignalBg = C'40,60,100';
|
||
|
|
g_ai_buttonSignalBgHover = C'55,80,130';
|
||
|
|
g_ai_buttonClearBg = C'95,40,40';
|
||
|
|
g_ai_buttonClearBgHover = C'120,55,55';
|
||
|
|
g_ai_buttonNewChatBg = C'40,55,90';
|
||
|
|
g_ai_buttonNewChatBgHover= C'55,75,115';
|
||
|
|
g_ai_buttonHistoryBg = C'45,50,65';
|
||
|
|
g_ai_buttonHistoryBgHover= C'60,68,85';
|
||
|
|
g_ai_buttonSearchBg = C'45,52,72';
|
||
|
|
g_ai_buttonSearchBgHover = C'60,70,95';
|
||
|
|
g_ai_buttonToggleBg = C'45,52,68';
|
||
|
|
g_ai_buttonToggleBgHover = C'58,68,88';
|
||
|
|
|
||
|
|
//--- Close button colors
|
||
|
|
g_ai_closeBg = C'30,35,48';
|
||
|
|
g_ai_closeBgHover = C'196,43,28';
|
||
|
|
g_ai_closeColor = C'160,170,190';
|
||
|
|
g_ai_closeColorHover = clrWhite;
|
||
|
|
|
||
|
|
//--- Chat item colors
|
||
|
|
g_ai_chatItemBg = C'34,40,55';
|
||
|
|
g_ai_chatItemBgHover = C'48,56,75';
|
||
|
|
g_ai_chatItemActiveText = C'120,180,255';
|
||
|
|
g_ai_chatItemDelHover = C'235,75,75';
|
||
|
|
|
||
|
|
//--- Scrollbar colors
|
||
|
|
g_ai_scrollSlider = C'90,100,120';
|
||
|
|
g_ai_scrollSliderHover = C'140,150,170';
|
||
|
|
g_ai_scrollSliderDrag = C'88,160,255';
|
||
|
|
|
||
|
|
//--- Editor colors
|
||
|
|
g_ai_caretColor = C'140,180,255';
|
||
|
|
g_ai_selectionBg = C'60,90,160';
|
||
|
|
|
||
|
|
//--- Loading and note colors
|
||
|
|
g_ai_loadingPrep = C'88,160,255';
|
||
|
|
g_ai_loadingThink = C'235,130,130';
|
||
|
|
g_ai_responseTimeNote = C'105,115,135';
|
||
|
|
|
||
|
|
//--- Toast palette
|
||
|
|
g_ai_toastBg = C'34,40,55';
|
||
|
|
g_ai_toastBorder = C'85,92,115';
|
||
|
|
g_ai_toastSuccess = clrBlue;
|
||
|
|
g_ai_toastError = clrRed;
|
||
|
|
}
|
||
|
|
//--- Light theme palette
|
||
|
|
else
|
||
|
|
{
|
||
|
|
//--- Panel and background colors
|
||
|
|
g_ai_bg = clrWhite;
|
||
|
|
g_ai_panelAlt = C'250,252,255';
|
||
|
|
g_ai_headerBg = C'245,247,251';
|
||
|
|
g_ai_sidebarBg = C'232,236,242';
|
||
|
|
g_ai_promptBg = C'253,248,238';
|
||
|
|
|
||
|
|
//--- Border colors darker than panel for crisp lines
|
||
|
|
g_ai_border = C'180,188,200';
|
||
|
|
g_ai_borderAccent = C'150,160,180';
|
||
|
|
|
||
|
|
//--- Text colors
|
||
|
|
g_ai_titleText = C'30,40,55';
|
||
|
|
g_ai_subText = C'120,130,150';
|
||
|
|
g_ai_bodyText = C'40,48,66';
|
||
|
|
|
||
|
|
//--- Bubble colors
|
||
|
|
g_ai_userBubbleText = C'80,90,110';
|
||
|
|
g_ai_aiBubbleText = C'30,80,180';
|
||
|
|
g_ai_userBubbleBg = C'238,243,250';
|
||
|
|
g_ai_aiBubbleBg = C'235,242,252';
|
||
|
|
g_ai_timestampText = C'150,160,180';
|
||
|
|
|
||
|
|
//--- Accent and send button colors
|
||
|
|
g_ai_accent = C'58,130,246';
|
||
|
|
g_ai_accentHover = C'90,150,255';
|
||
|
|
g_ai_buttonSendBg = C'58,130,246';
|
||
|
|
g_ai_buttonSendBgHover = C'90,150,255';
|
||
|
|
g_ai_buttonDisabledBg = C'215,218,222';
|
||
|
|
g_ai_buttonDisabledIcon = C'150,155,160';
|
||
|
|
|
||
|
|
//--- Action button colors
|
||
|
|
g_ai_buttonChartBg = C'180,225,180';
|
||
|
|
g_ai_buttonChartBgHover = C'200,240,200';
|
||
|
|
g_ai_buttonSignalBg = C'190,215,255';
|
||
|
|
g_ai_buttonSignalBgHover = C'215,230,255';
|
||
|
|
g_ai_buttonClearBg = C'250,205,200';
|
||
|
|
g_ai_buttonClearBgHover = C'255,225,220';
|
||
|
|
g_ai_buttonNewChatBg = C'200,225,255';
|
||
|
|
g_ai_buttonNewChatBgHover= C'220,235,255';
|
||
|
|
g_ai_buttonHistoryBg = C'250,250,250';
|
||
|
|
g_ai_buttonHistoryBgHover= C'235,235,235';
|
||
|
|
g_ai_buttonSearchBg = C'205,210,225';
|
||
|
|
g_ai_buttonSearchBgHover = C'225,228,240';
|
||
|
|
g_ai_buttonToggleBg = C'215,220,228';
|
||
|
|
g_ai_buttonToggleBgHover = C'195,200,210';
|
||
|
|
|
||
|
|
//--- Close button colors
|
||
|
|
g_ai_closeBg = C'245,245,245';
|
||
|
|
g_ai_closeBgHover = C'196,43,28';
|
||
|
|
g_ai_closeColor = C'120,130,150';
|
||
|
|
g_ai_closeColorHover = clrWhite;
|
||
|
|
|
||
|
|
//--- Chat item colors
|
||
|
|
g_ai_chatItemBg = C'250,247,235';
|
||
|
|
g_ai_chatItemBgHover = C'238,232,210';
|
||
|
|
g_ai_chatItemActiveText = C'58,130,246';
|
||
|
|
g_ai_chatItemDelHover = clrCrimson;
|
||
|
|
|
||
|
|
//--- Scrollbar colors
|
||
|
|
g_ai_scrollSlider = C'140,150,170';
|
||
|
|
g_ai_scrollSliderHover = C'90,100,120';
|
||
|
|
g_ai_scrollSliderDrag = C'58,130,246';
|
||
|
|
|
||
|
|
//--- Editor colors
|
||
|
|
g_ai_caretColor = C'30,80,180';
|
||
|
|
g_ai_selectionBg = C'180,210,255';
|
||
|
|
|
||
|
|
//--- Loading and note colors
|
||
|
|
g_ai_loadingPrep = C'58,130,246';
|
||
|
|
g_ai_loadingThink = C'196,80,80';
|
||
|
|
g_ai_responseTimeNote = C'150,160,180';
|
||
|
|
|
||
|
|
//--- Toast palette
|
||
|
|
g_ai_toastBg = clrWhite;
|
||
|
|
g_ai_toastBorder = C'200,205,215';
|
||
|
|
g_ai_toastSuccess = clrBlue;
|
||
|
|
g_ai_toastError = clrRed;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#endif // AI_CANVAS_THEME_MQH
|