OSDN Git Service

improve rescan during edit hook
authorDennis Lim <dlkj@users.sourceforge.net>
Tue, 29 May 2001 15:19:12 +0000 (15:19 +0000)
committerDennis Lim <dlkj@users.sourceforge.net>
Tue, 29 May 2001 15:19:12 +0000 (15:19 +0000)
Src/MergeDoc.cpp
Src/MergeEditView.cpp
Src/MergeEditView.h

index 1fb550e..5c8718c 100644 (file)
@@ -197,6 +197,8 @@ void CMergeDoc::Dump(CDumpContext& dc) const
 
 BOOL CMergeDoc::Rescan()
 {
+       BOOL ltMod = m_ltBuf.IsModified();
+       BOOL rtMod = m_rtBuf.IsModified();
        struct file_data inf[2];
        char *free0=NULL,*free1=NULL;
        char dir0[MAX_PATH],dir1[MAX_PATH], name0[MAX_PATH], name1[MAX_PATH];
@@ -403,6 +405,8 @@ BOOL CMergeDoc::Rescan()
                mf->m_pLeft->GoToLine(nResumeTopLine, FALSE);
                mf->m_pRight->GoToLine(nResumeTopLine, FALSE);
        }
+       m_ltBuf.SetModified(ltMod);
+       m_rtBuf.SetModified(rtMod);
        return bResult;
 }
 
@@ -977,14 +981,23 @@ void CMergeDoc::FlushAndRescan()
                m_ltBuf.SaveToFile(m_strTempLeftFile, CRLF_STYLE_AUTOMATIC, FALSE);
        if (m_rtBuf.IsModified())
                m_rtBuf.SaveToFile(m_strTempRightFile, CRLF_STYLE_AUTOMATIC, FALSE);
-       CWnd *pFocus =  mf->m_pLeft->GetFocus();
-       mf->m_pLeft->PushCursor();
-       mf->m_pRight->PushCursor();
-       Rescan();
-       mf->m_pLeft->PopCursor();
-       mf->m_pRight->PopCursor();
-       if (pFocus!=NULL)
-               pFocus->SetFocus();
+
+       CMDIFrameWnd* mainWnd = dynamic_cast<CMDIFrameWnd*>(AfxGetMainWnd());
+       CMDIChildWnd* diffWnd = dynamic_cast<CMDIChildWnd*>(mainWnd->MDIGetActive());
+       CCrystalEditView* curView = dynamic_cast<CCrystalEditView*>(diffWnd->GetActiveView());
+
+       if(curView)
+       {
+               curView->PushCursor();
+               Rescan();
+               UpdateAllViews(NULL);
+               curView->PopCursor();
+       }
+       else
+       {
+               Rescan();
+               UpdateAllViews(NULL);
+       }
 }
 
 void CMergeDoc::OnFileSave() 
index 61fc1d6..708ebf9 100644 (file)
@@ -52,7 +52,6 @@ BEGIN_MESSAGE_MAP(CMergeEditView, CCrystalEditViewEx)
        ON_UPDATE_COMMAND_UI(ID_PREVDIFF, OnUpdatePrevdiff)
        ON_WM_LBUTTONDBLCLK()
        ON_WM_LBUTTONUP()
-       ON_WM_CHAR()
        ON_COMMAND(ID_ALL_LEFT, OnAllLeft)
        ON_UPDATE_COMMAND_UI(ID_ALL_LEFT, OnUpdateAllLeft)
        ON_COMMAND(ID_ALL_RIGHT, OnAllRight)
@@ -753,28 +752,6 @@ void CMergeEditView::UpdateLineLengths()
        GetMaxLineLength();
 }
 
-void CMergeEditView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
-{
-
-       BOOL mod = m_pTextBuffer->IsModified();
-       m_pTextBuffer->SetModified(FALSE);
-
-       CCrystalEditViewEx::OnChar(nChar, nRepCnt, nFlags);
-
-       if (m_pTextBuffer->IsModified())
-       {
-               CPoint pos = GetCursorPos();
-               DWORD flags = m_pTextBuffer->GetLineFlags(pos.y);
-               if ((flags&LF_WINMERGE_FLAGS)==0)
-               {
-                       GetDocument()->FlushAndRescan();
-                       m_pTextBuffer->SetModified(TRUE);
-               }
-       }
-       else
-               m_pTextBuffer->SetModified(mod);
-}
-
 void CMergeEditView::OnL2r() 
 {
        GetDocument()->ListCopy(true);
@@ -827,3 +804,8 @@ void CMergeEditView::OnUpdateAllRight(CCmdUI* pCmdUI)
        pCmdUI->Enable(GetDocument()->m_nDiffs!=0);
 }
 
+void CMergeEditView::OnEditOperation(int nAction, LPCTSTR pszText)
+{
+       CCrystalEditViewEx::OnEditOperation(nAction, pszText);
+       GetDocument()->FlushAndRescan();
+}
index 644c86f..11179e1 100644 (file)
@@ -33,6 +33,7 @@ public:
 
 // Operations
 public:
+       virtual void OnEditOperation(int nAction, LPCTSTR pszText);
        void UpdateLineLengths();
        BOOL IsLineInCurrentDiff(int nLine);
        void SelectNone();
@@ -94,7 +95,6 @@ protected:
        afx_msg void OnUpdatePrevdiff(CCmdUI* pCmdUI);
        afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
        afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
-       afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
        afx_msg void OnAllLeft();
        afx_msg void OnUpdateAllLeft(CCmdUI* pCmdUI);
        afx_msg void OnAllRight();