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 void ClickRevButton(CMenuButton *button,GitRev *rev, CEdit *edit);
\r
106 void EnableInputControl(bool b=true);
\r
108 int FillRevFromString(GitRev *rev, CString str)
\r
111 if(gitrev.GetCommit(str))
\r
114 msg.Format(_T("Reference %s is wrong"),str);
\r
115 CMessageBox::Show(NULL,msg,_T("TortoiseGit"),MB_OK|MB_ICONERROR);
\r
123 static UINT DiffThreadEntry(LPVOID pVoid);
\r
125 static UINT ExportThreadEntry(LPVOID pVoid);
\r
126 UINT ExportThread();
\r
128 virtual BOOL Cancel() {return m_bCancelled;}
\r
130 CToolTips m_tooltips;
\r
132 CMenuButton m_cRev1Btn;
\r
133 CMenuButton m_cRev2Btn;
\r
134 CFilterEdit m_cFilter;
\r
136 CXPImageButton m_SwitchButton;
\r
137 HICON m_hSwitchIcon;
\r
139 CHintListCtrl m_cFileList;
\r
141 // CBlame m_blamer;
\r
142 CTGitPathList m_arFileList;
\r
143 std::vector<CTGitPath*> m_arFilteredList;
\r
144 CArray<CTGitPath*, CTGitPath*> m_arSelectedFileList;
\r
146 CString m_strExportDir;
\r
147 CProgressDlg * m_pProgDlg;
\r
157 bool m_bIgnoreancestry;
\r
159 volatile LONG m_bThreadRunning;
\r
164 // static bool SortCompare(const FileDiff& Data1, const FileDiff& Data2);
\r
166 static BOOL m_bAscending;
\r
167 static int m_nSortedColumn;
\r
169 CEdit m_ctrRev1Edit;
\r
170 CEdit m_ctrRev2Edit;
\r
172 CString m_FileListText;
\r
178 afx_msg void OnEnChangeRev1edit();
\r
179 afx_msg void OnEnChangeRev2edit();
\r