#pragma once #include "actionitem.h" namespace NAction { //功能同CActionBackupItem类 class CActionModifiedItem : public CActionItem { public: struct ModifiedEntry { int64_t id = -1; std::unique_ptr pOldOne = nullptr; std::unique_ptr pNewOne = nullptr; }; CActionModifiedItem(); CActionModifiedItem(CSigmaDoc * ppDoc, UINT actionType, const CPositionList& list); CActionModifiedItem(CSigmaDoc * ppDoc, UINT actionType); virtual ~CActionModifiedItem(void); std::string GetActionName() const override { return typeid(*this).name(); } bool IsOwnCOnes() const override { return true; } virtual void Undo(void); virtual void Redo(void); void accept(CActionVisitor& visitor) override; virtual bool BackupOldItem(POSITION pos, COne* pOne); void BackupOldItem(const CPositionList& list); void BackupNewItem(); int GetCount(); friend class BlobSerializer; protected: virtual void PerformOperation(std::unique_ptr ModifiedEntry::* member); virtual void CloneOne(COne* pDestOne, COne* pSourceOne); virtual void AfterRedoUndo(COne* pDestOne); private: void BackupOldOne(COne* pOne); void CloneOneAndInvalidate(COne* pOne, const COne* pActionOne); std::vector m_entries; }; //为了减少占用的内存,特将网格文件的独立出来,这样在修改其参数后不用备份网格数据 class CActionModifiedMesh : public CActionModifiedItem { public: CActionModifiedMesh(CSigmaDoc * ppDoc, UINT actionType, const CPositionList& list); CActionModifiedMesh(CSigmaDoc * ppDoc, UINT actionType); CActionModifiedMesh(); virtual ~CActionModifiedMesh(void); std::string GetActionName() const override { return typeid(*this).name(); } void accept(CActionVisitor& visitor) override; protected: virtual void CloneOne(COne* pDestOne, COne* pSourceOne); virtual void AfterRedoUndo(COne* pDestOne); }; };//namespace