#pragma once #include "actionitem.h" namespace NAction { //功能同CActionModifiedItem类 class CActionBackupItem : public CActionItem { public: CActionBackupItem(); CActionBackupItem(CSigmaDoc * ppDoc, UINT actionType); CActionBackupItem(CSigmaDoc * ppDoc, UINT actionType, const CPositionList& list); virtual ~CActionBackupItem(void); std::string GetActionName() const override { return typeid(*this).name(); } // 在这个类中,value 里面存储的才是备份 COne,m_eleList 里面存储的是 CXy 所属 COne 指针 bool IsOwnCOnes() const override { return true; } virtual void Undo(void); virtual void Redo(void); void Backup(POSITION pos); /** * 备份更新后的内容 * */ void BackupNew(); void accept(CActionVisitor& visitor) override; friend class BlobSerializer; protected: void Backup(const CPositionList& list); public: void Backup(COne* pOne); void Backup(COne* pBakOne, COne* pOne); int GetCount(void); int BackupAllElements(void); void RemoveBackupTail(void); private: struct BackupEntry { int64_t id = -1; std::unique_ptr pOldOne; std::unique_ptr pNewOne; }; void DoOperation(std::unique_ptr BackupEntry::* member); std::vector m_entries; }; class CActionBackupProjectionItem : public CActionItem { public: CActionBackupProjectionItem(); CActionBackupProjectionItem(CSigmaDoc * ppDoc, UINT actionType); CActionBackupProjectionItem(CSigmaDoc * ppDoc, UINT actionType, CString strOldPro, CString strNewPro); virtual ~CActionBackupProjectionItem(void); std::string GetActionName() const override { return typeid(*this).name(); } virtual void Undo(void); virtual void Redo(void); void accept(CActionVisitor& visitor) override; friend class BlobSerializer; protected: CString m_strOldProjection; CString m_strNewProjection; }; class CActionBackupXYItem : public CActionItem { public: CActionBackupXYItem(); CActionBackupXYItem(CSigmaDoc * ppDoc, UINT actionType); virtual ~CActionBackupXYItem(void); std::string GetActionName() const override { return typeid(*this).name(); } virtual void Undo(void); virtual void Redo(void); void ResetTreeLayerPtr(void); void accept(CActionVisitor& visitor) override; friend class BlobSerializer; protected: CXy* m_pPrevXY = nullptr; }; class CAtionBackupEditCurveInName : public CActionBackupItem { public: CAtionBackupEditCurveInName(); CAtionBackupEditCurveInName(CSigmaDoc * ppDoc, UINT actionType, const CPositionList& list); std::string GetActionName() const override { return typeid(*this).name(); } virtual void Undo(void); virtual void Redo(void); void accept(CActionVisitor& visitor) override; }; }