OSDN Git Service

Add Setting Dialog
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / Settings / SettingsProgsUniDiff.cpp
1 // TortoiseSVN - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2003-2007 - TortoiseSVN\r
4 \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
9 \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
14 \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
18 //\r
19 #include "stdafx.h"\r
20 #include "TortoiseProc.h"\r
21 #include "AppUtils.h"\r
22 #include "StringUtils.h"\r
23 #include ".\settingsprogsunidiff.h"\r
24 \r
25 \r
26 IMPLEMENT_DYNAMIC(CSettingsProgsUniDiff, ISettingsPropPage)\r
27 CSettingsProgsUniDiff::CSettingsProgsUniDiff()\r
28         : ISettingsPropPage(CSettingsProgsUniDiff::IDD)\r
29         , m_sDiffViewerPath(_T(""))\r
30         , m_iDiffViewer(0)\r
31 {\r
32         m_regDiffViewerPath = CRegString(_T("Software\\TortoiseGit\\DiffViewer"));\r
33 }\r
34 \r
35 CSettingsProgsUniDiff::~CSettingsProgsUniDiff()\r
36 {\r
37 }\r
38 \r
39 void CSettingsProgsUniDiff::DoDataExchange(CDataExchange* pDX)\r
40 {\r
41         ISettingsPropPage::DoDataExchange(pDX);\r
42         DDX_Text(pDX, IDC_DIFFVIEWER, m_sDiffViewerPath);\r
43         DDX_Radio(pDX, IDC_DIFFVIEWER_OFF, m_iDiffViewer);\r
44 \r
45         GetDlgItem(IDC_DIFFVIEWER)->EnableWindow(m_iDiffViewer == 1);\r
46         GetDlgItem(IDC_DIFFVIEWERBROWSE)->EnableWindow(m_iDiffViewer == 1);\r
47         DDX_Control(pDX, IDC_DIFFVIEWER, m_cUnifiedDiffEdit);\r
48 }\r
49 \r
50 \r
51 BEGIN_MESSAGE_MAP(CSettingsProgsUniDiff, ISettingsPropPage)\r
52         ON_BN_CLICKED(IDC_DIFFVIEWER_OFF, OnBnClickedDiffviewerOff)\r
53         ON_BN_CLICKED(IDC_DIFFVIEWER_ON, OnBnClickedDiffviewerOn)\r
54         ON_BN_CLICKED(IDC_DIFFVIEWERBROWSE, OnBnClickedDiffviewerbrowse)\r
55         ON_EN_CHANGE(IDC_DIFFVIEWER, OnEnChangeDiffviewer)\r
56 END_MESSAGE_MAP()\r
57 \r
58 void CSettingsProgsUniDiff::OnBnClickedDiffviewerOff()\r
59 {\r
60         m_iDiffViewer = 0;\r
61         SetModified();\r
62         GetDlgItem(IDC_DIFFVIEWER)->EnableWindow(FALSE);\r
63         GetDlgItem(IDC_DIFFVIEWERBROWSE)->EnableWindow(FALSE);\r
64         CheckProgComment();\r
65 }\r
66 \r
67 void CSettingsProgsUniDiff::OnBnClickedDiffviewerOn()\r
68 {\r
69         m_iDiffViewer = 1;\r
70         SetModified();\r
71         GetDlgItem(IDC_DIFFVIEWER)->EnableWindow(TRUE);\r
72         GetDlgItem(IDC_DIFFVIEWERBROWSE)->EnableWindow(TRUE);\r
73         GetDlgItem(IDC_DIFFVIEWER)->SetFocus();\r
74         CheckProgComment();\r
75 }\r
76 \r
77 void CSettingsProgsUniDiff::OnEnChangeDiffviewer()\r
78 {\r
79         SetModified();\r
80 }\r
81 \r
82 void CSettingsProgsUniDiff::OnBnClickedDiffviewerbrowse()\r
83 {\r
84         if (CAppUtils::FileOpenSave(m_sDiffViewerPath, NULL, IDS_SETTINGS_SELECTDIFFVIEWER, IDS_PROGRAMSFILEFILTER, true, m_hWnd))\r
85         {\r
86                 UpdateData(FALSE);\r
87                 SetModified();\r
88         }\r
89 }\r
90 \r
91 BOOL CSettingsProgsUniDiff::OnInitDialog()\r
92 {\r
93         ISettingsPropPage::OnInitDialog();\r
94 \r
95         EnableToolTips();\r
96 \r
97         m_sDiffViewerPath = m_regDiffViewerPath;\r
98         m_iDiffViewer = IsExternal(m_sDiffViewerPath);\r
99 \r
100         SHAutoComplete(::GetDlgItem(m_hWnd, IDC_DIFFVIEWER), SHACF_FILESYSTEM | SHACF_FILESYS_ONLY);\r
101 \r
102         m_tooltips.Create(this);\r
103         m_tooltips.AddTool(IDC_DIFFVIEWER, IDS_SETTINGS_DIFFVIEWER_TT);\r
104 \r
105         UpdateData(FALSE);\r
106         return TRUE;\r
107 }\r
108 \r
109 BOOL CSettingsProgsUniDiff::PreTranslateMessage(MSG* pMsg)\r
110 {\r
111         m_tooltips.RelayEvent(pMsg);\r
112         return ISettingsPropPage::PreTranslateMessage(pMsg);\r
113 }\r
114 \r
115 BOOL CSettingsProgsUniDiff::OnApply()\r
116 {\r
117         UpdateData();\r
118         if (m_iDiffViewer == 0 && !m_sDiffViewerPath.IsEmpty() && m_sDiffViewerPath.Left(1) != _T("#"))\r
119                 m_sDiffViewerPath = _T("#") + m_sDiffViewerPath;\r
120 \r
121         m_regDiffViewerPath = m_sDiffViewerPath;\r
122         SetModified(FALSE);\r
123         return ISettingsPropPage::OnApply();\r
124 }\r
125 \r
126 void CSettingsProgsUniDiff::CheckProgComment()\r
127 {\r
128         UpdateData();\r
129         if (m_iDiffViewer == 0 && !m_sDiffViewerPath.IsEmpty() && m_sDiffViewerPath.Left(1) != _T("#"))\r
130                 m_sDiffViewerPath = _T("#") + m_sDiffViewerPath;\r
131         else if (m_iDiffViewer == 1)\r
132                 m_sDiffViewerPath.TrimLeft('#');\r
133         UpdateData(FALSE);\r
134 }