1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2016 - TortoiseGit
4 // Copyright (C) 2008 - 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 "SetBugTraq.h"
22 #include "SetBugTraqAdv.h"
24 IMPLEMENT_DYNAMIC(CSetBugTraq
, ISettingsPropPage
)
26 CSetBugTraq::CSetBugTraq()
27 : ISettingsPropPage(CSetBugTraq::IDD
)
31 CSetBugTraq::~CSetBugTraq()
35 void CSetBugTraq::DoDataExchange(CDataExchange
* pDX
)
37 ISettingsPropPage::DoDataExchange(pDX
);
38 DDX_Control(pDX
, IDC_BUGTRAQLIST
, m_cBugTraqList
);
42 BEGIN_MESSAGE_MAP(CSetBugTraq
, ISettingsPropPage
)
43 ON_BN_CLICKED(IDC_BUGTRAQREMOVEBUTTON
, &CSetBugTraq::OnBnClickedRemovebutton
)
44 ON_BN_CLICKED(IDC_BUGTRAQEDITBUTTON
, &CSetBugTraq::OnBnClickedEditbutton
)
45 ON_BN_CLICKED(IDC_BUGTRAQADDBUTTON
, &CSetBugTraq::OnBnClickedAddbutton
)
46 ON_BN_CLICKED(IDC_BUGTRAQCOPYBUTTON
, &CSetBugTraq::OnBnClickedBugTraqcopybutton
)
47 ON_NOTIFY(LVN_ITEMCHANGED
, IDC_BUGTRAQLIST
, &CSetBugTraq::OnLvnItemchangedBugTraqlist
)
48 ON_NOTIFY(NM_DBLCLK
, IDC_BUGTRAQLIST
, &CSetBugTraq::OnNMDblclkBugTraqlist
)
51 BOOL
CSetBugTraq::OnInitDialog()
53 ISettingsPropPage::OnInitDialog();
55 m_associations
.Load();
57 m_cBugTraqList
.SetExtendedStyle((CRegDWORD(L
"Software\\TortoiseGit\\FullRowSelect", TRUE
) ? LVS_EX_FULLROWSELECT
: 0) | LVS_EX_DOUBLEBUFFER
| LVS_EX_INFOTIP
| LVS_EX_CHECKBOXES
);
59 // clear all previously set header columns
60 m_cBugTraqList
.DeleteAllItems();
61 int c
= m_cBugTraqList
.GetHeaderCtrl()->GetItemCount() - 1;
63 m_cBugTraqList
.DeleteColumn(c
--);
65 // now set up the requested columns
68 temp
.LoadString(IDS_SETTINGS_BUGTRAQ_PATHCOL
);
69 m_cBugTraqList
.InsertColumn(0, temp
);
70 temp
.LoadString(IDS_SETTINGS_BUGTRAQ_PROVIDERCOL
);
71 m_cBugTraqList
.InsertColumn(1, temp
);
72 temp
.LoadString(IDS_SETTINGS_BUGTRAQ_PARAMETERSCOL
);
73 m_cBugTraqList
.InsertColumn(2, temp
);
75 SetWindowTheme(m_hWnd
, L
"Explorer", nullptr);
82 void CSetBugTraq::RebuildBugTraqList()
84 m_cBugTraqList
.SetRedraw(false);
85 m_cBugTraqList
.DeleteAllItems();
87 // fill the list control with all the hooks
88 for (CBugTraqAssociations::const_iterator it
= m_associations
.begin(); it
!= m_associations
.end(); ++it
)
90 int pos
= m_cBugTraqList
.InsertItem(m_cBugTraqList
.GetItemCount(), (*it
)->GetPath().GetWinPathString());
91 m_cBugTraqList
.SetCheck(pos
, (*it
)->IsEnabled());
92 m_cBugTraqList
.SetItemText(pos
, 1, (*it
)->GetProviderName());
93 m_cBugTraqList
.SetItemText(pos
, 2, (*it
)->GetParameters());
94 m_cBugTraqList
.SetItemData(pos
, (DWORD_PTR
)*it
);
97 int maxcol
= m_cBugTraqList
.GetHeaderCtrl()->GetItemCount() - 1;
98 for (int col
= 0; col
<= maxcol
; col
++)
99 m_cBugTraqList
.SetColumnWidth(col
, LVSCW_AUTOSIZE_USEHEADER
);
100 m_cBugTraqList
.SetRedraw(true);
103 void CSetBugTraq::OnBnClickedRemovebutton()
105 // traversing from the end to the beginning so that the indices are not skipped
106 int index
= m_cBugTraqList
.GetItemCount()-1;
109 if (m_cBugTraqList
.GetItemState(index
, LVIS_SELECTED
) & LVIS_SELECTED
)
111 auto assoc
= reinterpret_cast<CBugTraqAssociation
*>(m_cBugTraqList
.GetItemData(index
));
114 RebuildBugTraqList();
117 m_cBugTraqList
.DeleteItem(index
);
118 m_associations
.Remove(assoc
);
125 void CSetBugTraq::OnBnClickedEditbutton()
127 if (m_cBugTraqList
.GetSelectedCount() != 1)
130 int index
= m_cBugTraqList
.GetNextItem(-1, LVNI_SELECTED
);
134 auto assoc
= reinterpret_cast<CBugTraqAssociation
*>(m_cBugTraqList
.GetItemData(index
));
138 CSetBugTraqAdv
dlg(*assoc
);
139 if (dlg
.DoModal() == IDOK
)
141 m_associations
.Remove(assoc
);
142 m_associations
.Add(dlg
.GetAssociation());
143 RebuildBugTraqList();
148 void CSetBugTraq::OnBnClickedAddbutton()
151 if (dlg
.DoModal() == IDOK
)
153 m_associations
.Add(dlg
.GetAssociation());
154 RebuildBugTraqList();
159 void CSetBugTraq::OnLvnItemchangedBugTraqlist(NMHDR
* pNMHDR
, LRESULT
* pResult
)
161 UINT count
= m_cBugTraqList
.GetSelectedCount();
162 GetDlgItem(IDC_BUGTRAQREMOVEBUTTON
)->EnableWindow(count
> 0);
163 GetDlgItem(IDC_BUGTRAQEDITBUTTON
)->EnableWindow(count
== 1);
164 GetDlgItem(IDC_BUGTRAQCOPYBUTTON
)->EnableWindow(count
== 1);
167 LPNMLISTVIEW pNMLV
= reinterpret_cast<LPNMLISTVIEW
>(pNMHDR
);
168 if ((pNMLV
->uOldState
== 0) || (pNMLV
->uNewState
== 0) || (pNMLV
->uNewState
& LVIS_SELECTED
) || (pNMLV
->uNewState
& LVIS_FOCUSED
) || pNMLV
->iItem
< 0)
171 auto assoc
= reinterpret_cast<CBugTraqAssociation
*>(m_cBugTraqList
.GetItemData(pNMLV
->iItem
));
174 if (assoc
->SetEnabled(m_cBugTraqList
.GetCheck(pNMLV
->iItem
) == BST_CHECKED
))
178 void CSetBugTraq::OnNMDblclkBugTraqlist(NMHDR
* /*pNMHDR*/, LRESULT
*pResult
)
180 OnBnClickedEditbutton();
184 BOOL
CSetBugTraq::OnApply()
187 m_associations
.Save();
189 return ISettingsPropPage::OnApply();
192 void CSetBugTraq::OnBnClickedBugTraqcopybutton()
194 if (m_cBugTraqList
.GetSelectedCount() != 1)
197 int index
= m_cBugTraqList
.GetNextItem(-1, LVNI_SELECTED
);
201 auto assoc
= reinterpret_cast<CBugTraqAssociation
*>(m_cBugTraqList
.GetItemData(index
));
205 CSetBugTraqAdv
dlg(*assoc
);
206 if (dlg
.DoModal() == IDOK
)
208 m_associations
.Add(dlg
.GetAssociation());
209 RebuildBugTraqList();