Replace stacked MDI sub-windows with QSplitter panel for FX charts

Table of Contents

This page is a capture in the deferred bucket of the product backlog — a pre-sprint idea, not yet pulled into a sprint as a story.

What

Each `FxSpotChartWindow` is opened as an independent `DetachableMdiSubWindow` inside the MDI area. When the user tiles two chart windows vertically the layout engine gives them equal shares of the MDI viewport, but the share is too small for two full charts with toolbar, title, and axis labels — the lower chart's title is clipped by the upper chart's bottom border, and the X-axis of the lower chart is cut off by the window frame. The fix is a dedicated `FxRatesPanel` widget that holds all FX spot charts in a `QSplitter` (vertical), opening as a single MDI sub-window. Each chart gets a guaranteed equal sash, the user can resize individual charts by dragging the splitter, and no clipping occurs. The panel registers charts by ORE key and routes live ticks through a shared dispatcher so individual chart windows do not each hold a separate NATS subscription.

Why

User feedback (Gemini review 2026-07-02): "The top of the GBP/USD chart title is clipped by the bottom border of the EUR/USD chart. The bottom of the GBP/USD chart is cut off by the window frame, hiding its X-axis line." The current one-window-per-chart MDI approach has no mechanism to guarantee vertical space allocation across sibling charts.

References

  • `projects/ores.qt/mktdata/src/MarketDataController.cpp:250-288` — `showFxSpotChartWindow` (opens each chart as its own sub-window)
  • `projects/ores.qt/mktdata/include/ores.qt/FxSpotChartWindow.hpp` — `sizeHint` returns 900×500

See also

Emacs 29.3 (Org mode 9.6.15)