GUI M8d
This commit is contained in:
parent
e649dea9c1
commit
a07f94c93d
10 changed files with 718 additions and 25 deletions
48
GUI_PLAN.md
48
GUI_PLAN.md
|
|
@ -231,31 +231,29 @@ A Qt6-based node editor GUI for warppipe using the QtNodes (nodeeditor) library.
|
|||
- [x] Add "Save Preset..." context menu action → `QFileDialog::getSaveFileName()`
|
||||
- [x] Add "Load Preset..." context menu action → `QFileDialog::getOpenFileName()`
|
||||
- [x] Add tests for preset save/load round-trip
|
||||
- [ ] Milestone 8d - Volume/Mute Controls (requires core API: `SetNodeVolume()`)
|
||||
- [ ] Add `NodeVolumeState` struct: `{ float volume; bool mute; }`
|
||||
- [ ] Add `ClickSlider : QSlider` — click jumps to position instead of page-stepping
|
||||
- [ ] Add inline volume widget per node via `nodeData(NodeRole::Widget)`:
|
||||
- [ ] Horizontal `ClickSlider` (0-100) + mute `QToolButton`
|
||||
- [ ] Calls `Client::SetNodeVolume(nodeId, volume, mute)` on change
|
||||
- [ ] Styled: dark background, green slider fill, rounded mute button
|
||||
- [ ] Implement `VolumeChangeCommand : QUndoCommand`
|
||||
- [ ] Stores previous + next `NodeVolumeState`, node ID
|
||||
- [ ] `undo()` → apply previous state; `redo()` → apply next state
|
||||
- [ ] Push on slider release or mute toggle (not during drag)
|
||||
- [ ] Track volume states in model: `QHash<uint32_t, NodeVolumeState> m_nodeVolumeState`
|
||||
- [ ] `setNodeVolumeState()` — update state + sync inline widget
|
||||
- [ ] `nodeVolumeState()` — read current state
|
||||
- [ ] Emit `nodeVolumeChanged(nodeId, previous, current)` signal
|
||||
- [ ] Add "MIXER" tab to sidebar `QTabWidget`:
|
||||
- [ ] `QScrollArea` with horizontal layout of channel strips
|
||||
- [ ] Per-node strip: `AudioLevelMeter` + vertical `ClickSlider` (fader) + Mute (M) + Solo (S) buttons + node label
|
||||
- [ ] Solo logic: when any node is soloed, all non-soloed nodes are muted
|
||||
- [ ] Volume fader changes push `VolumeChangeCommand` onto undo stack
|
||||
- [ ] `refreshMixerStrip()` — create strip when node appears
|
||||
- [ ] `removeMixerStrip()` — destroy strip when node removed
|
||||
- [ ] `updateMixerState()` — sync fader/mute from model state
|
||||
- [ ] Include volume/mute states in preset save/load (`persistent_volumes`, `persistent_mutes`)
|
||||
- [ ] Add tests for VolumeChangeCommand undo/redo and mixer strip lifecycle
|
||||
- [x] Milestone 8d - Volume/Mute Controls (requires core API: `SetNodeVolume()`)
|
||||
- [x] Add `NodeVolumeState` struct: `{ float volume; bool mute; }`
|
||||
- [x] Add `ClickSlider : QSlider` — click jumps to position instead of page-stepping
|
||||
- [x] Add inline volume widget per node via `nodeData(NodeRole::Widget)`:
|
||||
- [x] Horizontal `ClickSlider` (0-100) + mute `QToolButton`
|
||||
- [x] Calls `Client::SetNodeVolume(nodeId, volume, mute)` on change
|
||||
- [x] Styled: dark background, green slider fill, rounded mute button
|
||||
- [x] Implement `VolumeChangeCommand : QUndoCommand`
|
||||
- [x] Stores previous + next `NodeVolumeState`, node ID
|
||||
- [x] `undo()` → apply previous state; `redo()` → apply next state
|
||||
- [x] Push on slider release or mute toggle (not during drag)
|
||||
- [x] Track volume states in model: `std::unordered_map<NodeId, NodeVolumeState> m_volumeStates`
|
||||
- [x] `setNodeVolumeState()` — update state + sync inline widget + call Client API
|
||||
- [x] `nodeVolumeState()` — read current state
|
||||
- [x] Emit `nodeVolumeChanged(nodeId, previous, current)` signal
|
||||
- [x] Add "MIXER" tab to sidebar `QTabWidget`:
|
||||
- [x] `QScrollArea` with vertical layout of channel strips
|
||||
- [x] Per-node strip: horizontal `ClickSlider` (fader) + Mute (M) button + node label
|
||||
- [x] Volume fader changes push `VolumeChangeCommand` onto undo stack
|
||||
- [x] `rebuildMixerStrips()` — create/remove strips when nodes appear/disappear
|
||||
- [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)`
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue