1 // TortoiseSVN - a Windows shell extension for easy version control
\r
3 // Copyright (C) 2003-2008 - TortoiseSVN
\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
20 #include "TortoiseProc.h"
\r
21 #include "SetHooksAdv.h"
\r
22 #include "BrowseFolder.h"
\r
23 #include "AppUtils.h"
\r
26 IMPLEMENT_DYNAMIC(CSetHooksAdv, CResizableStandAloneDialog)
\r
28 CSetHooksAdv::CSetHooksAdv(CWnd* pParent /*=NULL*/)
\r
29 : CResizableStandAloneDialog(CSetHooksAdv::IDD, pParent)
\r
31 , m_sCommandLine(_T(""))
\r
37 CSetHooksAdv::~CSetHooksAdv()
\r
41 void CSetHooksAdv::DoDataExchange(CDataExchange* pDX)
\r
43 CResizableStandAloneDialog::DoDataExchange(pDX);
\r
44 DDX_Text(pDX, IDC_HOOKPATH, m_sPath);
\r
45 DDX_Text(pDX, IDC_HOOKCOMMANDLINE, m_sCommandLine);
\r
46 DDX_Check(pDX, IDC_WAITCHECK, m_bWait);
\r
47 DDX_Check(pDX, IDC_HIDECHECK, m_bHide);
\r
48 DDX_Control(pDX, IDC_HOOKTYPECOMBO, m_cHookTypeCombo);
\r
52 BEGIN_MESSAGE_MAP(CSetHooksAdv, CResizableStandAloneDialog)
\r
53 ON_BN_CLICKED(IDC_HOOKBROWSE, &CSetHooksAdv::OnBnClickedHookbrowse)
\r
54 ON_BN_CLICKED(IDC_HOOKCOMMANDBROWSE, &CSetHooksAdv::OnBnClickedHookcommandbrowse)
\r
55 ON_BN_CLICKED(IDHELP, &CSetHooksAdv::OnBnClickedHelp)
\r
58 BOOL CSetHooksAdv::OnInitDialog()
\r
60 CResizableStandAloneDialog::OnInitDialog();
\r
62 // initialize the combo box with all the hook types we have
\r
63 int index = m_cHookTypeCombo.AddString(CString(MAKEINTRESOURCE(IDS_HOOKTYPE_STARTCOMMIT)));
\r
64 m_cHookTypeCombo.SetItemData(index, start_commit_hook);
\r
65 index = m_cHookTypeCombo.AddString(CString(MAKEINTRESOURCE(IDS_HOOKTYPE_PRECOMMIT)));
\r
66 m_cHookTypeCombo.SetItemData(index, pre_commit_hook);
\r
67 index = m_cHookTypeCombo.AddString(CString(MAKEINTRESOURCE(IDS_HOOKTYPE_POSTCOMMIT)));
\r
68 m_cHookTypeCombo.SetItemData(index, post_commit_hook);
\r
69 index = m_cHookTypeCombo.AddString(CString(MAKEINTRESOURCE(IDS_HOOKTYPE_STARTUPDATE)));
\r
70 m_cHookTypeCombo.SetItemData(index, start_update_hook);
\r
71 index = m_cHookTypeCombo.AddString(CString(MAKEINTRESOURCE(IDS_HOOKTYPE_PREUPDATE)));
\r
72 m_cHookTypeCombo.SetItemData(index, pre_update_hook);
\r
73 index = m_cHookTypeCombo.AddString(CString(MAKEINTRESOURCE(IDS_HOOKTYPE_POSTUPDATE)));
\r
74 m_cHookTypeCombo.SetItemData(index, post_update_hook);
\r
75 // preselect the right hook type in the combobox
\r
76 for (int i=0; i<m_cHookTypeCombo.GetCount(); ++i)
\r
78 hooktype ht = (hooktype)m_cHookTypeCombo.GetItemData(i);
\r
79 if (ht == key.htype)
\r
82 m_cHookTypeCombo.GetLBText(i, str);
\r
83 m_cHookTypeCombo.SelectString(i, str);
\r
88 m_sPath = key.path.GetWinPathString();
\r
89 m_sCommandLine = cmd.commandline;
\r
90 m_bWait = cmd.bWait;
\r
91 m_bHide = !cmd.bShow;
\r
94 AddAnchor(IDC_HOOKTYPELABEL, TOP_LEFT, TOP_RIGHT);
\r
95 AddAnchor(IDC_HOOKTYPECOMBO, TOP_RIGHT);
\r
96 AddAnchor(IDC_HOOKWCPATHLABEL, TOP_LEFT, TOP_RIGHT);
\r
97 AddAnchor(IDC_HOOKPATH, TOP_LEFT, TOP_RIGHT);
\r
98 AddAnchor(IDC_HOOKBROWSE, TOP_RIGHT);
\r
99 AddAnchor(IDC_HOOKCMLABEL, TOP_LEFT, TOP_RIGHT);
\r
100 AddAnchor(IDC_HOOKCOMMANDLINE, TOP_LEFT, TOP_RIGHT);
\r
101 AddAnchor(IDC_HOOKCOMMANDBROWSE, TOP_RIGHT);
\r
102 AddAnchor(IDC_WAITCHECK, BOTTOM_LEFT, BOTTOM_RIGHT);
\r
103 AddAnchor(IDC_HIDECHECK, BOTTOM_LEFT, BOTTOM_RIGHT);
\r
104 AddAnchor(IDOK, BOTTOM_RIGHT);
\r
105 AddAnchor(IDCANCEL, BOTTOM_RIGHT);
\r
106 AddAnchor(IDHELP, BOTTOM_RIGHT);
\r
107 EnableSaveRestore(_T("SetHooksAdvDlg"));
\r
111 void CSetHooksAdv::OnOK()
\r
115 int cursel = m_cHookTypeCombo.GetCurSel();
\r
116 key.htype = unknown_hook;
\r
117 if (cursel != CB_ERR)
\r
119 key.htype = (hooktype)m_cHookTypeCombo.GetItemData(cursel);
\r
120 key.path = CTSVNPath(m_sPath);
\r
121 cmd.commandline = m_sCommandLine;
\r
122 cmd.bWait = !!m_bWait;
\r
123 cmd.bShow = !m_bHide;
\r
125 if (key.htype == unknown_hook)
\r
127 ShowBalloon(IDC_HOOKTYPECOMBO, IDS_ERR_NOHOOKTYPESPECIFIED);
\r
130 if (key.path.IsEmpty())
\r
132 ShowBalloon(IDC_HOOKPATH, IDS_ERR_NOHOOKPATHSPECIFIED);
\r
135 if (cmd.commandline.IsEmpty())
\r
137 ShowBalloon(IDC_HOOKCOMMANDLINE, IDS_ERR_NOHOOKCOMMANDPECIFIED);
\r
141 CResizableStandAloneDialog::OnOK();
\r
144 void CSetHooksAdv::OnBnClickedHookbrowse()
\r
148 CBrowseFolder browser;
\r
150 browser.SetInfo(CString(MAKEINTRESOURCE(IDS_SETTINGS_HOOKS_SELECTFOLDERPATH)));
\r
151 browser.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
\r
152 if (browser.Show(m_hWnd, sPath) == CBrowseFolder::OK)
\r
160 void CSetHooksAdv::OnBnClickedHookcommandbrowse()
\r
163 CString sCmdLine = m_sCommandLine;
\r
164 if (!PathFileExists(sCmdLine))
\r
166 // Display the Open dialog box.
\r
167 if (CAppUtils::FileOpenSave(sCmdLine, NULL, IDS_SETTINGS_HOOKS_SELECTSCRIPTFILE, IDS_COMMONFILEFILTER, true, m_hWnd))
\r
169 m_sCommandLine = sCmdLine;
\r
174 void CSetHooksAdv::OnBnClickedHelp()
\r