Undo for all
This commit is contained in:
parent
f681b69467
commit
f2d0494af2
3 changed files with 8 additions and 4 deletions
|
|
@ -1238,8 +1238,8 @@ private:
|
|||
|
||||
### Milestone 6: Undo/Redo & Polish
|
||||
**Estimated Time:** 1-2 weeks
|
||||
- [ ] Integrate QUndoStack for all graph operations
|
||||
- [ ] Implement command classes for link, volume, node operations
|
||||
- [x] Integrate QUndoStack for all graph operations
|
||||
- [x] Implement command classes for link, volume, node operations
|
||||
- [ ] Add keyboard shortcuts (Delete, Ctrl+D, Ctrl+Z, etc.)
|
||||
- [ ] Implement context menus for nodes/canvas
|
||||
- [ ] Add copy/paste/duplicate functionality
|
||||
|
|
|
|||
|
|
@ -904,7 +904,7 @@ void GraphEditorWidget::refreshMixerStrip(uint32_t nodeId, const Potato::NodeInf
|
|||
}
|
||||
const float volume = static_cast<float>(value) / 100.0f;
|
||||
const bool userMute = m_mixerUserMute.value(nodeId, false);
|
||||
if (m_mixerFaders[nodeId]->isSliderDown()) {
|
||||
if (m_mixerFaders[nodeId]->isSliderDown() || m_mixerFaders[nodeId]->property("pressValue").isValid()) {
|
||||
if (!m_mixerStartState.contains(nodeId)) {
|
||||
const NodeVolumeState previous = m_mixerLastState.value(nodeId, NodeVolumeState{volume, userMute});
|
||||
m_mixerStartState.insert(nodeId, previous);
|
||||
|
|
@ -932,6 +932,7 @@ void GraphEditorWidget::refreshMixerStrip(uint32_t nodeId, const Potato::NodeInf
|
|||
if (!m_mixerFaders.contains(nodeId)) {
|
||||
return;
|
||||
}
|
||||
m_mixerFaders[nodeId]->setProperty("pressValue", QVariant());
|
||||
const float volume = static_cast<float>(m_mixerFaders[nodeId]->value()) / 100.0f;
|
||||
const bool userMute = m_mixerUserMute.value(nodeId, false);
|
||||
const NodeVolumeState previous = m_mixerStartState.value(nodeId, m_mixerLastState.value(nodeId, NodeVolumeState{volume, userMute}));
|
||||
|
|
|
|||
|
|
@ -162,7 +162,9 @@ QWidget *PipeWireGraphModel::nodeWidget(QtNodes::NodeId nodeId) const
|
|||
m_controller->setNodeVolume(pipewireId, volume, next.mute);
|
||||
auto *self = const_cast<PipeWireGraphModel*>(this);
|
||||
self->setNodeVolumeState(pipewireId, next, false);
|
||||
if (!slider->isSliderDown() && !m_inlineStartState.contains(pipewireId)) {
|
||||
if (!slider->isSliderDown()
|
||||
&& !m_inlineStartState.contains(pipewireId)
|
||||
&& !slider->property("pressValue").isValid()) {
|
||||
self->emitNodeVolumeChanged(pipewireId, previous, next);
|
||||
}
|
||||
};
|
||||
|
|
@ -186,6 +188,7 @@ QWidget *PipeWireGraphModel::nodeWidget(QtNodes::NodeId nodeId) const
|
|||
}
|
||||
const NodeVolumeState previous = m_inlineStartState.value(pipewireId, m_nodeVolumeState.value(pipewireId));
|
||||
m_inlineStartState.remove(pipewireId);
|
||||
slider->setProperty("pressValue", QVariant());
|
||||
const float volume = static_cast<float>(slider->value()) / 100.0f;
|
||||
const NodeVolumeState next{volume, muteButton->isChecked()};
|
||||
auto *self = const_cast<PipeWireGraphModel*>(this);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue