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
|
### Milestone 6: Undo/Redo & Polish
|
||||||
**Estimated Time:** 1-2 weeks
|
**Estimated Time:** 1-2 weeks
|
||||||
- [ ] Integrate QUndoStack for all graph operations
|
- [x] Integrate QUndoStack for all graph operations
|
||||||
- [ ] Implement command classes for link, volume, node operations
|
- [x] Implement command classes for link, volume, node operations
|
||||||
- [ ] Add keyboard shortcuts (Delete, Ctrl+D, Ctrl+Z, etc.)
|
- [ ] Add keyboard shortcuts (Delete, Ctrl+D, Ctrl+Z, etc.)
|
||||||
- [ ] Implement context menus for nodes/canvas
|
- [ ] Implement context menus for nodes/canvas
|
||||||
- [ ] Add copy/paste/duplicate functionality
|
- [ ] 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 float volume = static_cast<float>(value) / 100.0f;
|
||||||
const bool userMute = m_mixerUserMute.value(nodeId, false);
|
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)) {
|
if (!m_mixerStartState.contains(nodeId)) {
|
||||||
const NodeVolumeState previous = m_mixerLastState.value(nodeId, NodeVolumeState{volume, userMute});
|
const NodeVolumeState previous = m_mixerLastState.value(nodeId, NodeVolumeState{volume, userMute});
|
||||||
m_mixerStartState.insert(nodeId, previous);
|
m_mixerStartState.insert(nodeId, previous);
|
||||||
|
|
@ -932,6 +932,7 @@ void GraphEditorWidget::refreshMixerStrip(uint32_t nodeId, const Potato::NodeInf
|
||||||
if (!m_mixerFaders.contains(nodeId)) {
|
if (!m_mixerFaders.contains(nodeId)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
m_mixerFaders[nodeId]->setProperty("pressValue", QVariant());
|
||||||
const float volume = static_cast<float>(m_mixerFaders[nodeId]->value()) / 100.0f;
|
const float volume = static_cast<float>(m_mixerFaders[nodeId]->value()) / 100.0f;
|
||||||
const bool userMute = m_mixerUserMute.value(nodeId, false);
|
const bool userMute = m_mixerUserMute.value(nodeId, false);
|
||||||
const NodeVolumeState previous = m_mixerStartState.value(nodeId, m_mixerLastState.value(nodeId, NodeVolumeState{volume, userMute}));
|
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);
|
m_controller->setNodeVolume(pipewireId, volume, next.mute);
|
||||||
auto *self = const_cast<PipeWireGraphModel*>(this);
|
auto *self = const_cast<PipeWireGraphModel*>(this);
|
||||||
self->setNodeVolumeState(pipewireId, next, false);
|
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);
|
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));
|
const NodeVolumeState previous = m_inlineStartState.value(pipewireId, m_nodeVolumeState.value(pipewireId));
|
||||||
m_inlineStartState.remove(pipewireId);
|
m_inlineStartState.remove(pipewireId);
|
||||||
|
slider->setProperty("pressValue", QVariant());
|
||||||
const float volume = static_cast<float>(slider->value()) / 100.0f;
|
const float volume = static_cast<float>(slider->value()) / 100.0f;
|
||||||
const NodeVolumeState next{volume, muteButton->isChecked()};
|
const NodeVolumeState next{volume, muteButton->isChecked()};
|
||||||
auto *self = const_cast<PipeWireGraphModel*>(this);
|
auto *self = const_cast<PipeWireGraphModel*>(this);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue