OSDN Git Service

Fix that the Next File or Previous File button on the toolbar did not work if the...
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sat, 10 Apr 2021 00:24:56 +0000 (09:24 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sat, 10 Apr 2021 00:24:56 +0000 (09:24 +0900)
Src/DirView.cpp
Src/HexMergeDoc.h
Src/IMergeDoc.h
Src/ImgMergeFrm.h
Src/MainFrm.cpp
Src/MainFrm.h
Src/MergeDoc.h
Src/MergeEditView.cpp
Src/MergeEditView.h

index 23b606e..11231d2 100644 (file)
@@ -2796,14 +2796,10 @@ private:
 LRESULT CDirView::OnGenerateFileCmpReport(WPARAM wParam, LPARAM lParam)
 {
        OpenSelection();
-       CFrameWnd * pFrame = GetMainFrame()->GetActiveFrame();
-       IMergeDoc * pMergeDoc = dynamic_cast<IMergeDoc *>(pFrame->GetActiveDocument());
-       if (pMergeDoc == nullptr)
-               pMergeDoc = dynamic_cast<IMergeDoc *>(pFrame);
 
        auto *pReportFileName = reinterpret_cast<const TCHAR *>(wParam);
        bool *pCompleted = reinterpret_cast<bool *>(lParam);
-       if (pMergeDoc != nullptr)
+       if (IMergeDoc * pMergeDoc = GetMainFrame()->GetActiveIMergeDoc())
        {
                pMergeDoc->GenerateReport(pReportFileName);
                pMergeDoc->CloseNow();
index e0b81e6..feb1321 100644 (file)
@@ -63,6 +63,7 @@ public:
        ~CHexMergeDoc();
        int UpdateDiffItem(CDirDoc * pDirDoc);
        bool PromptAndSaveIfNeeded(bool bAllowCancel);
+       CDirDoc* GetDirDoc() const override { return m_pDirDoc; };
        void SetDirDoc(CDirDoc * pDirDoc) override;
        void DirDocClosing(CDirDoc * pDirDoc) override;
        bool CloseNow() override;
index 80f94b4..75b307a 100644 (file)
@@ -13,6 +13,7 @@ struct IMergeDoc
                Removed,\r
        };\r
 \r
+       virtual CDirDoc* GetDirDoc() const = 0;\r
        virtual void SetDirDoc(CDirDoc *pDirDoc) = 0;\r
        virtual bool CloseNow(void) = 0;\r
        virtual bool GenerateReport(const String &path) const = 0;\r
index 1e91388..7718531 100644 (file)
@@ -48,6 +48,7 @@ public:
        bool OpenDocs(int nFiles, const FileLocation fileloc[], const bool bRO[], const String strDesc[], CMDIFrameWnd *pParent);
        void MoveOnLoad(int nPane = -1, int nLineIndex = -1);
        void ChangeFile(int pane, const String& path);
+       CDirDoc* GetDirDoc() const override { return m_pDirDoc; };
        void SetDirDoc(CDirDoc * pDirDoc) override;
        void UpdateResources();
        bool CloseNow() override;
index 10518e6..cdcaacf 100644 (file)
@@ -242,12 +242,20 @@ BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
        ON_COMMAND_RANGE(ID_MRU_FIRST, ID_MRU_LAST, OnMRUs)
        ON_UPDATE_COMMAND_UI(ID_MRU_FIRST, OnUpdateNoMRUs)
        ON_UPDATE_COMMAND_UI(ID_NO_MRU, OnUpdateNoMRUs)
+       ON_COMMAND(ID_FIRSTFILE, OnFirstFile)
+       ON_UPDATE_COMMAND_UI(ID_FIRSTFILE, OnUpdateFirstFile)
+       ON_COMMAND(ID_PREVFILE, OnPrevFile)
+       ON_UPDATE_COMMAND_UI(ID_PREVFILE, OnUpdatePrevFile)
+       ON_COMMAND(ID_NEXTFILE, OnNextFile)
+       ON_UPDATE_COMMAND_UI(ID_NEXTFILE, OnUpdateNextFile)
+       ON_COMMAND(ID_LASTFILE, OnLastFile)
+       ON_UPDATE_COMMAND_UI(ID_LASTFILE, OnUpdateLastFile)
        ON_COMMAND(ID_ACCEL_QUIT, &CMainFrame::OnAccelQuit)
-       //}}AFX_MSG_MAP
        ON_MESSAGE(WMU_CHILDFRAMEADDED, &CMainFrame::OnChildFrameAdded)
        ON_MESSAGE(WMU_CHILDFRAMEREMOVED, &CMainFrame::OnChildFrameRemoved)
        ON_MESSAGE(WMU_CHILDFRAMEACTIVATE, &CMainFrame::OnChildFrameActivate)
        ON_MESSAGE(WMU_CHILDFRAMEACTIVATED, &CMainFrame::OnChildFrameActivated)
+       //}}AFX_MSG_MAP
 END_MESSAGE_MAP()
 
 /**
@@ -1960,15 +1968,8 @@ LRESULT CMainFrame::OnCopyData(WPARAM wParam, LPARAM lParam)
 
 LRESULT CMainFrame::OnUser1(WPARAM wParam, LPARAM lParam)
 {
-       CFrameWnd * pFrame = GetActiveFrame();
-       if (pFrame != nullptr)
-       {
-               IMergeDoc *pMergeDoc = dynamic_cast<IMergeDoc *>(pFrame->GetActiveDocument());
-               if (pMergeDoc == nullptr)
-                       pMergeDoc = dynamic_cast<IMergeDoc *>(pFrame);
-               if (pMergeDoc != nullptr)
-                       pMergeDoc->CheckFileChanged();
-       }
+       if (IMergeDoc *pMergeDoc = GetActiveIMergeDoc())
+               pMergeDoc->CheckFileChanged();
        return 0;
 }
 
@@ -2089,15 +2090,8 @@ void CMainFrame::OnActivateApp(BOOL bActive, HTASK hTask)
        CMDIFrameWnd::OnActivateApp(bActive, hTask);
 #endif
 
-       CFrameWnd * pFrame = GetActiveFrame();
-       if (pFrame != nullptr)
-       {
-               IMergeDoc *pMergeDoc = dynamic_cast<IMergeDoc *>(pFrame->GetActiveDocument());
-               if (pMergeDoc == nullptr)
-                       pMergeDoc = dynamic_cast<IMergeDoc *>(pFrame);
-               if (pMergeDoc != nullptr)
-                       PostMessage(WM_USER+1);
-       }
+       if (IMergeDoc *pMergeDoc = GetActiveIMergeDoc())
+               PostMessage(WM_USER+1);
 }
 
 BOOL CMainFrame::CreateToolbar()
@@ -2628,6 +2622,94 @@ void CMainFrame::OnUpdatePluginName(CCmdUI* pCmdUI)
        pCmdUI->SetText(_T(""));
 }
 
+/**
+ * @brief Move to next file
+ */
+void CMainFrame::OnNextFile()
+{
+       if (IMergeDoc* pMergeDoc = GetActiveIMergeDoc())
+               if (CDirDoc* pDirDoc = pMergeDoc->GetDirDoc())
+                       pDirDoc->MoveToNextFile(pMergeDoc);
+}
+
+/**
+ * @brief Called when Move to next file is updated
+ */
+void CMainFrame::OnUpdateNextFile(CCmdUI* pCmdUI)
+{
+       bool enabled = false;
+       if (IMergeDoc* pMergeDoc = GetActiveIMergeDoc())
+               if (CDirDoc* pDirDoc = pMergeDoc->GetDirDoc())
+                       enabled = !pDirDoc->IsLastFile();
+       pCmdUI->Enable(enabled);
+}
+
+/**
+ * @brief Move to previous file
+ */
+void CMainFrame::OnPrevFile()
+{
+       if (IMergeDoc* pMergeDoc = GetActiveIMergeDoc())
+               if (CDirDoc* pDirDoc = pMergeDoc->GetDirDoc())
+                       pDirDoc->MoveToPrevFile(pMergeDoc);
+}
+
+/**
+ * @brief Called when Move to previous file is updated
+ */
+void CMainFrame::OnUpdatePrevFile(CCmdUI* pCmdUI)
+{
+       bool enabled = false;
+       if (IMergeDoc* pMergeDoc = GetActiveIMergeDoc())
+               if (CDirDoc* pDirDoc = pMergeDoc->GetDirDoc())
+                       enabled = !pDirDoc->IsFirstFile();
+       pCmdUI->Enable(enabled);
+}
+
+/**
+ * @brief Move to first file
+ */
+void CMainFrame::OnFirstFile()
+{
+       if (IMergeDoc* pMergeDoc = GetActiveIMergeDoc())
+               if (CDirDoc* pDirDoc = pMergeDoc->GetDirDoc())
+                       pDirDoc->MoveToFirstFile(pMergeDoc);
+}
+
+/**
+ * @brief Called when Move to first file is updated
+ */
+void CMainFrame::OnUpdateFirstFile(CCmdUI* pCmdUI)
+{
+       bool enabled = false;
+       if (IMergeDoc* pMergeDoc = GetActiveIMergeDoc())
+               if (CDirDoc* pDirDoc = pMergeDoc->GetDirDoc())
+                       enabled = !pDirDoc->IsFirstFile();
+       pCmdUI->Enable(enabled);
+}
+
+/**
+ * @brief Move to last file
+ */
+void CMainFrame::OnLastFile()
+{
+       if (IMergeDoc* pMergeDoc = GetActiveIMergeDoc())
+               if (CDirDoc* pDirDoc = pMergeDoc->GetDirDoc())
+                       pDirDoc->MoveToLastFile(pMergeDoc);
+}
+
+/**
+ * @brief Called when Move to last file item is updated
+ */
+void CMainFrame::OnUpdateLastFile(CCmdUI* pCmdUI)
+{
+       bool enabled = false;
+       if (IMergeDoc* pMergeDoc = GetActiveIMergeDoc())
+               if (CDirDoc* pDirDoc = pMergeDoc->GetDirDoc())
+                       enabled = !pDirDoc->IsLastFile();
+       pCmdUI->Enable(enabled);
+}
+
 void CMainFrame::ReloadMenu()
 {
        // set the menu of the main frame window
@@ -2701,6 +2783,17 @@ void CMainFrame::ReloadMenu()
        }
 }
 
+IMergeDoc* CMainFrame::GetActiveIMergeDoc()
+{
+       CFrameWnd* pFrame = GetActiveFrame();
+       if (!pFrame)
+               return nullptr;
+       IMergeDoc* pMergeDoc = dynamic_cast<IMergeDoc*>(pFrame->GetActiveDocument());
+       if (!pMergeDoc)
+               pMergeDoc = dynamic_cast<IMergeDoc *>(pFrame);
+       return pMergeDoc;
+}
+
 void CMainFrame::UpdateDocTitle()
 {
        CDocManager* pDocManager = AfxGetApp()->m_pDocManager;
index 345db54..35bb6da 100644 (file)
@@ -44,6 +44,7 @@ typedef CTypedPtrList<CPtrList, CHexMergeDoc *> HexMergeDocList;
 
 class PackingInfo;
 class CLanguageSelect;
+struct IMergeDoc;
 
 CMainFrame * GetMainFrame(); // access to the singleton main frame object
 
@@ -123,6 +124,7 @@ public:
        void ReloadMenu();
        DropHandler *GetDropHandler() const { return m_pDropHandler; }
        const CTypedPtrArray<CPtrArray, CMDIChildWnd*>* GetChildArray() const { return &m_arrChild; }
+       IMergeDoc* GetActiveIMergeDoc();
 
 // Overrides
        virtual void GetMessageString(UINT nID, CString& rMessage) const;
@@ -299,14 +301,22 @@ protected:
        afx_msg void OnUpdateCompareMethod(CCmdUI* pCmdUI);
        afx_msg void OnMRUs(UINT nID);
        afx_msg void OnUpdateNoMRUs(CCmdUI* pCmdUI);
-    afx_msg void OnTimer(UINT_PTR nIDEvent);
+       afx_msg void OnFirstFile();
+       afx_msg void OnUpdateFirstFile(CCmdUI* pCmdUI);
+       afx_msg void OnPrevFile();
+       afx_msg void OnUpdatePrevFile(CCmdUI* pCmdUI);
+       afx_msg void OnNextFile();
+       afx_msg void OnUpdateNextFile(CCmdUI* pCmdUI);
+       afx_msg void OnLastFile();
+       afx_msg void OnUpdateLastFile(CCmdUI* pCmdUI);
+       afx_msg void OnTimer(UINT_PTR nIDEvent);
        afx_msg void OnDestroy();
        afx_msg void OnAccelQuit();
-       //}}AFX_MSG
        afx_msg LRESULT OnChildFrameAdded(WPARAM wParam, LPARAM lParam);
        afx_msg LRESULT OnChildFrameRemoved(WPARAM wParam, LPARAM lParam);
        afx_msg LRESULT OnChildFrameActivate(WPARAM wParam, LPARAM lParam);
        afx_msg LRESULT OnChildFrameActivated(WPARAM wParam, LPARAM lParam);
+       //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
 
 private:
index cc24289..28b726d 100644 (file)
@@ -193,8 +193,8 @@ public:
        void RemoveMergeViews(int nGroup);
        void SetLocationView(CLocationView *pLocationView) { m_pLocationView = pLocationView; }
 
+       CDirDoc * GetDirDoc() const override { return m_pDirDoc; }
        void SetDirDoc(CDirDoc * pDirDoc) override;
-       CDirDoc * GetDirDoc() const { return m_pDirDoc; }
        void DirDocClosing(CDirDoc * pDirDoc) override;
        bool CloseNow() override;
        void SwapFiles(int nFromIndex, int nToIndex);
index ce8d873..8ea20d8 100644 (file)
@@ -240,14 +240,6 @@ BEGIN_MESSAGE_MAP(CMergeEditView, CCrystalEditViewEx)
        ON_COMMAND(ID_VIEW_ZOOMNORMAL, OnViewZoomNormal)
        ON_COMMAND(ID_WINDOW_SPLIT, OnWindowSplit)
        ON_UPDATE_COMMAND_UI(ID_WINDOW_SPLIT, OnUpdateWindowSplit)
-       ON_COMMAND(ID_FIRSTFILE, OnFirstFile)
-       ON_UPDATE_COMMAND_UI(ID_FIRSTFILE, OnUpdateFirstFile)
-       ON_COMMAND(ID_PREVFILE, OnPrevFile)
-       ON_UPDATE_COMMAND_UI(ID_PREVFILE, OnUpdatePrevFile)
-       ON_COMMAND(ID_NEXTFILE, OnNextFile)
-       ON_UPDATE_COMMAND_UI(ID_NEXTFILE, OnUpdateNextFile)
-       ON_COMMAND(ID_LASTFILE, OnLastFile)
-       ON_UPDATE_COMMAND_UI(ID_LASTFILE, OnUpdateLastFile)
        ON_NOTIFY(NM_DBLCLK, AFX_IDW_STATUS_BAR, OnStatusBarDblClick)
        //}}AFX_MSG_MAP
 END_MESSAGE_MAP()
@@ -2237,102 +2229,6 @@ void CMergeEditView::OnUpdateAllRight(CCmdUI* pCmdUI)
 }
 
 /**
- * @brief Move to next file
- */
-void CMergeEditView::OnNextFile()
-{
-       CMergeDoc* pd = GetDocument();
-       CDirDoc* pDirDoc = pd->GetDirDoc();
-       if (pDirDoc)
-       {
-               pDirDoc->MoveToNextFile(pd);
-       }
-}
-
-/**
- * @brief Called when Move to next file is updated
- */
-void CMergeEditView::OnUpdateNextFile(CCmdUI* pCmdUI)
-{
-       CMergeDoc* pd = GetDocument();
-       CDirDoc* pDirDoc = pd->GetDirDoc();
-       bool enabled = pDirDoc ? !pd->GetDirDoc()->IsLastFile() : false;
-       pCmdUI->Enable(enabled);
-}
-
-/**
- * @brief Move to previous file
- */
-void CMergeEditView::OnPrevFile()
-{
-       CMergeDoc* pd = GetDocument();
-       CDirDoc* pDirDoc = pd->GetDirDoc();
-       if (pDirDoc)
-       {
-               pDirDoc->MoveToPrevFile(pd);
-       }
-}
-
-/**
- * @brief Called when Move to previous file is updated
- */
-void CMergeEditView::OnUpdatePrevFile(CCmdUI* pCmdUI)
-{
-       CMergeDoc* pd = GetDocument();  
-       CDirDoc* pDirDoc = pd->GetDirDoc();
-       bool enabled = pDirDoc ? !pd->GetDirDoc()->IsFirstFile() : false;
-       pCmdUI->Enable(enabled);
-}
-
-/**
- * @brief Move to first file
- */
-void CMergeEditView::OnFirstFile()
-{
-       CMergeDoc* pd = GetDocument();
-       CDirDoc* pDirDoc = pd->GetDirDoc();
-       if (pDirDoc)
-       {
-               pDirDoc->MoveToFirstFile(pd);
-       }
-}
-
-/**
- * @brief Called when Move to first file is updated
- */
-void CMergeEditView::OnUpdateFirstFile(CCmdUI* pCmdUI)
-{
-       CMergeDoc* pd = GetDocument();
-       CDirDoc* pDirDoc = pd->GetDirDoc();
-       bool enabled = pDirDoc ? !pDirDoc->IsFirstFile() : false;
-       pCmdUI->Enable(enabled);
-}
-
-/**
- * @brief Move to last file
- */
-void CMergeEditView::OnLastFile()
-{
-       CMergeDoc* pd = GetDocument();
-       CDirDoc* pDirDoc = pd->GetDirDoc();
-       if (pDirDoc)
-       {
-               pDirDoc->MoveToLastFile(pd);
-       }
-}
-
-/**
- * @brief Called when Move to last file item is updated
- */
-void CMergeEditView::OnUpdateLastFile(CCmdUI* pCmdUI)
-{
-       CMergeDoc* pd = GetDocument();
-       CDirDoc* pDirDoc = pd->GetDirDoc();
-       bool enabled = pDirDoc ? !pd->GetDirDoc()->IsLastFile() : false;
-       pCmdUI->Enable(enabled);
-}
-
-/**
  * @brief Do Auto merge
  */
 void CMergeEditView::OnAutoMerge()
index d567373..52f62f6 100644 (file)
@@ -361,14 +361,6 @@ protected:
        afx_msg void OnWindowSplit();
        afx_msg void OnUpdateWindowSplit(CCmdUI* pCmdUI);
        afx_msg void OnStatusBarDblClick(NMHDR* pNMHDR, LRESULT* pResult);
-       afx_msg void OnFirstFile();
-       afx_msg void OnUpdateFirstFile(CCmdUI* pCmdUI);
-       afx_msg void OnPrevFile();
-       afx_msg void OnUpdatePrevFile(CCmdUI* pCmdUI);
-       afx_msg void OnNextFile();
-       afx_msg void OnUpdateNextFile(CCmdUI* pCmdUI);
-       afx_msg void OnLastFile();
-       afx_msg void OnUpdateLastFile(CCmdUI* pCmdUI);
 
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()