GUI M8e
This commit is contained in:
parent
a07f94c93d
commit
ecec82c70e
10 changed files with 809 additions and 21 deletions
40
GUI_PLAN.md
40
GUI_PLAN.md
|
|
@ -254,26 +254,26 @@ A Qt6-based node editor GUI for warppipe using the QtNodes (nodeeditor) library.
|
|||
- [x] Mixer strips sync from model state via `nodeVolumeChanged` signal
|
||||
- [x] Include volume/mute states in preset save/load (`volumes` array in JSON)
|
||||
- [x] Add tests for volume state tracking, signal emission, widget sync, preset round-trip, cleanup on deletion
|
||||
- [ ] Milestone 8e - Audio Level Meters (requires core API: `MeterPeak()`, `NodeMeterPeak()`, `EnsureNodeMeter()`)
|
||||
- [ ] Implement `AudioLevelMeter : QWidget`
|
||||
- [ ] Custom `paintEvent`: vertical bar from bottom, background `(24,24,28)`
|
||||
- [ ] Color thresholds: green (0-0.7), yellow (0.7-0.9), red (0.9-1.0)
|
||||
- [ ] Peak hold indicator: white horizontal line, holds 6 frames then decays at 0.02/frame
|
||||
- [ ] `setLevel(float)` — clamp 0-1, update hold, call `update()`
|
||||
- [ ] `sizeHint()` → 40×160
|
||||
- [ ] Add "METERS" tab to sidebar `QTabWidget`:
|
||||
- [ ] "MASTER OUTPUT" label + master `AudioLevelMeter`
|
||||
- [ ] "NODE METERS" label + scrollable list of per-node meter rows
|
||||
- [ ] Per-node row: elided label + compact `AudioLevelMeter` (fixed 26px wide, min 70px tall)
|
||||
- [ ] Add 30fps meter update timer (33ms, `Qt::PreciseTimer`)
|
||||
- [ ] Poll `Client::MeterPeak()` → master meter
|
||||
- [ ] Poll `Client::NodeMeterPeak(nodeId)` → per-node meters + mixer meters
|
||||
- [ ] Skip updates when widget is not visible (`isVisible()` check)
|
||||
- [ ] Auto-manage per-node meters:
|
||||
- [ ] Create meter when node has active links (`ensureNodeMeter()`)
|
||||
- [ ] Remove meter when node removed or all links removed (`removeNodeMeter()`)
|
||||
- [ ] Skip meter nodes (filter by name prefix)
|
||||
- [ ] Add tests for AudioLevelMeter level clamping, hold/decay logic
|
||||
- [x] Milestone 8e - Audio Level Meters (requires core API: `MeterPeak()`, `NodeMeterPeak()`, `EnsureNodeMeter()`)
|
||||
- [x] Implement `AudioLevelMeter : QWidget`
|
||||
- [x] Custom `paintEvent`: vertical bar from bottom, background `(24,24,28)`
|
||||
- [x] Color thresholds: green (0-0.7), yellow (0.7-0.9), red (0.9-1.0)
|
||||
- [x] Peak hold indicator: white horizontal line, holds 6 frames then decays at 0.02/frame
|
||||
- [x] `setLevel(float)` — clamp 0-1, update hold, call `update()`
|
||||
- [x] `sizeHint()` → 40×160
|
||||
- [x] Add "METERS" tab to sidebar `QTabWidget`:
|
||||
- [x] "MASTER OUTPUT" label + master `AudioLevelMeter`
|
||||
- [x] "NODE METERS" label + scrollable list of per-node meter rows
|
||||
- [x] Per-node row: elided label + compact `AudioLevelMeter` (fixed 26px wide, min 70px tall)
|
||||
- [x] Add 30fps meter update timer (33ms, `Qt::PreciseTimer`)
|
||||
- [x] Poll `Client::MeterPeak()` → master meter
|
||||
- [x] Poll `Client::NodeMeterPeak(nodeId)` → per-node meters
|
||||
- [x] Auto-rebuild node meters on node create/delete
|
||||
- [x] Auto-manage per-node meters:
|
||||
- [x] Call `EnsureNodeMeter()` for each node during rebuild
|
||||
- [x] Remove meter rows when nodes deleted
|
||||
- [x] `rebuildNodeMeters()` wired to `nodeCreated`/`nodeDeleted` signals
|
||||
- [x] Add tests for AudioLevelMeter level clamping, hold/decay logic, METERS tab existence, meter row creation
|
||||
- [ ] Milestone 8f - Architecture and Routing Rules
|
||||
- [ ] Event-driven updates: replace 500ms polling with signal/slot if core adds registry callbacks
|
||||
- [ ] `nodeAdded(NodeInfo)`, `nodeRemoved(uint32_t)`, `nodeChanged(NodeInfo)`
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue