OSDN Git Service

Fix sf.net ticket #2113: Edit > Replace > All, Undo: should undo all
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sat, 23 Mar 2019 12:33:22 +0000 (21:33 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sat, 23 Mar 2019 12:33:22 +0000 (21:33 +0900)
Externals/crystaledit/editlib/ccrystaleditview.cpp
Externals/crystaledit/editlib/ccrystaleditview.h
Externals/crystaledit/editlib/ceditreplacedlg.cpp

index 1b1472a..f024b78 100644 (file)
@@ -1634,13 +1634,13 @@ OnEditReplace ()
  * @return true if succeeded.
  */
 bool CCrystalEditView::
-ReplaceSelection (LPCTSTR pszNewText, size_t cchNewText, DWORD dwFlags)
+ReplaceSelection (LPCTSTR pszNewText, size_t cchNewText, DWORD dwFlags, bool bGroupWithPrevious)
 {
   if (!cchNewText)
     return DeleteCurrentSelection();
   ASSERT (pszNewText != nullptr);
 
-  m_pTextBuffer->BeginUndoGroup();
+  m_pTextBuffer->BeginUndoGroup(bGroupWithPrevious);
 
   CPoint ptCursorPos;
   if (IsSelection ())
index 0f857b6..8a9db82 100644 (file)
@@ -121,7 +121,7 @@ public :
     virtual bool QueryEditable ();
     virtual void UpdateView (CCrystalTextView * pSource, CUpdateContext * pContext, DWORD dwFlags, int nLineIndex = -1) override;
 
-    bool ReplaceSelection (LPCTSTR pszNewText, size_t cchNewText, DWORD dwFlags);
+    bool ReplaceSelection (LPCTSTR pszNewText, size_t cchNewText, DWORD dwFlags, bool bGroupWithPrevious = false);
 
     virtual void OnEditOperation (int nAction, LPCTSTR pszText, size_t cchText) override;
 
index e6207c0..936844a 100644 (file)
@@ -410,6 +410,7 @@ OnEditReplaceAll ()
     }
 
   CPoint m_ptFirstFound = m_ptFoundAt;
+  bool bGroupWithPrevious = false;
 
   while (m_bFound)
     {
@@ -422,7 +423,7 @@ OnEditReplaceAll ()
         dwSearchFlags |= FIND_REGEXP;
     
       //  We have highlighted text
-      VERIFY (m_pBuddy->ReplaceSelection (m_sNewText, m_sNewText.GetLength(), dwSearchFlags));
+      VERIFY (m_pBuddy->ReplaceSelection (m_sNewText, m_sNewText.GetLength(), dwSearchFlags, bGroupWithPrevious));
 
       //  Manually recalculate points
       if (m_bEnableScopeSelection)
@@ -468,6 +469,8 @@ OnEditReplaceAll ()
       if (bWrapped)
         if (m_ptFoundAt.y > m_ptFirstFound.y || (m_ptFoundAt.y == m_ptFirstFound.y && m_ptFoundAt.x >= m_ptFirstFound.x))
           break;
+
+         bGroupWithPrevious = true;
     }
 
   // Let user know how many strings were replaced