Refactor rebase commit list: Don't fill list again and again when reordering commits
[TortoiseGit.git] / src / TortoiseProc / FileDiffDlg.h
blob2a056ea56ce75b671a539624c74162937edd9be1
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2008-2017 - TortoiseGit
4 // Copyright (C) 2003-2008 - TortoiseSVN
6 // This program is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU General Public License
8 // as published by the Free Software Foundation; either version 2
9 // of the License, or (at your option) any later version.
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software Foundation,
18 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #pragma once
21 #include "afxcmn.h"
22 #include "StandAloneDlg.h"
23 #include "Git.h"
24 #include "GitRev.h"
25 #include "TGitPath.h"
26 #include "HintCtrl.h"
27 #include "Colors.h"
28 #include "FilterEdit.h"
29 #include "ProgressDlg.h"
30 #include "MenuButton.h"
31 #include "ACEdit.h"
32 #include "GestureEnabledControl.h"
33 #define IDT_FILTER 101
34 #define IDT_INPUT 102
36 /**
37 * \ingroup TortoiseProc
38 * Dialog which fetches and shows the difference between two urls in the
39 * repository. It shows a list of files/folders which were changed in those
40 * two revisions.
42 #define MSG_REF_LOADED (WM_USER+120)
44 class CFileDiffDlg : public CResizableStandAloneDialog
46 DECLARE_DYNAMIC(CFileDiffDlg)
47 public:
48 CFileDiffDlg(CWnd* pParent = nullptr);
49 virtual ~CFileDiffDlg();
51 void SetDiff(const CTGitPath* path, const GitRev& baseRev1, const GitRev& rev2);
52 void SetDiff(const CTGitPath* path, const GitRev& baseRev1);
53 void SetDiff(const CTGitPath* path, const CString& baseHash1, const CString& hash2);
55 void DoBlame(bool blame = true) {m_bBlame = blame;}
57 enum { IDD = IDD_DIFFFILES };
59 protected:
60 virtual void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV support
61 virtual void OnCancel() override;
62 virtual BOOL OnInitDialog() override;
63 virtual BOOL PreTranslateMessage(MSG* pMsg) override;
64 afx_msg LRESULT OnRefLoad(WPARAM wParam, LPARAM lParam);
65 afx_msg void OnNMDblclkFilelist(NMHDR *pNMHDR, LRESULT *pResult);
66 afx_msg void OnLvnGetInfoTipFilelist(NMHDR *pNMHDR, LRESULT *pResult);
67 afx_msg void OnNMCustomdrawFilelist(NMHDR *pNMHDR, LRESULT *pResult);
68 afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/);
69 afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
70 afx_msg void OnEnSetfocusSecondurl();
71 afx_msg void OnEnSetfocusFirsturl();
72 afx_msg void OnBnClickedSwitchleftright();
73 afx_msg void OnHdnItemclickFilelist(NMHDR *pNMHDR, LRESULT *pResult);
74 afx_msg void OnBnClickedRev1btn();
75 afx_msg void OnBnClickedRev2btn();
76 afx_msg LRESULT OnClickedCancelFilter(WPARAM wParam, LPARAM lParam);
77 afx_msg LRESULT OnEnUpdate(WPARAM wParam, LPARAM lParam);
78 afx_msg void OnEnChangeFilter();
79 afx_msg void OnTimer(UINT_PTR nIDEvent);
80 afx_msg void OnBnClickedDiffoption();
81 afx_msg void OnBnClickedLog();
82 afx_msg LRESULT OnDisableButtons(WPARAM, LPARAM);
83 afx_msg LRESULT OnDiffFinished(WPARAM, LPARAM);
84 afx_msg void OnLvnBegindrag(NMHDR* pNMHDR, LRESULT* pResult);
86 DECLARE_MESSAGE_MAP()
88 int AddEntry(const CTGitPath * fd);
89 void DoDiff(int selIndex, bool blame);
90 void SetURLLabels(int mask=0x3);
91 void ClearURLabels(int mask);
92 void Filter(CString sFilterText);
93 void CopySelectionToClipboard(BOOL isFull=FALSE);
95 void ClickRevButton(CMenuButton *button,GitRev *rev, CACEdit *edit);
97 void EnableInputControl(bool b=true);
99 int RevertSelectedItemToVersion(CString rev);
101 bool CheckMultipleDiffs();
103 int FillRevFromString(GitRev* rev, const CString& str)
105 GitRev gitrev;
106 if (gitrev.GetCommit(str))
108 MessageBox(gitrev.GetLastErr(), L"TortoiseGit", MB_ICONERROR);
109 return -1;
111 *rev=gitrev;
112 return 0;
115 private:
116 static UINT WM_DISABLEBUTTONS;
117 static UINT WM_DIFFFINISHED;
119 static UINT DiffThreadEntry(LPVOID pVoid);
120 UINT DiffThread();
122 static UINT LoadRefThreadEntry(LPVOID pVoid)
124 return reinterpret_cast<CFileDiffDlg*>(pVoid)->LoadRefThread();
127 UINT LoadRefThread();
129 STRING_VECTOR m_Reflist;
131 virtual BOOL DestroyWindow() override;
132 void OnTextUpdate(CACEdit *pEdit);
134 CMenuButton m_cRev1Btn;
135 CMenuButton m_cRev2Btn;
136 CFilterEdit m_cFilter;
138 CMenuButton m_cDiffOptionsBtn;
140 CMFCButton m_SwitchButton;
141 CColors m_colors;
142 CGestureEnabledControlTmpl<CHintCtrl<CListCtrl>> m_cFileList;
143 bool m_bBlame;
144 CTGitPathList m_arFileList;
145 std::vector<CTGitPath*> m_arFilteredList;
147 CString m_strExportDir;
149 int m_nIconFolder;
151 bool m_bIsBare;
152 CTGitPath m_path1;
153 GitRev m_rev1;
154 CTGitPath m_path2;
155 GitRev m_rev2;
157 volatile LONG m_bThreadRunning;
159 volatile LONG m_bLoadingRef;
161 void Sort();
162 static bool SortCompare(const CTGitPath& Data1, const CTGitPath& Data2);
164 static BOOL m_bAscending;
165 static int m_nSortedColumn;
167 CACEdit m_ctrRev1Edit;
168 CACEdit m_ctrRev2Edit;
170 bool m_bIgnoreSpaceAtEol;
171 bool m_bIgnoreSpaceChange;
172 bool m_bIgnoreAllSpace;
173 bool m_bIgnoreBlankLines;
174 public:
175 CString m_strRev1;
176 CString m_strRev2;
177 CString m_sFilter;