// undo info\r
/////////////////////////////////////////////////////////////////////////////\r
\r
-UndoInfo::UndoInfo() : pPrevStr(NULL), pNewStr(NULL)\r
+UndoInfo::UndoInfo() : pPrevStr(NULL), pNewStr(NULL), bUndoApplied(FALSE)\r
{\r
}\r
\r
}\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
// 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
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
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
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
////////////////////////////////////////////////////\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
LPTSTR pNewStr;\r
Region rNewRegion;\r
\r
+ BOOL bUndoApplied;\r
+\r
public:\r
UndoInfo();\r
~UndoInfo();\r