1 /////////////////////////////////////////////////////////////////////////////
2 // WinMerge: an interactive diff/merge utility
3 // Copyright (C) 1997 Dean P. Grimm
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.
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.
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.
19 /////////////////////////////////////////////////////////////////////////////
23 * @brief Declaration file for CMainFrame
30 #include "MDITabBar.h"
31 #include "PathContext.h"
42 class LineFiltersList;
48 typedef std::shared_ptr<TempFile> TempFilePtr;
50 // typed lists (homogenous pointer lists)
51 typedef CTypedPtrList<CPtrList, COpenDoc *> OpenDocList;
52 typedef CTypedPtrList<CPtrList, CMergeDoc *> MergeDocList;
53 typedef CTypedPtrList<CPtrList, CDirDoc *> DirDocList;
54 typedef CTypedPtrList<CPtrList, CHexMergeDoc *> HexMergeDocList;
57 class CLanguageSelect;
60 * @brief Frame class containing save-routines etc
62 class CMainFrame : public CMDIFrameWnd
64 friend CLanguageSelect;
65 DECLARE_DYNAMIC(CMainFrame)
68 * @brief Frame/View/Document types.
72 FRAME_FOLDER, /**< Folder compare frame. */
73 FRAME_FILE, /**< File compare frame. */
74 FRAME_HEXFILE, /**< Hex file compare frame. */
75 FRAME_IMGFILE, /**< Image file compare frame. */
76 FRAME_OTHER, /**< No frame? */
83 BOOL m_bShowErrors; /**< Show folder compare error items? */
84 LOGFONT m_lfDiff; /**< MergeView user-selected font */
85 LOGFONT m_lfDir; /**< DirView user-selected font */
86 static const TCHAR szClassName[];
89 HMENU NewDirViewMenu();
90 HMENU NewMergeViewMenu();
91 HMENU NewHexMergeViewMenu();
92 HMENU NewImgMergeViewMenu();
93 HMENU NewOpenViewMenu();
94 HMENU NewDefaultMenu(int ID = 0);
95 HMENU GetScriptsSubmenu(HMENU mainMenu);
96 HMENU GetPrediffersSubmenu(HMENU mainMenu);
97 void UpdatePrediffersMenu();
99 BOOL DoFileOpen(const PathContext *pFiles = NULL,
100 const DWORD dwFlags[] = NULL, const String strDesc[] = NULL, const String& sReportFile = _T(""), bool bRecurse = false, CDirDoc *pDirDoc = NULL, String prediffer = _T(""), const PackingInfo * infoUnpacker = NULL);
101 bool ShowAutoMergeDoc(CDirDoc * pDirDoc, int nFiles, const FileLocation fileloc[],
102 const DWORD dwFlags[], const String strDesc[], const String& sReportFile = _T(""), const PackingInfo * infoUnpacker = NULL);
103 bool ShowMergeDoc(CDirDoc * pDirDoc, int nFiles, const FileLocation fileloc[],
104 const DWORD dwFlags[], const String strDesc[], const String& sReportFile = _T(""), const PackingInfo * infoUnpacker = NULL);
105 bool ShowHexMergeDoc(CDirDoc * pDirDoc, int nFiles, const FileLocation fileloc[],
106 const DWORD dwFlags[], const String strDesc[], const String& sReportFile = _T(""), const PackingInfo * infoUnpacker = NULL);
107 bool ShowImgMergeDoc(CDirDoc * pDirDoc, int nFiles, const FileLocation fileloc[],
108 const DWORD dwFlags[], const String strDesc[], const String& sReportFile = _T(""), const PackingInfo * infoUnpacker = NULL);
110 void UpdateResources();
111 void ClearStatusbarItemCount();
112 void ApplyDiffOptions();
114 void StartFlashing();
115 bool AskCloseConfirmation();
116 BOOL DoOpenConflict(const String& conflictFile, bool checked = false);
117 FRAMETYPE GetFrameType(const CFrameWnd * pFrame) const;
118 void UpdateDocTitle();
120 DropHandler *GetDropHandler() const { return m_pDropHandler; }
123 virtual void GetMessageString(UINT nID, CString& rMessage) const;
124 // ClassWizard generated virtual function overrides
125 //{{AFX_VIRTUAL(CMainFrame)
127 virtual void ActivateFrame(int nCmdShow = -1);
128 virtual BOOL PreTranslateMessage(MSG* pMsg);
129 virtual void OnUpdateFrameTitle(BOOL bAddToTitle);
130 virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
133 // Implementation methods
135 virtual ~CMainFrame();
138 // Public implementation data
140 BOOL m_bFirstTime; /**< If first time frame activated, get pos from reg */
142 // Implementation data
146 // control bar embedded members
147 CStatusBar m_wndStatusBar;
149 CToolBar m_wndToolBar;
150 CMDITabBar m_wndTabBar;
152 /** @brief Toolbar image table indexes. */
155 TOOLBAR_IMAGES_ENABLED,
156 TOOLBAR_IMAGES_DISABLED,
160 CImageList m_ToolbarImages[TOOLBAR_IMAGES_COUNT]; /**< Images for toolbar */
170 MENU_COUNT, // Add new items before this item
173 * Menu frames - for which frame(s) the menu is.
177 MENU_MAINFRM = 0x000001,
178 MENU_FILECMP = 0x000002,
179 MENU_FOLDERCMP = 0x000004,
180 MENU_ALL = MENU_MAINFRM | MENU_FILECMP | MENU_FOLDERCMP
184 * A structure attaching a menu item, icon and menu types to apply to.
188 int menuitemID; /**< Menu item's ID. */
189 int iconResID; /**< Icon's resource ID. */
190 int menusToApply; /**< For which menus to apply. */
193 static const MENUITEM_ICON m_MenuIcons[];
195 std::unique_ptr<BCMenu> m_pMenus[MENU_COUNT]; /**< Menus for different views */
196 std::vector<TempFilePtr> m_tempFiles; /**< List of possibly needed temp files. */
197 DropHandler *m_pDropHandler;
199 // Generated message map functions
201 //{{AFX_MSG(CMainFrame)
202 afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
203 afx_msg LRESULT OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu) ;
204 afx_msg void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu);
205 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
206 afx_msg void OnFileOpen();
207 afx_msg void OnHelpGnulicense();
208 afx_msg void OnOptions();
209 afx_msg void OnViewSelectfont();
210 afx_msg void OnUpdateViewSelectfont(CCmdUI* pCmdUI);
211 afx_msg void OnViewUsedefaultfont();
212 afx_msg void OnUpdateViewUsedefaultfont(CCmdUI* pCmdUI);
213 afx_msg void OnHelpContents();
214 afx_msg void OnUpdateHelpContents(CCmdUI* pCmdUI);
215 afx_msg void OnClose();
216 afx_msg void OnToolsGeneratePatch();
217 afx_msg void OnDropFiles(const std::vector<String>& files);
218 afx_msg void OnUpdatePluginUnpackMode(CCmdUI* pCmdUI);
219 afx_msg void OnPluginUnpackMode(UINT nID);
220 afx_msg void OnUpdatePluginPrediffMode(CCmdUI* pCmdUI);
221 afx_msg void OnPluginPrediffMode(UINT nID);
222 afx_msg void OnUpdateReloadPlugins(CCmdUI* pCmdUI);
223 afx_msg void OnReloadPlugins();
224 afx_msg void OnSaveConfigData();
225 afx_msg void OnFileNew();
226 afx_msg void OnFileNew3();
227 afx_msg void OnToolsFilters();
228 afx_msg void OnViewStatusBar();
229 afx_msg void OnUpdateViewTabBar(CCmdUI* pCmdUI);
230 afx_msg void OnViewTabBar();
231 afx_msg void OnUpdateResizePanes(CCmdUI* pCmdUI);
232 afx_msg void OnResizePanes();
233 afx_msg void OnFileOpenproject();
234 afx_msg LRESULT OnCopyData(WPARAM wParam, LPARAM lParam);
235 afx_msg LRESULT OnUser1(WPARAM wParam, LPARAM lParam);
236 afx_msg void OnWindowCloseAll();
237 afx_msg void OnUpdateWindowCloseAll(CCmdUI* pCmdUI);
238 afx_msg void OnSaveProject();
239 #if _MFC_VER > 0x0600
240 afx_msg void OnActivateApp(BOOL bActive, DWORD dwThreadID);
242 afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);
244 afx_msg void OnToolbarSize(UINT id);
245 afx_msg void OnUpdateToolbarSize(CCmdUI* pCmdUI);
246 afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
247 afx_msg void OnHelpCheckForUpdates();
248 afx_msg void OnUpdateHelpCheckForUpdates(CCmdUI* pCmdUI);
249 afx_msg void OnFileOpenConflict();
250 afx_msg void OnPluginsList();
251 afx_msg void OnUpdatePluginName(CCmdUI* pCmdUI);
252 afx_msg void OnDiffOptionsDropDown(NMHDR* pNMHDR, LRESULT* pResult);
253 afx_msg void OnDiffWhitespace(UINT nID);
254 afx_msg void OnUpdateDiffWhitespace(CCmdUI* pCmdUI);
255 afx_msg void OnDiffCaseSensitive();
256 afx_msg void OnUpdateDiffCaseSensitive(CCmdUI* pCmdUI);
257 afx_msg void OnDiffIgnoreEOL();
258 afx_msg void OnUpdateDiffIgnoreEOL(CCmdUI* pCmdUI);
259 afx_msg void OnIncludeSubfolders();
260 afx_msg void OnUpdateIncludeSubfolders(CCmdUI* pCmdUI);
261 afx_msg void OnCompareMethod(UINT nID);
262 afx_msg void OnUpdateCompareMethod(CCmdUI* pCmdUI);
263 afx_msg void OnMRUs(UINT nID);
264 afx_msg void OnUpdateNoMRUs(CCmdUI* pCmdUI);
265 afx_msg void OnDestroy();
267 DECLARE_MESSAGE_MAP()
270 void addToMru(LPCTSTR szItem, LPCTSTR szRegSubKey, UINT nMaxItems = 20);
271 void FileNew(int nPanes);
272 OpenDocList &GetAllOpenDocs();
273 MergeDocList &GetAllMergeDocs();
274 DirDocList &GetAllDirDocs();
275 HexMergeDocList &GetAllHexMergeDocs();
276 void UpdateFont(FRAMETYPE frame);
277 BOOL CreateToolbar();
278 CMergeEditView * GetActiveMergeEditView();
279 void LoadToolbarImages();
280 HMENU NewMenu( int view, int ID );
283 CMainFrame * GetMainFrame(); // access to the singleton main frame object
285 /////////////////////////////////////////////////////////////////////////////
287 //{{AFX_INSERT_LOCATION}}
288 // Microsoft Developer Studio will insert additional declarations immediately before the previous line.