Article-22193-Tools-Palette-Part-2-Layered-Sidebar-Architecture This repository is an article-derived reference project based on the original MQL5 article. It does not claim to reproduce the full original source code unless files are explicitly attached. ## Overview This project documents and reconstructs the MQL5 Expert Advisor architecture presented in article 22193. The article refactors a chart-side tools palette into a layered object-oriented sidebar with: - supersampled canvas rendering - anti-aliased rounded corners and borders - light/dark theme management - category registration for drawing tool groups - chart-attached bitmap label rendering The implementation shown in the article is a self-contained sidebar UI foundation intended for future expansion with interaction, flyout panels, and drawing actions. ## Original Article - **Article ID:** 22193 - **Title:** Tools Palette Part 2: Layered Sidebar Architecture - **Author:** Allan Munene Mutiiria - **Publication date:** 2026.05.08 - **Category:** MQL5 / UI architecture / chart tools - **URL:** https://www.mql5.com/en/articles/22193 ## Repository Purpose This repository serves as a reference reconstruction of the article's demonstrated design and code structure for a layered chart sidebar in MQL5. Its purpose is to preserve the article's technical ideas in repository form: - separation of rendering, theming, registry, canvas, layout, and shell logic - reusable canvas primitives for rounded geometry and borders - theme-driven visual styling - registry-based category definition - initialization and teardown flow through standard MQL5 event handlers ## Key Concepts - `CCanvas`-based UI rendering on MetaTrader 5 charts - supersampling and downsampling for anti-aliased output - alpha compositing with per-pixel blending - selective rounded corners depending on snap state - layered inheritance-based class architecture - centralized theme color application - category metadata registry - chart object lifecycle management ## Algorithm / Architecture Summary The article describes a 7-layer class hierarchy: 1. **`CCanvasPrimitives`** - low-level drawing helpers - alpha blending - rounded rectangle filling - quadrilateral scanline fill - border edge and arc drawing - high-resolution rendering plus downsampling 2. **`CThemeManager`** - stores dark/light state - applies a `ThemeColorSet` 3. **`CCategoryRegistry`** - populates an array of `CategoryDefinition` - registers 8 sidebar categories: - Cursors - Lines - Channels - Pitchfork - Gann - Fibonacci - Shapes - Annotate 4. **`CCanvasLayer`** - owns the normal-resolution and high-resolution canvases - creates, destroys, and resizes canvas resources 5. **`CSidebarLayout`** - computes panel height and button layout - maintains geometry and clipping boundaries 6. **`CSidebarRenderer`** - composes the sidebar background, header, border, indicators, icons, and separators 7. **`CToolsSidebar`** - public shell for initialization and destruction - integrates with `OnInit`, `OnDeinit`, and `OnChartEvent` Rendering flow, as described in the article: - create display and high-resolution canvases - draw the panel background at high resolution - apply selective corner rounding depending on left/right snap mode - draw header strip and grip dots - draw category indicators - draw border - downsample to the display canvas - overlay icon glyphs and separator lines - update the chart bitmap label The event flow shown in the article is minimal: initialization and cleanup are implemented, while interaction handling is intentionally left empty for future parts. ## Mentioned or Attached Files ### Explicitly attached files No attached source files were available in the processed input. ### Files mentioned in the article text - `Tools Palette Part 2.mq5` - `Canvas/Canvas.mqh` ## Statistics - **Classes described:** 7 - **Enumerations described:** 2 - **Main category count:** 8 - **Input parameters shown:** 6 - **Canvas layers used:** 2 - **Supersample factor:** 4 ## Tags `MQL5`, `MetaTrader5`, `CCanvas`, `Chart-UI`, `Sidebar`, `Tools-Palette`, `OOP`, `Supersampling`, `Theme-Management`, `Rendering` ## Difficulty Intermediate to Advanced ## Limitations - The repository is based on article content only unless source files are explicitly attached. - No full original repository structure was provided in the processed input. - Interactive behavior is not implemented in the shown code; `OnEvent(...)` is a placeholder. - Backtesting evidence in the article is visual/descriptive, not a formal automated test suite. - No installation or build workflow beyond standard MQL5 compilation can be safely inferred. - If this repository contains reconstructed code, it should be treated as a reference implementation rather than a guaranteed byte-for-byte copy of the article author's original source. ## Reference Original article: Allan Munene Mutiiria, **Tools Palette Part 2: Layered Sidebar Architecture** https://www.mql5.com/en/articles/22193