SceneEditOps.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include <Atomic/IO/Log.h>
  2. #include <Atomic/Scene/Node.h>
  3. #include <Atomic/Scene/Component.h>
  4. #include "SceneEditOps.h"
  5. #include "SceneEditor3DEvents.h"
  6. namespace AtomicEditor
  7. {
  8. NodeEditOp::NodeEditOp(Node* node)
  9. {
  10. node_ = node;
  11. // parent at the time of the operation
  12. parent_ = node->GetParent();
  13. }
  14. NodeAddedRemovedOp::NodeAddedRemovedOp(Node* node, bool added) : NodeEditOp(node),
  15. added_(added)
  16. {
  17. type_ = SCENEEDIT_NODE_ADDED_REMOVED;
  18. }
  19. bool NodeAddedRemovedOp::Undo()
  20. {
  21. return true;
  22. }
  23. bool NodeAddedRemovedOp::Redo()
  24. {
  25. return true;
  26. }
  27. SerializableEditOp::SerializableEditOp(Serializable* serializable, const VectorBuffer& beginState, const VectorBuffer& endState) : SceneEditOp(),
  28. serializable_(serializable),
  29. beginState_(beginState),
  30. endState_(endState)
  31. {
  32. type_ = SCENEEDIT_SERIALIZABLE_EDIT;
  33. if (!beginState_.GetSize())
  34. {
  35. LOGERRORF("Zero size beginState");
  36. }
  37. if (!endState_.GetSize())
  38. {
  39. LOGERRORF("Zero size endState");
  40. }
  41. }
  42. bool SerializableEditOp::Undo()
  43. {
  44. if (!serializable_->Serializable::Load(beginState_))
  45. {
  46. LOGERRORF("Error loading beginState");
  47. }
  48. beginState_.Seek(0);
  49. VariantMap eventData;
  50. eventData[SceneEditSerializableUndoRedo::P_SERIALIZABLE] = serializable_;
  51. eventData[SceneEditSerializableUndoRedo::P_UNDO] = true;
  52. eventData[SceneEditSerializableUndoRedo::P_STATE] = beginState_;
  53. serializable_->SendEvent(E_SCENEEDITSERIALIZABLEUNDOREDO, eventData);
  54. return true;
  55. }
  56. bool SerializableEditOp::Redo()
  57. {
  58. if (!serializable_->Serializable::Load(endState_))
  59. {
  60. LOGERRORF("Error loading endState");
  61. }
  62. endState_.Seek(0);
  63. VariantMap eventData;
  64. eventData[SceneEditSerializableUndoRedo::P_SERIALIZABLE] = serializable_;
  65. eventData[SceneEditSerializableUndoRedo::P_UNDO] = false;
  66. eventData[SceneEditSerializableUndoRedo::P_STATE] = endState_;
  67. serializable_->SendEvent(E_SCENEEDITSERIALIZABLEUNDOREDO, eventData);
  68. return true;
  69. }
  70. }