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.
21 #include "TortoiseProc.h"
22 #include "SetHooksAdv.h"
23 #include "BrowseFolder.h"
27 IMPLEMENT_DYNAMIC(CSetHooksAdv
, CResizableStandAloneDialog
)
29 CSetHooksAdv::CSetHooksAdv(CWnd
* pParent
/*=nullptr*/)
30 : CResizableStandAloneDialog(CSetHooksAdv::IDD
, pParent
)
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
)
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
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
);
90 m_cHookTypeCombo
.GetLBText(i
, str
);
91 m_cHookTypeCombo
.SelectString(i
, str
);
96 m_sPath
= key
.path
.GetWinPathString();
97 m_sCommandLine
= cmd
.commandline
;
100 m_bEnabled
= cmd
.bEnabled
? BST_CHECKED
: BST_UNCHECKED
;
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");
121 void CSetHooksAdv::OnOK()
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
);
140 if (key
.path
.IsEmpty())
142 ShowEditBalloon(IDC_HOOKPATH
, IDS_ERR_NOHOOKPATHSPECIFIED
, IDS_ERR_ERROR
, TTI_ERROR
);
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
);
150 if (cmd
.commandline
.IsEmpty())
152 ShowEditBalloon(IDC_HOOKCOMMANDLINE
, IDS_ERR_NOHOOKCOMMANDPECIFIED
, IDS_ERR_ERROR
, TTI_ERROR
);
156 CResizableStandAloneDialog::OnOK();
159 void CSetHooksAdv::OnBnClickedHookbrowse()
162 CBrowseFolder browser
;
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
)
173 void CSetHooksAdv::OnBnClickedHookcommandbrowse()
176 CString sCmdLine
= m_sCommandLine
;
177 if (!PathFileExists(sCmdLine
))
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
;