Improve line margin icon for moved lines
[TortoiseGit.git] / src / TortoiseProc / Settings / SetHooksAdv.cpp
blobc851601fde7c4765c605a27b7873d6f260563c44
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2010, 2013-2016 - TortoiseGit
4 // Copyright (C) 2003-2008,2010 - 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 #include "stdafx.h"
21 #include "TortoiseProc.h"
22 #include "SetHooksAdv.h"
23 #include "BrowseFolder.h"
24 #include "AppUtils.h"
27 IMPLEMENT_DYNAMIC(CSetHooksAdv, CResizableStandAloneDialog)
29 CSetHooksAdv::CSetHooksAdv(CWnd* pParent /*=nullptr*/)
30 : CResizableStandAloneDialog(CSetHooksAdv::IDD, pParent)
31 , m_bEnabled(FALSE)
32 , m_bWait(FALSE)
33 , m_bHide(FALSE)
37 CSetHooksAdv::~CSetHooksAdv()
41 void CSetHooksAdv::DoDataExchange(CDataExchange* pDX)
43 CResizableStandAloneDialog::DoDataExchange(pDX);
44 DDX_Text(pDX, IDC_HOOKPATH, m_sPath);
45 DDX_Text(pDX, IDC_HOOKCOMMANDLINE, m_sCommandLine);
46 DDX_Check(pDX, IDC_ENABLE, m_bEnabled);
47 DDX_Check(pDX, IDC_WAITCHECK, m_bWait);
48 DDX_Check(pDX, IDC_HIDECHECK, m_bHide);
49 DDX_Control(pDX, IDC_HOOKTYPECOMBO, m_cHookTypeCombo);
53 BEGIN_MESSAGE_MAP(CSetHooksAdv, CResizableStandAloneDialog)
54 ON_BN_CLICKED(IDC_HOOKBROWSE, &CSetHooksAdv::OnBnClickedHookbrowse)
55 ON_BN_CLICKED(IDC_HOOKCOMMANDBROWSE, &CSetHooksAdv::OnBnClickedHookcommandbrowse)
56 END_MESSAGE_MAP()
58 BOOL CSetHooksAdv::OnInitDialog()
60 CResizableStandAloneDialog::OnInitDialog();
62 AdjustControlSize(IDC_ENABLE);
63 AdjustControlSize(IDC_WAITCHECK);
64 AdjustControlSize(IDC_HIDECHECK);
66 // initialize the combo box with all the hook types we have
67 int index;
68 index = m_cHookTypeCombo.AddString(CString(MAKEINTRESOURCE(IDS_HOOKTYPE_STARTCOMMIT)));
69 m_cHookTypeCombo.SetItemData(index, start_commit_hook);
70 index = m_cHookTypeCombo.AddString(CString(MAKEINTRESOURCE(IDS_HOOKTYPE_PRECOMMIT)));
71 m_cHookTypeCombo.SetItemData(index, pre_commit_hook);
73 index = m_cHookTypeCombo.AddString(CString(MAKEINTRESOURCE(IDS_HOOKTYPE_POSTCOMMIT)));
74 m_cHookTypeCombo.SetItemData(index, post_commit_hook);
76 index = m_cHookTypeCombo.AddString(CString(MAKEINTRESOURCE(IDS_HOOKTYPE_PREPUSH)));
77 m_cHookTypeCombo.SetItemData(index, pre_push_hook);
78 index = m_cHookTypeCombo.AddString(CString(MAKEINTRESOURCE(IDS_HOOKTYPE_POSTPUSH)));
79 m_cHookTypeCombo.SetItemData(index, post_push_hook);
80 index = m_cHookTypeCombo.AddString(CString(MAKEINTRESOURCE(IDS_HOOKTYPE_PREREBASE)));
81 m_cHookTypeCombo.SetItemData(index, pre_rebase_hook);
83 // preselect the right hook type in the combobox
84 for (int i=0; i<m_cHookTypeCombo.GetCount(); ++i)
86 hooktype ht = (hooktype)m_cHookTypeCombo.GetItemData(i);
87 if (ht == key.htype)
89 CString str;
90 m_cHookTypeCombo.GetLBText(i, str);
91 m_cHookTypeCombo.SelectString(i, str);
92 break;
96 m_sPath = key.path.GetWinPathString();
97 m_sCommandLine = cmd.commandline;
98 m_bWait = cmd.bWait;
99 m_bHide = !cmd.bShow;
100 m_bEnabled = cmd.bEnabled ? BST_CHECKED : BST_UNCHECKED;
101 UpdateData(FALSE);
103 AddAnchor(IDC_ENABLE, TOP_LEFT);
104 AddAnchor(IDC_HOOKTYPELABEL, TOP_LEFT, TOP_RIGHT);
105 AddAnchor(IDC_HOOKTYPECOMBO, TOP_RIGHT);
106 AddAnchor(IDC_HOOKWCPATHLABEL, TOP_LEFT, TOP_RIGHT);
107 AddAnchor(IDC_HOOKPATH, TOP_LEFT, TOP_RIGHT);
108 AddAnchor(IDC_HOOKBROWSE, TOP_RIGHT);
109 AddAnchor(IDC_HOOKCMLABEL, TOP_LEFT, TOP_RIGHT);
110 AddAnchor(IDC_HOOKCOMMANDLINE, TOP_LEFT, TOP_RIGHT);
111 AddAnchor(IDC_HOOKCOMMANDBROWSE, TOP_RIGHT);
112 AddAnchor(IDC_WAITCHECK, BOTTOM_LEFT, BOTTOM_RIGHT);
113 AddAnchor(IDC_HIDECHECK, BOTTOM_LEFT, BOTTOM_RIGHT);
114 AddAnchor(IDOK, BOTTOM_RIGHT);
115 AddAnchor(IDCANCEL, BOTTOM_RIGHT);
116 AddAnchor(IDHELP, BOTTOM_RIGHT);
117 EnableSaveRestore(L"SetHooksAdvDlg");
118 return TRUE;
121 void CSetHooksAdv::OnOK()
123 UpdateData();
124 int cursel = m_cHookTypeCombo.GetCurSel();
125 key.htype = unknown_hook;
126 if (cursel != CB_ERR)
128 key.htype = (hooktype)m_cHookTypeCombo.GetItemData(cursel);
129 key.path = CTGitPath(m_sPath);
130 cmd.commandline = m_sCommandLine;
131 cmd.bEnabled = m_bEnabled == BST_CHECKED;
132 cmd.bWait = !!m_bWait;
133 cmd.bShow = !m_bHide;
135 if (key.htype == unknown_hook)
137 m_tooltips.ShowBalloon(IDC_HOOKTYPECOMBO, IDS_ERR_NOHOOKTYPESPECIFIED, IDS_ERR_ERROR, TTI_ERROR);
138 return;
140 if (key.path.IsEmpty())
142 ShowEditBalloon(IDC_HOOKPATH, IDS_ERR_NOHOOKPATHSPECIFIED, IDS_ERR_ERROR, TTI_ERROR);
143 return;
145 if (key.path.GetWinPathString() != L"*" && (!PathIsDirectory(key.path.GetWinPathString()) || PathIsRelative(key.path.GetWinPathString())))
147 ShowEditBalloon(IDC_HOOKPATH, (LPCTSTR)CFormatMessageWrapper(ERROR_PATH_NOT_FOUND), CString(MAKEINTRESOURCE(IDS_ERR_ERROR)), TTI_ERROR);
148 return;
150 if (cmd.commandline.IsEmpty())
152 ShowEditBalloon(IDC_HOOKCOMMANDLINE, IDS_ERR_NOHOOKCOMMANDPECIFIED, IDS_ERR_ERROR, TTI_ERROR);
153 return;
156 CResizableStandAloneDialog::OnOK();
159 void CSetHooksAdv::OnBnClickedHookbrowse()
161 UpdateData();
162 CBrowseFolder browser;
163 CString sPath;
164 browser.SetInfo(CString(MAKEINTRESOURCE(IDS_SETTINGS_HOOKS_SELECTFOLDERPATH)));
165 browser.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
166 if (browser.Show(m_hWnd, sPath) == CBrowseFolder::OK)
168 m_sPath = sPath;
169 UpdateData(FALSE);
173 void CSetHooksAdv::OnBnClickedHookcommandbrowse()
175 UpdateData();
176 CString sCmdLine = m_sCommandLine;
177 if (!PathFileExists(sCmdLine))
178 sCmdLine.Empty();
179 // Display the Open dialog box.
180 if (CAppUtils::FileOpenSave(sCmdLine, nullptr, IDS_SETTINGS_HOOKS_SELECTSCRIPTFILE, IDS_COMMONFILEFILTER, true, m_hWnd))
182 m_sCommandLine = sCmdLine;
183 UpdateData(FALSE);