#include "sdk_precomp.h" #include #include #include #include #include #include "globals.h" #include "multiselectdlg.h" BEGIN_EVENT_TABLE(MultiSelectDlg, wxDialog) EVT_CHECKLISTBOX(XRCID("lstItems"), MultiSelectDlg::OnItemToggle) EVT_BUTTON(XRCID("btnSelectWild"), MultiSelectDlg::OnWildcard) EVT_BUTTON(XRCID("btnToggle"), MultiSelectDlg::OnToggle) END_EVENT_TABLE() MultiSelectDlg::MultiSelectDlg(wxWindow* parent, const wxArrayString& items, const wxString& wildcard, const wxString& label, const wxString& title) { //ctor wxXmlResource::Get()->LoadDialog(this, parent, _T("dlgGenericMultiSelect")); SetTitle(title); XRCCTRL(*this, "lblLabel", wxStaticText)->SetLabel(label); Init(items, wildcard); } MultiSelectDlg::MultiSelectDlg(wxWindow* parent, const wxArrayString& items, bool selectall, const wxString& label, const wxString& title) { //ctor wxXmlResource::Get()->LoadDialog(this, parent, _T("dlgGenericMultiSelect")); SetTitle(title); XRCCTRL(*this, "lblLabel", wxStaticText)->SetLabel(label); Init(items, selectall ? _T("*") : _T("")); } MultiSelectDlg::~MultiSelectDlg() { //dtor } void MultiSelectDlg::Init(const wxArrayString& items, const wxString& wildcard) { wxCheckListBox* lst = XRCCTRL(*this, "lstItems", wxCheckListBox); for (size_t i = 0; i < items.GetCount(); ++i) { lst->Append(items[i]); } SelectWildCard(wildcard); } void MultiSelectDlg::UpdateStatus() { int count = 0; wxCheckListBox* lst = XRCCTRL(*this, "lstItems", wxCheckListBox); for (int i = 0; i < lst->GetCount(); ++i) { if (lst->IsChecked(i)) ++count; } wxString msg; msg << _("Selected: ") << count; XRCCTRL(*this, "lblStatus", wxStaticText)->SetLabel(msg); } wxArrayString MultiSelectDlg::GetSelectedStrings() { wxArrayString ret; wxCheckListBox* lst = XRCCTRL(*this, "lstItems", wxCheckListBox); for (int i = 0; i < lst->GetCount(); ++i) { if (lst->IsChecked(i)) ret.Add(lst->GetString(i)); } return ret; } wxArrayInt MultiSelectDlg::GetSelectedIndices() { wxArrayInt ret; wxCheckListBox* lst = XRCCTRL(*this, "lstItems", wxCheckListBox); for (int i = 0; i < lst->GetCount(); ++i) { if (lst->IsChecked(i)) ret.Add(i); } return ret; } void MultiSelectDlg::SelectWildCard(const wxString& wild, bool select, bool clearOld) { if (wild.IsEmpty()) return; wxArrayString wilds = GetArrayFromString(wild, _T(";")); wxCheckListBox* lst = XRCCTRL(*this, "lstItems", wxCheckListBox); for (int i = 0; i < lst->GetCount(); ++i) { if (clearOld || !lst->IsChecked(i)) { wxString entry = lst->GetString(i).Lower(); for (unsigned int x = 0; x < wilds.GetCount(); ++x) { if (entry.Matches(wilds[x])) { lst->Check(i, select); break; } } } } UpdateStatus(); } void MultiSelectDlg::OnWildcard(wxCommandEvent& event) { wxString wild = wxGetTextFromUser(_("Enter a selection wildcard\n(e.g. \"dlg*.cpp\" " "would select all files starting with \"dlg\" and " "ending in \".cpp\")\nSeparate multiple masks with \";\":"), _("Wildcard selection")); if (wild.IsEmpty()) return; bool clear = wxMessageBox(_("Do you want to clear the previous selections?"), _("Question"), wxICON_QUESTION | wxYES_NO) == wxYES; SelectWildCard(wild, true, clear); } void MultiSelectDlg::OnItemToggle(wxCommandEvent& event) { UpdateStatus(); } void MultiSelectDlg::OnToggle(wxCommandEvent& event) { wxCheckListBox* lst = XRCCTRL(*this, "lstItems", wxCheckListBox); for (int i = 0; i < lst->GetCount(); ++i) { lst->Check(i, !lst->IsChecked(i)); } UpdateStatus(); }