OSDN Git Service

Fix issue #211: [Image compare] Zoom-in focuses on top-left corner instead of cursor...
[winmerge-jp/winmerge-jp.git] / Src / ImgMergeFrm.h
1 /////////////////////////////////////////////////////////////////////////////
2 //    WinMerge:  an interactive diff/merge utility
3 //    Copyright (C) 1997  Dean P. Grimm
4 //
5 //    This program is free software; you can redistribute it and/or modify
6 //    it under the terms of the GNU General Public License as published by
7 //    the Free Software Foundation; either version 2 of the License, or
8 //    (at your option) any later version.
9 //
10 //    This program is distributed in the hope that it will be useful,
11 //    but WITHOUT ANY WARRANTY; without even the implied warranty of
12 //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 //    GNU General Public License for more details.
14 //
15 //    You should have received a copy of the GNU General Public License
16 //    along with this program; if not, write to the Free Software
17 //    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 //
19 /////////////////////////////////////////////////////////////////////////////
20 /** 
21  * @file  ImgMergeFrm.h
22  *
23  * @brief interface of the CImgMergeFrame class
24  *
25  */
26 #pragma once
27
28 #include "EditorFilepathBar.h"
29 #include "PathContext.h"
30 #include "DiffFileInfo.h"
31 #include "IMergeDoc.h"
32 #include "WinIMergeLib.h"
33 #include "LocationBar.h"
34 #include "FileLocation.h"
35 #include "MergeFrameCommon.h"
36
37 class CDirDoc;
38
39 /** 
40  * @brief Frame class for file compare, handles panes, statusbar etc.
41  */
42 class CImgMergeFrame : public CMergeFrameCommon,public IMergeDoc
43 {
44         private:
45         enum BUFFERTYPE
46         {
47                 BUFFER_NORMAL = 0, /**< Normal, file loaded from disk */
48                 BUFFER_NORMAL_NAMED, /**< Normal, description given */
49                 BUFFER_UNNAMED, /**< Empty, created buffer */
50                 BUFFER_UNNAMED_SAVED, /**< Empty buffer saved with filename */
51         };
52
53         using CMDIChildWnd::Create;
54
55         DECLARE_DYNCREATE(CImgMergeFrame)
56 public:
57         CImgMergeFrame();
58
59
60 // Operations
61 public:
62         bool OpenDocs(int nFiles, const FileLocation fileloc[], const bool bRO[], const String strDesc[], CMDIFrameWnd *pParent);
63         void MoveOnLoad(int nPane = -1, int nLineIndex = -1);
64         void ChangeFile(int pane, const String& path);
65         void SetDirDoc(CDirDoc * pDirDoc) override;
66         void UpdateResources();
67         bool CloseNow() override;
68         void DirDocClosing(CDirDoc * pDirDoc) override { m_pDirDoc = nullptr; }
69         void UpdateLastCompareResult();
70         void UpdateAutoPaneResize();
71         void UpdateSplitter();
72         bool GenerateReport(const String& sFileName) const override;
73         void DoAutoMerge(int dstPane);
74         bool IsModified() const;
75         bool IsFileChangedOnDisk(int pane) const;
76         void CheckFileChanged(void) override;
77         String GetDescription(int pane) const { return m_strDesc[pane]; }
78         static bool IsLoadable();
79
80 // Attributes
81 protected:
82         CEditorFilePathBar m_wndFilePathBar;
83         CStatusBar m_wndStatusBar[3];
84 // Overrides
85 public:
86         // ClassWizard generated virtual function overrides
87         //{{AFX_VIRTUAL(CImgMergeFrame)
88         public:
89         virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
90         virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
91         virtual BOOL DestroyWindow();
92         virtual BOOL PreTranslateMessage(MSG *);
93         static CMenu menu;
94
95         protected:
96         //}}AFX_VIRTUAL
97
98 // Implementation
99 private:
100         bool EnsureValidDockState(CDockState& state);
101         void LoadOptions();
102         void SaveOptions();
103         void SavePosition();
104         virtual ~CImgMergeFrame();
105         void CreateImgWndStatusBar(CStatusBar &, CWnd *);
106 // Generated message map functions
107 private:
108         int UpdateDiffItem(CDirDoc * pDirDoc);
109         void UpdateHeaderSizes();
110         void UpdateHeaderPath(int pane);
111         void SetTitle(LPCTSTR lpszTitle);
112         bool DoFileSave(int pane);
113         bool DoFileSaveAs(int pane);
114         bool PromptAndSaveIfNeeded(bool bAllowCancel);
115         bool MergeModeKeyDown(MSG* pMsg);
116         static void OnChildPaneEvent(const IImgMergeWindow::Event& evt);
117         void OnDropFiles(int pane, const std::vector<String>& files);
118         CLocationBar m_wndLocationBar;
119         IImgMergeWindow *m_pImgMergeWindow;
120         IImgToolWindow *m_pImgToolWindow;
121         PathContext m_filePaths;
122         String m_strDesc[3];
123         BUFFERTYPE m_nBufferType[3];
124         DiffFileInfo m_fileInfo[3];
125         bool m_bRO[3];
126         bool m_bAutoMerged;
127         CDirDoc *m_pDirDoc;
128         int m_nActivePane;
129
130         //{{AFX_MSG(CImgMergeFrame)
131         afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
132         afx_msg void OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd);
133         afx_msg void OnClose();
134         afx_msg void OnFileSave();
135         afx_msg void OnUpdateFileSave(CCmdUI* pCmdUI);
136         afx_msg void OnFileSaveLeft();
137         afx_msg void OnFileSaveMiddle();
138         afx_msg void OnUpdateFileSaveMiddle(CCmdUI* pCmdUI);
139         afx_msg void OnFileSaveRight();
140         afx_msg void OnFileSaveAsLeft();
141         afx_msg void OnFileSaveAsMiddle();
142         afx_msg void OnUpdateFileSaveAsMiddle(CCmdUI* pCmdUI);
143         afx_msg void OnFileSaveAsRight();
144         afx_msg void OnLeftReadOnly();
145         afx_msg void OnUpdateLeftReadOnly(CCmdUI* pCmdUI);
146         afx_msg void OnMiddleReadOnly();
147         afx_msg void OnUpdateMiddleReadOnly(CCmdUI* pCmdUI);
148         afx_msg void OnRightReadOnly();
149         afx_msg void OnUpdateRightReadOnly(CCmdUI* pCmdUI);
150         afx_msg void OnFileReload();
151         afx_msg void OnFileClose();
152         afx_msg void OnFileRecompareAs(UINT nId);
153         afx_msg void OnUpdateFileRecompareAs(CCmdUI* pCmdUI);
154         afx_msg void OnWindowChangePane();
155         afx_msg void OnSize(UINT nType, int cx, int cy);
156         afx_msg void OnIdleUpdateCmdUI();
157         afx_msg void OnUpdateStatusNum(CCmdUI* pCmdUI);
158         afx_msg LRESULT OnStorePaneSizes(WPARAM wParam, LPARAM lParam);
159         afx_msg void OnEditUndo();
160         afx_msg void OnUpdateEditUndo(CCmdUI* pCmdUI);
161         afx_msg void OnEditRedo();
162         afx_msg void OnUpdateEditRedo(CCmdUI* pCmdUI);
163         afx_msg void OnViewZoomIn();
164         afx_msg void OnViewZoomOut();
165         afx_msg void OnViewZoomNormal();
166         afx_msg void OnViewSplitVertically();
167         afx_msg void OnUpdateViewSplitVertically(CCmdUI* pCmdUI);
168         afx_msg void OnFirstdiff();
169         afx_msg void OnUpdateFirstdiff(CCmdUI* pCmdUI);
170         afx_msg void OnLastdiff();
171         afx_msg void OnUpdateLastdiff(CCmdUI* pCmdUI);
172         afx_msg void OnNextdiff();
173         afx_msg void OnUpdateNextdiff(CCmdUI* pCmdUI);
174         afx_msg void OnPrevdiff();
175         afx_msg void OnUpdatePrevdiff(CCmdUI* pCmdUI);
176         afx_msg void OnNextConflict();
177         afx_msg void OnUpdateNextConflict(CCmdUI* pCmdUI);
178         afx_msg void OnPrevConflict();
179         afx_msg void OnUpdatePrevConflict(CCmdUI* pCmdUI);
180         afx_msg void OnX2Y(int srcPane, int dstPane);
181         afx_msg void OnUpdateX2Y(CCmdUI* pCmdUI, int srcPane, int dstPane);
182         afx_msg void OnL2r();
183         afx_msg void OnUpdateL2r(CCmdUI* pCmdUI);
184         afx_msg void OnR2l();
185         afx_msg void OnUpdateR2l(CCmdUI* pCmdUI);
186         afx_msg void OnCopyFromLeft();
187         afx_msg void OnUpdateCopyFromLeft(CCmdUI* pCmdUI);
188         afx_msg void OnCopyFromRight();
189         afx_msg void OnUpdateCopyFromRight(CCmdUI* pCmdUI);
190         afx_msg void OnAllLeft();
191         afx_msg void OnUpdateAllLeft(CCmdUI* pCmdUI);
192         afx_msg void OnAllRight();
193         afx_msg void OnUpdateAllRight(CCmdUI* pCmdUI);
194         afx_msg void OnAutoMerge();
195         afx_msg void OnUpdateAutoMerge(CCmdUI* pCmdUI);
196         afx_msg void OnImgViewDifferences();
197         afx_msg void OnUpdateImgViewDifferences(CCmdUI* pCmdUI);
198         afx_msg void OnImgZoom(UINT nId);
199         afx_msg void OnUpdateImgZoom(CCmdUI* pCmdUI);
200         afx_msg void OnImgOverlayMode(UINT nId);
201         afx_msg void OnUpdateImgOverlayMode(CCmdUI* pCmdUI);
202         afx_msg void OnImgDraggingMode(UINT nId);
203         afx_msg void OnUpdateImgDraggingMode(CCmdUI* pCmdUI);
204         afx_msg void OnImgDiffBlockSize(UINT nId);
205         afx_msg void OnUpdateImgDiffBlockSize(CCmdUI* pCmdUI);
206         afx_msg void OnImgThreshold(UINT nId);
207         afx_msg void OnUpdateImgThreshold(CCmdUI* pCmdUI);
208         afx_msg void OnImgInsertionDeletionDetectionMode(UINT nId);
209         afx_msg void OnUpdateImgInsertionDeletionDetectionMode(CCmdUI* pCmdUI);
210         afx_msg void OnImgPrevPage();
211         afx_msg void OnUpdateImgPrevPage(CCmdUI* pCmdUI);
212         afx_msg void OnImgNextPage();
213         afx_msg void OnUpdateImgNextPage(CCmdUI* pCmdUI);
214         afx_msg void OnImgCurPanePrevPage();
215         afx_msg void OnUpdateImgCurPanePrevPage(CCmdUI* pCmdUI);
216         afx_msg void OnImgCurPaneNextPage();
217         afx_msg void OnUpdateImgCurPaneNextPage(CCmdUI* pCmdUI);
218         afx_msg void OnImgUseBackColor();
219         afx_msg void OnUpdateImgUseBackColor(CCmdUI* pCmdUI);
220         afx_msg void OnToolsGenerateReport();
221         afx_msg void OnRefresh();
222         afx_msg void OnSetFocus(CWnd *pNewWnd);
223         //}}AFX_MSG
224         DECLARE_MESSAGE_MAP()
225 };