Added undo when using the properties widget.
This commit is contained in:
+6
-13
@@ -3876,16 +3876,13 @@ void lcModel::SetCameraProjection(lcCamera* Camera, lcCameraProjection CameraPro
|
|||||||
gMainWindow->UpdateSelectedObjects(false);
|
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;
|
bool Modified = false;
|
||||||
|
|
||||||
if (AddUndo)
|
|
||||||
{
|
|
||||||
BeginActionSequence();
|
|
||||||
BeginObjectEditAction(lcModelActionEditMerge::None);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (lcObject* Object : Objects)
|
for (lcObject* Object : Objects)
|
||||||
{
|
{
|
||||||
bool ObjectModified = Object->SetPropertyValue(PropertyId, mCurrentStep, gMainWindow->GetAddKeys(), Value);
|
bool ObjectModified = Object->SetPropertyValue(PropertyId, mCurrentStep, gMainWindow->GetAddKeys(), Value);
|
||||||
@@ -3904,14 +3901,10 @@ void lcModel::SetObjectsProperty(const std::vector<lcObject*>& Objects, lcObject
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AddUndo)
|
EndObjectEditAction();
|
||||||
{
|
EndActionSequence(lcObject::GetCheckpointString(PropertyId));
|
||||||
EndObjectEditAction();
|
|
||||||
EndActionSequence(lcObject::GetCheckpointString(PropertyId));
|
|
||||||
}
|
|
||||||
|
|
||||||
gMainWindow->UpdateSelectedObjects(false);
|
gMainWindow->UpdateSelectedObjects(false);
|
||||||
UpdateAllViews();
|
|
||||||
|
|
||||||
// todo: fix hacky timeline update
|
// todo: fix hacky timeline update
|
||||||
if (PropertyId == lcObjectPropertyId::PieceId || PropertyId == lcObjectPropertyId::PieceColor)
|
if (PropertyId == lcObjectPropertyId::PieceId || PropertyId == lcObjectPropertyId::PieceColor)
|
||||||
|
|||||||
+1
-1
@@ -379,7 +379,7 @@ public:
|
|||||||
void SetSelectedPiecesStepShow(lcStep Step);
|
void SetSelectedPiecesStepShow(lcStep Step);
|
||||||
void SetSelectedPiecesStepHide(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 EndPropertyEdit(lcObjectPropertyId PropertyId, bool Accept);
|
||||||
|
|
||||||
void SetCameraProjection(lcCamera* Camera, lcCameraProjection CameraProjection);
|
void SetCameraProjection(lcCamera* Camera, lcCameraProjection CameraProjection);
|
||||||
|
|||||||
@@ -87,7 +87,8 @@ enum class lcModelActionEditMerge
|
|||||||
KeyboardMove,
|
KeyboardMove,
|
||||||
KeyboardRotate,
|
KeyboardRotate,
|
||||||
PropertiesMove,
|
PropertiesMove,
|
||||||
PropertiesRotate
|
PropertiesRotate,
|
||||||
|
PropertiesEdit = 0x40000000
|
||||||
};
|
};
|
||||||
|
|
||||||
class lcModelActionObjectEdit: public lcModelAction
|
class lcModelActionObjectEdit: public lcModelAction
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ void lcPropertiesWidget::BoolChanged()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
const bool Value = Widget->isChecked();
|
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)
|
void lcPropertiesWidget::UpdateBool(lcObjectPropertyId PropertyId)
|
||||||
@@ -286,10 +286,10 @@ void lcPropertiesWidget::FloatChanged(double Value)
|
|||||||
lcDoubleSpinBox* Widget = qobject_cast<lcDoubleSpinBox*>(sender());
|
lcDoubleSpinBox* Widget = qobject_cast<lcDoubleSpinBox*>(sender());
|
||||||
lcObjectPropertyId PropertyId = GetEditorWidgetPropertyId(Widget);
|
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)
|
if (PropertyId == lcObjectPropertyId::Count)
|
||||||
return;
|
return;
|
||||||
@@ -347,12 +347,7 @@ void lcPropertiesWidget::ChangeFloatValue(lcObjectPropertyId PropertyId, float V
|
|||||||
|
|
||||||
mLastRotation = Rotation;
|
mLastRotation = Rotation;
|
||||||
}
|
}
|
||||||
else if (Piece || Light)
|
else if (PropertyId == lcObjectPropertyId::CameraPositionX || PropertyId == lcObjectPropertyId::CameraPositionY || PropertyId == lcObjectPropertyId::CameraPositionZ)
|
||||||
{
|
|
||||||
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value, !Dragging);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PropertyId == lcObjectPropertyId::CameraPositionX || PropertyId == lcObjectPropertyId::CameraPositionY || PropertyId == lcObjectPropertyId::CameraPositionZ)
|
|
||||||
{
|
{
|
||||||
quint32 FocusSection = LC_CAMERA_SECTION_INVALID;
|
quint32 FocusSection = LC_CAMERA_SECTION_INVALID;
|
||||||
lcVector3 Start;
|
lcVector3 Start;
|
||||||
@@ -463,12 +458,9 @@ void lcPropertiesWidget::ChangeFloatValue(lcObjectPropertyId PropertyId, float V
|
|||||||
Camera->SetFocused(FocusSection, true);
|
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);
|
||||||
{
|
|
||||||
Model->SetObjectsProperty(mFocusObject ? std::vector<lcObject*>{ mFocusObject } : mSelection, PropertyId, Value, !Dragging);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mDisableUpdates = false;
|
mDisableUpdates = false;
|
||||||
@@ -608,7 +600,7 @@ void lcPropertiesWidget::IntegerChanged()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
const int Value = LineEdit->text().toInt();
|
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)
|
void lcPropertiesWidget::UpdateInteger(lcObjectPropertyId PropertyId)
|
||||||
@@ -741,7 +733,7 @@ void lcPropertiesWidget::StringChanged()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
QString Value = LineEdit->text();
|
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)
|
void lcPropertiesWidget::UpdateString(lcObjectPropertyId PropertyId)
|
||||||
@@ -805,7 +797,7 @@ void lcPropertiesWidget::StringListChanged(int Value)
|
|||||||
if (!Model)
|
if (!Model)
|
||||||
return;
|
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)
|
void lcPropertiesWidget::UpdateStringList(lcObjectPropertyId PropertyId)
|
||||||
@@ -907,7 +899,7 @@ void lcPropertiesWidget::ColorChanged(QColor Color)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
const lcVector3 FloatColor = lcVector3FromQColor(Color);
|
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)
|
void lcPropertiesWidget::UpdateColor(lcObjectPropertyId PropertyId)
|
||||||
@@ -973,7 +965,7 @@ void lcPropertiesWidget::PieceColorChanged(int ColorIndex)
|
|||||||
if (!Model)
|
if (!Model)
|
||||||
return;
|
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()
|
void lcPropertiesWidget::PieceColorButtonClicked()
|
||||||
@@ -1104,7 +1096,7 @@ void lcPropertiesWidget::PieceIdButtonClicked()
|
|||||||
if (!Model || !Info)
|
if (!Model || !Info)
|
||||||
return;
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ protected:
|
|||||||
void UpdatePieceColor(lcObjectPropertyId PropertyId);
|
void UpdatePieceColor(lcObjectPropertyId PropertyId);
|
||||||
void UpdatePieceId(lcObjectPropertyId PropertyId);
|
void UpdatePieceId(lcObjectPropertyId PropertyId);
|
||||||
|
|
||||||
void ChangeFloatValue(lcObjectPropertyId PropertyId, float Value, bool Dragging);
|
void ChangeFloatValue(lcObjectPropertyId PropertyId, float Value);
|
||||||
|
|
||||||
void SetEmpty();
|
void SetEmpty();
|
||||||
void SetPiece(const std::vector<lcObject*>& Selection, lcObject* Focus);
|
void SetPiece(const std::vector<lcObject*>& Selection, lcObject* Focus);
|
||||||
|
|||||||
Reference in New Issue
Block a user