wxString GetTextElement_Trimmed(pugi::xml_node node) { wxString t = GetTextElement(node); t.Trim(true); t.Trim(false); return t; }
wxString GetTextElement_Trimmed(TiXmlElement* node, const char* name) { wxString t = GetTextElement(node, name); t.Trim(true); t.Trim(false); return t; }
bool CThemeProvider::GetThemeData(const wxString& themePath, wxString& name, wxString& author, wxString& email) { wxFileName fn(wxGetApp().GetResourceDir() + themePath, _T("theme.xml")); TiXmlElement* pDocument = GetXmlFile(fn.GetFullPath(), false); if (!pDocument) return false; TiXmlElement* pTheme = pDocument->FirstChildElement("Theme"); if (pTheme) { name = GetTextElement(pTheme, "Name"); author = GetTextElement(pTheme, "Author"); email = GetTextElement(pTheme, "Mail"); } delete pDocument->GetDocument(); return pTheme != 0; }
void CBookmarksDialog::LoadGlobalBookmarks() { CInterProcessMutex mutex(MUTEX_GLOBALBOOKMARKS); CXmlFile file(wxGetApp().GetSettingsFile(_T("bookmarks"))); TiXmlElement* pDocument = file.Load(); if (!pDocument) { wxMessageBoxEx(file.GetError(), _("Error loading xml file"), wxICON_ERROR); return; } for (TiXmlElement *pBookmark = pDocument->FirstChildElement("Bookmark"); pBookmark; pBookmark = pBookmark->NextSiblingElement("Bookmark")) { wxString name; wxString local_dir; wxString remote_dir_raw; CServerPath remote_dir; name = GetTextElement(pBookmark, "Name"); if (name.empty()) continue; local_dir = GetTextElement(pBookmark, "LocalDir"); remote_dir_raw = GetTextElement(pBookmark, "RemoteDir"); if (!remote_dir_raw.empty()) { if (!remote_dir.SetSafePath(remote_dir_raw)) continue; } if (local_dir.empty() && remote_dir.empty()) continue; bool sync; if (local_dir.empty() || remote_dir.empty()) sync = false; else sync = GetTextElementBool(pBookmark, "SyncBrowsing"); CBookmarkItemData *data = new CBookmarkItemData(local_dir, remote_dir, sync); m_pTree->AppendItem(m_bookmarks_global, name, 1, 1, data); } m_pTree->SortChildren(m_bookmarks_global); }
bool CImportDialog::ImportSites(TiXmlElement* pSitesToImport, TiXmlElement* pExistingSites) { for (TiXmlElement* pImportFolder = pSitesToImport->FirstChildElement("Folder"); pImportFolder; pImportFolder = pImportFolder->NextSiblingElement("Folder")) { wxString name = GetTextElement(pImportFolder); name.Trim(true); name.Trim(false); if (name == _T("")) continue; wxString newName = name; int i = 2; TiXmlElement* pFolder; while (!(pFolder = GetFolderWithName(pExistingSites, newName))) { newName = wxString::Format(_T("%s %d"), name.c_str(), i++); } ImportSites(pImportFolder, pFolder); } for (TiXmlElement* pImportSite = pSitesToImport->FirstChildElement("Server"); pImportSite; pImportSite = pImportSite->NextSiblingElement("Server")) { wxString name = GetTextElement(pImportSite); name.Trim(true); name.Trim(false); if (name == _T("")) continue; // Find free name wxString newName = name; int i = 2; while (HasEntryWithName(pExistingSites, newName)) { newName = wxString::Format(_T("%s %d"), name.c_str(), i++); } TiXmlElement* pServer = pExistingSites->InsertEndChild(*pImportSite)->ToElement(); AddTextElement(pServer, newName); } return true; }
bool CImportDialog::HasEntryWithName(TiXmlElement* pElement, const wxString& name) { TiXmlElement* pChild; for (pChild = pElement->FirstChildElement("Server"); pChild; pChild = pChild->NextSiblingElement("Server")) { wxString childName = GetTextElement(pChild); childName.Trim(true); childName.Trim(false); if (!name.CmpNoCase(childName)) return true; } for (pChild = pElement->FirstChildElement("Folder"); pChild; pChild = pChild->NextSiblingElement("Folder")) { wxString childName = GetTextElement(pChild); childName.Trim(true); childName.Trim(false); if (!name.CmpNoCase(childName)) return true; } return false; }
bool CBookmarksDialog::AddBookmark(const wxString &name, const wxString &local_dir, const CServerPath &remote_dir, bool sync) { if (local_dir.empty() && remote_dir.empty()) return false; if ((local_dir.empty() || remote_dir.empty()) && sync) return false; CInterProcessMutex mutex(MUTEX_GLOBALBOOKMARKS); CXmlFile file(wxGetApp().GetSettingsFile(_T("bookmarks"))); TiXmlElement* pDocument = file.Load(); if (!pDocument) { wxString msg = file.GetError() + _T("\n\n") + _("The bookmark could not be added."); wxMessageBoxEx(msg, _("Error loading xml file"), wxICON_ERROR); return false; } TiXmlElement *pInsertBefore = 0; TiXmlElement *pBookmark; for (pBookmark = pDocument->FirstChildElement("Bookmark"); pBookmark; pBookmark = pBookmark->NextSiblingElement("Bookmark")) { wxString remote_dir_raw; wxString old_name = GetTextElement(pBookmark, "Name"); if (!name.CmpNoCase(old_name)) { wxMessageBoxEx(_("Name of bookmark already exists."), _("New bookmark"), wxICON_EXCLAMATION); return false; } if (name < old_name && !pInsertBefore) pInsertBefore = pBookmark; } if (pInsertBefore) pBookmark = pDocument->InsertBeforeChild(pInsertBefore, TiXmlElement("Bookmark"))->ToElement(); else pBookmark = pDocument->LinkEndChild(new TiXmlElement("Bookmark"))->ToElement(); AddTextElement(pBookmark, "Name", name); if (!local_dir.empty()) AddTextElement(pBookmark, "LocalDir", local_dir); if (!remote_dir.empty()) AddTextElement(pBookmark, "RemoteDir", remote_dir.GetSafePath()); if (sync) AddTextElementRaw(pBookmark, "SyncBrowsing", "1"); if (!file.Save(false)) { wxString msg = wxString::Format(_("Could not write \"%s\", the bookmark could not be added: %s"), file.GetFileName(), file.GetError()); wxMessageBoxEx(msg, _("Error writing xml file"), wxICON_ERROR); return false; } return true; }
bool CBookmarksDialog::GetBookmark(const wxString &name, wxString &local_dir, CServerPath &remote_dir, bool &sync) { CInterProcessMutex mutex(MUTEX_GLOBALBOOKMARKS); CXmlFile file(wxGetApp().GetSettingsFile(_T("bookmarks"))); TiXmlElement* pDocument = file.Load(); if (!pDocument) { wxMessageBoxEx(file.GetError(), _("Error loading xml file"), wxICON_ERROR); return false; } for (TiXmlElement *pBookmark = pDocument->FirstChildElement("Bookmark"); pBookmark; pBookmark = pBookmark->NextSiblingElement("Bookmark")) { wxString remote_dir_raw; if (name != GetTextElement(pBookmark, "Name")) continue; local_dir = GetTextElement(pBookmark, "LocalDir"); remote_dir_raw = GetTextElement(pBookmark, "RemoteDir"); if (!remote_dir_raw.empty()) { if (!remote_dir.SetSafePath(remote_dir_raw)) return false; } if (local_dir.empty() && remote_dir_raw.empty()) return false; if (local_dir.empty() || remote_dir_raw.empty()) sync = false; else sync = GetTextElementBool(pBookmark, "SyncBrowsing", false); return true; } return false; }
bool CBookmarksDialog::GetBookmarks(std::list<wxString> &bookmarks) { CInterProcessMutex mutex(MUTEX_GLOBALBOOKMARKS); CXmlFile file(wxGetApp().GetSettingsFile(_T("bookmarks"))); TiXmlElement* pDocument = file.Load(); if (!pDocument) { wxMessageBoxEx(file.GetError(), _("Error loading xml file"), wxICON_ERROR); return false; } for (TiXmlElement *pBookmark = pDocument->FirstChildElement("Bookmark"); pBookmark; pBookmark = pBookmark->NextSiblingElement("Bookmark")) { wxString name; wxString local_dir; wxString remote_dir_raw; CServerPath remote_dir; name = GetTextElement(pBookmark, "Name"); if (name.empty()) continue; local_dir = GetTextElement(pBookmark, "LocalDir"); remote_dir_raw = GetTextElement(pBookmark, "RemoteDir"); if (!remote_dir_raw.empty()) { if (!remote_dir.SetSafePath(remote_dir_raw)) continue; } if (local_dir.empty() && remote_dir.empty()) continue; bookmarks.push_back(name); } return true; }
TiXmlElement* CImportDialog::GetFolderWithName(TiXmlElement* pElement, const wxString& name) { TiXmlElement* pChild; for (pChild = pElement->FirstChildElement("Server"); pChild; pChild = pChild->NextSiblingElement("Server")) { wxString childName = GetTextElement(pChild); childName.Trim(true); childName.Trim(false); if (!name.CmpNoCase(childName)) return 0; } for (pChild = pElement->FirstChildElement("Folder"); pChild; pChild = pChild->NextSiblingElement("Folder")) { wxString childName = GetTextElement(pChild); childName.Trim(true); childName.Trim(false); if (!name.CmpNoCase(childName)) return pChild; } pChild = pElement->LinkEndChild(new TiXmlElement("Folder"))->ToElement(); AddTextElement(pChild, name); return pChild; }
// Builds a box for the first word of the element. void LayoutInlineBoxText::BuildWordBox() { ElementText* text_element = GetTextElement(); ROCKET_ASSERT(text_element != NULL); FontFaceHandle* font_face_handle = text_element->GetFontFaceHandle(); if (font_face_handle == NULL) { height = 0; baseline = 0; Log::Message(Log::LT_WARNING, "No font face defined on element %s. Please specify a font-family in your RCSS.", text_element->GetAddress().CString()); return; } Vector2f content_area; line_segmented = !text_element->GenerateToken(content_area.x, line_begin); content_area.y = (float) ElementUtilities::GetLineHeight(element); box.SetContent(content_area); }
void COptions::LoadGlobalDefaultOptions() { const wxString& defaultsDir = wxGetApp().GetDefaultsDir(); if (defaultsDir == _T("")) return; wxFileName name(defaultsDir, _T("fzdefaults.xml")); CXmlFile file(name); if (!file.Load()) return; TiXmlElement* pElement = file.GetElement(); if (!pElement) return; pElement = pElement->FirstChildElement("Settings"); if (!pElement) return; for (TiXmlElement* pSetting = pElement->FirstChildElement("Setting"); pSetting; pSetting = pSetting->NextSiblingElement("Setting")) { wxString name = GetTextAttribute(pSetting, "name"); for (int i = 0; i < DEFAULTS_NUM; i++) { if (name != default_options[i].name) continue; wxString value = GetTextElement(pSetting); if (default_options[i].type == string) default_options[i].value_str = value; else { long v = 0; if (!value.ToLong(&v)) v = 0; default_options[i].value_number = v; } } } }
void COptions::LoadOptionFromElement(pugi::xml_node option, std::map<std::string, unsigned int> const& nameOptionMap, bool allowDefault) { const char* name = option.attribute("name").value(); if (!name) { return; } auto const iter = nameOptionMap.find(name); if (iter != nameOptionMap.end()) { if (!allowDefault && options[iter->second].flags == default_only) { return; } std::wstring value = GetTextElement(option); if (options[iter->second].flags == default_priority) { if (allowDefault) { fz::scoped_lock l(m_sync_); m_optionsCache[iter->second].from_default = true; } else { fz::scoped_lock l(m_sync_); if (m_optionsCache[iter->second].from_default) { return; } } } if (options[iter->second].type == number) { int numValue = fz::to_integral<int>(value); numValue = Validate(iter->second, numValue); fz::scoped_lock l(m_sync_); m_optionsCache[iter->second] = numValue; } else { value = Validate(iter->second, value); fz::scoped_lock l(m_sync_); m_optionsCache[iter->second] = value; } } }
// Flows the inline box's content into its parent line. LayoutInlineBox* LayoutInlineBoxText::FlowContent(bool first_box, float available_width, float right_spacing_width) { ElementText* text_element = GetTextElement(); ROCKET_ASSERT(text_element != NULL); int line_length; float line_width; bool overflow = !text_element->GenerateLine(line_contents, line_length, line_width, line_begin, available_width, right_spacing_width, first_box); Vector2f content_area; content_area.x = line_width; content_area.y = box.GetSize().y; box.SetContent(content_area); // Call the base-class's FlowContent() to increment the width of our parent's box. LayoutInlineBox::FlowContent(first_box, available_width, right_spacing_width); if (overflow) return new LayoutInlineBoxText(element, line_begin + line_length); return NULL; }
bool GetServer(pugi::xml_node node, CServer& server) { wxASSERT(node); std::wstring host = GetTextElement(node, "Host"); if (host.empty()) { return false; } int port = GetTextElementInt(node, "Port"); if (port < 1 || port > 65535) { return false; } if (!server.SetHost(host, port)) { return false; } int const protocol = GetTextElementInt(node, "Protocol"); if (protocol < 0 || protocol > ServerProtocol::MAX_VALUE) { return false; } server.SetProtocol(static_cast<ServerProtocol>(protocol)); int type = GetTextElementInt(node, "Type"); if (type < 0 || type >= SERVERTYPE_MAX) { return false; } server.SetType(static_cast<ServerType>(type)); int logonType = GetTextElementInt(node, "Logontype"); if (logonType < 0 || logonType >= LOGONTYPE_MAX) { return false; } server.SetLogonType(static_cast<LogonType>(logonType)); if (server.GetLogonType() != ANONYMOUS) { std::wstring user = GetTextElement(node, "User"); std::wstring pass, key; if ((long)NORMAL == logonType || (long)ACCOUNT == logonType) { auto passElement = node.child("Pass"); if (passElement) { std::wstring encoding = GetTextAttribute(passElement, "encoding"); if (encoding == _T("base64")) { std::string decoded = fz::base64_decode(passElement.child_value()); pass = fz::to_wstring_from_utf8(decoded); } else if (!encoding.empty()) { server.SetLogonType(ASK); } else { pass = GetTextElement(passElement); } } } else if ((long)KEY == logonType) { key = GetTextElement(node, "Keyfile"); // password should be empty if we're using a key file pass.clear(); server.SetKeyFile(key); } if (!server.SetUser(user, pass)) { return false; } if ((long)ACCOUNT == logonType) { std::wstring account = GetTextElement(node, "Account"); if (account.empty()) { return false; } if (!server.SetAccount(account)) { return false; } } } int timezoneOffset = GetTextElementInt(node, "TimezoneOffset"); if (!server.SetTimezoneOffset(timezoneOffset)) { return false; } wxString pasvMode = GetTextElement(node, "PasvMode"); if (pasvMode == _T("MODE_PASSIVE")) server.SetPasvMode(MODE_PASSIVE); else if (pasvMode == _T("MODE_ACTIVE")) server.SetPasvMode(MODE_ACTIVE); else server.SetPasvMode(MODE_DEFAULT); int maximumMultipleConnections = GetTextElementInt(node, "MaximumMultipleConnections"); server.MaximumMultipleConnections(maximumMultipleConnections); wxString encodingType = GetTextElement(node, "EncodingType"); if (encodingType == _T("Auto")) { server.SetEncodingType(ENCODING_AUTO); } else if (encodingType == _T("UTF-8")) { server.SetEncodingType(ENCODING_UTF8); } else if (encodingType == _T("Custom")) { std::wstring customEncoding = GetTextElement(node, "CustomEncoding"); if (customEncoding.empty()) { return false; } if (!server.SetEncodingType(ENCODING_CUSTOM, customEncoding)) { return false; } } else { server.SetEncodingType(ENCODING_AUTO); } if (CServer::SupportsPostLoginCommands(server.GetProtocol())) { std::vector<std::wstring> postLoginCommands; auto element = node.child("PostLoginCommands"); if (element) { for (auto commandElement = element.child("Command"); commandElement; commandElement = commandElement.next_sibling("Command")) { std::wstring command = fz::to_wstring_from_utf8(commandElement.child_value()); if (!command.empty()) { postLoginCommands.emplace_back(std::move(command)); } } } if (!server.SetPostLoginCommands(postLoginCommands)) { return false; } } server.SetBypassProxy(GetTextElementInt(node, "BypassProxy", false) == 1); server.SetName(GetTextElement_Trimmed(node, "Name")); if (server.GetName().empty()) { server.SetName(GetTextElement_Trimmed(node)); } return true; }
std::wstring GetTextElement_Trimmed(pugi::xml_node node) { return fz::trimmed(GetTextElement(node)); }
std::wstring GetTextElement_Trimmed(pugi::xml_node node, const char* name) { return fz::trimmed(GetTextElement(node, name)); }
char * TMultiFontTextGadget :: GetTextElement ( char * text, int & size, LOGFONT & oldfont, LOGFONT & newfont, COLORREF oldfore, COLORREF oldback, COLORREF & newfore, COLORREF & newback ) { char FormatBuffer [ 256 ] ; register char * TextStart ; register char * p ; // Récupérer les paramètres TextStart = GetTextElement ( text, FormatBuffer, size ) ; // S'il n'y a pas de changement de paramètres, on peut retourner tout de suite if ( ! * FormatBuffer ) return ( TextStart ) ; // Remplacer les virgules du format par des zeros for ( p = FormatBuffer ; * p ; p ++ ) { if ( * p == ',' ) * p = 0 ; } * p = 0 ; // Deux zéros à la fin // Interpréter chaque format for ( p = FormatBuffer ; * p ; p += strlen ( p ) + 1 ) { register char * semicolon = strchr ( p, ':' ) ; register char * param = 0 ; // Remplacer l'éventuel ':' par un zéro, de manière à avoir deux // pointeurs sur des chaînes terminées par 0 (un pour le mot-clé, // l'autre pour le paramètre éventuel) if ( semicolon ) { * semicolon = 0 ; param = semicolon + 1 ; } // Intérprétation des mots-clé : // Graisse if ( match ( "Weight" ) || match ( "W" ) ) { if ( param ) newfont. lfWeight = atoi ( param ) ; else newfont. lfWeight = oldfont. lfWeight ; } // Souligné else if ( match ( "Underline" ) || match ( "U" ) ) { if ( param ) newfont. lfUnderline = atoi ( param ) ? 1 : 0 ; else newfont. lfUnderline = oldfont. lfUnderline ; } // Italique else if ( match ( "Italic" ) || match ( "I" ) ) { if ( param ) newfont. lfItalic = atoi ( param ) ? 1 : 0 ; else newfont. lfItalic = oldfont. lfItalic ; } // Hauteur de police else if ( match ( "Height" ) || match ( "H" ) ) { if ( param ) { if ( * param == '+' ) newfont. lfHeight += atoi ( param + 1 ) ; else if ( * param == '-' ) newfont. lfHeight -= atoi ( param + 1 ) ; else newfont. lfHeight = atoi ( param ) ; } else newfont. lfHeight = oldfont. lfHeight ; } // Nom de la police else if ( match ( "Font" ) || match ( "F" ) ) { if ( param ) strcpy ( newfont. lfFaceName, param ) ; else strcpy ( newfont. lfFaceName, oldfont. lfFaceName ) ; } // Couleur de fond else if ( match ( "Background" ) || match ( "Back" ) || match ( "Bk" ) ) { if ( param ) newback = atol ( param ) ; else newback = oldback ; } // Couleur de texte else if ( match ( "Foreground" ) || match ( "Fore" ) ) { if ( param ) newfore = atol ( param ) ; else newfore = oldfore ; } // Rétablir le ':' pour que le strlen ( p ) + 1 se calcule bien if ( semicolon ) * semicolon = ':' ; } return ( TextStart ) ; }
void CFilterManager::LoadFilters() { if (m_loaded) { m_filters = m_globalFilters; m_filterSets = m_globalFilterSets; m_currentFilterSet = m_globalCurrentFilterSet; return; } m_loaded = true; CInterProcessMutex mutex(MUTEX_FILTERS); wxFileName file(wxGetApp().GetSettingsDir(), _T("filters.xml")); if (!file.FileExists()) { wxFileName defaults(wxGetApp().GetResourceDir(), _T("defaultfilters.xml")); if (defaults.FileExists()) { TiXmlElement* pDocument = GetXmlFile(defaults); if (pDocument) SaveXmlFile(file, pDocument); } } TiXmlElement* pDocument = GetXmlFile(file); if (!pDocument) { wxString msg = wxString::Format(_("Could not load \"%s\", please make sure the file is valid and can be accessed.\nAny changes made in the Site Manager could not be saved."), file.GetFullPath().c_str()); wxMessageBox(msg, _("Error loading xml file"), wxICON_ERROR); return; } TiXmlElement *pFilters = pDocument->FirstChildElement("Filters"); if (!pFilters) { delete pDocument->GetDocument(); return; } TiXmlElement *pFilter = pFilters->FirstChildElement("Filter"); while (pFilter) { CFilter filter; filter.name = GetTextElement(pFilter, "Name"); if (filter.name == _T("")) { pFilter = pFilter->NextSiblingElement("Filter"); continue; } filter.filterFiles = GetTextElement(pFilter, "ApplyToFiles") == _T("1"); filter.filterDirs = GetTextElement(pFilter, "ApplyToDirs") == _T("1"); wxString type = GetTextElement(pFilter, "MatchType"); if (type == _T("Any")) filter.matchType = CFilter::any; else if (type == _T("None")) filter.matchType = CFilter::none; else filter.matchType = CFilter::all; filter.matchCase = GetTextElement(pFilter, "MatchCase") == _T("1"); TiXmlElement *pConditions = pFilter->FirstChildElement("Conditions"); if (!pConditions) { pFilter = pFilter->NextSiblingElement("Filter"); continue; } TiXmlElement *pCondition = pConditions->FirstChildElement("Condition"); while (pCondition) { CFilterCondition condition; int type = GetTextElementInt(pCondition, "Type", 0); if (type < 0 || type >= filterType_size) { pCondition = pCondition->NextSiblingElement("Condition"); continue; } condition.type = (enum t_filterType)type; condition.condition = GetTextElementInt(pCondition, "Condition", 0); condition.strValue = GetTextElement(pCondition, "Value"); condition.matchCase = filter.matchCase; if (condition.strValue == _T("")) { pCondition = pCondition->NextSiblingElement("Condition"); continue; } // TODO: 64bit filesize if (condition.type == size) { unsigned long tmp; condition.strValue.ToULong(&tmp); condition.value = tmp; } else if (condition.type == attributes || condition.type == permissions) { if (condition.strValue == _T("0")) condition.value = 0; else condition.value = 1; } filter.filters.push_back(condition); pCondition = pCondition->NextSiblingElement("Condition"); } if (!filter.filters.empty()) m_globalFilters.push_back(filter); pFilter = pFilter->NextSiblingElement("Filter"); } m_filters = m_globalFilters; TiXmlElement* pSets = pDocument->FirstChildElement("Sets"); if (!pSets) { delete pDocument->GetDocument(); return; } for (TiXmlElement* pSet = pSets->FirstChildElement("Set"); pSet; pSet = pSet->NextSiblingElement("Set")) { CFilterSet set; TiXmlElement* pItem = pSet->FirstChildElement("Item"); while (pItem) { wxString local = GetTextElement(pItem, "Local"); wxString remote = GetTextElement(pItem, "Remote"); set.local.push_back(local == _T("1") ? true : false); set.remote.push_back(remote == _T("1") ? true : false); pItem = pItem->NextSiblingElement("Item"); } if (!m_globalFilterSets.empty()) { set.name = GetTextElement(pSet, "Name"); if (set.name == _T("")) continue; } if (set.local.size() == m_filters.size()) m_globalFilterSets.push_back(set); } m_filterSets = m_globalFilterSets; wxString attribute = GetTextAttribute(pSets, "Current"); unsigned long value; if (attribute.ToULong(&value)) { if (value < m_globalFilterSets.size()) m_globalCurrentFilterSet = value; } m_currentFilterSet = m_globalCurrentFilterSet; delete pDocument->GetDocument(); }
bool CFilterManager::LoadFilter(TiXmlElement* pElement, CFilter& filter) { filter.name = GetTextElement(pElement, "Name"); filter.filterFiles = GetTextElement(pElement, "ApplyToFiles") == _T("1"); filter.filterDirs = GetTextElement(pElement, "ApplyToDirs") == _T("1"); wxString const matchType = GetTextElement(pElement, "MatchType"); if (matchType == _T("Any")) filter.matchType = CFilter::any; else if (matchType == _T("None")) filter.matchType = CFilter::none; else filter.matchType = CFilter::all; filter.matchCase = GetTextElement(pElement, "MatchCase") == _T("1"); TiXmlElement *pConditions = pElement->FirstChildElement("Conditions"); if (!pConditions) return false; for (TiXmlElement *pCondition = pConditions->FirstChildElement("Condition"); pCondition; pCondition = pCondition->NextSiblingElement("Condition")) { CFilterCondition condition; int const type = GetTextElementInt(pCondition, "Type", 0); switch (type) { case 0: condition.type = filter_name; break; case 1: condition.type = filter_size; break; case 2: condition.type = filter_attributes; break; case 3: condition.type = filter_permissions; break; case 4: condition.type = filter_path; break; case 5: condition.type = filter_date; break; default: continue; } condition.condition = GetTextElementInt(pCondition, "Condition", 0); if (condition.type == filter_size) { if (condition.value == 3) condition.value = 2; else if (condition.value >= 2) ++condition.value; } condition.strValue = GetTextElement(pCondition, "Value"); condition.matchCase = filter.matchCase; if (condition.strValue.empty()) continue; if (condition.type == filter_size) { unsigned long long tmp; condition.strValue.ToULongLong(&tmp); condition.value = tmp; } else if (condition.type == filter_attributes || condition.type == filter_permissions) { if (condition.strValue == _T("0")) condition.value = 0; else condition.value = 1; } else if (condition.type == filter_date) { condition.date = CDateTime(condition.strValue, CDateTime::local); if (!condition.date.IsValid()) { continue; } } filter.filters.push_back(condition); } return true; }
void TMultiFontTextGadget :: SetText ( char * text ) { register char * p = text ; LOGFONT CurrentFont, NewFont ; COLORREF OldFore, OldBack, Fore, Back ; int size, total_size = 0 ; // Effacer les entrées de texte précédentes DeleteEntries ( ) ; if ( ! text ) goto Return ; // Récupérer les paramètres de la police du gadget, ainsi que les couleurs du texte { GetFont ( ). GetObject ( CurrentFont ) ; NewFont = CurrentFont ; OldBack = 0xFFFFFFFFL ; OldFore = 0xFFFFFFFFL ; Fore = OldFore ; Back = OldBack ; } // Traiter tous les formats while ( * p ) { // Récupérer le prochain élément de texte p = GetTextElement ( p, size, CurrentFont, NewFont, OldFore, OldBack, Fore, Back ) ; // Allouer un nouvel élément dans la liste chaînée TTextEntry * te = new TTextEntry ; // Initialiser la structure te -> Font = new TFont ( & NewFont ) ; te -> ForegroundColor = Fore ; te -> BackgroundColor = Back ; te -> TextLength = size ; te -> Text = new char [size+1] ; te -> Next = 0 ; strncpy ( te -> Text, p, size ) ; te -> Text [size] = 0 ; p += size ; // L'ajouter dans la liste chaînée if ( TextEntries ) { LastTextEntry -> Next = te ; LastTextEntry = te ; } else TextEntries = LastTextEntry = te ; } Return : // Supprimer l'ancien texte if ( Text ) delete [] Text ; // Et le reconstituer avec les nouveaux éléments if ( total_size ) { Text = p = new char [ total_size + 1 ] ; for ( TTextEntry * te = TextEntries ; te ; te = te -> Next ) { strcpy ( p, te -> Text ) ; p += te -> TextLength + 1 ; } } else Text = 0 ; // Indiquer qu'il y a eu un changement de taille Window -> GadgetChangedSize ( * this ) ; }
bool CSiteManager::Load(TiXmlElement *pElement, CSiteManagerXmlHandler* pHandler) { wxASSERT(pElement); wxASSERT(pHandler); for (TiXmlElement* pChild = pElement->FirstChildElement(); pChild; pChild = pChild->NextSiblingElement()) { if (!strcmp(pChild->Value(), "Folder")) { wxString name = GetTextElement_Trimmed(pChild); if (name.empty()) continue; const bool expand = GetTextAttribute(pChild, "expanded") != _T("0"); if (!pHandler->AddFolder(name, expand)) return false; Load(pChild, pHandler); if (!pHandler->LevelUp()) return false; } else if (!strcmp(pChild->Value(), "Server")) { CSiteManagerItemData_Site* data = ReadServerElement(pChild); if (data) { pHandler->AddSite(data); // Bookmarks for (TiXmlElement* pBookmark = pChild->FirstChildElement("Bookmark"); pBookmark; pBookmark = pBookmark->NextSiblingElement("Bookmark")) { TiXmlHandle handle(pBookmark); wxString name = GetTextElement_Trimmed(pBookmark, "Name"); if (name.empty()) continue; CSiteManagerItemData* data = new CSiteManagerItemData(CSiteManagerItemData::BOOKMARK); TiXmlText* localDir = handle.FirstChildElement("LocalDir").FirstChild().Text(); if (localDir) data->m_localDir = GetTextElement(pBookmark, "LocalDir"); TiXmlText* remoteDir = handle.FirstChildElement("RemoteDir").FirstChild().Text(); if (remoteDir) data->m_remoteDir.SetSafePath(ConvLocal(remoteDir->Value())); if (data->m_localDir.empty() && data->m_remoteDir.IsEmpty()) { delete data; continue; } if (!data->m_localDir.empty() && !data->m_remoteDir.IsEmpty()) data->m_sync = GetTextElementBool(pBookmark, "SyncBrowsing", false); pHandler->AddBookmark(name, data); } if (!pHandler->LevelUp()) return false; } } } return true; }
bool GetServer(TiXmlElement *node, CServer& server) { wxASSERT(node); wxString host = GetTextElement(node, "Host"); if (host.empty()) return false; int port = GetTextElementInt(node, "Port"); if (port < 1 || port > 65535) return false; if (!server.SetHost(host, port)) return false; int const protocol = GetTextElementInt(node, "Protocol"); if (protocol < 0 || protocol > ServerProtocol::MAX_VALUE) { return false; } server.SetProtocol(static_cast<ServerProtocol>(protocol)); int type = GetTextElementInt(node, "Type"); if (type < 0 || type >= SERVERTYPE_MAX) return false; server.SetType((enum ServerType)type); int logonType = GetTextElementInt(node, "Logontype"); if (logonType < 0) return false; server.SetLogonType((enum LogonType)logonType); if (server.GetLogonType() != ANONYMOUS) { wxString user = GetTextElement(node, "User"); wxString pass; if ((long)NORMAL == logonType || (long)ACCOUNT == logonType) pass = GetTextElement(node, "Pass"); if (!server.SetUser(user, pass)) return false; if ((long)ACCOUNT == logonType) { wxString account = GetTextElement(node, "Account"); if (account.empty()) return false; if (!server.SetAccount(account)) return false; } } int timezoneOffset = GetTextElementInt(node, "TimezoneOffset"); if (!server.SetTimezoneOffset(timezoneOffset)) return false; wxString pasvMode = GetTextElement(node, "PasvMode"); if (pasvMode == _T("MODE_PASSIVE")) server.SetPasvMode(MODE_PASSIVE); else if (pasvMode == _T("MODE_ACTIVE")) server.SetPasvMode(MODE_ACTIVE); else server.SetPasvMode(MODE_DEFAULT); int maximumMultipleConnections = GetTextElementInt(node, "MaximumMultipleConnections"); server.MaximumMultipleConnections(maximumMultipleConnections); wxString encodingType = GetTextElement(node, "EncodingType"); if (encodingType == _T("Auto")) server.SetEncodingType(ENCODING_AUTO); else if (encodingType == _T("UTF-8")) server.SetEncodingType(ENCODING_UTF8); else if (encodingType == _T("Custom")) { wxString customEncoding = GetTextElement(node, "CustomEncoding"); if (customEncoding.empty()) return false; if (!server.SetEncodingType(ENCODING_CUSTOM, customEncoding)) return false; } else server.SetEncodingType(ENCODING_AUTO); if (CServer::SupportsPostLoginCommands(server.GetProtocol())) { std::vector<wxString> postLoginCommands; TiXmlElement* pElement = node->FirstChildElement("PostLoginCommands"); if (pElement) { TiXmlElement* pCommandElement = pElement->FirstChildElement("Command"); while (pCommandElement) { TiXmlNode* textNode = pCommandElement->FirstChild(); if (textNode && textNode->ToText()) { wxString command = ConvLocal(textNode->Value()); if (!command.empty()) postLoginCommands.push_back(command); } pCommandElement = pCommandElement->NextSiblingElement("Command"); } } if (!server.SetPostLoginCommands(postLoginCommands)) return false; } server.SetBypassProxy(GetTextElementInt(node, "BypassProxy", false) == 1); server.SetName(GetTextElement_Trimmed(node, "Name")); if (server.GetName().empty()) server.SetName(GetTextElement_Trimmed(node)); return true; }
void CFilterManager::LoadFilters() { if (m_loaded) return; m_loaded = true; CInterProcessMutex mutex(MUTEX_FILTERS); wxString file(wxGetApp().GetSettingsFile(_T("filters"))); if (CLocalFileSystem::GetSize(file) < 1) { file = wxGetApp().GetResourceDir().GetPath() + _T("defaultfilters.xml"); } CXmlFile xml(file); TiXmlElement* pDocument = xml.Load(); if (!pDocument) { wxString msg = xml.GetError() + _T("\n\n") + _("Any changes made to the filters will not be saved."); wxMessageBoxEx(msg, _("Error loading xml file"), wxICON_ERROR); return; } TiXmlElement *pFilters = pDocument->FirstChildElement("Filters"); if (!pFilters) return; TiXmlElement *pFilter = pFilters->FirstChildElement("Filter"); while (pFilter) { CFilter filter; bool loaded = LoadFilter(pFilter, filter); if (loaded && !filter.name.empty() && !filter.filters.empty()) m_globalFilters.push_back(filter); pFilter = pFilter->NextSiblingElement("Filter"); } CompileRegexes(); TiXmlElement* pSets = pDocument->FirstChildElement("Sets"); if (!pSets) return; for (TiXmlElement* pSet = pSets->FirstChildElement("Set"); pSet; pSet = pSet->NextSiblingElement("Set")) { CFilterSet set; TiXmlElement* pItem = pSet->FirstChildElement("Item"); while (pItem) { wxString local = GetTextElement(pItem, "Local"); wxString remote = GetTextElement(pItem, "Remote"); set.local.push_back(local == _T("1") ? true : false); set.remote.push_back(remote == _T("1") ? true : false); pItem = pItem->NextSiblingElement("Item"); } if (!m_globalFilterSets.empty()) { set.name = GetTextElement(pSet, "Name"); if (set.name.empty()) continue; } if (set.local.size() == m_globalFilters.size()) m_globalFilterSets.push_back(set); } wxString attribute = GetTextAttribute(pSets, "Current"); unsigned long value; if (attribute.ToULong(&value)) { if (value < m_globalFilterSets.size()) m_globalCurrentFilterSet = value; } }
void CFilterManager::LoadFilters() { if (m_loaded) return; m_loaded = true; CInterProcessMutex mutex(MUTEX_FILTERS); wxFileName file(wxGetApp().GetSettingsDir(), _T("filters.xml")); if (!file.FileExists()) { wxFileName defaults(wxGetApp().GetResourceDir(), _T("defaultfilters.xml")); if (defaults.FileExists()) { TiXmlElement* pDocument = GetXmlFile(defaults); if (pDocument) { SaveXmlFile(file, pDocument); delete pDocument->GetDocument(); } } } CXmlFile xml(file); TiXmlElement* pDocument = xml.Load(); if (!pDocument) { wxString msg = xml.GetError() + _T("\n\n") + _("Any changes made to the filters will not be saved."); wxMessageBox(msg, _("Error loading xml file"), wxICON_ERROR); return; } TiXmlElement *pFilters = pDocument->FirstChildElement("Filters"); if (!pFilters) return; TiXmlElement *pFilter = pFilters->FirstChildElement("Filter"); while (pFilter) { CFilter filter; filter.name = GetTextElement(pFilter, "Name"); if (filter.name == _T("")) { pFilter = pFilter->NextSiblingElement("Filter"); continue; } filter.filterFiles = GetTextElement(pFilter, "ApplyToFiles") == _T("1"); filter.filterDirs = GetTextElement(pFilter, "ApplyToDirs") == _T("1"); wxString type = GetTextElement(pFilter, "MatchType"); if (type == _T("Any")) filter.matchType = CFilter::any; else if (type == _T("None")) filter.matchType = CFilter::none; else filter.matchType = CFilter::all; filter.matchCase = GetTextElement(pFilter, "MatchCase") == _T("1"); TiXmlElement *pConditions = pFilter->FirstChildElement("Conditions"); if (!pConditions) { pFilter = pFilter->NextSiblingElement("Filter"); continue; } TiXmlElement *pCondition = pConditions->FirstChildElement("Condition"); while (pCondition) { CFilterCondition condition; int type = GetTextElementInt(pCondition, "Type", 0); switch (type) { case 0: condition.type = filter_name; break; case 1: condition.type = filter_size; break; case 2: condition.type = filter_attributes; break; case 3: condition.type = filter_permissions; break; case 4: condition.type = filter_path; break; default: pCondition = pCondition->NextSiblingElement("Condition"); continue; } condition.condition = GetTextElementInt(pCondition, "Condition", 0); condition.strValue = GetTextElement(pCondition, "Value"); condition.matchCase = filter.matchCase; if (condition.strValue == _T("")) { pCondition = pCondition->NextSiblingElement("Condition"); continue; } // TODO: 64bit filesize if (condition.type == filter_size) { unsigned long tmp; condition.strValue.ToULong(&tmp); condition.value = tmp; } else if (condition.type == filter_attributes || condition.type == filter_permissions) { if (condition.strValue == _T("0")) condition.value = 0; else condition.value = 1; } filter.filters.push_back(condition); pCondition = pCondition->NextSiblingElement("Condition"); } if (!filter.filters.empty()) m_globalFilters.push_back(filter); pFilter = pFilter->NextSiblingElement("Filter"); } CompileRegexes(); TiXmlElement* pSets = pDocument->FirstChildElement("Sets"); if (!pSets) return; for (TiXmlElement* pSet = pSets->FirstChildElement("Set"); pSet; pSet = pSet->NextSiblingElement("Set")) { CFilterSet set; TiXmlElement* pItem = pSet->FirstChildElement("Item"); while (pItem) { wxString local = GetTextElement(pItem, "Local"); wxString remote = GetTextElement(pItem, "Remote"); set.local.push_back(local == _T("1") ? true : false); set.remote.push_back(remote == _T("1") ? true : false); pItem = pItem->NextSiblingElement("Item"); } if (!m_globalFilterSets.empty()) { set.name = GetTextElement(pSet, "Name"); if (set.name == _T("")) continue; } if (set.local.size() == m_globalFilters.size()) m_globalFilterSets.push_back(set); } wxString attribute = GetTextAttribute(pSets, "Current"); unsigned long value; if (attribute.ToULong(&value)) { if (value < m_globalFilterSets.size()) m_globalCurrentFilterSet = value; } }
void CVerifyCertDialog::LoadTrustedCerts() { CReentrantInterProcessMutexLocker mutex(MUTEX_TRUSTEDCERTS); if (!m_xmlFile.Modified()) { return; } auto element = m_xmlFile.Load(); if (!element) { return; } m_trustedCerts.clear(); if (!(element = element.child("TrustedCerts"))) return; bool modified = false; auto cert = element.child("Certificate"); while (cert) { wxString value = GetTextElement(cert, "Data"); pugi::xml_node remove; t_certData data; if (value.empty() || !(data.data = ConvertStringToHex(value, data.len))) remove = cert; data.host = GetTextElement(cert, "Host"); data.port = GetTextElementInt(cert, "Port"); if (data.host.empty() || data.port < 1 || data.port > 65535) remove = cert; int64_t activationTime = GetTextElementInt(cert, "ActivationTime", 0); if (activationTime == 0 || activationTime > wxDateTime::GetTimeNow()) remove = cert; int64_t expirationTime = GetTextElementInt(cert, "ExpirationTime", 0); if (expirationTime == 0 || expirationTime < wxDateTime::GetTimeNow()) remove = cert; if (IsTrusted(data.host, data.port, data.data, data.len, true)) // Weed out duplicates remove = cert; if (!remove) m_trustedCerts.push_back(data); else delete [] data.data; cert = cert.next_sibling("Certificate"); if (remove) { modified = true; element.remove_child(remove); } } if (modified) m_xmlFile.Save(false); }
wxString CSiteManager::AddServer(CServer server) { // We have to synchronize access to sitemanager.xml so that multiple processed don't write // to the same file or one is reading while the other one writes. CInterProcessMutex mutex(MUTEX_SITEMANAGER); CXmlFile file; TiXmlElement* pDocument = file.Load(_T("sitemanager")); if (!pDocument) { wxString msg = file.GetError() + _T("\n") + _("The server could not be added."); wxMessageBox(msg, _("Error loading xml file"), wxICON_ERROR); return _T(""); } TiXmlElement* pElement = pDocument->FirstChildElement("Servers"); if (!pElement) return _T(""); std::list<wxString> names; for (TiXmlElement* pChild = pElement->FirstChildElement("Server"); pChild; pChild = pChild->NextSiblingElement("Server")) { wxString name = GetTextElement(pChild, "Name"); if (name.empty()) continue; names.push_back(name); } wxString name = _("New site"); int i = 1; for (;;) { std::list<wxString>::const_iterator iter; for (iter = names.begin(); iter != names.end(); ++iter) { if (*iter == name) break; } if (iter == names.end()) break; name = _("New site") + wxString::Format(_T(" %d"), ++i); } server.SetName(name); TiXmlElement* pServer = pElement->LinkEndChild(new TiXmlElement("Server"))->ToElement(); SetServer(pServer, server); char* utf8 = ConvUTF8(name); if (utf8) { pServer->LinkEndChild(new TiXmlText(utf8)); delete [] utf8; } wxString error; if (!file.Save(&error)) { if (COptions::Get()->GetOptionVal(OPTION_DEFAULT_KIOSKMODE) == 2) return _T(""); wxString msg = wxString::Format(_("Could not write \"%s\", any changes to the Site Manager could not be saved: %s"), file.GetFileName().GetFullPath().c_str(), error.c_str()); wxMessageBox(msg, _("Error writing xml file"), wxICON_ERROR); return _T(""); } return _T("0/") + EscapeSegment(name); }
void CVerifyCertDialog::LoadTrustedCerts() { CReentrantInterProcessMutexLocker mutex(MUTEX_TRUSTEDCERTS); if (!m_xmlFile.Modified()) { return; } TiXmlElement* pElement = m_xmlFile.Load(); if (!pElement) { return; } m_trustedCerts.clear(); if (!(pElement = pElement->FirstChildElement("TrustedCerts"))) return; bool modified = false; TiXmlElement* pCert = pElement->FirstChildElement("Certificate"); while (pCert) { wxString value = GetTextElement(pCert, "Data"); TiXmlElement* pRemove = 0; t_certData data; if (value.empty() || !(data.data = ConvertStringToHex(value, data.len))) pRemove = pCert; data.host = GetTextElement(pCert, "Host"); data.port = GetTextElementInt(pCert, "Port"); if (data.host.empty() || data.port < 1 || data.port > 65535) pRemove = pCert; wxLongLong activationTime = GetTextElementLongLong(pCert, "ActivationTime", 0); if (activationTime == 0 || activationTime > wxDateTime::GetTimeNow()) pRemove = pCert; wxLongLong expirationTime = GetTextElementLongLong(pCert, "ExpirationTime", 0); if (expirationTime == 0 || expirationTime < wxDateTime::GetTimeNow()) pRemove = pCert; if (IsTrusted(data.host, data.port, data.data, data.len, true)) // Weed out duplicates pRemove = pCert; if (!pRemove) m_trustedCerts.push_back(data); else delete [] data.data; pCert = pCert->NextSiblingElement("Certificate"); if (pRemove) { modified = true; pElement->RemoveChild(pRemove); } } if (modified) m_xmlFile.Save(false); }