Added undo when using the properties widget.

This commit is contained in:
Leonardo Zide
2026-03-07 14:03:59 -08:00
parent d14b8e3d93
commit e1dab3286e
5 changed files with 22 additions and 36 deletions
+6 -13
View File
@@ -3876,16 +3876,13 @@ void lcModel::SetCameraProjection(lcCamera* Camera, lcCameraProjection CameraPro
gMainWindow->UpdateSelectedObjects(false);
}
void lcModel::SetObjectsProperty(const std::vector<lcObject*>& Objects, lcObjectPropertyId PropertyId, QVariant Value, bool AddUndo)
void lcModel::SetObjectsProperty(const std::vector<lcObject*>& Objects, lcObjectPropertyId PropertyId, QVariant Value)
{
BeginActionSequence();
BeginObjectEditAction(static_cast<lcModelActionEditMerge>(static_cast<uint32_t>(lcModelActionEditMerge::PropertiesEdit) | static_cast<uint32_t>(PropertyId)));
bool Modified = false;
if (AddUndo)
{
BeginActionSequence();
BeginObjectEditAction(lcModelActionEditMerge::None);
}
for (lcObject* Object : Objects)
{
bool ObjectModified = Object->SetPropertyValue(PropertyId, mCurrentStep, gMainWindow->GetAddKeys(), Value);
@@ -3904,14 +3901,10 @@ void lcModel::SetObjectsProperty(const std::vector<lcObject*>& Objects, lcObject
return;
}
if (AddUndo)
{
EndObjectEditAction();
EndActionSequence(lcObject::GetCheckpointString(PropertyId));
}
EndObjectEditAction();
EndActionSequence(lcObject::GetCheckpointString(PropertyId));
gMainWindow->UpdateSelectedObjects(false);
UpdateAllViews();
// todo: fix hacky timeline update
if (PropertyId == lcObjectPropertyId::PieceId || PropertyId == lcObjectPropertyId::PieceColor)
+1 -1
View File
@@ -379,7 +379,7 @@ public:
void SetSelectedPiecesStepShow(lcStep Step);
void SetSelectedPiecesStepHide(lcStep Step);
void SetObjectsProperty(const std::vector<lcObject*>& Objects, lcObjectPropertyId PropertyId, QVariant Value, bool AddUndo);
void SetObjectsProperty(const std::vector<lcObject*>& Objects, lcObjectPropertyId PropertyId, QVariant Value);
void EndPropertyEdit(lcObjectPropertyId PropertyId, bool Accept);
void SetCameraProjection(lcCamera* Camera, lcCameraProjection CameraProjection);
+2 -1
View File
@@ -87,7 +87,8 @@ enum class lcModelActionEditMerge
KeyboardMove,
KeyboardRotate,
PropertiesMove,
PropertiesRotate
PropertiesRotate,
PropertiesEdit = 0x40000000
};
class lcModelActionObjectEdit: public lcModelAction
+12 -20
View File
@@ -204,7 +204,7 @@ void lcPropertiesWidget::BoolChanged()
return;
const bool Value = Widget->isChecked();
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value, true);
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value);
}
void lcPropertiesWidget::UpdateBool(lcObjectPropertyId PropertyId)
@@ -286,10 +286,10 @@ void lcPropertiesWidget::FloatChanged(double Value)
lcDoubleSpinBox* Widget = qobject_cast<lcDoubleSpinBox*>(sender());
lcObjectPropertyId PropertyId = GetEditorWidgetPropertyId(Widget);
ChangeFloatValue(PropertyId, Value, true);
ChangeFloatValue(PropertyId, Value);
}
void lcPropertiesWidget::ChangeFloatValue(lcObjectPropertyId PropertyId, float Value, bool Dragging)
void lcPropertiesWidget::ChangeFloatValue(lcObjectPropertyId PropertyId, float Value)
{
if (PropertyId == lcObjectPropertyId::Count)
return;
@@ -347,12 +347,7 @@ void lcPropertiesWidget::ChangeFloatValue(lcObjectPropertyId PropertyId, float V
mLastRotation = Rotation;
}
else if (Piece || Light)
{
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value, !Dragging);
}
if (PropertyId == lcObjectPropertyId::CameraPositionX || PropertyId == lcObjectPropertyId::CameraPositionY || PropertyId == lcObjectPropertyId::CameraPositionZ)
else if (PropertyId == lcObjectPropertyId::CameraPositionX || PropertyId == lcObjectPropertyId::CameraPositionY || PropertyId == lcObjectPropertyId::CameraPositionZ)
{
quint32 FocusSection = LC_CAMERA_SECTION_INVALID;
lcVector3 Start;
@@ -463,12 +458,9 @@ void lcPropertiesWidget::ChangeFloatValue(lcObjectPropertyId PropertyId, float V
Camera->SetFocused(FocusSection, true);
}
}
else if (Camera)
else
{
if (PropertyId == lcObjectPropertyId::CameraFOV || PropertyId == lcObjectPropertyId::CameraNear || PropertyId == lcObjectPropertyId::CameraFar)
{
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value, !Dragging);
}
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value);
}
mDisableUpdates = false;
@@ -608,7 +600,7 @@ void lcPropertiesWidget::IntegerChanged()
return;
const int Value = LineEdit->text().toInt();
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value, true);
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value);
}
void lcPropertiesWidget::UpdateInteger(lcObjectPropertyId PropertyId)
@@ -741,7 +733,7 @@ void lcPropertiesWidget::StringChanged()
return;
QString Value = LineEdit->text();
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value, true);
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value);
}
void lcPropertiesWidget::UpdateString(lcObjectPropertyId PropertyId)
@@ -805,7 +797,7 @@ void lcPropertiesWidget::StringListChanged(int Value)
if (!Model)
return;
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value, true);
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value);
}
void lcPropertiesWidget::UpdateStringList(lcObjectPropertyId PropertyId)
@@ -907,7 +899,7 @@ void lcPropertiesWidget::ColorChanged(QColor Color)
return;
const lcVector3 FloatColor = lcVector3FromQColor(Color);
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, QVariant::fromValue<lcVector3>(FloatColor), true);
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, QVariant::fromValue<lcVector3>(FloatColor));
}
void lcPropertiesWidget::UpdateColor(lcObjectPropertyId PropertyId)
@@ -973,7 +965,7 @@ void lcPropertiesWidget::PieceColorChanged(int ColorIndex)
if (!Model)
return;
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, ColorIndex, true);
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, ColorIndex);
}
void lcPropertiesWidget::PieceColorButtonClicked()
@@ -1104,7 +1096,7 @@ void lcPropertiesWidget::PieceIdButtonClicked()
if (!Model || !Info)
return;
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, QVariant::fromValue<void*>(Info), true);
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, QVariant::fromValue<void*>(Info));
}
}
+1 -1
View File
@@ -115,7 +115,7 @@ protected:
void UpdatePieceColor(lcObjectPropertyId PropertyId);
void UpdatePieceId(lcObjectPropertyId PropertyId);
void ChangeFloatValue(lcObjectPropertyId PropertyId, float Value, bool Dragging);
void ChangeFloatValue(lcObjectPropertyId PropertyId, float Value);
void SetEmpty();
void SetPiece(const std::vector<lcObject*>& Selection, lcObject* Focus);