OSDN Git Service

partially support dual undo (Ctrl-Z to Ctrl-Z)
authorTomohisa Hirami <hirami@users.sourceforge.jp>
Tue, 3 Mar 2009 15:43:36 +0000 (00:43 +0900)
committerTomohisa Hirami <hirami@users.sourceforge.jp>
Tue, 3 Mar 2009 15:43:36 +0000 (00:43 +0900)
Src/YAEdit/YAEditDoc.cpp
Src/YAEdit/YAEditDoc.h

index 5b33541..76c921f 100644 (file)
@@ -17,7 +17,7 @@
 // undo info\r
 /////////////////////////////////////////////////////////////////////////////\r
 \r
-UndoInfo::UndoInfo() : pPrevStr(NULL), pNewStr(NULL)\r
+UndoInfo::UndoInfo() : pPrevStr(NULL), pNewStr(NULL), bUndoApplied(FALSE)\r
 {\r
 }\r
 \r
@@ -40,7 +40,13 @@ BOOL UndoInfo::SetNew(const Region *pRegion, LPTSTR p) {
 }\r
 \r
 BOOL UndoInfo::CmdUndo(YAEditDoc *pDoc) {\r
-       return pDoc->ReplaceString(&rNewRegion, pPrevStr);\r
+       if (bUndoApplied) {\r
+               bUndoApplied = FALSE;\r
+               return pDoc->ReplaceString(&rPrevRegion, pNewStr, TRUE);\r
+       } else {\r
+               bUndoApplied = TRUE;\r
+               return pDoc->ReplaceString(&rNewRegion, pPrevStr, TRUE);\r
+       }\r
 }\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
@@ -122,7 +128,7 @@ BOOL YAEditDoc::ReleaseDoc()
 // Replace string\r
 /////////////////////////////////////////////////////////////////////////////\r
 \r
-BOOL YAEditDoc::ReplaceString(const Region *pDelRegion, LPCTSTR pString)\r
+BOOL YAEditDoc::ReplaceString(const Region *pDelRegion, LPCTSTR pString, BOOL bKeepUndo)\r
 {\r
        // if read only mode, ignore editing.\r
        if (bReadOnly) return TRUE;\r
@@ -135,8 +141,10 @@ BOOL YAEditDoc::ReplaceString(const Region *pDelRegion, LPCTSTR pString)
        DWORD nPhLinesBefore = pPhLineMgr->MaxLine();\r
 \r
        // preserve string and region removed by this action.\r
-       LPTSTR pPrevText = pPhLineMgr->GetRegionString(pDelRegion);\r
-       pUndo->SetPrev(pDelRegion, pPrevText);\r
+       if (!bKeepUndo) {\r
+               LPTSTR pPrevText = pPhLineMgr->GetRegionString(pDelRegion);\r
+               pUndo->SetPrev(pDelRegion, pPrevText);\r
+       }\r
 \r
        // delete region and insert string\r
        Region rNewRegion;\r
@@ -145,8 +153,10 @@ BOOL YAEditDoc::ReplaceString(const Region *pDelRegion, LPCTSTR pString)
                return FALSE;\r
        }\r
 \r
-       // preserve string and region after replaced.\r
-       pUndo->SetNew(&rNewRegion, StringDup(pString));\r
+       if (!bKeepUndo) {\r
+               // preserve string and region after replaced.\r
+               pUndo->SetNew(&rNewRegion, StringDup(pString));\r
+       }\r
 \r
        // notify to view\r
        DWORD nPhLinesAfter = pPhLineMgr->MaxLine();\r
@@ -163,8 +173,8 @@ BOOL YAEditDoc::Undo()
        if (pUndo == NULL) return TRUE;\r
 \r
        BOOL bResult = pUndo->CmdUndo(this);\r
-       delete pUndo;\r
-       pUndo = NULL;\r
+//     delete pUndo;\r
+//     pUndo = NULL;\r
        return bResult;\r
 }\r
 \r
index b2d32a3..db7d3a9 100644 (file)
@@ -49,7 +49,7 @@ public:
        ////////////////////////////////////////////////////\r
        // retrieve & set line \r
 \r
-       BOOL ReplaceString(const Region *pRegion, LPCTSTR pString);\r
+       BOOL ReplaceString(const Region *pRegion, LPCTSTR pString, BOOL bKeepUndo = FALSE);\r
        BOOL Undo();\r
 \r
        BOOL IsModify() { return bModified; }\r
@@ -84,6 +84,8 @@ public:
        LPTSTR pNewStr;\r
        Region rNewRegion;\r
 \r
+       BOOL bUndoApplied;\r
+\r
 public:\r
        UndoInfo();\r
        ~UndoInfo();\r