1 // TortoiseSVN - a Windows shell extension for easy version control
\r
3 // Copyright (C) 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 "SetBugTraqAdv.h"
\r
21 #include "BrowseFolder.h"
\r
22 #include "BugTraqAssociations.h"
\r
23 #include "..\IBugTraqProvider\IBugTraqProvider_h.h"
\r
25 IMPLEMENT_DYNAMIC(CSetBugTraqAdv, CResizableStandAloneDialog)
\r
27 CSetBugTraqAdv::CSetBugTraqAdv(CWnd* pParent /*= NULL*/)
\r
28 : CResizableStandAloneDialog(CSetBugTraqAdv::IDD, pParent)
\r
29 , m_provider_clsid(GUID_NULL)
\r
33 CSetBugTraqAdv::CSetBugTraqAdv(const CBugTraqAssociation &assoc, CWnd* pParent /*= NULL*/)
\r
34 : CResizableStandAloneDialog(CSetBugTraqAdv::IDD, pParent)
\r
35 , m_sPath(assoc.GetPath().GetWinPathString())
\r
36 , m_provider_clsid(assoc.GetProviderClass())
\r
37 , m_sParameters(assoc.GetParameters())
\r
41 CSetBugTraqAdv::~CSetBugTraqAdv()
\r
45 void CSetBugTraqAdv::DoDataExchange(CDataExchange* pDX)
\r
47 CResizableStandAloneDialog::DoDataExchange(pDX);
\r
48 DDX_Text(pDX, IDC_BUGTRAQPATH, m_sPath);
\r
49 DDX_Control(pDX, IDC_BUGTRAQPROVIDERCOMBO, m_cProviderCombo);
\r
50 DDX_Text(pDX, IDC_BUGTRAQPARAMETERS, m_sParameters);
\r
53 BEGIN_MESSAGE_MAP(CSetBugTraqAdv, CResizableStandAloneDialog)
\r
55 ON_BN_CLICKED(IDC_BUGTRAQBROWSE, &CSetBugTraqAdv::OnBnClickedBugTraqbrowse)
\r
56 ON_BN_CLICKED(IDHELP, &CSetBugTraqAdv::OnBnClickedHelp)
\r
57 ON_CBN_SELCHANGE(IDC_BUGTRAQPROVIDERCOMBO, &CSetBugTraqAdv::OnCbnSelchangeBugtraqprovidercombo)
\r
58 ON_BN_CLICKED(IDC_OPTIONS, &CSetBugTraqAdv::OnBnClickedOptions)
\r
61 BOOL CSetBugTraqAdv::OnInitDialog()
\r
63 CResizableStandAloneDialog::OnInitDialog();
\r
65 std::vector<CBugTraqProvider> providers = CBugTraqAssociations::GetAvailableProviders();
\r
66 if (providers.size() == 0)
\r
68 AfxMessageBox(IDS_ERR_NO_AVAILABLE_BUGTRAQ_PROVIDERS);
\r
69 EndDialog(IDCANCEL);
\r
73 for (std::vector<CBugTraqProvider>::const_iterator it = providers.begin(); it != providers.end(); ++it)
\r
75 int index = m_cProviderCombo.AddString(it->name);
\r
76 m_cProviderCombo.SetItemDataPtr(index, new CBugTraqProvider(*it));
\r
79 // preselect the right provider in the combo; we can't do this above, because the
\r
80 // combo will sort the entries.
\r
81 if (m_provider_clsid == GUID_NULL)
\r
82 m_cProviderCombo.SetCurSel(0);
\r
84 for (int i = 0; i < m_cProviderCombo.GetCount(); ++i)
\r
86 CBugTraqProvider *p = (CBugTraqProvider *)m_cProviderCombo.GetItemDataPtr(i);
\r
87 if (p->clsid == m_provider_clsid)
\r
89 m_cProviderCombo.SetCurSel(i);
\r
97 AddAnchor(IDC_BUGTRAQWCPATHLABEL, TOP_LEFT, TOP_RIGHT);
\r
98 AddAnchor(IDC_BUGTRAQPATH, TOP_LEFT, TOP_RIGHT);
\r
99 AddAnchor(IDC_BUGTRAQBROWSE, TOP_RIGHT);
\r
100 AddAnchor(IDC_BUGTRAQPROVIDERLABEL, TOP_LEFT, TOP_RIGHT);
\r
101 AddAnchor(IDC_BUGTRAQPROVIDERCOMBO, TOP_LEFT, TOP_RIGHT);
\r
102 AddAnchor(IDC_BUGTRAQPARAMETERSLABEL, TOP_LEFT, TOP_RIGHT);
\r
103 AddAnchor(IDC_BUGTRAQPARAMETERS, TOP_LEFT, TOP_RIGHT);
\r
104 AddAnchor(IDOK, BOTTOM_RIGHT);
\r
105 AddAnchor(IDCANCEL, BOTTOM_RIGHT);
\r
106 AddAnchor(IDHELP, BOTTOM_RIGHT);
\r
107 EnableSaveRestore(_T("SetBugTraqAdvDlg"));
\r
111 void CSetBugTraqAdv::OnDestroy()
\r
113 for (int i = 0; i < m_cProviderCombo.GetCount(); ++i)
\r
114 delete (CBugTraqProvider *)m_cProviderCombo.GetItemDataPtr(i);
\r
116 CResizableStandAloneDialog::OnDestroy();
\r
119 void CSetBugTraqAdv::OnOK()
\r
123 m_provider_clsid = GUID_NULL;
\r
125 int index = m_cProviderCombo.GetCurSel();
\r
126 if (index != CB_ERR)
\r
128 CBugTraqProvider *provider = (CBugTraqProvider *)m_cProviderCombo.GetItemDataPtr(index);
\r
129 m_provider_clsid = provider->clsid;
\r
132 CComPtr<IBugTraqProvider> pProvider;
\r
133 HRESULT hr = pProvider.CoCreateInstance(m_provider_clsid);
\r
137 ShowBalloon(IDC_BUGTRAQPROVIDERCOMBO, IDS_ERR_MISSING_PROVIDER);
\r
141 VARIANT_BOOL valid;
\r
142 if (FAILED(hr = pProvider->ValidateParameters(GetSafeHwnd(), m_sParameters.AllocSysString(), &valid)))
\r
144 ShowBalloon(IDC_BUGTRAQPARAMETERS, IDS_ERR_PROVIDER_VALIDATE_FAILED);
\r
148 if (valid != VARIANT_TRUE)
\r
149 return; // It's assumed that the provider will have done this.
\r
151 CResizableStandAloneDialog::OnOK();
\r
154 void CSetBugTraqAdv::OnBnClickedBugTraqbrowse()
\r
156 CBrowseFolder browser;
\r
158 browser.SetInfo(CString(MAKEINTRESOURCE(IDS_SETTINGS_BUGTRAQ_SELECTFOLDERPATH)));
\r
159 browser.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
\r
160 if (browser.Show(m_hWnd, sPath) == CBrowseFolder::OK)
\r
167 void CSetBugTraqAdv::OnBnClickedHelp()
\r
172 CBugTraqAssociation CSetBugTraqAdv::GetAssociation() const
\r
174 return CBugTraqAssociation(m_sPath, m_provider_clsid, CBugTraqAssociations::LookupProviderName(m_provider_clsid), m_sParameters);
\r
177 void CSetBugTraqAdv::CheckHasOptions()
\r
179 m_provider_clsid = GUID_NULL;
\r
181 int index = m_cProviderCombo.GetCurSel();
\r
182 if (index != CB_ERR)
\r
184 CBugTraqProvider *provider = (CBugTraqProvider *)m_cProviderCombo.GetItemDataPtr(index);
\r
185 m_provider_clsid = provider->clsid;
\r
188 CComPtr<IBugTraqProvider2> pProvider;
\r
189 HRESULT hr = pProvider.CoCreateInstance(m_provider_clsid);
\r
193 VARIANT_BOOL hasOptions = VARIANT_FALSE;
\r
194 if (SUCCEEDED(hr = pProvider->HasOptions(&hasOptions)))
\r
196 if (hasOptions == VARIANT_TRUE)
\r
198 GetDlgItem(IDC_OPTIONS)->EnableWindow(TRUE);
\r
204 GetDlgItem(IDC_OPTIONS)->EnableWindow(FALSE);
\r
207 void CSetBugTraqAdv::OnCbnSelchangeBugtraqprovidercombo()
\r
212 void CSetBugTraqAdv::OnBnClickedOptions()
\r
214 m_provider_clsid = GUID_NULL;
\r
216 int index = m_cProviderCombo.GetCurSel();
\r
217 if (index != CB_ERR)
\r
219 CBugTraqProvider *provider = (CBugTraqProvider *)m_cProviderCombo.GetItemDataPtr(index);
\r
220 m_provider_clsid = provider->clsid;
\r
223 CComPtr<IBugTraqProvider2> pProvider;
\r
224 HRESULT hr = pProvider.CoCreateInstance(m_provider_clsid);
\r
230 GetDlgItemText(IDC_BUGTRAQPARAMETERS, p);
\r
231 BSTR params = p.AllocSysString();
\r
232 if (SUCCEEDED(hr = pProvider->ShowOptionsDialog(GetSafeHwnd(), params, &temp)))
\r
234 SetDlgItemText(IDC_BUGTRAQPARAMETERS, temp);
\r
236 SysFreeString(temp);
\r