Article-22214-Interactive-T.../README.md

156 lines
No EOL
5.7 KiB
Markdown

Article-22214-Interactive-Tools-Palette-Part-3
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 reference repository documents the architecture described in MQL5 article 22214, which upgrades a previously static chart sidebar into an interactive drawing palette for MetaTrader 5.
The article focuses on the interaction layer required to make a rendered tools panel operational. It describes a data-driven tool registry, sidebar and flyout canvases, hit-testing, chart event routing, scrolling, drag-and-snap behavior, bottom-edge resizing, live theme switching, and a multi-click drawing engine for creating chart objects.
## Original Article
- **Article ID:** 22214
- **Title:** Interactive Tools Palette Part 3
- **Author:** Allan Munene Mutiiria
- **Publication date:** 2026.05.16
- **Category:** MQL5 / UI / Chart interaction / drawing tools
- **URL:** https://www.mql5.com/en/articles/22214
## Repository Purpose
This repository serves as a technical reference and possible reconstruction base for the interaction system presented in the article.
Its purpose is to capture the described design and implementation elements for:
- interactive sidebar behavior on MT5 charts
- flyout-based tool selection
- event-driven UI handling through chart events
- deterministic tool placement workflows for 1-click, 2-click, and 3-click drawing objects
Because the processed input contains article content rather than a confirmed complete attached code package, this repository should be treated as a reference/reconstruction project.
## Key Concepts
- Tool palette interaction layer on top of bitmap/canvas UI
- `OnEvent` / `OnChartEvent` style centralized event routing
- Sidebar hit-testing for buttons, grip area, theme toggle, close button, and resize grip
- Flyout panel management with pointer triangle and scroll support
- Theme manager with dark/light live switching
- Tool registry with dynamic tool arrays per category
- Active-tool contract as the source of truth
- Drawing engine with click-count-based placement logic
- Sidebar scrolling, thumb dragging, and edge snapping
- MQL5 chart object creation for lines, channels, Fibonacci tools, shapes, and annotations
## Algorithm / Architecture Summary
The article presents a ten-class hierarchy that evolves the prior visual sidebar into a full interaction system:
1. **Expanded tool/icon definitions**
- 35 tool icon definitions
- `TOOL_TYPE` enumeration
- `ToolDefinition`, `CategoryDefinition`, and expanded `ThemeColorSet`
2. **Canvas primitives**
- High-resolution triangle fill via scanline rasterization for flyout pointer rendering
3. **Theme manager**
- Dark/light theme application
- Live toggle behavior
4. **Tool registry**
- Category population
- Reverse lookup from active tool to category
- Required click count lookup
- Tool label lookup
5. **Canvas layer**
- Sidebar canvas
- Sidebar high-resolution canvas
- Flyout canvas
- Flyout high-resolution canvas
6. **Sidebar layout**
- Panel geometry
- Scroll metrics
- snap-to-edge logic
- hit-testing for panel regions
7. **Flyout panel**
- Category flyout visibility and placement
- item hit-testing
- scrollable item list
- pointer-aware rendering
8. **Sidebar renderer**
- Hover/active visual states
- sidebar scroll pill overlay
9. **Chart event handler**
- chart resize handling
- mouse wheel scrolling
- mouse move processing
- drag, resize, thumb-drag, and hover-state updates
10. **Drawing engine and top-level shell**
- object placement from chart clicks
- single-click, two-click, and three-click creation flows
- tool activation/deactivation
- cleanup of created chart objects
The article explicitly maps tools to click requirements:
- **0 clicks:** pointer, crosshair
- **1 click:** horizontal/vertical line, text, arrows, thumbs, price label, stop sign, check mark, Fibonacci time zones
- **2 clicks:** trend/ray/extended/info lines, shapes, several Fibonacci and Gann tools, regression/stddev channels
- **3 clicks:** parallel channel, Fibonacci channel, pitchfork variants
## 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 3.mq5`
## Statistics
- **Tools covered:** 35
- **Categories covered:** 8
- **Classes described:** 10
- **Theme color fields:** 19
- **Interaction scenarios highlighted:** 5
- select and place a chart object
- scroll overflowing categories
- drag and snap the panel
- resize from the bottom
- switch theme live
## Tags
`MQL5`, `MetaTrader 5`, `UI`, `Canvas`, `Chart Events`, `Drawing Tools`, `Sidebar`, `Flyout Menu`, `Hit Testing`, `Theme Switching`
## Difficulty
**Advanced**
Requires familiarity with:
- MQL5 OOP and inheritance
- chart object APIs
- canvas rendering with `CCanvas`
- chart event processing
- coordinate conversion and hit-testing
- UI state management
## Limitations
- The full original source code is not confirmed as attached in the processed input.
- This README is based on article analysis and quoted excerpts, so the repository should be treated as a reference/reconstruction project.
- Some surrounding dependencies from earlier series parts are referenced but not fully included in the provided text, such as prior icon/category definitions and previously implemented primitive helpers.
- Buildability cannot be guaranteed from the article text alone.
## Reference
- Allan Munene Mutiiria, **Interactive Tools Palette Part 3**, MQL5 article 22214
https://www.mql5.com/en/articles/22214