void CFilterConditionsDialog::EditFilter(const CFilter& filter) { DestroyControls(); // Create new controls m_currentFilter = filter; if (m_currentFilter.filters.empty()) m_currentFilter.filters.push_back(CFilterCondition()); for (unsigned int i = 0; i < m_currentFilter.filters.size(); i++) { const CFilterCondition& cond = m_currentFilter.filters[i]; MakeControls(cond); } // Get correct coordinates wxSize client_size = m_pListCtrl->GetClientSize(); wxPoint pos; m_pListCtrl->CalcScrolledPosition(client_size.GetWidth() - 5 - m_button_size.x, (m_choiceBoxHeight + 6) * m_filterControls.size() + 3, &pos.x, &pos.y); if (!m_pAdd) m_pAdd = new wxButton(m_pListCtrl, wxID_ANY, _T("+"), pos, m_button_size); else m_pAdd->SetPosition(pos); m_pListCtrl->SetLineCount(m_filterControls.size() + 1); UpdateConditionsClientSize(); XRCCTRL(*this, "ID_MATCHTYPE", wxChoice)->SetSelection(filter.matchType); SetFilterCtrlState(false); }
void CFilterConditionsDialog::OnMore() { wxPoint pos = m_pAdd->GetPosition(); pos.y += m_choiceBoxHeight + 6; m_pAdd->SetPosition(pos); CFilterCondition cond; m_currentFilter.filters.push_back(cond); MakeControls(cond); m_pListCtrl->SetLineCount(m_filterControls.size() + 1); UpdateConditionsClientSize(); }
void CFilterConditionsDialog::OnMore() { wxPoint pos = m_pAdd->GetPosition(); pos.y += m_choiceBoxHeight + 6; m_pAdd->SetPosition(pos); CFilterCondition cond; m_currentFilter.filters.push_back(cond); MakeControls(cond); CFilterControls& controls = m_filterControls.back(); m_pAdd->MoveAfterInTabOrder(controls.pSet ? (wxWindow*)controls.pSet : (wxWindow*)controls.pValue); m_pListCtrl->SetLineCount(m_filterControls.size() + 1); UpdateConditionsClientSize(); }
void CFilterConditionsDialog::OnListSize(wxSizeEvent& event) { UpdateConditionsClientSize(); event.Skip(); }
void CFilterConditionsDialog::OnRemove(const std::set<int> &selected) { int delta_y = 0; m_pListCtrl->SetLineCount(m_filterControls.size() - selected.size() + 1); std::vector<CFilterControls> filterControls = m_filterControls; m_filterControls.clear(); std::vector<CFilterCondition> filters = m_currentFilter.filters; m_currentFilter.filters.clear(); for (unsigned int i = 0; i < filterControls.size(); i++) { CFilterControls& controls = filterControls[i]; if (selected.find(i) == selected.end()) { m_filterControls.push_back(controls); m_currentFilter.filters.push_back(filters[i]); // Reposition controls wxPoint pos; pos = controls.pType->GetPosition(); pos.y -= delta_y; controls.pType->SetPosition(pos); pos = controls.pCondition->GetPosition(); pos.y -= delta_y; controls.pCondition->SetPosition(pos); if (controls.pValue) { pos = controls.pValue->GetPosition(); pos.y -= delta_y; controls.pValue->SetPosition(pos); } if (controls.pSet) { pos = controls.pSet->GetPosition(); pos.y -= delta_y; controls.pSet->SetPosition(pos); } if (controls.pLabel) { pos = controls.pLabel->GetPosition(); pos.y -= delta_y; controls.pLabel->SetPosition(pos); } pos = controls.pRemove->GetPosition(); pos.y -= delta_y; controls.pRemove->SetPosition(pos); } else { controls.Reset(); delta_y += m_choiceBoxHeight + 6; } } wxPoint pos = m_pAdd->GetPosition(); pos.y -= delta_y; m_pAdd->SetPosition(pos); m_pListCtrl->ClearSelection(); UpdateConditionsClientSize(); SetFilterCtrlState(false); }