GUI Milestone 1

This commit is contained in:
Joey Yakimowich-Payne 2026-01-29 22:12:23 -07:00
commit f46f9542b4
7 changed files with 593 additions and 19 deletions

View file

@ -15,25 +15,25 @@ A Qt6-based node editor GUI for warppipe using the QtNodes (nodeeditor) library.
- [x] Create minimal main.cpp with QApplication + QMainWindow
- [x] Verify GUI launches and shows empty window
- [ ] Milestone 1 - Core Model Integration
- [ ] Create `WarpGraphModel : public QtNodes::AbstractGraphModel`
- [ ] Implement AbstractGraphModel interface (newNodeId, allNodeIds, nodeData, portData, etc.)
- [ ] Add `warppipe::Client*` member, connect to PipeWire on construction
- [ ] Map `warppipe::NodeInfo` to QtNodes NodeId via internal maps (m_nodes, m_pwToNode)
- [ ] Implement node refresh: call Client::ListNodes() and sync graph
- [ ] Create `GraphEditorWidget : public QWidget`
- [ ] Instantiate WarpGraphModel, QtNodes::BasicGraphicsScene, QtNodes::GraphicsView
- [ ] Lay out view in widget
- [ ] Connect model signals to refresh handlers
- [ ] Synthesize display title from NodeInfo:
- [ ] If `application_name` is non-empty and differs from `name`, use `application_name` as title
- [ ] Otherwise use `name` field
- [ ] Store synthesized title in `nodeData(NodeRole::Caption)`
- [ ] Map warppipe ports to QtNodes ports:
- [ ] Input ports (is_input=true) appear on LEFT side of node (QtNodes PortType::In)
- [ ] Output ports (is_input=false) appear on RIGHT side of node (QtNodes PortType::Out)
- [ ] Use port name from PortInfo as port label
- [ ] Verify nodes appear in graph view with correct titles and ports
- [x] Milestone 1 - Core Model Integration
- [x] Create `WarpGraphModel : public QtNodes::AbstractGraphModel`
- [x] Implement AbstractGraphModel interface (newNodeId, allNodeIds, nodeData, portData, etc.)
- [x] Add `warppipe::Client*` member, connect to PipeWire on construction
- [x] Map `warppipe::NodeInfo` to QtNodes NodeId via internal maps (m_nodes, m_pwToNode)
- [x] Implement node refresh: call Client::ListNodes() and sync graph
- [x] Create `GraphEditorWidget : public QWidget`
- [x] Instantiate WarpGraphModel, QtNodes::BasicGraphicsScene, QtNodes::GraphicsView
- [x] Lay out view in widget
- [x] Connect model signals to refresh handlers
- [x] Synthesize display title from NodeInfo:
- [x] If `application_name` is non-empty and differs from `name`, use `application_name` as title
- [x] Otherwise use `name` field
- [x] Store synthesized title in `nodeData(NodeRole::Caption)`
- [x] Map warppipe ports to QtNodes ports:
- [x] Input ports (is_input=true) appear on LEFT side of node (QtNodes PortType::In)
- [x] Output ports (is_input=false) appear on RIGHT side of node (QtNodes PortType::Out)
- [x] Use port name from PortInfo as port label
- [x] Verify nodes appear in graph view with correct titles and ports
- [ ] Milestone 2 - Visual Styling and Node Types
- [ ] Define node type classification based on `media_class`: