Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/style/aethersdr-style-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ windows" lists what it keeps (the `FramelessMoveHelper` drag, Escape and
Which windows the canon covers: short-lived, informational windows (About,
Remote Access, and the candidates listed on #6239, once the maintainer picks
them), and the tool windows the maintainer has moved to it (Waveforms,
Network Diagnostics, AetherRX, AetherTX, AetherModem, AetherMap, AetherGPS, Connect to Radio, AGC-T Calibration). Other tool and workspace dialogs keep
Network Diagnostics, AetherRX, AetherTX, AetherModem, AetherMap, AetherGPS, SpotHub, Connect to Radio, AGC-T Calibration). Other tool and workspace dialogs keep
`PersistentDialog` and `FramelessWindowTitleBar` as `docs/agents/gui.md`
describes. For windows the canon covers,
`FramelessWindowTitleBar` is deprecated: those dialogs move to
Expand Down
8 changes: 4 additions & 4 deletions docs/style/dialog-patterns.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,12 +236,12 @@ replace these with a single `QSet<QPointer<PersistentDialog>>` walk.
A window built on `CanonWindow` (`src/gui/CanonWindow.{h,cpp}`, RFC #6226)
deliberately opts out of frameless chrome integration, and by default of
geometry persistence too. About AetherSDR, Remote Access (Tailscale),
Waveforms, Network Diagnostics, AetherRX, AetherTX, AetherModem, AetherMap, AetherGPS, Connect to Radio (`ConnectionPanel`), AGC-T Calibration and the AetherRX / AetherTX Settings (profile library) dialogs are built on it.
Waveforms, Network Diagnostics, AetherRX, AetherTX, AetherModem, AetherMap, AetherGPS, SpotHub, Connect to Radio (`ConnectionPanel`), AGC-T Calibration and the AetherRX / AetherTX Settings (profile library) dialogs are built on it.

| Concern | `CanonWindow` | Why |
|---|---|---|
| Frameless chrome integration | Always frameless; ignores `FramelessWindow` and is not tracked by `trackPersistentDialog()` | The style guide's rounded, title-bar-less window *is* the design; native chrome would put a title bar over it |
| Geometry persistence | None by default: asks to open centred on its parent every time (Wayland compositors place top-level windows themselves and may ignore it). `setGeometryKey()` opts in: size and position are saved under that AppSettings key on move and resize (in memory) and whenever the window hides (flushed — Escape and ⌘W / Ctrl+W hide it without a close event), and restored in place of the centring. Network Diagnostics, AetherRX, AetherTX, AetherModem, AetherMap and AetherGPS opt in. `setLaunchSize()` pins the size on every open while the position is still restored; AetherRX and AetherTX use it, for now | A short-lived window has nothing to restore; a workspace tool keeps the size its operator gave it |
| Geometry persistence | None by default: asks to open centred on its parent every time (Wayland compositors place top-level windows themselves and may ignore it). `setGeometryKey()` opts in: size and position are saved under that AppSettings key on move and resize (in memory) and whenever the window hides (flushed — Escape and ⌘W / Ctrl+W hide it without a close event), and restored in place of the centring. Network Diagnostics, AetherRX, AetherTX, AetherModem, AetherMap, AetherGPS and SpotHub opt in. `setLaunchSize()` pins the size on every open while the position is still restored; AetherRX and AetherTX use it, for now | A short-lived window has nothing to restore; a workspace tool keeps the size its operator gave it |

What it keeps:

Expand All @@ -254,7 +254,7 @@ What it keeps:
(⌘W, Ctrl+W) all close it.
- **Kind:** `CanonWindow::Kind::Dialog` (the default) is a parented
`Qt::Dialog` that sits over its parent. `Kind::Workspace` (AetherRX,
AetherTX, AetherModem, AetherMap, AetherGPS) is an independent `Qt::Window`, with its own taskbar entry, that
AetherTX, AetherModem, AetherMap, AetherGPS, SpotHub) is an independent `Qt::Window`, with its own taskbar entry, that
minimises on its own and does not keep the app alive (`WA_QuitOnClose`
off). In a workspace, Return and Enter never click a default button:
QDialog makes every push button an auto-default, so Return in a field would
Expand All @@ -273,7 +273,7 @@ What it keeps:
It is translucent, so the rounded corners need a compositor; an X11 session
without one shows square black corners. Use `CanonWindow` only for windows the
style guide covers: short-lived windows, and the tool windows the maintainer
has moved to it (Waveforms, Network Diagnostics, AetherRX, AetherTX, AetherModem, AetherMap, AetherGPS). A tool window on it also
has moved to it (Waveforms, Network Diagnostics, AetherRX, AetherTX, AetherModem, AetherMap, AetherGPS, SpotHub). A tool window on it also
installs `FramelessResizer`, since `CanonWindow` itself only moves. Other tool
and workspace dialogs keep the persistent pattern above.

Expand Down
4 changes: 2 additions & 2 deletions docs/style/theme-style-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ a widget subtree (for example, the `applet/tx` scope turns the
checked-toggle accent red where the root theme has it blue — scope
paths are slash-joined, and a widget opts in by carrying the path in
its `themeContainer` property). The `canon` scope does the same for
whole windows: AetherRX, AetherTX, AetherModem, AetherMap, AetherGPS, Connect to
whole windows: AetherRX, AetherTX, AetherModem, AetherMap, AetherGPS, SpotHub, Connect to
Radio and AGC-T Calibration sit under `canon/aetherRx`, `canon/aetherTx`, `canon/aetherModem`,
`canon/aetherMap`, `canon/aetherGps`, `canon/connection` and `canon/agcCalibration`, and it maps the base tokens onto the canon palette
`canon/aetherMap`, `canon/aetherGps`, `canon/spotHub`, `canon/connection` and `canon/agcCalibration`, and it maps the base tokens onto the canon palette
there (see [`aethersdr-style-guide.md`](aethersdr-style-guide.md)). The
widget-aware accessors below resolve scope automatically — prefer them
inside applets and anything painted inside a scoped window.
Expand Down
2 changes: 2 additions & 0 deletions docs/user/docs/spothub.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ All spot sources run on a worker thread, and spots are forwarded to the radio in

Open SpotHub from **Settings → SpotHub…**

The window has no title bar. Drag any empty part of it to move it, and drag an edge or corner to resize it; it reopens at the size and place you left it. Close it with the round **✕** in the top-right corner, **Esc** or **Ctrl+W** (**⌘W** on macOS). It's a window of its own, with its own taskbar entry, so you can minimize it from the taskbar or park it on another monitor. **View → Frameless Window** does not apply to it.

SpotHub has ten tabs: **Cluster**, **RBN**, **WSJT-X**, **SpotCollector**, **POTA**, **EiBi**, **N1MM**, **FreeDV**, **Spot List** and **Display**. The FreeDV tab is only present in builds with Qt WebSockets.

Every source tab has an **Auto-Start** (or **Auto-Connect**) toggle that starts it when the radio connects, a **Start / Stop** (or **Connect**) button, a status line and a console. Each console has a **Clear** button, which clears the console and deletes its stored log.
Expand Down
Loading
Loading