OSDN Git Service

Diff Dialog Okay
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / FileDiffDlg.h
1 // TortoiseGit - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2003-2008 - TortoiseGit\r
4 \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
9 \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
14 \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
18 //\r
19 #pragma once\r
20 #include "afxcmn.h"\r
21 #include "StandAloneDlg.h"\r
22 #include "Git.h"\r
23 #include "TGitPath.h"\r
24 //#include "Blame.h"\r
25 #include "Git.h"\r
26 #include "HintListCtrl.h"\r
27 #include "Colors.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
33 #include "ACEdit.h"\r
34 #define IDT_FILTER              101\r
35 #define IDT_INPUT               102\r
36 \r
37 /**\r
38  * \ingroup TortoiseProc\r
39  * Dialog which fetches and shows the difference between two urls in the\r
40  * repository. It shows a list of files/folders which were changed in those\r
41  * two revisions.\r
42  */\r
43 #define MSG_REF_LOADED  (WM_USER+120)\r
44 \r
45 class CFileDiffDlg : public CResizableStandAloneDialog\r
46 {\r
47         DECLARE_DYNAMIC(CFileDiffDlg)\r
48 public:\r
49 //      class FileDiff\r
50 //      {\r
51 //      public:\r
52 //              CTGitPath path;\r
53 //              svn_client_diff_summarize_kind_t kind; \r
54                 bool propchanged;\r
55 //              svn_node_kind_t node;\r
56 //      };\r
57 \r
58 public:\r
59         CFileDiffDlg(CWnd* pParent = NULL);\r
60         virtual ~CFileDiffDlg();\r
61 \r
62 //      void SetDiff(const CTGitPath& path1, GitRev rev1, const CTGitPath& path2, GitRev rev2, svn_depth_t depth, bool ignoreancestry);\r
63 //      void SetDiff(const CTGitPath& path, GitRev peg, GitRev rev1, GitRev rev2, svn_depth_t depth, bool ignoreancestry);\r
64 \r
65         void SetDiff(CTGitPath * path, GitRev rev1,GitRev rev2);\r
66         void SetDiff(CTGitPath * path, GitRev rev1);\r
67         void SetDiff(CTGitPath * path, CString &hash1, CString &hash2);\r
68 \r
69         void    DoBlame(bool blame = true) {m_bBlame = blame;}\r
70 \r
71         enum { IDD = IDD_DIFFFILES };\r
72 \r
73 protected:\r
74         virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\r
75         virtual void OnCancel();\r
76         virtual BOOL OnInitDialog();\r
77         virtual BOOL PreTranslateMessage(MSG* pMsg);\r
78         afx_msg LRESULT OnRefLoad(WPARAM wParam, LPARAM lParam);\r
79         afx_msg void OnNMDblclkFilelist(NMHDR *pNMHDR, LRESULT *pResult);\r
80         afx_msg void OnLvnGetInfoTipFilelist(NMHDR *pNMHDR, LRESULT *pResult);\r
81         afx_msg void OnNMCustomdrawFilelist(NMHDR *pNMHDR, LRESULT *pResult);\r
82         afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/);\r
83         afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);\r
84         afx_msg void OnEnSetfocusSecondurl();\r
85         afx_msg void OnEnSetfocusFirsturl();\r
86         afx_msg void OnBnClickedSwitchleftright();\r
87         afx_msg void OnHdnItemclickFilelist(NMHDR *pNMHDR, LRESULT *pResult);\r
88         afx_msg void OnBnClickedRev1btn();\r
89         afx_msg void OnBnClickedRev2btn();\r
90         afx_msg LRESULT OnClickedCancelFilter(WPARAM wParam, LPARAM lParam);\r
91         afx_msg LRESULT OnEnUpdate(WPARAM wParam, LPARAM lParam);\r
92         afx_msg void OnEnChangeFilter();\r
93         afx_msg void OnTimer(UINT_PTR nIDEvent);\r
94 \r
95         DECLARE_MESSAGE_MAP()\r
96 \r
97 //      virtual svn_error_t* DiffSummarizeCallback(const CTGitPath& path, \r
98 //                                                                                      svn_client_diff_summarize_kind_t kind, \r
99 //                                                                                      bool propchanged, \r
100 //                                                                                      svn_node_kind_t node);\r
101 \r
102         int                                     AddEntry(const CTGitPath * fd);\r
103         void                            DoDiff(int selIndex, bool blame);\r
104         void                            DiffProps(int selIndex);\r
105         void                            SetURLLabels(int mask=0x3);\r
106         void                            ClearURLabels(int mask);\r
107         void                            Filter(CString sFilterText);\r
108         void                            CopySelectionToClipboard();\r
109         \r
110         void                            ClickRevButton(CMenuButton *button,GitRev *rev, CACEdit *edit);\r
111 \r
112         void                            EnableInputControl(bool b=true);\r
113 \r
114         int                                     FillRevFromString(GitRev *rev, CString str)\r
115         {\r
116                 GitRev gitrev;\r
117                 if(gitrev.GetCommit(str))\r
118                 {\r
119                         CString msg;\r
120                         msg.Format(_T("Reference %s is wrong"),str);\r
121                         CMessageBox::Show(NULL,msg,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
122                         return -1;\r
123                 }\r
124                 *rev=gitrev;\r
125                 return 0;\r
126         }\r
127 \r
128 private:\r
129         static UINT                     DiffThreadEntry(LPVOID pVoid);\r
130         UINT                            DiffThread();\r
131         static UINT                     ExportThreadEntry(LPVOID pVoid);\r
132         UINT                            ExportThread();\r
133 \r
134         static UINT                     LoadRefThreadEntry(LPVOID pVoid)\r
135         {\r
136                 return ((CFileDiffDlg *)pVoid)->LoadRefThread();\r
137         };\r
138 \r
139         UINT                            LoadRefThread();\r
140 \r
141         STRING_VECTOR           m_Reflist;\r
142 \r
143         virtual BOOL            Cancel() {return m_bCancelled;}\r
144 \r
145         CToolTips                       m_tooltips;\r
146 \r
147         CMenuButton                     m_cRev1Btn;\r
148         CMenuButton                     m_cRev2Btn;\r
149         CFilterEdit                     m_cFilter;\r
150 \r
151         CXPImageButton          m_SwitchButton;\r
152         HICON                           m_hSwitchIcon;\r
153         CColors                         m_colors;\r
154         CHintListCtrl           m_cFileList;\r
155         bool                            m_bBlame;\r
156 //      CBlame                          m_blamer;\r
157         CTGitPathList           m_arFileList;\r
158         std::vector<CTGitPath*> m_arFilteredList;\r
159         CArray<CTGitPath*, CTGitPath*> m_arSelectedFileList;\r
160 \r
161         CString                         m_strExportDir;\r
162         CProgressDlg *          m_pProgDlg;\r
163 \r
164         int                                     m_nIconFolder;\r
165 \r
166         CTGitPath                       m_path1;\r
167         GitRev                          m_peg;\r
168         GitRev                          m_rev1;\r
169         CTGitPath                       m_path2;\r
170         GitRev                          m_rev2;\r
171 \r
172         bool                            m_bIgnoreancestry;\r
173         bool                            m_bDoPegDiff;\r
174         volatile LONG           m_bThreadRunning;\r
175 \r
176         volatile LONG           m_bLoadingRef;\r
177 \r
178         bool                            m_bCancelled;\r
179 \r
180         void                            Sort();\r
181 //      static bool                     SortCompare(const FileDiff& Data1, const FileDiff& Data2);\r
182 \r
183         static BOOL                     m_bAscending;\r
184         static int                      m_nSortedColumn;\r
185 \r
186         CACEdit                         m_ctrRev1Edit;\r
187         CACEdit                         m_ctrRev2Edit;\r
188 \r
189         CString                         m_FileListText;\r
190 public:\r
191         CString                         m_strRev1;\r
192         CString                         m_strRev2;\r
193 \r
194 public:\r
195         afx_msg void OnEnChangeRev1edit();\r
196         afx_msg void OnEnChangeRev2edit();\r
197         virtual BOOL DestroyWindow();\r
198         void OnTextUpdate(CACEdit *pEdit);\r
199 };\r