1 // TortoiseGit - a Windows shell extension for easy version control
\r
3 // Copyright (C) 2003-2008 - TortoiseGit
\r
5 // This program is free software; you can redistribute it and/or
\r
6 // modify it under the terms of the GNU General Public License
\r
7 // as published by the Free Software Foundation; either version 2
\r
8 // of the License, or (at your option) any later version.
\r
10 // This program is distributed in the hope that it will be useful,
\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 // GNU General Public License for more details.
\r
15 // You should have received a copy of the GNU General Public License
\r
16 // along with this program; if not, write to the Free Software Foundation,
\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
\r
21 #include "StandAloneDlg.h"
\r
23 #include "TGitPath.h"
\r
24 //#include "Blame.h"
\r
26 #include "HintListCtrl.h"
\r
28 #include "XPImageButton.h"
\r
29 #include "FilterEdit.h"
\r
30 #include "Tooltip.h"
\r
31 #include "ProgressDlg.h"
\r
32 #include "MenuButton.h"
\r
34 #define IDT_FILTER 101
\r
37 * \ingroup TortoiseProc
\r
38 * Dialog which fetches and shows the difference between two urls in the
\r
39 * repository. It shows a list of files/folders which were changed in those
\r
42 class CFileDiffDlg : public CResizableStandAloneDialog
\r
44 DECLARE_DYNAMIC(CFileDiffDlg)
\r
50 // svn_client_diff_summarize_kind_t kind;
\r
52 // svn_node_kind_t node;
\r
56 CFileDiffDlg(CWnd* pParent = NULL);
\r
57 virtual ~CFileDiffDlg();
\r
59 // void SetDiff(const CTGitPath& path1, GitRev rev1, const CTGitPath& path2, GitRev rev2, svn_depth_t depth, bool ignoreancestry);
\r
60 // void SetDiff(const CTGitPath& path, GitRev peg, GitRev rev1, GitRev rev2, svn_depth_t depth, bool ignoreancestry);
\r
62 void SetDiff(CTGitPath * path, GitRev rev1,GitRev rev2);
\r
63 void SetDiff(CTGitPath * path, GitRev rev1);
\r
64 void SetDiff(CTGitPath * path, CString &hash1, CString &hash2);
\r
66 void DoBlame(bool blame = true) {m_bBlame = blame;}
\r
68 enum { IDD = IDD_DIFFFILES };
\r
71 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
\r
72 virtual void OnCancel();
\r
73 virtual BOOL OnInitDialog();
\r
74 virtual BOOL PreTranslateMessage(MSG* pMsg);
\r
75 afx_msg void OnNMDblclkFilelist(NMHDR *pNMHDR, LRESULT *pResult);
\r
76 afx_msg void OnLvnGetInfoTipFilelist(NMHDR *pNMHDR, LRESULT *pResult);
\r
77 afx_msg void OnNMCustomdrawFilelist(NMHDR *pNMHDR, LRESULT *pResult);
\r
78 afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/);
\r
79 afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
\r
80 afx_msg void OnEnSetfocusSecondurl();
\r
81 afx_msg void OnEnSetfocusFirsturl();
\r
82 afx_msg void OnBnClickedSwitchleftright();
\r
83 afx_msg void OnHdnItemclickFilelist(NMHDR *pNMHDR, LRESULT *pResult);
\r
84 afx_msg void OnBnClickedRev1btn();
\r
85 afx_msg void OnBnClickedRev2btn();
\r
86 afx_msg LRESULT OnClickedCancelFilter(WPARAM wParam, LPARAM lParam);
\r
87 afx_msg void OnEnChangeFilter();
\r
88 afx_msg void OnTimer(UINT_PTR nIDEvent);
\r
90 DECLARE_MESSAGE_MAP()
\r
92 // virtual svn_error_t* DiffSummarizeCallback(const CTGitPath& path,
\r
93 // svn_client_diff_summarize_kind_t kind,
\r
94 // bool propchanged,
\r
95 // svn_node_kind_t node);
\r
97 int AddEntry(const CTGitPath * fd);
\r
98 void DoDiff(int selIndex, bool blame);
\r
99 void DiffProps(int selIndex);
\r
100 void SetURLLabels();
\r
101 void Filter(CString sFilterText);
\r
102 void CopySelectionToClipboard();
\r
104 static UINT DiffThreadEntry(LPVOID pVoid);
\r
106 static UINT ExportThreadEntry(LPVOID pVoid);
\r
107 UINT ExportThread();
\r
109 virtual BOOL Cancel() {return m_bCancelled;}
\r
111 CToolTips m_tooltips;
\r
113 CMenuButton m_cRev1Btn;
\r
114 CMenuButton m_cRev2Btn;
\r
115 CFilterEdit m_cFilter;
\r
117 CXPImageButton m_SwitchButton;
\r
118 HICON m_hSwitchIcon;
\r
120 CHintListCtrl m_cFileList;
\r
122 // CBlame m_blamer;
\r
123 CTGitPathList m_arFileList;
\r
124 std::vector<CTGitPath*> m_arFilteredList;
\r
125 CArray<CTGitPath*, CTGitPath*> m_arSelectedFileList;
\r
127 CString m_strExportDir;
\r
128 CProgressDlg * m_pProgDlg;
\r
138 bool m_bIgnoreancestry;
\r
140 volatile LONG m_bThreadRunning;
\r
145 // static bool SortCompare(const FileDiff& Data1, const FileDiff& Data2);
\r
147 static BOOL m_bAscending;
\r
148 static int m_nSortedColumn;
\r
150 CEdit m_ctrRev1Edit;
\r
151 CEdit m_ctrRev2Edit;
\r
153 CString m_FileListText;
\r
159 afx_msg void OnEnChangeRev1edit();
\r
160 afx_msg void OnEnChangeRev2edit();
\r