OSDN Git Service

PATCH: [ 724309 ] Add WaitStatusCursors
authorPerry Rapp <elsapo@users.sourceforge.net>
Sun, 20 Apr 2003 02:56:43 +0000 (02:56 +0000)
committerPerry Rapp <elsapo@users.sourceforge.net>
Sun, 20 Apr 2003 02:56:43 +0000 (02:56 +0000)
Src/DirDoc.cpp
Src/DirView.cpp
Src/MainFrm.cpp
Src/MainFrm.h
Src/Merge.dsp
Src/MergeDoc.cpp
Src/MergeEditView.cpp
Src/readme.txt

index 074b5ca..812d485 100644 (file)
@@ -32,6 +32,7 @@
 #include "coretools.h"
 #include "logfile.h"
 #include "paths.h"
+#include "WaitStatusCursor.h"
 
 extern int recursive;
 
@@ -204,8 +205,9 @@ diff_dirs2 (filevec, handle_file, depth)
 
 void CDirDoc::Rescan()
 {
+       WaitStatusCursor waitstatus(_T("Rescanning"));
+
        ASSERT(m_pCtxt != NULL);
-       BeginWaitCursor();
 
        gLog.Write(_T("Starting directory scan:\r\n\tLeft: %s\r\n\tRight: %s\r\n"),
                        m_pCtxt->m_strLeft, m_pCtxt->m_strRight);
@@ -228,7 +230,6 @@ void CDirDoc::Rescan()
        ((CDirFrame*)(m_pDirView->GetParent()))->SetStatus(s);
        Redisplay();
 
-       EndWaitCursor();
 }
 
 // return true if we need to hide this item because it is a backup
index 3def32d..44550db 100644 (file)
@@ -28,6 +28,7 @@
 #include "MainFrm.h"
 #include "resource.h"
 #include "coretools.h"
+#include "WaitStatusCursor.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -212,7 +213,7 @@ void CDirView::OnInitialUpdate()
 
 void CDirView::OnLButtonDblClk(UINT nFlags, CPoint point) 
 {
-       CWaitCursor wait;
+       WaitStatusCursor waitstatus(_T("Opening selection"));
        OpenSelection();
        CListViewEx::OnLButtonDblClk(nFlags, point);
 }
@@ -485,7 +486,7 @@ void CDirView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
 {
        if(nChar==VK_RETURN)
        {
-               CWaitCursor wait;
+               WaitStatusCursor waitstatus(_T("Opening selection"));
                OpenSelection();
        }
        CListViewEx::OnChar(nChar, nRepCnt, nFlags);
index af788a3..575626f 100644 (file)
@@ -50,6 +50,8 @@
 #include "ssapi.h"      // BSP - Includes for Visual Source Safe COM interface
 #include "multimon.h"
 #include "paths.h"
+#include "WaitStatusCursor.h"
+
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -163,6 +165,24 @@ CMainFrame::~CMainFrame()
        FreeRegExpList();
 }
 
+// This is a bridge to implement IStatusDisplay for WaitStatusCursor
+// by forwarding all calls to the main frame
+class StatusDisplay : public IStatusDisplay
+{
+public:
+       StatusDisplay() : m_pfrm(0) { }
+       void SetFrame(CMainFrame * frm) { m_pfrm = frm; }
+// Implement IStatusDisplay
+       virtual CString BeginStatus(LPCTSTR str) { return m_pfrm->SetStatus(str); }
+       virtual void ChangeStatus(LPCTSTR str) { m_pfrm->SetStatus(str); }
+       virtual void EndStatus(LPCTSTR str, LPCTSTR oldstr) { m_pfrm->SetStatus(oldstr); }
+
+protected:
+       CMainFrame * m_pfrm;
+};
+
+static StatusDisplay myStatusDisplay;
+
 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 {
        if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
@@ -216,6 +236,10 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
        // CG: The following line was added by the Splash Screen component.
        CSplashWnd::ShowSplashScreen(this);
 
+       // Start handling status messages from WaitStatusCursors
+       myStatusDisplay.SetFrame(this);
+       WaitStatusCursor::SetStatusDisplay(&myStatusDisplay);
+
        return 0;
 }
 
@@ -1340,6 +1364,9 @@ void CMainFrame::OnClose()
                        pMergeDoc->GetParentFrame()->SavePosition();
        }
        
+       // Stop handling status messages from WaitStatusCursors
+       WaitStatusCursor::SetStatusDisplay(0);
+       myStatusDisplay.SetFrame(0);
        
        CMDIFrameWnd::OnClose();
 }
@@ -1572,6 +1599,14 @@ CDirDoc * CMainFrame::GetDirDocToShow(BOOL * pNew)
        return pDirDoc;
 }
 
+// Set status in the main status pane
+CString CMainFrame::SetStatus(LPCTSTR status)
+{
+       CString old = m_wndStatusBar.GetPaneText(0);
+       m_wndStatusBar.SetPaneText(0, status);
+       return old;
+}
+
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -1630,3 +1665,4 @@ void CMainFrame::OnDropFiles(HDROP dropInfo)
        BOOL ctrlKey = ::GetAsyncKeyState(VK_CONTROL);
        DoFileOpen(files[0], files[1], ctrlKey);
 }
+
index 7304065..cf34ad5 100644 (file)
@@ -84,6 +84,7 @@ public:
        HMENU NewDefaultMenu();
        BOOL CreateBackup(LPCTSTR pszPath);
        BOOL CheckSavePath(CString& strSavePath);
+       CString SetStatus(LPCTSTR status);
 
 // Overrides
        // ClassWizard generated virtual function overrides
index d7695ac..e271773 100644 (file)
@@ -594,6 +594,10 @@ SOURCE=.\VssPrompt.cpp
 !ENDIF 
 
 # End Source File
+# Begin Source File
+
+SOURCE=.\WaitStatusCursor.cpp
+# End Source File
 # End Group
 # Begin Group "Header Files"
 
@@ -798,6 +802,10 @@ SOURCE=..\common\version.h
 
 SOURCE=.\VssPrompt.h
 # End Source File
+# Begin Source File
+
+SOURCE=.\WaitStatusCursor.h
+# End Source File
 # End Group
 # Begin Group "Resource Files"
 
index cb4ad68..04671f8 100644 (file)
@@ -38,6 +38,7 @@
 #include "childFrm.h"
 #include "dirdoc.h"
 #include "files.h"
+#include "WaitStatusCursor.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -1674,7 +1675,10 @@ void CMergeDoc::RescanIfNeeded()
                m_bNeedIdleRescan = FALSE;
                COleDateTimeSpan elapsed = COleDateTime::GetCurrentTime() - m_LastRescan;
                if (elapsed.GetTotalSeconds() > 1)
+               {
+                       WaitStatusCursor waitstatus(_T("Rescanning"));
                        FlushAndRescan();
+               }
        }
 }
 
index 972722c..e3ba75a 100644 (file)
@@ -6,6 +6,7 @@
 #include "MergeEditView.h"
 #include "MergeDoc.h"
 #include "MainFrm.h"
+#include "WaitStatusCursor.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -588,9 +589,8 @@ void CMergeEditView::UpdateLineLengths()
 
 void CMergeEditView::OnL2r()
 {
-       BeginWaitCursor();
+       WaitStatusCursor waitstatus(_T("Copying Left to Right"));
        GetDocument()->ListCopy(true);
-       EndWaitCursor();
 }
 
 void CMergeEditView::OnUpdateL2r(CCmdUI* pCmdUI)
@@ -600,9 +600,8 @@ void CMergeEditView::OnUpdateL2r(CCmdUI* pCmdUI)
 
 void CMergeEditView::OnR2l()
 {
-       BeginWaitCursor();
+       WaitStatusCursor waitstatus(_T("Copying Right to Left"));
        GetDocument()->ListCopy(false);
-       EndWaitCursor();
 }
 
 void CMergeEditView::OnUpdateR2l(CCmdUI* pCmdUI)
@@ -612,8 +611,9 @@ void CMergeEditView::OnUpdateR2l(CCmdUI* pCmdUI)
 
 void CMergeEditView::OnAllLeft()
 {
+       WaitStatusCursor waitstatus(_T("Copying All to Left"));
+
        CMergeDoc* pDoc = GetDocument();
-       BeginWaitCursor();
        // Unfortunately difftools is not designed for this kind
        // of use and sometimes all differences cannot be merged
        // in one run.
@@ -626,7 +626,6 @@ void CMergeEditView::OnAllLeft()
                        pDoc->ListCopy(false);
                }
        }
-       EndWaitCursor();
 }
 
 void CMergeEditView::OnUpdateAllLeft(CCmdUI* pCmdUI)
@@ -636,8 +635,9 @@ void CMergeEditView::OnUpdateAllLeft(CCmdUI* pCmdUI)
 
 void CMergeEditView::OnAllRight()
 {
+       WaitStatusCursor waitstatus(_T("Copying All to Right"));
+
        CMergeDoc* pDoc = GetDocument();
-       BeginWaitCursor();
        // Unfortunately difftools is not designed for this kind
        // of use and sometimes all differences cannot be merged
        // in one run.
@@ -650,7 +650,6 @@ void CMergeEditView::OnAllRight()
                        pDoc->ListCopy(true);
                }
        }
-       EndWaitCursor();
 }
 
 void CMergeEditView::OnUpdateAllRight(CCmdUI* pCmdUI)
index 37cd79d..928dc40 100644 (file)
@@ -1,6 +1,9 @@
 2003-04-20 Perry
  Changed dynamic array to be CArray based
   editlib: ccrystaltextview.cpp
+ PATCH: [ 724309 ] Add WaitStatusCursors
+  WinMerge: DirDoc.cpp DirView.cpp MainFrm.cpp Merge.dsp MergeDoc.cpp MergeEditView.cpp 
+   WaitStatusCursor.cpp WaitStatusCursor.h
 
 2003-04-19 Perry
  [ 724280 ] Could use wait cursors at OpenSelection calls