OSDN Git Service

autoit.cpp - Macros >> User 1 ..... Variable >> User 2 (#749) (2)
[winmerge-jp/winmerge-jp.git] / Src / DirView.h
index 682d325..3b91abf 100644 (file)
@@ -1,21 +1,7 @@
 /////////////////////////////////////////////////////////////////////////////
 //    WinMerge:  an interactive diff/merge utility
 //    Copyright (C) 1997  Dean P. Grimm
-//
-//    This program is free software; you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation; either version 2 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program; if not, write to the Free Software
-//    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-//
+//    SPDX-License-Identifier: GPL-2.0-or-later
 /////////////////////////////////////////////////////////////////////////////
 /**
  *  @file DirView.h
@@ -28,7 +14,8 @@
 // CDirView view
 #include <afxcview.h>
 #include <memory>
-#include "OptionsDiffColors.h"
+#include <optional>
+#include "OptionsDirColors.h"
 #include "SortHeaderCtrl.h"
 #include "UnicodeString.h"
 #include "DirItemIterator.h"
@@ -59,7 +46,7 @@ struct IListCtrl;
 const uintptr_t SPECIAL_ITEM_POS = (uintptr_t)(reinterpret_cast<DIFFITEM *>( - 1L));
 
 /** Default column width in directory compare */
-const UINT DefColumnWidth = 150;
+const UINT DefColumnWidth = 111;
 
 /**
  * @brief Directory compare results view.
@@ -100,7 +87,7 @@ public:
        DIFFITEM *GetItemKey(int idx) const;
        int GetItemIndex(DIFFITEM *key);
        // for populating list
-       void DeleteItem(int sel);
+       void DeleteItem(int sel, bool removeDIFFITEM = false);
        void DeleteAllDisplayItems();
        void SetFont(const LOGFONT & lf);
 
@@ -117,6 +104,13 @@ public:
        void MoveToPrevDiff();
        void OpenNextDiff();
        void OpenPrevDiff();
+       void OpenFirstFile();
+       void OpenLastFile();
+       void OpenNextFile();
+       void OpenPrevFile();
+       bool IsFirstFile();
+       bool IsLastFile();
+
        void SetActivePane(int pane);
 
 // Implementation types
@@ -136,7 +130,7 @@ private:
        void DoOpenWith(SIDE_TYPE stype);
        void DoOpenWithEditor(SIDE_TYPE stype);
        void DoOpenParentFolder(SIDE_TYPE stype);
-       void DoUpdateOpen(SELECTIONTYPE selectionType, CCmdUI* pCmdUI);
+       void DoUpdateOpen(SELECTIONTYPE selectionType, CCmdUI* pCmdUI, bool openableForDir = true);
        void ConfirmAndPerformActions(FileActionScript & actions);
        void PerformActionList(FileActionScript & actions);
        void UpdateAfterFileScript(FileActionScript & actionList);
@@ -165,7 +159,7 @@ public:
        void UpdateDiffItemStatus(UINT nIdx);
 private:
        void InitiateSort();
-       void NameColumn(const char* idname, int subitem);
+       void NameColumn(const DirColInfo *col, int subitem);
        int AddNewItem(int i, DIFFITEM *diffpos, int iImage, int iIndent);
 // End DirViewCols.cpp
 
@@ -176,6 +170,7 @@ private:
        //{{AFX_VIRTUAL(CDirView)
 public:
        virtual void OnInitialUpdate();
+       virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
 protected:
        virtual BOOL PreTranslateMessage(MSG* pMsg);
        virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
@@ -190,7 +185,7 @@ protected:
        int GetFirstDifferentItem();
        int GetLastDifferentItem();
        int AddSpecialItems();
-       void GetCurrentColRegKeys(std::vector<String>& colKeys);
+       std::vector<String>     GetCurrentColRegKeys();
        void OpenSpecialItems(DIFFITEM *pos1, DIFFITEM *pos2, DIFFITEM *pos3);
 
 // Implementation data
@@ -198,9 +193,9 @@ protected:
        CSortHeaderCtrl m_ctlSortHeader;
        CImageList m_imageList;
        CImageList m_imageState;
-       CListCtrl *m_pList;
+       CListCtrlm_pList;
        std::unique_ptr<IListCtrl> m_pIList;
-       bool m_bEscCloses; /**< Cached value for option for ESC closing window */
+       int m_nEscCloses; /**< Cached value for option for ESC closing window */
        bool m_bExpandSubdirs;
        CFont m_font; /**< User-selected font */
        UINT m_nHiddenItems; /**< Count of items we have hidden */
@@ -211,11 +206,10 @@ protected:
        bool m_bUserCancelEdit; /**< `true` if the user cancels rename */
        String m_lastCopyFolder; /**< Last Copy To -target folder. */
 
-       int m_firstDiffItem;
-       int m_lastDiffItem;
-       bool m_bNeedSearchFirstDiffItem;
-       bool m_bNeedSearchLastDiffItem;
-       COLORSETTINGS m_cachedColors; /**< Cached color settings */
+       std::optional<int> m_firstDiffItem;
+       std::optional<int> m_lastDiffItem;
+       DIRCOLORSETTINGS m_cachedColors; /**< Cached color settings */
+       bool m_bUseColors;
 
        std::unique_ptr<CShellContextMenu> m_pShellContextMenuLeft; /**< Shell context menu for group of left files */
        std::unique_ptr<CShellContextMenu> m_pShellContextMenuMiddle; /**< Shell context menu for group of middle files */
@@ -264,6 +258,9 @@ protected:
        afx_msg void OnUpdateCtxtDirCopyTo(CCmdUI* pCmdUI);
        afx_msg void OnUpdateCtxtDirCopyBothTo(CCmdUI* pCmdUI);
        afx_msg void OnUpdateCtxtDirCopyBothDiffsOnlyTo(CCmdUI* pCmdUI);
+       template<SIDE_TYPE stype>
+       afx_msg void OnUpdateCtxtDirCopy2(CCmdUI* pCmdUI);
+       afx_msg void OnUpdateCtxtDirCopyBoth2(CCmdUI* pCmdUI);
        afx_msg void OnDestroy();
        afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
        afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult);
@@ -294,6 +291,7 @@ protected:
        afx_msg void OnCtxtOpenWithUnpacker();
        afx_msg void OnUpdateCtxtOpenWithUnpacker(CCmdUI* pCmdUI);
        afx_msg void OnToolsGenerateReport();
+       afx_msg LRESULT OnGenerateFileCmpReport(WPARAM wParam, LPARAM lParam);
        afx_msg void OnToolsGeneratePatch();
        template<int flag>
        afx_msg void OnCtxtDirZip();
@@ -332,7 +330,10 @@ protected:
        afx_msg void OnUpdateViewExpandAllSubdirs(CCmdUI* pCmdUI);
        afx_msg void OnViewCollapseAllSubdirs();
        afx_msg void OnUpdateViewCollapseAllSubdirs(CCmdUI* pCmdUI);
+       template <int pane1, int pane2>
        afx_msg void OnViewSwapPanes();
+       template <int pane1, int pane2>
+       afx_msg void OnUpdateViewSwapPanes(CCmdUI* pCmdUI);
        afx_msg void OnOptionsShowDifferent();
        afx_msg void OnOptionsShowIdentical();
        afx_msg void OnOptionsShowUniqueLeft();
@@ -343,6 +344,9 @@ protected:
        afx_msg void OnOptionsShowDifferentLeftOnly();
        afx_msg void OnOptionsShowDifferentMiddleOnly();
        afx_msg void OnOptionsShowDifferentRightOnly();
+       afx_msg void OnOptionsShowMissingLeftOnly();
+       afx_msg void OnOptionsShowMissingMiddleOnly();
+       afx_msg void OnOptionsShowMissingRightOnly();
        afx_msg void OnUpdateOptionsShowdifferent(CCmdUI* pCmdUI);
        afx_msg void OnUpdateOptionsShowidentical(CCmdUI* pCmdUI);
        afx_msg void OnUpdateOptionsShowuniqueleft(CCmdUI* pCmdUI);
@@ -353,9 +357,13 @@ protected:
        afx_msg void OnUpdateOptionsShowDifferentLeftOnly(CCmdUI* pCmdUI);
        afx_msg void OnUpdateOptionsShowDifferentMiddleOnly(CCmdUI* pCmdUI);
        afx_msg void OnUpdateOptionsShowDifferentRightOnly(CCmdUI* pCmdUI);
+       afx_msg void OnUpdateOptionsShowMissingLeftOnly(CCmdUI* pCmdUI);
+       afx_msg void OnUpdateOptionsShowMissingMiddleOnly(CCmdUI* pCmdUI);
+       afx_msg void OnUpdateOptionsShowMissingRightOnly(CCmdUI* pCmdUI);
        afx_msg void OnMergeCompare();
        template<SELECTIONTYPE seltype>
        afx_msg void OnMergeCompare2();
+       afx_msg void OnMergeCompareNonHorizontally();
        afx_msg void OnMergeCompareXML();
        afx_msg void OnMergeCompareAs(UINT nID);
        afx_msg void OnUpdateMergeCompare(CCmdUI *pCmdUI);
@@ -384,7 +392,8 @@ protected:
        bool OnHeaderEndDrag(LPNMHEADER hdr, LRESULT* pResult);
 
 private:
-       void OpenSelection(SELECTIONTYPE selectionType = SELECTIONTYPE_NORMAL, PackingInfo * infoUnpacker = nullptr);
+       void Open(const PathContext& paths, DWORD dwFlags[3], FileTextEncoding encoding[3], PackingInfo * infoUnpacker = nullptr);
+       void OpenSelection(SELECTIONTYPE selectionType = SELECTIONTYPE_NORMAL, PackingInfo * infoUnpacker = nullptr, bool openableForDir = true);
        void OpenSelectionAs(UINT id);
        bool GetSelectedItems(int * sel1, int * sel2, int * sel3);
        void OpenParentDirectory();
@@ -406,6 +415,8 @@ private:
        void CollapseSubdir(int sel);
        void ExpandSubdir(int sel, bool bRecursive = false);
        void GetColors(int nRow, int nCol, COLORREF& clrBk, COLORREF& clrText) const;
+       int GetDefColumnWidth() const { return MulDiv(DefColumnWidth, CClientDC(const_cast<CDirView *>(this)).GetDeviceCaps(LOGPIXELSX), 72); };
+
 public:
        DirItemIterator Begin() const { return DirItemIterator(m_pIList.get()); }
        DirItemIterator End() const { return DirItemIterator(); }