SyncDlg: Disallow in/out changes to include local context menu
[TortoiseGit.git] / src / TortoiseProc / Settings / SettingsProgsMerge.cpp
blob2cfed3cece10fa0914a5a698b65548d928c99873
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2009, 2011, 2013-2016 - TortoiseGit
4 // Copyright (C) 2003-2007 - 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 "AppUtils.h"
23 #include "SettingsProgsMerge.h"
26 IMPLEMENT_DYNAMIC(CSettingsProgsMerge, ISettingsPropPage)
27 CSettingsProgsMerge::CSettingsProgsMerge()
28 : ISettingsPropPage(CSettingsProgsMerge::IDD)
29 , m_iExtMerge(0)
30 , m_dlgAdvMerge(L"Merge")
32 m_regMergePath = CRegString(L"Software\\TortoiseGit\\Merge");
35 CSettingsProgsMerge::~CSettingsProgsMerge()
39 void CSettingsProgsMerge::DoDataExchange(CDataExchange* pDX)
41 ISettingsPropPage::DoDataExchange(pDX);
42 DDX_Text(pDX, IDC_EXTMERGE, m_sMergePath);
43 DDX_Radio(pDX, IDC_EXTMERGE_OFF, m_iExtMerge);
45 GetDlgItem(IDC_EXTMERGE)->EnableWindow(m_iExtMerge == 1);
46 GetDlgItem(IDC_EXTMERGEBROWSE)->EnableWindow(m_iExtMerge == 1);
47 DDX_Control(pDX, IDC_EXTMERGE, m_cMergeEdit);
51 BEGIN_MESSAGE_MAP(CSettingsProgsMerge, ISettingsPropPage)
52 ON_BN_CLICKED(IDC_EXTMERGE_OFF, OnBnClickedExtmergeOff)
53 ON_BN_CLICKED(IDC_EXTMERGE_ON, OnBnClickedExtmergeOn)
54 ON_BN_CLICKED(IDC_EXTMERGEBROWSE, OnBnClickedExtmergebrowse)
55 ON_BN_CLICKED(IDC_EXTMERGEADVANCED, OnBnClickedExtmergeadvanced)
56 ON_EN_CHANGE(IDC_EXTMERGE, OnEnChangeExtmerge)
57 END_MESSAGE_MAP()
60 BOOL CSettingsProgsMerge::OnInitDialog()
62 ISettingsPropPage::OnInitDialog();
64 AdjustControlSize(IDC_EXTMERGE_OFF);
65 AdjustControlSize(IDC_EXTMERGE_ON);
66 EnableToolTips();
68 m_sMergePath = m_regMergePath;
69 m_iExtMerge = IsExternal(m_sMergePath);
71 SHAutoComplete(::GetDlgItem(m_hWnd, IDC_EXTMERGE), SHACF_FILESYSTEM | SHACF_FILESYS_ONLY);
73 m_tooltips.AddTool(IDC_EXTMERGE, IDS_SETTINGS_EXTMERGE_TT);
75 UpdateData(FALSE);
76 return TRUE;
79 BOOL CSettingsProgsMerge::OnApply()
81 UpdateData();
82 if (m_iExtMerge == 0 && !m_sMergePath.IsEmpty() && m_sMergePath.Left(1) != L"#")
83 m_sMergePath = L'#' + m_sMergePath;
85 m_regMergePath = m_sMergePath;
87 m_dlgAdvMerge.SaveData();
88 SetModified(FALSE);
89 return ISettingsPropPage::OnApply();
92 void CSettingsProgsMerge::OnBnClickedExtmergeOff()
94 m_iExtMerge = 0;
95 SetModified();
96 GetDlgItem(IDC_EXTMERGE)->EnableWindow(FALSE);
97 GetDlgItem(IDC_EXTMERGEBROWSE)->EnableWindow(FALSE);
98 CheckProgComment();
101 void CSettingsProgsMerge::OnBnClickedExtmergeOn()
103 m_iExtMerge = 1;
104 SetModified();
105 GetDlgItem(IDC_EXTMERGE)->EnableWindow(TRUE);
106 GetDlgItem(IDC_EXTMERGEBROWSE)->EnableWindow(TRUE);
107 GetDlgItem(IDC_EXTMERGE)->SetFocus();
108 CheckProgComment();
111 void CSettingsProgsMerge::OnEnChangeExtmerge()
113 SetModified();
116 void CSettingsProgsMerge::OnBnClickedExtmergebrowse()
118 UpdateData();
119 CString filename = m_sMergePath;
120 if (!PathFileExists(filename))
121 filename.Empty();
122 if (CAppUtils::FileOpenSave(filename, nullptr, IDS_SETTINGS_SELECTMERGE, IDS_PROGRAMSFILEFILTER, true, m_hWnd))
124 m_sMergePath = filename;
125 UpdateData(FALSE);
126 SetModified();
130 void CSettingsProgsMerge::OnBnClickedExtmergeadvanced()
132 if (m_dlgAdvMerge.DoModal() == IDOK)
133 SetModified();
136 void CSettingsProgsMerge::CheckProgComment()
138 UpdateData();
139 if (m_iExtMerge == 0 && !m_sMergePath.IsEmpty() && m_sMergePath.Left(1) != L"#")
140 m_sMergePath = L'#' + m_sMergePath;
141 else if (m_iExtMerge == 1)
142 m_sMergePath.TrimLeft(L'#');
143 UpdateData(FALSE);