OSDN Git Service

prepare to fix UndoTest4
[tombo/Tombo.git] / Src / YAEdit / YAEditDoc.cpp
index 76c921f..276f755 100644 (file)
@@ -3,7 +3,6 @@
 #include "AutoPtr.h"\r
 #include "Region.h"\r
 #include "VarBuffer.h"\r
-#include "YAEditDoc.h"\r
 #include "LineWrapper.h"\r
 #include "LineWrapperImpl.h"\r
 #include "YAEdit.h"\r
 #include "LineManager.h"\r
 #include "PhysicalLineManager.h"\r
 #include "StringSplitter.h"\r
+#include "TString.h"\r
+#include "YAEditDoc.h"\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 // undo info\r
 /////////////////////////////////////////////////////////////////////////////\r
 \r
-UndoInfo::UndoInfo() : pPrevStr(NULL), pNewStr(NULL), bUndoApplied(FALSE)\r
+UndoInfo::UndoInfo() : bUndoApplied(FALSE), bOpenRegion(TRUE)\r
 {\r
 }\r
 \r
 \r
 UndoInfo::~UndoInfo()\r
 {\r
-       delete[] pPrevStr;\r
-}\r
-\r
-BOOL UndoInfo::SetPrev(const Region *pRegion, LPTSTR p) {\r
-       rPrevRegion = *pRegion;\r
-       pPrevStr = p;\r
-       return TRUE;\r
-}\r
-\r
-BOOL UndoInfo::SetNew(const Region *pRegion, LPTSTR p) {\r
-       rNewRegion = *pRegion;\r
-       pNewStr = p;\r
-       return TRUE;\r
 }\r
 \r
 BOOL UndoInfo::CmdUndo(YAEditDoc *pDoc) {\r
        if (bUndoApplied) {\r
                bUndoApplied = FALSE;\r
-               return pDoc->ReplaceString(&rPrevRegion, pNewStr, TRUE);\r
+               return pDoc->ReplaceString(&rPrevRegion, sNewStr.Get(), TRUE);\r
        } else {\r
                bUndoApplied = TRUE;\r
-               return pDoc->ReplaceString(&rNewRegion, pPrevStr, TRUE);\r
+               return pDoc->ReplaceString(&rNewRegion, sPrevStr.Get(), TRUE);\r
        }\r
 }\r
 \r
+BOOL UndoInfo::UpdateUndoRegion(const Region *pPrevRegion, LPCTSTR pPrev, const Region *pNewRegion, LPCTSTR pNew) {\r
+       rPrevRegion = *pPrevRegion;\r
+       if (!sPrevStr.Set(pPrev)) return FALSE;\r
+//     pPrevStr = pPrev;\r
+\r
+       rNewRegion = *pNewRegion;\r
+       return sNewStr.Set(pNew);\r
+}\r
+\r
 /////////////////////////////////////////////////////////////////////////////\r
 // ctor & dtor\r
 /////////////////////////////////////////////////////////////////////////////\r
@@ -140,11 +137,7 @@ BOOL YAEditDoc::ReplaceString(const Region *pDelRegion, LPCTSTR pString, BOOL bK
 \r
        DWORD nPhLinesBefore = pPhLineMgr->MaxLine();\r
 \r
-       // preserve string and region removed by this action.\r
-       if (!bKeepUndo) {\r
-               LPTSTR pPrevText = pPhLineMgr->GetRegionString(pDelRegion);\r
-               pUndo->SetPrev(pDelRegion, pPrevText);\r
-       }\r
+       LPTSTR pPrevText = pPhLineMgr->GetRegionString(pDelRegion);\r
 \r
        // delete region and insert string\r
        Region rNewRegion;\r
@@ -153,9 +146,13 @@ BOOL YAEditDoc::ReplaceString(const Region *pDelRegion, LPCTSTR pString, BOOL bK
                return FALSE;\r
        }\r
 \r
+       // preserve string and region after replaced.\r
        if (!bKeepUndo) {\r
-               // preserve string and region after replaced.\r
-               pUndo->SetNew(&rNewRegion, StringDup(pString));\r
+               if (!pUndo->UpdateUndoRegion(pDelRegion, pPrevText, &rNewRegion, pString)) {\r
+                       return FALSE;\r
+               }\r
+       } else {\r
+               delete [] pPrevText;\r
        }\r
 \r
        // notify to view\r
@@ -173,8 +170,6 @@ BOOL YAEditDoc::Undo()
        if (pUndo == NULL) return TRUE;\r
 \r
        BOOL bResult = pUndo->CmdUndo(this);\r
-//     delete pUndo;\r
-//     pUndo = NULL;\r
        return bResult;\r
 }\r
 \r