void CFilterConditionsDialog::OnFilterTypeChange(wxCommandEvent& event) { int item; for (item = 0; item < (int)m_filterControls.size(); item++) { if (!m_filterControls[item].pType || m_filterControls[item].pType->GetId() != event.GetId()) continue; break; } if (item == (int)m_filterControls.size()) return; CFilterCondition& filter = m_currentFilter.filters[item]; t_filterType type = GetTypeFromTypeSelection(event.GetSelection()); if (type == filter.type) return; filter.type = type; if (filter.type == filter_size && filter.condition > 3) filter.condition = 0; else if (filter.type == filter_date && filter.condition > 3) filter.condition = 0; delete m_filterControls[item].pCondition; m_filterControls[item].pCondition = 0; MakeControls(filter, item); }
bool CFilterConditionsDialog::ValidateFilter(wxString& error, bool allow_empty /*=false*/) { const unsigned int size = m_currentFilter.filters.size(); if (!size) { if (allow_empty) return true; error = _("Each filter needs at least one condition."); return false; } wxASSERT(m_filterControls.size() == m_currentFilter.filters.size()); for (unsigned int i = 0; i < size; i++) { const CFilterControls& controls = m_filterControls[i]; enum t_filterType type = GetTypeFromTypeSelection(controls.pType->GetSelection()); if ((type == filter_name || type == filter_path) && controls.pValue->GetValue() == _T("")) { if (allow_empty) continue; m_pListCtrl->SelectLine(i); controls.pValue->SetFocus(); error = _("At least one filter condition is incomplete"); SetFilterCtrlState(false); return false; } else if (type == filter_size) { const wxString v = controls.pValue->GetValue(); if (v == _T("") && allow_empty) continue; long number; if (!v.ToLong(&number) || number < 0) { m_pListCtrl->SelectLine(i); controls.pValue->SetFocus(); error = _("Invalid size in condition"); SetFilterCtrlState(false); return false; } } } return true; }
CFilter CFilterConditionsDialog::GetFilter() { wxASSERT(m_filterControls.size() == m_currentFilter.filters.size()); CFilter filter; for (unsigned int i = 0; i < m_currentFilter.filters.size(); i++) { const CFilterControls& controls = m_filterControls[i]; CFilterCondition condition = m_currentFilter.filters[i]; condition.type = GetTypeFromTypeSelection(controls.pType->GetSelection()); condition.condition = controls.pCondition->GetSelection(); switch (condition.type) { case filter_name: case filter_path: if (controls.pValue->GetValue() == _T("")) continue; condition.strValue = controls.pValue->GetValue(); break; case filter_size: { if (controls.pValue->GetValue() == _T("")) continue; condition.strValue = controls.pValue->GetValue(); unsigned long tmp; condition.strValue.ToULong(&tmp); condition.value = tmp; } break; case filter_attributes: case filter_permissions: if (controls.pSet->GetSelection()) { condition.strValue = _T("0"); condition.value = 0; } else { condition.strValue = _T("1"); condition.value = 1; } break; case filter_date: if (controls.pValue->GetValue() == _T("")) continue; condition.strValue = controls.pValue->GetValue(); if (!condition.date.ParseFormat(condition.strValue, _T("%Y-%m-%d")) || !condition.date.IsValid()) continue; break; default: wxFAIL_MSG(_T("Unhandled condition")); break; } condition.matchCase = filter.matchCase; filter.filters.push_back(condition); } switch (XRCCTRL(*this, "ID_MATCHTYPE", wxChoice)->GetSelection()) { case 1: filter.matchType = CFilter::any; break; case 2: filter.matchType = CFilter::none; break; default: filter.matchType = CFilter::all; break; } return filter; }