void CFilterDialog::SaveFilters() { CInterProcessMutex mutex(MUTEX_FILTERS); CXmlFile xml(wxGetApp().GetSettingsFile(_T("filters"))); TiXmlElement* pDocument = xml.Load(); if (!pDocument) { wxString msg = xml.GetError() + _T("\n\n") + _("Any changes made to the filters could not be saved."); wxMessageBoxEx(msg, _("Error loading xml file"), wxICON_ERROR); return; } TiXmlElement *pFilters = pDocument->FirstChildElement("Filters"); while (pFilters) { pDocument->RemoveChild(pFilters); pFilters = pDocument->FirstChildElement("Filters"); } pFilters = pDocument->LinkEndChild(new TiXmlElement("Filters"))->ToElement(); for (auto const& filter : m_globalFilters) { TiXmlElement* pElement = new TiXmlElement("Filter"); SaveFilter(pElement, filter); pFilters->LinkEndChild(pElement); } TiXmlElement *pSets = pDocument->FirstChildElement("Sets"); while (pSets) { pDocument->RemoveChild(pSets); pSets = pDocument->FirstChildElement("Sets"); } pSets = pDocument->LinkEndChild(new TiXmlElement("Sets"))->ToElement(); SetTextAttribute(pSets, "Current", wxString::Format(_T("%d"), m_currentFilterSet)); for (auto const& set : m_globalFilterSets) { TiXmlElement* pSet = pSets->LinkEndChild(new TiXmlElement("Set"))->ToElement(); if (!set.name.empty()) { AddTextElement(pSet, "Name", set.name); } for (unsigned int i = 0; i < set.local.size(); ++i) { TiXmlElement* pItem = pSet->LinkEndChild(new TiXmlElement("Item"))->ToElement(); AddTextElement(pItem, "Local", set.local[i] ? _T("1") : _T("0")); AddTextElement(pItem, "Remote", set.remote[i] ? _T("1") : _T("0")); } } xml.Save(true); m_filters_disabled = false; }
void CFilterEditDialog::OnCopy(wxCommandEvent& event) { if (m_currentSelection == -1) return; if (!Validate()) return; SaveFilter(m_filters[m_currentSelection]); CFilter filter = m_filters[m_currentSelection]; int index = 1; const wxString& name = filter.name; wxString newName = name; while (m_pFilterListCtrl->FindString(newName) != wxNOT_FOUND) newName = wxString::Format(_T("%s (%d)"), name.c_str(), ++index); wxTextEntryDialog dlg(this, _("Please enter a new name for the copied filter."), _("Enter filter name"), newName); if (dlg.ShowModal() != wxID_OK) return; newName = dlg.GetValue(); if (newName == _T("")) { wxMessageBox(_("Empty filter names are not allowed."), _("Empty name"), wxICON_ERROR, this); return; } if (m_pFilterListCtrl->FindString(newName) != wxNOT_FOUND) { wxMessageBox(_("The entered filter name already exists."), _("Duplicate filter name"), wxICON_ERROR, this); return; } filter.name = newName; m_filters.push_back(filter); for (std::vector<CFilterSet>::iterator iter = m_filterSets.begin(); iter != m_filterSets.end(); iter++) { CFilterSet& set = *iter; set.local.push_back(false); set.remote.push_back(false); } int item = m_pFilterListCtrl->Append(newName); m_pFilterListCtrl->Select(item); wxCommandEvent evt; OnFilterSelect(evt); }
void HighlightFiles::SaveHiData() { if (!Changed) return; Changed = false; string strRegKey, strGroupName; const wchar_t *KeyNames[4]={HighlightKeyName,SortGroupsKeyName,SortGroupsKeyName,HighlightKeyName}; const wchar_t *GroupNames[4]={fmtFirstGroup,fmtUpperGroup,fmtLowerGroup,fmtLastGroup}; const int Count[4][2] = { {0, FirstCount}, {FirstCount, FirstCount+UpperCount}, {FirstCount+UpperCount, FirstCount+UpperCount+LowerCount}, {FirstCount+UpperCount+LowerCount,FirstCount+UpperCount+LowerCount+LastCount} }; HierarchicalConfig *cfg = CreateHighlightConfig(); unsigned __int64 root = cfg->GetKeyID(0, HighlightKeyName); if (root) cfg->DeleteKeyTree(root); root = cfg->GetKeyID(0, SortGroupsKeyName); if (root) cfg->DeleteKeyTree(root); for (int j=0; j<4; j++) { root = cfg->CreateKey(0, KeyNames[j]); if (!root) continue; for (int i=Count[j][0]; i<Count[j][1]; i++) { strGroupName.Format(GroupNames[j],i-Count[j][0]); unsigned __int64 key = cfg->CreateKey(root,strGroupName); if (!key) break; FileFilterParams *CurHiData=HiData.getItem(i); SaveFilter(cfg,key,CurHiData,(!j || j==3)?false:true); } } delete cfg; }
void CFilterEditDialog::OnOK(wxCommandEvent& event) { if (!Validate()) return; if (m_currentSelection != -1) { wxASSERT((unsigned int)m_currentSelection < m_filters.size()); SaveFilter(m_filters[m_currentSelection]); } for (unsigned int i = 0; i < m_filters.size(); i++) { if (!m_filters[i].HasConditionOfType(filter_permissions) && !m_filters[i].HasConditionOfType(filter_attributes)) continue; for (unsigned int j = 0; j < m_filterSets.size(); j++) m_filterSets[j].remote[i] = false; } EndModal(wxID_OK); }
void CFilterEditDialog::OnFilterSelect(wxCommandEvent& event) { int item = m_pFilterListCtrl->GetSelection(); if (item == -1) { m_currentSelection = -1; SetCtrlState(false); return; } else SetCtrlState(true); if (item == m_currentSelection) return; if (m_currentSelection != -1) { wxASSERT((unsigned int)m_currentSelection < m_filters.size()); if (!Validate()) return; SaveFilter(m_filters[m_currentSelection]); } m_currentSelection = item; m_pFilterListCtrl->SetSelection(item); // In case SaveFilter has renamed an item CFilter filter = m_filters[item]; EditFilter(filter); XRCCTRL(*this, "ID_CASE", wxCheckBox)->SetValue(filter.matchCase); XRCCTRL(*this, "ID_FILES", wxCheckBox)->SetValue(filter.filterFiles); XRCCTRL(*this, "ID_DIRS", wxCheckBox)->SetValue(filter.filterDirs); XRCCTRL(*this, "ID_NAME", wxTextCtrl)->SetValue(filter.name); }
void CFilterDialog::SaveFilters() { CInterProcessMutex mutex(MUTEX_FILTERS); wxFileName file(COptions::Get()->GetOption(OPTION_DEFAULT_SETTINGSDIR), _T("filters.xml")); CXmlFile xml(file); TiXmlElement* pDocument = xml.Load(); if (!pDocument) { wxString msg = xml.GetError() + _T("\n\n") + _("Any changes made to the filters could not be saved."); wxMessageBox(msg, _("Error loading xml file"), wxICON_ERROR); return; } TiXmlElement *pFilters = pDocument->FirstChildElement("Filters"); while (pFilters) { pDocument->RemoveChild(pFilters); pFilters = pDocument->FirstChildElement("Filters"); } pFilters = pDocument->LinkEndChild(new TiXmlElement("Filters"))->ToElement(); for (std::vector<CFilter>::const_iterator iter = m_globalFilters.begin(); iter != m_globalFilters.end(); iter++) { const CFilter& filter = *iter; TiXmlElement* pElement = new TiXmlElement("Filter"); SaveFilter(pElement, filter); pFilters->LinkEndChild(pElement); } TiXmlElement *pSets = pDocument->FirstChildElement("Sets"); while (pSets) { pDocument->RemoveChild(pSets); pSets = pDocument->FirstChildElement("Sets"); } pSets = pDocument->LinkEndChild(new TiXmlElement("Sets"))->ToElement(); SetTextAttribute(pSets, "Current", wxString::Format(_T("%d"), m_currentFilterSet)); for (std::vector<CFilterSet>::const_iterator iter = m_globalFilterSets.begin(); iter != m_globalFilterSets.end(); iter++) { const CFilterSet& set = *iter; TiXmlElement* pSet = pSets->LinkEndChild(new TiXmlElement("Set"))->ToElement(); if (iter != m_globalFilterSets.begin()) AddTextElement(pSet, "Name", set.name); for (unsigned int i = 0; i < set.local.size(); i++) { TiXmlElement* pItem = pSet->LinkEndChild(new TiXmlElement("Item"))->ToElement(); AddTextElement(pItem, "Local", set.local[i] ? _T("1") : _T("0")); AddTextElement(pItem, "Remote", set.remote[i] ? _T("1") : _T("0")); } } xml.Save(); m_filters_disabled = false; }