diff options
240 files changed, 5013 insertions, 23846 deletions
diff --git a/FreeFileSync/Build/Changelog.txt b/FreeFileSync/Build/Changelog.txt index f3a74ea2..c8b029a7 100644 --- a/FreeFileSync/Build/Changelog.txt +++ b/FreeFileSync/Build/Changelog.txt @@ -1,5 +1,21 @@ -FreeFileSync 6.1 ----------------- +FreeFileSync 6.2 [2014-02-01] +----------------------------- +New synchronization progress graph +Skip binary comparison for files excluded via time span or size +Fixed configuration panel ordering for entries starting with numbers +Filled gap after last grid column to cover full window width +Workaround wxWidgets image button bug showing obsolete disabled state +Refined file existence checks to handle restricted permissions +Disable file filter button during comparison +Fixed mouse wheel grid scrolling for GTK2 (Linux) +Avoid dummy texts during progress dialog init (OS X) +Translated external application default commands in global settings +Support cancel while encoding extended time information +Highlight non-zero synchronization statistics + + +FreeFileSync 6.1 [2014-01-01] +----------------------------- Released RealtimeSync for OS X Handle errors loading reference batch config Disable user mode exception swallowing for Windows 7 SP1 diff --git a/FreeFileSync/Build/Help/html/Exclude Items.html b/FreeFileSync/Build/Help/html/Exclude Items.html index 65142cc7..c5c71088 100644 --- a/FreeFileSync/Build/Help/html/Exclude Items.html +++ b/FreeFileSync/Build/Help/html/Exclude Items.html @@ -9,9 +9,12 @@ <H2>Exclude Items</H2> -<P>Files and directories are only considered for synchronization if they pass +<P> +<IMG SRC="../img/filter.png"><BR> +<BR> +Files and directories are only considered for synchronization if they pass all filter rules. They have to match <B>at least one</B> entry in the -include list and <B>none</B> of the entries in the exclude list: +include list and <B>none</B> of the entries in the exclude list as presented in the filter configuration dialog: </P> <div class="greybox"> diff --git a/FreeFileSync/Build/Help/img/filter.png b/FreeFileSync/Build/Help/img/filter.png Binary files differnew file mode 100644 index 00000000..3fa08441 --- /dev/null +++ b/FreeFileSync/Build/Help/img/filter.png diff --git a/FreeFileSync/Build/Languages/german.lng b/FreeFileSync/Build/Languages/german.lng index 26534798..0670a54f 100644 --- a/FreeFileSync/Build/Languages/german.lng +++ b/FreeFileSync/Build/Languages/german.lng @@ -7,6 +7,12 @@ <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> +<source>Detect synchronization directions with the help of database files</source> +<target></target> + +<source>Binary comparison was skipped for excluded files %x.</source> +<target>Der binäre Vergleich wurde für die ausgeschlossenen Dateien %x übersprungen.</target> + <source>Both sides have changed since last synchronization.</source> <target>Beide Seiten wurden seit der letzten Synchronisation verändert.</target> @@ -44,7 +50,7 @@ <target>Lösche Symbolischen Link %x</target> <source>The recycle bin is not available for the following folders. Files will be deleted permanently instead:</source> -<target>Der Papierkorb ist für die folgenden Ordner nicht verfügbar. Die Dateien werden stattdessen permanent gelöscht:</target> +<target>Der Papierkorb ist für die folgenden Ordner nicht verfügbar. Dateien werden stattdessen permanent gelöscht:</target> <source>An exception occurred</source> <target>Eine Ausnahme ist aufgetreten</target> @@ -295,9 +301,6 @@ <source>%x items/sec</source> <target>%x Elemente/sek</target> -<source>Configuration file %x loaded partially only.</source> -<target>Die Konfigurationsdatei %x wurde nur teilweise geladen.</target> - <source>Show in Explorer</source> <target>Im Explorer anzeigen</target> @@ -328,9 +331,6 @@ <source>Unable to create timestamp for versioning:</source> <target>Der Zeitstempel für die Versionierung kann nicht erstellt werden:</target> -<source>Cannot read the following XML elements:</source> -<target>Die folgenden XML-Elemente können nicht gelesen werden:</target> - <source>&Open...</source> <target>Ö&ffnen...</target> @@ -558,6 +558,9 @@ Die Befehlszeile wird ausgelöst, wenn: <source>Saving log file %x...</source> <target>Speichere Protokolldatei %x...</target> +<source>Stopped</source> +<target>Angehalten</target> + <source>You can switch to FreeFileSync's main window to resolve this issue.</source> <target>Sie können auf FreeFileSyncs Hauptfenster wechseln, um das Problem zu beheben.</target> @@ -1145,12 +1148,12 @@ Dadurch wird ein konsistenter Datenstand auch im schweren Fehlerfall garantiert. <source>Exclude via filter:</source> <target>Über Filter ausschließen:</target> -<source>Exclude temporarily</source> -<target>Temporär ausschließen</target> - <source>Include temporarily</source> <target>Temporär einschließen</target> +<source>Exclude temporarily</source> +<target>Temporär ausschließen</target> + <source>Delete</source> <target>Löschen</target> @@ -1295,9 +1298,6 @@ Dadurch wird ein konsistenter Datenstand auch im schweren Fehlerfall garantiert. <source>Initializing...</source> <target>Initialisiere...</target> -<source>Stopped</source> -<target>Angehalten</target> - <source>Completed</source> <target>Fertig</target> @@ -1526,3 +1526,9 @@ Dadurch wird ein konsistenter Datenstand auch im schweren Fehlerfall garantiert. <source>Error Code %x:</source> <target>Fehlercode %x:</target> +<source>Cannot read the following XML elements:</source> +<target>Die folgenden XML-Elemente können nicht gelesen werden:</target> + +<source>Configuration file %x loaded partially only.</source> +<target>Die Konfigurationsdatei %x wurde nur teilweise geladen.</target> + diff --git a/FreeFileSync/Source/Makefile b/FreeFileSync/Source/Makefile index 19057c79..9f61a76a 100644 --- a/FreeFileSync/Source/Makefile +++ b/FreeFileSync/Source/Makefile @@ -109,7 +109,7 @@ CPP_LIST+=lib/perf_check.cpp CPP_LIST+=lib/status_handler.cpp CPP_LIST+=lib/versioning.cpp CPP_LIST+=lib/ffs_paths.cpp -CPP_LIST+=lib/xml_base.cpp +CPP_LIST+=../../zen/xml_io.cpp CPP_LIST+=../../zen/recycler.cpp CPP_LIST+=../../zen/file_handling.cpp CPP_LIST+=../../zen/file_io.cpp diff --git a/FreeFileSync/Source/RealtimeSync/Makefile b/FreeFileSync/Source/RealtimeSync/Makefile index f40a4561..b2515b29 100644 --- a/FreeFileSync/Source/RealtimeSync/Makefile +++ b/FreeFileSync/Source/RealtimeSync/Makefile @@ -58,7 +58,6 @@ CPP_LIST+=gui_generated.cpp CPP_LIST+=main_dlg.cpp CPP_LIST+=tray_menu.cpp CPP_LIST+=monitor.cpp -CPP_LIST+=xml_ffs.cpp CPP_LIST+=xml_proc.cpp CPP_LIST+=../structures.cpp CPP_LIST+=../ui/dir_name.cpp @@ -66,8 +65,8 @@ CPP_LIST+=../ui/folder_history_box.cpp CPP_LIST+=../lib/localization.cpp CPP_LIST+=../lib/process_xml.cpp CPP_LIST+=../lib/resolve_path.cpp -CPP_LIST+=../lib/xml_base.cpp CPP_LIST+=../lib/ffs_paths.cpp +CPP_LIST+=../../../zen/xml_io.cpp CPP_LIST+=../../../zen/dir_watcher.cpp CPP_LIST+=../../../zen/file_handling.cpp CPP_LIST+=../../../zen/file_io.cpp diff --git a/FreeFileSync/Source/RealtimeSync/application.cpp b/FreeFileSync/Source/RealtimeSync/application.cpp index e5bed7f3..cb315e62 100644 --- a/FreeFileSync/Source/RealtimeSync/application.cpp +++ b/FreeFileSync/Source/RealtimeSync/application.cpp @@ -14,7 +14,7 @@ #include <wx+/string_conv.h> #include <wx+/popup_dlg.h> #include <wx+/image_resources.h> -#include "xml_ffs.h" +#include "xml_proc.h" #include "../lib/localization.h" #include "../lib/ffs_paths.h" #include "../lib/return_codes.h" @@ -109,7 +109,8 @@ void Application::onEnterEventLoop(wxEvent& event) try { - setLanguage(rts::getProgramLanguage()); //throw FileError + int lid = xmlAccess::getProgramLanguage(); + setLanguage(lid); //throw FileError } catch (const FileError& e) { diff --git a/FreeFileSync/Source/RealtimeSync/main_dlg.cpp b/FreeFileSync/Source/RealtimeSync/main_dlg.cpp index 5a6302ef..23cb4c66 100644 --- a/FreeFileSync/Source/RealtimeSync/main_dlg.cpp +++ b/FreeFileSync/Source/RealtimeSync/main_dlg.cpp @@ -9,7 +9,6 @@ #include <wx/filedlg.h> #include <wx+/bitmap_button.h> #include <wx+/string_conv.h> -#include <wx+/mouse_move_dlg.h> #include <wx+/font_size.h> #include <wx+/popup_dlg.h> #include <wx+/image_resources.h> @@ -18,13 +17,15 @@ #include <zen/build_info.h> #include "xml_proc.h" #include "tray_menu.h" -#include "xml_ffs.h" #include "app_icon.h" #include "../lib/help_provider.h" #include "../lib/process_xml.h" #include "../lib/ffs_paths.h" -#ifdef ZEN_LINUX +#ifdef ZEN_WIN +#include <wx+/mouse_move_dlg.h> + +#elif defined ZEN_LINUX #include <gtk/gtk.h> #elif defined ZEN_MAC #include <ApplicationServices/ApplicationServices.h> @@ -102,15 +103,17 @@ MainDialog::MainDialog(wxDialog* dlg, const Zstring& cfgFileName) if (!cfgFileName.empty() || fileExists(lastConfigFileName())) try { - rts::readRealOrBatchConfig(currentConfigFile, newConfig); //throw FfsXmlError - loadCfgSuccess = true; + std::wstring warningMsg; + xmlAccess::readRealOrBatchConfig(currentConfigFile, newConfig, warningMsg); //throw FileError + + if (!warningMsg.empty()) + showNotificationDialog(this, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(warningMsg)); + + loadCfgSuccess = warningMsg.empty(); } - catch (const xmlAccess::FfsXmlError& e) + catch (const FileError& e) { - if (e.getSeverity() == xmlAccess::FfsXmlError::WARNING) - showNotificationDialog(this, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(e.toString())); - else - showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } const bool startWatchingImmediately = loadCfgSuccess && !cfgFileName.empty(); @@ -152,9 +155,9 @@ MainDialog::~MainDialog() try //write config to XML { - writeRealConfig(currentCfg, lastConfigFileName()); //throw FfsXmlError + writeConfig(currentCfg, lastConfigFileName()); //throw FileError } - catch (const xmlAccess::FfsXmlError& e) + catch (const FileError& e) { showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } @@ -163,8 +166,8 @@ MainDialog::~MainDialog() void MainDialog::onQueryEndSession() { - try { writeRealConfig(getConfiguration(), lastConfigFileName()); } //throw FfsXmlError - catch (const xmlAccess::FfsXmlError&) {} //we try our best do to something useful in this extreme situation - no reason to notify or even log errors here! + try { writeConfig(getConfiguration(), lastConfigFileName()); } //throw FileError + catch (const FileError&) {} //we try our best do to something useful in this extreme situation - no reason to notify or even log errors here! } @@ -274,10 +277,10 @@ void MainDialog::OnConfigSave(wxCommandEvent& event) const xmlAccess::XmlRealConfig currentCfg = getConfiguration(); try { - writeRealConfig(currentCfg, newFileName); //throw FfsXmlError + writeConfig(currentCfg, newFileName); //throw FileError setLastUsedConfig(newFileName); } - catch (const xmlAccess::FfsXmlError& e) + catch (const FileError& e) { showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } @@ -290,17 +293,16 @@ void MainDialog::loadConfig(const Zstring& filename) try { - rts::readRealOrBatchConfig(filename, newConfig); + std::wstring warningMsg; + xmlAccess::readRealOrBatchConfig(filename, newConfig, warningMsg); //throw FileError + + if (!warningMsg.empty()) + showNotificationDialog(this, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(warningMsg)); } - catch (const xmlAccess::FfsXmlError& e) + catch (const FileError& e) { - if (e.getSeverity() == xmlAccess::FfsXmlError::WARNING) - showNotificationDialog(this, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(e.toString())); - else - { - showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); - return; - } + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); + return; } setConfiguration(newConfig); diff --git a/FreeFileSync/Source/RealtimeSync/xml_ffs.cpp b/FreeFileSync/Source/RealtimeSync/xml_ffs.cpp deleted file mode 100644 index 224337ad..00000000 --- a/FreeFileSync/Source/RealtimeSync/xml_ffs.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "xml_ffs.h" -#include "../lib/ffs_paths.h" -#include <zen/zstring.h> -//#include <wx+/string_conv.h> - -//include FreeFileSync xml headers -#include "../lib/process_xml.h" - -using namespace zen; - - -xmlAccess::XmlRealConfig convertBatchToReal(const xmlAccess::XmlBatchConfig& batchCfg, const Zstring& filename) -{ - std::set<Zstring, LessFilename> uniqueFolders; - - //add main folders - uniqueFolders.insert(batchCfg.mainCfg.firstPair.dirnamePhraseLeft); - uniqueFolders.insert(batchCfg.mainCfg.firstPair.dirnamePhraseRight); - - //additional folders - for (const FolderPairEnh& fp : batchCfg.mainCfg.additionalPairs) - { - uniqueFolders.insert(fp.dirnamePhraseLeft); - uniqueFolders.insert(fp.dirnamePhraseRight); - } - - uniqueFolders.erase(Zstring()); - - xmlAccess::XmlRealConfig output; - output.directories.assign(uniqueFolders.begin(), uniqueFolders.end()); - output.commandline = Zstr("\"") + zen::getFreeFileSyncLauncher() + Zstr("\" \"") + filename + Zstr("\""); - return output; -} - - -void rts::readRealOrBatchConfig(const Zstring& filename, xmlAccess::XmlRealConfig& config) //throw xmlAccess::FfsXmlError; -{ - using namespace xmlAccess; - - if (getXmlType(filename) != XML_TYPE_BATCH) //throw FfsXmlError - return readRealConfig(filename, config); //throw FfsXmlError - - //convert batch config to RealtimeSync config - XmlBatchConfig batchCfg; - try - { - readConfig(filename, batchCfg); //throw FfsXmlError; - } - catch (const FfsXmlError& e) - { - if (e.getSeverity() == FfsXmlError::WARNING) - config = convertBatchToReal(batchCfg, filename); //do work despite parsing errors, then re-throw - - throw; // - } - config = convertBatchToReal(batchCfg, filename); -} - - -int rts::getProgramLanguage() -{ - xmlAccess::XmlGlobalSettings settings; - - try - { - xmlAccess::readConfig(settings); - } - catch (const xmlAccess::FfsXmlError&) {} //user default language if error occurred - - return settings.programLanguage; -} diff --git a/FreeFileSync/Source/RealtimeSync/xml_ffs.h b/FreeFileSync/Source/RealtimeSync/xml_ffs.h deleted file mode 100644 index 90c1c6ca..00000000 --- a/FreeFileSync/Source/RealtimeSync/xml_ffs.h +++ /dev/null @@ -1,23 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef XMLFREEFILESYNC_H_INCLUDED -#define XMLFREEFILESYNC_H_INCLUDED - -#include "xml_proc.h" -#include <zen/zstring.h> - - -//reuse (some of) FreeFileSync's xml files - -namespace rts -{ -void readRealOrBatchConfig(const Zstring& filename, xmlAccess::XmlRealConfig& config); //throw FfsXmlError - -int getProgramLanguage(); -} - -#endif // XMLFREEFILESYNC_H_INCLUDED diff --git a/FreeFileSync/Source/RealtimeSync/xml_proc.cpp b/FreeFileSync/Source/RealtimeSync/xml_proc.cpp index db235ecb..4ea4f20d 100644 --- a/FreeFileSync/Source/RealtimeSync/xml_proc.cpp +++ b/FreeFileSync/Source/RealtimeSync/xml_proc.cpp @@ -5,9 +5,11 @@ // ************************************************************************** #include "xml_proc.h" -#include <wx/filefn.h> #include <zen/file_handling.h> +#include <wx/filefn.h> #include <wx+/string_conv.h> +#include "../lib/process_xml.h" +#include "../lib/ffs_paths.h" using namespace zen; using namespace xmlAccess; @@ -36,19 +38,24 @@ bool isXmlTypeRTS(const XmlDoc& doc) //throw() } -void xmlAccess::readRealConfig(const Zstring& filename, XmlRealConfig& config) +void xmlAccess::readConfig(const Zstring& filename, XmlRealConfig& config, std::wstring& warningMsg) //throw FileError { - XmlDoc doc = loadXmlDocument(filename); //throw FfsXmlError + XmlDoc doc = loadXmlDocument(filename); //throw FileError if (!isXmlTypeRTS(doc)) - throw FfsXmlError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); + throw FileError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); XmlIn in(doc); ::readConfig(in, config); - if (in.errorsOccured()) - throw FfsXmlError(replaceCpy(_("Configuration file %x loaded partially only."), L"%x", fmtFileName(filename)) + L"\n\n" + - getErrorMessageFormatted(in.getErrorsAs<std::wstring>()), FfsXmlError::WARNING); + try + { + checkForMappingErrors(in, filename); //throw FileError + } + catch (const FileError& e) + { + warningMsg = e.toString(); + } } @@ -63,13 +70,70 @@ void writeConfig(const XmlRealConfig& config, XmlOut& out) } -void xmlAccess::writeRealConfig(const XmlRealConfig& config, const Zstring& filename) +void xmlAccess::writeConfig(const XmlRealConfig& config, const Zstring& filename) //throw FileError { XmlDoc doc("FreeFileSync"); doc.root().setAttribute("XmlType", "REAL"); XmlOut out(doc); - writeConfig(config, out); + ::writeConfig(config, out); + + saveXmlDocument(doc, filename); //throw FileError +} + + +namespace +{ +xmlAccess::XmlRealConfig convertBatchToReal(const xmlAccess::XmlBatchConfig& batchCfg, const Zstring& filename) +{ + std::set<Zstring, LessFilename> uniqueFolders; + + //add main folders + uniqueFolders.insert(batchCfg.mainCfg.firstPair.dirnamePhraseLeft); + uniqueFolders.insert(batchCfg.mainCfg.firstPair.dirnamePhraseRight); + + //additional folders + for (const FolderPairEnh& fp : batchCfg.mainCfg.additionalPairs) + { + uniqueFolders.insert(fp.dirnamePhraseLeft); + uniqueFolders.insert(fp.dirnamePhraseRight); + } + + uniqueFolders.erase(Zstring()); + + xmlAccess::XmlRealConfig output; + output.directories.assign(uniqueFolders.begin(), uniqueFolders.end()); + output.commandline = Zstr("\"") + zen::getFreeFileSyncLauncher() + Zstr("\" \"") + filename + Zstr("\""); + return output; +} +} + + +void xmlAccess::readRealOrBatchConfig(const Zstring& filename, xmlAccess::XmlRealConfig& config, std::wstring& warningMsg) //throw FileError +{ + using namespace xmlAccess; + + if (getXmlType(filename) != XML_TYPE_BATCH) //throw FileError + return readConfig(filename, config, warningMsg); //throw FileError + + //convert batch config to RealtimeSync config + XmlBatchConfig batchCfg; + readConfig(filename, batchCfg, warningMsg); //throw FileError + //<- redirect batch config warnings + + config = convertBatchToReal(batchCfg, filename); +} + + +int xmlAccess::getProgramLanguage() +{ + xmlAccess::XmlGlobalSettings settings; + std::wstring warningMsg; + try + { + xmlAccess::readConfig(getGlobalConfigFile(), settings, warningMsg); //throw FileError + } + catch (const FileError&) {} //user default language if error occurred - saveXmlDocument(doc, filename); //throw FfsXmlError + return settings.programLanguage; } diff --git a/FreeFileSync/Source/RealtimeSync/xml_proc.h b/FreeFileSync/Source/RealtimeSync/xml_proc.h index 671a237f..b996b8ce 100644 --- a/FreeFileSync/Source/RealtimeSync/xml_proc.h +++ b/FreeFileSync/Source/RealtimeSync/xml_proc.h @@ -4,14 +4,12 @@ // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * // ************************************************************************** -#ifndef XMLPROCESSING_H_INCLUDED -#define XMLPROCESSING_H_INCLUDED +#ifndef XMLPROCESSING_H_0813748158321813490 +#define XMLPROCESSING_H_0813748158321813490 #include <vector> -//#include <wx/string.h> +#include <zen/xml_io.h> #include <zen/zstring.h> -#include "../lib/xml_base.h" - namespace xmlAccess { @@ -23,8 +21,14 @@ struct XmlRealConfig unsigned int delay; }; -void readRealConfig(const Zstring& filename, XmlRealConfig& config); //throw FfsXmlError -void writeRealConfig(const XmlRealConfig& config, const Zstring& filename); //throw FfsXmlError +void readConfig(const Zstring& filename, XmlRealConfig& config, std::wstring& warningMsg); //throw FileError +void writeConfig(const XmlRealConfig& config, const Zstring& filename); //throw FileError + + +//reuse (some of) FreeFileSync's xml files +void readRealOrBatchConfig(const Zstring& filename, xmlAccess::XmlRealConfig& config, std::wstring& warningMsg); //throw FileError + +int getProgramLanguage(); } -#endif // XMLPROCESSING_H_INCLUDED +#endif //XMLPROCESSING_H_0813748158321813490 diff --git a/FreeFileSync/Source/application.cpp b/FreeFileSync/Source/application.cpp index 4b3453ff..0c7f5fe5 100644 --- a/FreeFileSync/Source/application.cpp +++ b/FreeFileSync/Source/application.cpp @@ -37,13 +37,12 @@ using namespace xmlAccess; IMPLEMENT_APP(Application) -warn_static("remove after test") #ifdef _MSC_VER //catch CRT floating point errors: http://msdn.microsoft.com/en-us/library/k3backsw.aspx int _matherr(struct _exception* except) { - assert(false); - return 0; //use default action + assert(false); + return 0; //use default action } #endif @@ -65,21 +64,21 @@ std::abort(); } */ #ifdef ZEN_WIN - void enableCrashingOnCrashes() //should be needed for 32-bit code only: http://randomascii.wordpress.com/2012/07/05/when-even-crashing-doesnt-work - { - typedef BOOL (WINAPI* GetProcessUserModeExceptionPolicyFun)(LPDWORD lpFlags); - typedef BOOL (WINAPI* SetProcessUserModeExceptionPolicyFun)( DWORD dwFlags); - const DWORD EXCEPTION_SWALLOWING = 0x1; +void enableCrashingOnCrashes() //should be needed for 32-bit code only: http://randomascii.wordpress.com/2012/07/05/when-even-crashing-doesnt-work +{ + typedef BOOL (WINAPI* GetProcessUserModeExceptionPolicyFun)(LPDWORD lpFlags); + typedef BOOL (WINAPI* SetProcessUserModeExceptionPolicyFun)( DWORD dwFlags); + const DWORD EXCEPTION_SWALLOWING = 0x1; - const SysDllFun<GetProcessUserModeExceptionPolicyFun> getProcessUserModeExceptionPolicy(L"kernel32.dll", "GetProcessUserModeExceptionPolicy"); - const SysDllFun<SetProcessUserModeExceptionPolicyFun> setProcessUserModeExceptionPolicy(L"kernel32.dll", "SetProcessUserModeExceptionPolicy"); - if (getProcessUserModeExceptionPolicy && setProcessUserModeExceptionPolicy) //available since Windows 7 SP1 - { - DWORD dwFlags = 0; - if (getProcessUserModeExceptionPolicy(&dwFlags) && (dwFlags & EXCEPTION_SWALLOWING)) - setProcessUserModeExceptionPolicy(dwFlags & ~EXCEPTION_SWALLOWING); - } + const SysDllFun<GetProcessUserModeExceptionPolicyFun> getProcessUserModeExceptionPolicy(L"kernel32.dll", "GetProcessUserModeExceptionPolicy"); + const SysDllFun<SetProcessUserModeExceptionPolicyFun> setProcessUserModeExceptionPolicy(L"kernel32.dll", "SetProcessUserModeExceptionPolicy"); + if (getProcessUserModeExceptionPolicy && setProcessUserModeExceptionPolicy) //available since Windows 7 SP1 + { + DWORD dwFlags = 0; + if (getProcessUserModeExceptionPolicy(&dwFlags) && (dwFlags & EXCEPTION_SWALLOWING)) + setProcessUserModeExceptionPolicy(dwFlags & ~EXCEPTION_SWALLOWING); } +} #ifdef _MSC_VER void crtInvalidParameterHandler(const wchar_t* expression, const wchar_t* function, const wchar_t* file, unsigned int line, uintptr_t pReserved) { assert(false); } @@ -151,7 +150,7 @@ bool Application::OnInit() //std::set_terminate(onTerminationRequested); //unlike wxWidgets uncaught exception handling, this works for all worker threads #ifdef ZEN_WIN - enableCrashingOnCrashes(); + enableCrashingOnCrashes(); #ifdef _MSC_VER _set_invalid_parameter_handler(crtInvalidParameterHandler); //see comment in <zen/time.h> @@ -352,7 +351,7 @@ void Application::launch(const std::vector<Zstring>& commandArgs) try { - switch (getXmlType(filename)) //throw FfsXmlError + switch (getXmlType(filename)) //throw FileError { case XML_TYPE_GUI: configFiles.push_back(std::make_pair(filename, XML_TYPE_GUI)); @@ -367,7 +366,7 @@ void Application::launch(const std::vector<Zstring>& commandArgs) return; } } - catch (const FfsXmlError& e) + catch (const FileError& e) { notifyError(e.toString(), std::wstring()); return; @@ -441,11 +440,14 @@ void Application::launch(const std::vector<Zstring>& commandArgs) XmlBatchConfig batchCfg; try { - readConfig(filename, batchCfg); + std::wstring warningMsg; + readConfig(filename, batchCfg, warningMsg); //throw FileError + + if (!warningMsg.empty()) + throw FileError(warningMsg); //batch mode: break on errors AND even warnings! } - catch (const xmlAccess::FfsXmlError& e) + catch (const FileError& e) { - //batch mode: break on errors AND even warnings! notifyError(e.toString(), std::wstring()); return; } @@ -458,20 +460,20 @@ void Application::launch(const std::vector<Zstring>& commandArgs) XmlGuiConfig guiCfg; try { - readConfig(filename, guiCfg); + std::wstring warningMsg; + readConfig(filename, guiCfg, warningMsg); //throw FileError + + if (!warningMsg.empty()) + showNotificationDialog(nullptr, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(warningMsg)); + //what about simulating changed config on parsing errors? } - catch (const xmlAccess::FfsXmlError& e) + catch (const FileError& e) { - if (e.getSeverity() == FfsXmlError::WARNING) - showNotificationDialog(nullptr, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(e.toString())); - //what about simulating changed config on parsing errors???? - else - { - notifyError(e.toString(), std::wstring()); - return; - } + notifyError(e.toString(), std::wstring()); + return; } - if (!replaceDirectories(guiCfg.mainCfg)) return; + if (!replaceDirectories(guiCfg.mainCfg)) + return; //what about simulating changed config due to directory replacement? //-> propably fine to not show as changed on GUI and not ask user to save on exit! @@ -494,18 +496,17 @@ void Application::launch(const std::vector<Zstring>& commandArgs) XmlGuiConfig guiCfg; //structure to receive gui settings with default values try { - readAnyConfig(filenames, guiCfg); //throw FfsXmlError + std::wstring warningMsg; + readAnyConfig(filenames, guiCfg, warningMsg); //throw FileError + + if (!warningMsg.empty()) + showNotificationDialog(nullptr, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(warningMsg)); + //what about simulating changed config on parsing errors? } - catch (const FfsXmlError& e) + catch (const FileError& e) { - if (e.getSeverity() == FfsXmlError::WARNING) - showNotificationDialog(nullptr, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(e.toString())); - //what about simulating changed config on parsing errors???? - else - { - notifyError(e.toString(), std::wstring()); - return; - } + notifyError(e.toString(), std::wstring()); + return; } runGuiMode(guiCfg, filenames); } @@ -550,18 +551,18 @@ void runBatchMode(const XmlBatchConfig& batchCfg, const Zstring& referenceFile, }; XmlGlobalSettings globalCfg; - try - { - if (fileExists(getGlobalConfigFile())) - readConfig(globalCfg); //throw FfsXmlError - //else: globalCfg already has default values - } - catch (const xmlAccess::FfsXmlError& e) - { - assert(false); - if (e.getSeverity() != FfsXmlError::WARNING) //ignore parsing errors: should be migration problems only *cross-fingers* + if (fileExists(getGlobalConfigFile())) //else: globalCfg already has default values + try + { + std::wstring warningMsg; + readConfig(getGlobalConfigFile(), globalCfg, warningMsg); //throw FileError + + assert(warningMsg.empty()); //ignore parsing errors: should be migration problems only *cross-fingers* + } + catch (const FileError& e) + { return notifyError(e.toString(), FFS_RC_ABORTED); //abort sync! - } + } try { @@ -649,9 +650,9 @@ void runBatchMode(const XmlBatchConfig& batchCfg, const Zstring& referenceFile, try //save global settings to XML: e.g. ignored warnings { - xmlAccess::writeConfig(globalCfg); //FfsXmlError + xmlAccess::writeConfig(globalCfg, getGlobalConfigFile()); //FileError } - catch (const xmlAccess::FfsXmlError& e) + catch (const FileError& e) { notifyError(e.toString(), FFS_RC_FINISHED_WITH_WARNINGS); } diff --git a/FreeFileSync/Source/comparison.cpp b/FreeFileSync/Source/comparison.cpp index c1ce317a..4c125db4 100644 --- a/FreeFileSync/Source/comparison.cpp +++ b/FreeFileSync/Source/comparison.cpp @@ -229,7 +229,7 @@ const wchar_t arrowLeft [] = L"<--"; const wchar_t arrowRight[] = L"-->"; -//check for very old dates or date2s in the future +//check for very old dates or dates in the future std::wstring getConflictInvalidDate(const Zstring& fileNameFull, Int64 utcTime) { return replaceCpy(_("File %x has an invalid date."), L"%x", fmtFileName(fileNameFull)) + L"\n" + @@ -246,6 +246,12 @@ std::wstring getConflictSameDateDiffSize(const FilePair& fileObj) } +std::wstring getConflictSkippedBinaryComparison(const FilePair& fileObj) +{ + return replaceCpy(_("Binary comparison was skipped for excluded files %x."), L"%x", fmtFileName(fileObj.getObjRelativeName())); +} + + std::wstring getDescrDiffMetaShortnameCase(const FileSystemObject& fsObj) { return _("Items differ in attributes only") + L"\n" + @@ -424,15 +430,21 @@ std::list<std::shared_ptr<BaseDirPair>> ComparisonBuffer::compareByContent(const //finish categorization... std::vector<FilePair*> filesToCompareBytewise; - //content comparison of file content happens AFTER finding corresponding files + //content comparison of file content happens AFTER finding corresponding files and AFTER filtering //in order to separate into two processes (scanning and comparing) - for (FilePair* fileObj : undefinedFiles) //pre-check: files have different content if they have a different filesize (must not be FILE_EQUAL: see InSyncFile) if (fileObj->getFileSize<LEFT_SIDE>() != fileObj->getFileSize<RIGHT_SIDE>()) fileObj->setCategory<FILE_DIFFERENT>(); else - filesToCompareBytewise.push_back(fileObj); + { + //perf: skip binary comparison for excluded rows (e.g. via time span and size filter)! + //both soft and hard filter were already applied in ComparisonBuffer::performComparison()! + if (!fileObj->isActive()) + fileObj->setCategoryConflict(getConflictSkippedBinaryComparison(*fileObj)); + else + filesToCompareBytewise.push_back(fileObj); + } const size_t objectsTotal = filesToCompareBytewise.size(); @@ -440,7 +452,7 @@ std::list<std::shared_ptr<BaseDirPair>> ComparisonBuffer::compareByContent(const for (FilePair* fileObj : filesToCompareBytewise) bytesTotal += fileObj->getFileSize<LEFT_SIDE>(); - callback_.initNewPhase(static_cast<int>(objectsTotal), + callback_.initNewPhase(static_cast<int>(objectsTotal), //may throw to<Int64>(bytesTotal), ProcessCallback::PHASE_COMPARING_CONTENT); @@ -631,13 +643,13 @@ void MergeSides::execute(const DirContainer& leftSide, const DirContainer& right } //mark excluded directories (see fillBuffer()) + remove superfluous excluded subdirectories -void removeFilteredDirs(HierarchyObject& hierObj, const HardFilter& filterProc) +void stripExcludedDirectories(HierarchyObject& hierObj, const HardFilter& filterProc) { //process subdirs recursively for (DirPair& dirObj : hierObj.refSubDirs()) { dirObj.setActive(filterProc.passDirFilter(dirObj.getObjRelativeName(), nullptr)); //subObjMightMatch is always true in this context! - removeFilteredDirs(dirObj, filterProc); + stripExcludedDirectories(dirObj, filterProc); } //remove superfluous directories -> note: this does not invalidate "std::vector<FilePair*>& undefinedFiles", since we delete folders only @@ -703,10 +715,11 @@ std::shared_ptr<BaseDirPair> ComparisonBuffer::performComparison(const ResolvedF //PERF_STOP; //##################### in/exclude rows according to filtering ##################### + //NOTE: we need to finish excluding rows in this method, BEFORE binary comparison is applied on the non-excluded rows only! //attention: some excluded directories are still in the comparison result! (see include filter handling!) if (!fpCfg.filter.nameFilter->isNull()) - removeFilteredDirs(*output, *fpCfg.filter.nameFilter); //mark excluded directories (see fillBuffer()) + remove superfluous excluded subdirectories + stripExcludedDirectories(*output, *fpCfg.filter.nameFilter); //mark excluded directories (see fillBuffer()) + remove superfluous excluded subdirectories //apply soft filtering (hard filter already applied during traversal!) addSoftFiltering(*output, fpCfg.filter.timeSizeFilter); @@ -759,7 +772,7 @@ void zen::compare(int fileTimeTolerance, callback.reportInfo(_("Starting comparison")); //indicator at the very beginning of the log to make sense of "total time" //init process: keep at beginning so that all gui elements are initialized properly - callback.initNewPhase(-1, 0, ProcessCallback::PHASE_SCANNING); //it's not known how many files will be scanned => -1 objects + callback.initNewPhase(-1, 0, ProcessCallback::PHASE_SCANNING); //may throw; it's not known how many files will be scanned => -1 objects //-------------------some basic checks:------------------------------------------ diff --git a/FreeFileSync/Source/dll/IFileDialog_Vista/IFileDialog_Vista.vcxproj b/FreeFileSync/Source/dll/IFileDialog_Vista/IFileDialog_Vista.vcxproj deleted file mode 100644 index 009d38dd..00000000 --- a/FreeFileSync/Source/dll/IFileDialog_Vista/IFileDialog_Vista.vcxproj +++ /dev/null @@ -1,165 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ClCompile Include="..\..\..\..\zen\debug_memory_leaks.cpp" /> - <ClCompile Include="ifile_dialog.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="ifile_dialog.h" /> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{E93269BB-36D4-4CE8-A7BE-F7A335D1D8E8}</ProjectGuid> - <RootNamespace>ShadowDll</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)_$(Platform)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;_DEBUG;_WINDOWS;_USRDLL;IFILE_DIALOG_VISTA_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <SmallerTypeCheck>true</SmallerTypeCheck> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;_DEBUG;_WINDOWS;_USRDLL;IFILE_DIALOG_VISTA_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <SmallerTypeCheck>true</SmallerTypeCheck> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;_WINDOWS;_USRDLL;IFILE_DIALOG_VISTA_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;_WINDOWS;_USRDLL;IFILE_DIALOG_VISTA_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> -</Project>
\ No newline at end of file diff --git a/FreeFileSync/Source/dll/IFileDialog_Vista/ifile_dialog.cpp b/FreeFileSync/Source/dll/IFileDialog_Vista/ifile_dialog.cpp deleted file mode 100644 index 8d53db3b..00000000 --- a/FreeFileSync/Source/dll/IFileDialog_Vista/ifile_dialog.cpp +++ /dev/null @@ -1,110 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "ifile_dialog.h" -#define WIN32_LEAN_AND_MEAN -#include <zen/com_error.h> -#include <zen/com_ptr.h> -#include <Shobjidl.h> -#include <zen/scope_guard.h> -#include <string> - -using namespace zen; - - -namespace -{ -bool showFolderPickerImpl(HWND ownerWindow, //throw SysError; return "false" if cancelled by user - const wchar_t* defaultFolder, //optional! - const GUID* persistenceGuid, // - std::wstring& selectedFolder) -{ - ComPtr<IFileDialog> fileDlg; - ZEN_COM_CHECK(::CoCreateInstance(CLSID_FileOpenDialog, //throw SysError - nullptr, - CLSCTX_ALL, - IID_PPV_ARGS(fileDlg.init()))); - - if (persistenceGuid) - ZEN_COM_CHECK(fileDlg->SetClientGuid(*persistenceGuid)); - - FILEOPENDIALOGOPTIONS dlgOptions = 0; - ZEN_COM_CHECK(fileDlg->GetOptions(&dlgOptions)); //throw SysError - ZEN_COM_CHECK(fileDlg->SetOptions(dlgOptions | FOS_PICKFOLDERS | FOS_NOVALIDATE | FOS_FORCEFILESYSTEM)); - //the C:\Windows\Fonts system folder is not shown with FOS_PICKFOLDERS but incorrectly categorized as system *file*!!! - - if (defaultFolder) //show last selection instead of top level if no default available - { - ComPtr<IShellItem> folderItem; - ZEN_COM_CHECK(::SHCreateItemFromParsingName(defaultFolder, - nullptr, - IID_PPV_ARGS(folderItem.init()))); - ZEN_COM_CHECK(fileDlg->SetFolder(folderItem.get())); - } - - try - { - ZEN_COM_CHECK(fileDlg->Show(ownerWindow)); //may fail with: HRESULT_FROM_WIN32(ERROR_CANCELLED) - } - catch (const SysError&) { return false; } - - ComPtr<IShellItem> folderItem; - ZEN_COM_CHECK(fileDlg->GetResult(folderItem.init())); - - LPWSTR folderPath = nullptr; - ZEN_COM_CHECK(folderItem->GetDisplayName(SIGDN_FILESYSPATH, &folderPath)); - ZEN_ON_SCOPE_EXIT(::CoTaskMemFree(folderPath)); - - selectedFolder = folderPath; - return true; -} - - -wchar_t* allocString(const std::wstring& msg) //ownership passed -{ - auto tmp = new wchar_t [msg.size() + 1]; //std::bad_alloc ? - ::wmemcpy(tmp, msg.c_str(), msg.size() + 1); //include 0-termination - return tmp; -} -} - -//################################################################################################## - -void ifile::showFolderPicker(void* ownerWindow, - const wchar_t* defaultFolder, - const GuidProxy* guid, - wchar_t*& selectedFolder, - bool& cancelled, - wchar_t*& errorMsg) -{ - selectedFolder = nullptr; - cancelled = false; - errorMsg = nullptr; - - try - { - static_assert(sizeof(GuidProxy) == sizeof(GUID), ""); - GUID winGuid = {}; - if (guid) - ::memcpy(&winGuid, guid, sizeof(GUID)); - - std::wstring folderPath; - if (showFolderPickerImpl(static_cast<HWND>(ownerWindow), defaultFolder, guid ? &winGuid : nullptr, folderPath)) //throw SysError - selectedFolder = allocString(folderPath); - else - cancelled = true; - } - catch (const SysError& e) - { - errorMsg = allocString(e.toString()); //std::bad_alloc ? - } -} - - -void ifile::freeString(const wchar_t* str) -{ - delete [] str; -} diff --git a/FreeFileSync/Source/dll/IFileDialog_Vista/ifile_dialog.h b/FreeFileSync/Source/dll/IFileDialog_Vista/ifile_dialog.h deleted file mode 100644 index 5b4dc532..00000000 --- a/FreeFileSync/Source/dll/IFileDialog_Vista/ifile_dialog.h +++ /dev/null @@ -1,67 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef IFILE_DIALOG_HEADER_916743921746324 -#define IFILE_DIALOG_HEADER_916743921746324 - -#ifdef IFILE_DIALOG_VISTA_DLL_EXPORTS -#define DLL_FUNCTION_DECLARATION extern "C" __declspec(dllexport) -#else -#define DLL_FUNCTION_DECLARATION extern "C" __declspec(dllimport) -#endif - -#include <zen/build_info.h> - - -namespace ifile -{ -/*-------------- - |declarations| - --------------*/ - -//COM needs to be initialized before calling any of these functions! CoInitializeEx/CoUninitialize -//Requires Windows Vista and later - -typedef char GuidProxy[16]; //= Windows 128-bit GUID; we don't want to include "Guiddef.h" here! - -DLL_FUNCTION_DECLARATION -void showFolderPicker(void* ownerWindow, //in; ==HWND - const wchar_t* defaultFolder, //in, optional! - const GuidProxy* guid, //set nullptr by default: Windows stores dialog state (position, x, y coordinates, ect.) associated with the process executable name => use other GUID when needed - wchar_t*& selectedFolder, //out: call freeString() after use! - bool& cancelled, //out - wchar_t*& errorMsg); //out, optional: call freeString() after use! - -DLL_FUNCTION_DECLARATION -void freeString(const wchar_t* str); - -/*---------- - |typedefs| - ----------*/ -typedef bool (*FunType_showFolderPicker)(void* ownerWindow, - const wchar_t* defaultFolder, - const GuidProxy* guid, - wchar_t*& selectedFolder, - bool& cancelled, - wchar_t*& errorMsg); -typedef void (*FunType_freeString)(const wchar_t* str); - -/*-------------- - |symbol names| - --------------*/ -//(use const pointers to ensure internal linkage) -const char funName_showFolderPicker[] = "showFolderPicker"; -const char funName_freeString [] = "freeString"; - -/*--------------- - |library names| - ---------------*/ -inline const wchar_t* getDllName() { return zen::is64BitBuild ? L"IFileDialog_Vista_x64.dll" : L"IFileDialog_Vista_Win32.dll"; } -} - -#undef DLL_FUNCTION_DECLARATION - -#endif //IFILE_DIALOG_HEADER_916743921746324 diff --git a/FreeFileSync/Source/dll/ShadowCopy/Shadow_Windows7.vcxproj b/FreeFileSync/Source/dll/ShadowCopy/Shadow_Windows7.vcxproj deleted file mode 100644 index 0ff01a5d..00000000 --- a/FreeFileSync/Source/dll/ShadowCopy/Shadow_Windows7.vcxproj +++ /dev/null @@ -1,169 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectName>Shadow_Windows7</ProjectName> - <ProjectGuid>{7E217D76-90A5-4B03-A6F8-E7C3ADD22901}</ProjectGuid> - <RootNamespace>ShadowDll</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <UseOfAtl>false</UseOfAtl> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)_$(Platform)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;_DEBUG;_WINDOWS;_USRDLL;SHADOWDLL_EXPORTS;USE_SHADOW_WINDOWS7;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;C:\Data\C++\boost</AdditionalIncludeDirectories> - <SmallerTypeCheck>true</SmallerTypeCheck> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib</AdditionalLibraryDirectories> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;C:\Data\C++\boost</AdditionalIncludeDirectories> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;_DEBUG;_WINDOWS;_USRDLL;SHADOWDLL_EXPORTS;USE_SHADOW_WINDOWS7;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <SmallerTypeCheck>true</SmallerTypeCheck> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib</AdditionalLibraryDirectories> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;_WINDOWS;_USRDLL;SHADOWDLL_EXPORTS;USE_SHADOW_WINDOWS7;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;C:\Data\C++\boost</AdditionalIncludeDirectories> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib</AdditionalLibraryDirectories> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;C:\Data\C++\boost</AdditionalIncludeDirectories> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;_WINDOWS;_USRDLL;SHADOWDLL_EXPORTS;USE_SHADOW_WINDOWS7;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib</AdditionalLibraryDirectories> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\..\..\zen\debug_memory_leaks.cpp" /> - <ClCompile Include="shadow.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="shadow.h" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> -</Project>
\ No newline at end of file diff --git a/FreeFileSync/Source/dll/ShadowCopy/shadow.cpp b/FreeFileSync/Source/dll/ShadowCopy/shadow.cpp deleted file mode 100644 index adc7c5c2..00000000 --- a/FreeFileSync/Source/dll/ShadowCopy/shadow.cpp +++ /dev/null @@ -1,199 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "shadow.h" -#include <algorithm> -#include <string> -#include <zen/com_ptr.h> -#include <zen/com_error.h> -#include <zen/scope_guard.h> -#include <boost/thread/tss.hpp> - -#ifdef USE_SHADOW_XP -#include "xp/inc/vss.h" -#include "xp/inc/vswriter.h" -#include "xp/inc/vsbackup.h" - -#elif defined USE_SHADOW_2003 -#include "Server 2003/inc/vss.h" -#include "Server 2003/inc/vswriter.h" -#include "Server 2003/inc/vsbackup.h" - -#elif defined USE_SHADOW_WINDOWS7 -#include <vss.h> // -#include <vswriter.h> //part of Windows SDK for Windows 7 -#include <vsbackup.h> // -#pragma comment(lib, "VssApi.lib") - -#else -#error adapt! -#endif - -using namespace zen; - - -struct shadow::ShadowData -{ - ShadowData(const ComPtr<IVssBackupComponents>& backupComp, - const std::wstring& shadowVolume) : backupComp_(backupComp), shadowVolume_(shadowVolume) {} - - ComPtr<IVssBackupComponents> backupComp_; - std::wstring shadowVolume_; -}; - - -namespace -{ -std::wstring formatVssError(HRESULT hr) //at least the one's from IVssBackupComponents::AddToSnapshotSet; return empty if no format found -{ - switch (hr) - { - case VSS_E_BAD_STATE: - return L"VSS_E_BAD_STATE"; - case VSS_E_MAXIMUM_NUMBER_OF_VOLUMES_REACHED: - return L"VSS_E_MAXIMUM_NUMBER_OF_VOLUMES_REACHED"; - case VSS_E_MAXIMUM_NUMBER_OF_SNAPSHOTS_REACHED: - return L"VSS_E_MAXIMUM_NUMBER_OF_SNAPSHOTS_REACHED"; - case VSS_E_OBJECT_NOT_FOUND: - return L"VSS_E_OBJECT_NOT_FOUND"; - case VSS_E_PROVIDER_NOT_REGISTERED: - return L"VSS_E_PROVIDER_NOT_REGISTERED"; - case VSS_E_PROVIDER_VETO: - return L"VSS_E_PROVIDER_VETO"; - case VSS_E_VOLUME_NOT_SUPPORTED: - return L"VSS_E_VOLUME_NOT_SUPPORTED"; - case VSS_E_VOLUME_NOT_SUPPORTED_BY_PROVIDER: - return L"VSS_E_VOLUME_NOT_SUPPORTED_BY_PROVIDER"; - case VSS_E_UNEXPECTED_PROVIDER_ERROR: - return L"VSS_E_UNEXPECTED_PROVIDER_ERROR"; - default: - return std::wstring(); - } -} - - -shadow::ShadowData createShadowCopy(const wchar_t* volumeName) //throw SysError -{ - ComPtr<IVssBackupComponents> backupComp; - { - HRESULT hr = ::CreateVssBackupComponents(backupComp.init()); - if (FAILED(hr)) - { - if (hr == E_ACCESSDENIED) - throw SysError(formatComError(L"The caller does not have sufficient backup privileges or is not an administrator.", hr)); - throw SysError(formatComError(L"Error calling \"CreateVssBackupComponents\".", hr)); - } - } - - ZEN_COM_CHECK(backupComp->InitializeForBackup()); //throw SysError - - //SetContext() only required if different than the default, VSS_CTX_BACKUP; not implemented on XP!!! - //ZEN_COM_CHECK(backupComp->SetContext(VSS_CTX_BACKUP)); //throw SysError - - ZEN_COM_CHECK(backupComp->SetBackupState(false, false, VSS_BT_FULL)); //throw SysError - - - //the Shadow Copy Optimization Writer removes items it considers non-essential, - //http://msdn.microsoft.com/en-US/library/bb968827#shadow_copy_optimization_writer - //like the exclusions in HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot - //http://msdn.microsoft.com/en-us/library/aa819132%28v=vs.85%29.aspx - //Outlook *.ost files in particular: - //https://sourceforge.net/p/freefilesync/discussion/help/thread/722dcbfb - const VSS_ID disabledWriters[] = { { 0x4dc3bdd4, 0xab48, 0x4d07, { 0xad, 0xb0, 0x3b, 0xee, 0x29, 0x26, 0xfd, 0x7f } } }; //Shadow Copy Optimization Writer - { - HRESULT hr = backupComp->DisableWriterClasses(disabledWriters, 1); - if (FAILED(hr) && hr != E_NOTIMPL) //DisableWriterClasses() is not implemented on Windows XP, although MSDN documented otherwise! - throw SysError(formatComError(L"Error calling \"backupComp->DisableWriterClasses\".", hr)); - } - - - auto waitForComFuture = [](IVssAsync& fut) - { - ZEN_COM_CHECK(fut.Wait()); - - HRESULT hr = S_OK; - ZEN_COM_CHECK(fut.QueryStatus(&hr, nullptr)); //check if the async operation succeeded... - if (FAILED(hr)) - throw SysError(formatComError(L"Error calling \"fut->QueryStatus\".", hr)); - }; - - ComPtr<IVssAsync> gatherAsync; - ZEN_COM_CHECK(backupComp->GatherWriterMetadata(gatherAsync.init())); - waitForComFuture(*gatherAsync); //failure can happen if XP-version of VSS is used on Windows Vista (which needs at least VSS-Server2003 build) - - VSS_ID snapshotSetId = {}; - ZEN_COM_CHECK(backupComp->StartSnapshotSet(&snapshotSetId)); - ScopeGuard guardSnapShot = makeGuard([&] { backupComp->AbortBackup(); }); - //Quote: "This method must be called if a backup operation terminates after the creation of a - //shadow copy set with "StartSnapshotSet" and before "DoSnapshotSet" returns." - - VSS_ID SnapShotId = {}; - { - HRESULT hr = backupComp->AddToSnapshotSet(const_cast<wchar_t*>(volumeName), GUID_NULL, &SnapShotId); - if (FAILED(hr)) - { - if (hr == VSS_E_VOLUME_NOT_SUPPORTED) - throw SysError(L"Volume Shadow Copy Service is not supported on this volume!"); - const std::wstring vssError = formatVssError(hr); - if (!vssError.empty()) - throw SysError(L"Error calling \"backupComp->AddToSnapshotSet\": " + vssError); - else - throw SysError(formatComError(L"Error calling \"backupComp->AddToSnapshotSet\".", hr)); - } - } - - ComPtr<IVssAsync> prepareAsync; - ZEN_COM_CHECK(backupComp->PrepareForBackup(prepareAsync.init())); - waitForComFuture(*prepareAsync); - - ComPtr<IVssAsync> snapshotAsync; - ZEN_COM_CHECK(backupComp->DoSnapshotSet(snapshotAsync.init())); - guardSnapShot.dismiss(); - waitForComFuture(*snapshotAsync); - - VSS_SNAPSHOT_PROP props = {}; - ZEN_COM_CHECK(backupComp->GetSnapshotProperties(SnapShotId, &props)); - ZEN_ON_SCOPE_EXIT(::VssFreeSnapshotProperties(&props)); - - //finally: write volume name of newly created shadow copy - return shadow::ShadowData(backupComp, props.m_pwszSnapshotDeviceObject); -} - -boost::thread_specific_ptr<std::wstring> lastErrorMessage; //use "thread_local" in C++11 -} - - -shadow::ShadowHandle shadow::createShadowCopy(const wchar_t* volumeName) -{ - try - { - ShadowData result = ::createShadowCopy(volumeName); //throw SysError - return new ShadowData(result); //shadow handle owned by caller! std::bad_alloc? - } - catch (const zen::SysError& e) - { - lastErrorMessage.reset(new std::wstring(e.toString())); - return nullptr; - } -} - - -const wchar_t* shadow::getShadowVolume(shadow::ShadowHandle handle) -{ - return handle ? handle->shadowVolume_.c_str() : nullptr; //better fail in client code than here! -} - - -void shadow::releaseShadowCopy(ShadowHandle handle) -{ - delete handle; -} - - -const wchar_t* shadow::getLastError() -{ - return !lastErrorMessage.get() ? L"" : lastErrorMessage->c_str(); -} diff --git a/FreeFileSync/Source/dll/ShadowCopy/shadow.h b/FreeFileSync/Source/dll/ShadowCopy/shadow.h deleted file mode 100644 index e68b2655..00000000 --- a/FreeFileSync/Source/dll/ShadowCopy/shadow.h +++ /dev/null @@ -1,94 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef SHADOWCOPY_H_14837413434 -#define SHADOWCOPY_H_14837413434 - -#ifdef SHADOWDLL_EXPORTS -#define DLL_FUNCTION_DECLARATION extern "C" __declspec(dllexport) -#else -#define DLL_FUNCTION_DECLARATION extern "C" __declspec(dllimport) -#endif - -#include <zen/build_info.h> -#include <zen/win_ver.h> - - -class IVssBackupComponents; - -namespace shadow -{ -/*-------------- - |declarations| - --------------*/ - -//COM needs to be initialized before calling any of these functions! CoInitializeEx/CoUninitialize -struct ShadowData; -typedef ShadowData* ShadowHandle; - -//volumeName *must* end with "\" -DLL_FUNCTION_DECLARATION -ShadowHandle createShadowCopy(const wchar_t* volumeName); //returns nullptr on failure! - -//release the backupHandle after shadow copy is not needed anymore! -DLL_FUNCTION_DECLARATION -void releaseShadowCopy(ShadowHandle handle); - -DLL_FUNCTION_DECLARATION -const wchar_t* getShadowVolume(ShadowHandle handle); //never fails, returns shadowVolName, never ending with "\" - -//get last error message if any of the functions above fail -DLL_FUNCTION_DECLARATION -const wchar_t* getLastError(); //no nullptr check required! -//########################################################################################## - - -/*---------- - |typedefs| - ----------*/ -typedef ShadowHandle (*FunType_createShadowCopy )(const wchar_t* volumeName); -typedef void (*FunType_releaseShadowCopy)(ShadowHandle handle); -typedef const wchar_t* (*FunType_getShadowVolume )(ShadowHandle handle); -typedef const wchar_t* (*FunType_getLastError)(); - -/*-------------- - |symbol names| - --------------*/ -//(use const pointers to ensure internal linkage) -const char funName_createShadowCopy [] = "createShadowCopy"; -const char funName_releaseShadowCopy[] = "releaseShadowCopy"; -const char funName_getShadowVolume [] = "getShadowVolume"; -const char funName_getLastError [] = "getLastError"; -/*--------------- - |library names| - ---------------*/ - -inline -const wchar_t* getDllName() -{ - // distinguish a bunch of VSS builds: we use XP, Server 2003 and Server 2008 R2 implementations... - // VSS version and compatibility overview: http://msdn.microsoft.com/en-us/library/aa384627(VS.85).aspx - - if (zen::win7OrLater()) //Windows Server 2008 R2 or Windows 7 - return zen::is64BitBuild ? - L"Shadow_Windows7_x64.dll" : - L"Shadow_Windows7_Win32.dll"; - //else if (vistaOrLater()) -> skip Windows Server 2008 and Windows Vista - // ; - else if (zen::winServer2003orLater()) //Windows Server 2003 and Windows Server 2003 R2 - return zen::is64BitBuild ? - L"Shadow_Server2003_x64.dll" : - L"Shadow_Server2003_Win32.dll"; - else //Windows XP - return zen::is64BitBuild ? - L"Shadow_XP_x64.dll" : - L"Shadow_XP_Win32.dll"; -} -} - -#undef DLL_FUNCTION_DECLARATION - -#endif //SHADOWCOPY_H_14837413434 diff --git a/FreeFileSync/Source/dll/Taskbar_Seven/Taskbar_Seven.vcxproj b/FreeFileSync/Source/dll/Taskbar_Seven/Taskbar_Seven.vcxproj deleted file mode 100644 index 99c7fd65..00000000 --- a/FreeFileSync/Source/dll/Taskbar_Seven/Taskbar_Seven.vcxproj +++ /dev/null @@ -1,167 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{78782859-7081-4C0E-BD6C-43DFDE634406}</ProjectGuid> - <RootNamespace>ShadowDll</RootNamespace> - <Keyword>Win32Proj</Keyword> - <ProjectName>Taskbar7</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)_$(Platform)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;_DEBUG;_WINDOWS;_USRDLL;TASKBAR_SEVEN_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <SmallerTypeCheck>true</SmallerTypeCheck> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;_DEBUG;_WINDOWS;_USRDLL;TASKBAR_SEVEN_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <SmallerTypeCheck>true</SmallerTypeCheck> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;_WINDOWS;_USRDLL;TASKBAR_SEVEN_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;_WINDOWS;_USRDLL;TASKBAR_SEVEN_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\..\..\zen\debug_memory_leaks.cpp" /> - <ClCompile Include="taskbar.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="taskbar.h" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> -</Project>
\ No newline at end of file diff --git a/FreeFileSync/Source/dll/Taskbar_Seven/taskbar.cpp b/FreeFileSync/Source/dll/Taskbar_Seven/taskbar.cpp deleted file mode 100644 index 72be7016..00000000 --- a/FreeFileSync/Source/dll/Taskbar_Seven/taskbar.cpp +++ /dev/null @@ -1,113 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "taskbar.h" -#include <map> -#include <string> - -#define WIN32_LEAN_AND_MEAN -#include <zen/com_error.h> -#include <zen/com_ptr.h> - -#include <ShObjIdl.h> - -using namespace zen; - - -namespace -{ -std::wstring lastErrorMessage; - - -ComPtr<ITaskbarList3> getInstance() -{ - ComPtr<ITaskbarList3> taskbarlist; - - HRESULT hr = ::CoCreateInstance(CLSID_TaskbarList, - nullptr, - CLSCTX_ALL, - IID_PPV_ARGS(taskbarlist.init())); - if (FAILED(hr)) - { - lastErrorMessage = formatComError(L"Error calling \"CoCreateInstance\".", hr); - return ComPtr<ITaskbarList3>(); - } - - return taskbarlist; -} -} -//################################################################################################## - - -bool tbseven::setStatus(void* hwnd, //HWND: window assciated to the taskbar icon - TaskBarStatus status) -{ - TBPFLAG flag = TBPF_NORMAL; - switch (status) - { - case STATUS_NOPROGRESS: - flag = TBPF_NOPROGRESS; - break; - case STATUS_INDETERMINATE: - flag = TBPF_INDETERMINATE; - break; - case STATUS_NORMAL: - flag = TBPF_NORMAL; - break; - case STATUS_ERROR: - flag = TBPF_ERROR; - break; - case STATUS_PAUSED: - flag = TBPF_PAUSED; - break; - } - - ComPtr<ITaskbarList3> taskbarlist = getInstance(); - if (!taskbarlist) //error msg already set - return false; - - HRESULT hr = taskbarlist->SetProgressState(static_cast<HWND>(hwnd), //[in] HWND hwnd, - flag); //[in] TBPFLAG tbpFlags - if (FAILED(hr)) - { - lastErrorMessage = formatComError(L"Error calling \"SetProgressState\".", hr); - return false; - } - - return true; -} - - -bool tbseven::setProgress(void* hwnd, //HWND: window assciated to the taskbar icon - size_t current, - size_t total) -{ - ComPtr<ITaskbarList3> taskbarlist = getInstance(); - if (!taskbarlist) //error msg already set - return false; - - HRESULT hr = taskbarlist->SetProgressValue( - static_cast<HWND>(hwnd), //[in] HWND hwnd, - current, //[in] ULONGLONG ullCompleted, - total); //[in] ULONGLONG ullTotal - if (FAILED(hr)) - { - lastErrorMessage = formatComError(L"Error calling \"SetProgressValue\".", hr); - return false; - } - - return true; -} - - -void tbseven::getLastError(wchar_t* buffer, size_t bufferSize) -{ - if (bufferSize > 0) - { - size_t endPos = lastErrorMessage.copy(buffer, bufferSize - 1); - buffer[endPos] = 0; - } -} diff --git a/FreeFileSync/Source/dll/Taskbar_Seven/taskbar.h b/FreeFileSync/Source/dll/Taskbar_Seven/taskbar.h deleted file mode 100644 index 4a158d1f..00000000 --- a/FreeFileSync/Source/dll/Taskbar_Seven/taskbar.h +++ /dev/null @@ -1,74 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef TASKBAR_SEVEN_DLL_H -#define TASKBAR_SEVEN_DLL_H - -#ifdef TASKBAR_SEVEN_DLL_EXPORTS -#define DLL_FUNCTION_DECLARATION extern "C" __declspec(dllexport) -#else -#define DLL_FUNCTION_DECLARATION extern "C" __declspec(dllimport) -#endif - -#include <zen/build_info.h> - - -namespace tbseven -{ -/*-------------- - |declarations| - --------------*/ - -enum TaskBarStatus -{ - STATUS_NOPROGRESS, - STATUS_INDETERMINATE, - STATUS_NORMAL, - STATUS_ERROR, - STATUS_PAUSED -}; - - -//COM needs to be initialized before calling any of these functions! CoInitializeEx/CoUninitialize - -DLL_FUNCTION_DECLARATION -bool setStatus(void* hwnd, //HWND: window assciated to the taskbar icon - TaskBarStatus status); - - -DLL_FUNCTION_DECLARATION -bool setProgress(void* hwnd, //HWND: window assciated to the taskbar icon - size_t current, - size_t total); - -//if any of the functions above returns 'false', this message returns last error -DLL_FUNCTION_DECLARATION -void getLastError(wchar_t* buffer, size_t bufferSize); - -/*---------- - |typedefs| - ----------*/ -typedef bool (*FunType_setStatus )(void* hwnd, TaskBarStatus status); -typedef bool (*FunType_setProgress )(void* hwnd, size_t current, size_t total); -typedef void (*FunType_getLastError)(wchar_t* buffer, size_t bufferSize); - -/*-------------- - |symbol names| - --------------*/ -//(use const pointers to ensure internal linkage) -const char funName_setStatus [] = "setStatus"; -const char funName_setProgress [] = "setProgress"; -const char funName_getLastError[] = "getLastError"; - -/*--------------- - |library names| - ---------------*/ -inline const wchar_t* getDllName() { return zen::is64BitBuild ? L"Taskbar7_x64.dll" : L"Taskbar7_Win32.dll"; } -} - -#undef DLL_FUNCTION_DECLARATION - -#endif //TASKBAR_SEVEN_DLL_H diff --git a/FreeFileSync/Source/dll/Thumbnail/Thumbnail.vcxproj b/FreeFileSync/Source/dll/Thumbnail/Thumbnail.vcxproj deleted file mode 100644 index b54cf4f3..00000000 --- a/FreeFileSync/Source/dll/Thumbnail/Thumbnail.vcxproj +++ /dev/null @@ -1,165 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{47AB4CD0-08E7-4F4C-8517-5B139957DB71}</ProjectGuid> - <RootNamespace>ShadowDll</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)_$(Platform)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;ZEN_WIN;_DEBUG;_WINDOWS;_USRDLL;THUMBNAIL_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <SmallerTypeCheck>true</SmallerTypeCheck> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;_DEBUG;_WINDOWS;_USRDLL;THUMBNAIL_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <SmallerTypeCheck>true</SmallerTypeCheck> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;_WINDOWS;_USRDLL;THUMBNAIL_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <PreprocessorDefinitions>ZEN_WIN;WXINTL_NO_GETTEXT_MACRO;NDEBUG;_WINDOWS;_USRDLL;THUMBNAIL_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\..\..\zen\debug_memory_leaks.cpp" /> - <ClCompile Include="thumbnail.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="thumbnail.h" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> -</Project>
\ No newline at end of file diff --git a/FreeFileSync/Source/dll/Thumbnail/thumbnail.cpp b/FreeFileSync/Source/dll/Thumbnail/thumbnail.cpp deleted file mode 100644 index 6b6659e4..00000000 --- a/FreeFileSync/Source/dll/Thumbnail/thumbnail.cpp +++ /dev/null @@ -1,487 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "thumbnail.h" -#include <algorithm> -#include <string> - -#define WIN32_LEAN_AND_MEAN -#include <zen/win.h> -#include <zen/win_ver.h> -#include <zen/sys_error.h> - -#define STRICT_TYPED_ITEMIDS //better type safety for IDLists -#include <Shlobj.h> - -#include <Shellapi.h> -#include <CommonControls.h> - -#include <zen/com_error.h> -#include <zen/com_ptr.h> -#include <zen/string_tools.h> -#include <zen/scope_guard.h> -#include <zen/basic_math.h> -//#include <zen/perf.h> - -using namespace zen; - - -namespace -{ -thumb::ImageData* allocImageData(int width, int height) //throw SysError; return value always bound! -{ - ZEN_COM_ASSERT(width >= 0 && height >= 0); //throw SysError - - std::unique_ptr<thumb::ImageData> idata = make_unique<thumb::ImageData>(); - - idata->width = width; - idata->height = height; - idata->rgb = new unsigned char[width * height * 4]; - idata->alpha = idata->rgb + width * height * 3; - - return idata.release(); -} - -void releaseImageData_impl(const thumb::ImageData* id) -{ - if (id) - { - delete [] id->rgb; - delete id; - } -} - - -//caller takes ownership! -HICON createIconFromBitmap(HBITMAP bitmap) //throw SysError -{ - BITMAP bmpInfo = {}; - ZEN_COM_ASSERT(::GetObject(bitmap, //__in HGDIOBJ hgdiobj, - sizeof(bmpInfo), //__in int cbBuffer, - &bmpInfo)); //__out LPVOID lpvObject - //no documented extended error info - - HDC hScreenDC = ::GetDC(nullptr); - ZEN_COM_ASSERT(hScreenDC); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::ReleaseDC(nullptr, hScreenDC)); - - HBITMAP bitmapMask = ::CreateCompatibleBitmap(hScreenDC, bmpInfo.bmWidth, bmpInfo.bmHeight); - ZEN_COM_ASSERT(bitmapMask); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::DeleteObject(bitmapMask)); - - ICONINFO iconInfo = {}; - iconInfo.fIcon = true; - iconInfo.hbmColor = bitmap; - iconInfo.hbmMask = bitmapMask; - - HICON result = ::CreateIconIndirect(&iconInfo); - if (!result) - throw SysError(formatSystemError(L"CreateIconIndirect", getLastError())); - return result; -} - - -//caller takes ownership! -thumb::ImageData* convertToImageData(HBITMAP bmp) //throw SysError -{ - //GetDIBits ???? - - BITMAP bmpInfo = {}; - ZEN_COM_ASSERT(::GetObject(bmp, //__in HGDIOBJ hgdiobj, - sizeof(BITMAP), //__in int cbBuffer, - &bmpInfo)); //__out LPVOID lpvObject - - HDC hScreenDC = ::GetDC(nullptr); - ZEN_COM_ASSERT(hScreenDC); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::ReleaseDC(nullptr, hScreenDC)); - - //32-bit RGB with alpha channel support - BITMAPV5HEADER bi = {}; - bi.bV5Size = sizeof(bi); - bi.bV5Width = bmpInfo.bmWidth; - bi.bV5Height = -bmpInfo.bmHeight; //negative for top left origin - bi.bV5Planes = 1; - bi.bV5BitCount = 32; - bi.bV5Compression = BI_BITFIELDS; - bi.bV5AlphaMask = 0xFF000000; - bi.bV5RedMask = 0x00FF0000; - bi.bV5GreenMask = 0x0000FF00; - bi.bV5BlueMask = 0x000000FF; - unsigned char* bitsRgbBmp = nullptr; - - HBITMAP rgbBmp = ::CreateDIBSection(hScreenDC, //_In_ HDC hdc, - reinterpret_cast<const BITMAPINFO*>(&bi), //_In_ const BITMAPINFO *pbmi, - DIB_RGB_COLORS, //_In_ UINT iUsage, - reinterpret_cast<VOID**>(&bitsRgbBmp), //_Out_ VOID **ppvBits, - nullptr, //_In_ HANDLE hSection, - 0); //_In_ DWORD dwOffset - ZEN_COM_ASSERT(rgbBmp); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::DeleteObject(rgbBmp);); - ZEN_COM_ASSERT(bitsRgbBmp); //check after rgbBmp is owned by us - - HDC memDCSrc = ::CreateCompatibleDC(hScreenDC); - ZEN_COM_ASSERT(memDCSrc); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::DeleteDC(memDCSrc)); - - HDC memDCTrg = ::CreateCompatibleDC(hScreenDC); - ZEN_COM_ASSERT(memDCTrg); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::DeleteDC(memDCTrg)); - - HGDIOBJ hgdiSrcOld = ::SelectObject(memDCSrc, bmp); - ZEN_COM_ASSERT(hgdiSrcOld); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::SelectObject(memDCSrc, hgdiSrcOld)); - - HGDIOBJ hgdiTrgOld = ::SelectObject(memDCTrg, rgbBmp); - ZEN_COM_ASSERT(hgdiTrgOld); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::SelectObject(memDCTrg, hgdiTrgOld)); - - if (!::BitBlt(memDCTrg, //_In_ HDC hdcDest, - 0, //_In_ int nXDest, - 0, //_In_ int nYDest, - bmpInfo.bmWidth, //_In_ int nWidth, - bmpInfo.bmHeight, //_In_ int nHeight, - memDCSrc, //_In_ HDC hdcSrc, - 0, //_In_ int nXSrc, - 0, //_In_ int nYSrc, - SRCCOPY)) //_In_ DWORD dwRop - throw SysError(formatSystemError(L"BitBlt", getLastError())); - - //CreateDIBSection: "Access to the bitmap must be synchronized. [...]. This applies to any use of the pointer to the bitmap bit values." - /*bool rv = */ - ::GdiFlush(); - - thumb::ImageData* imgOut = allocImageData(bmpInfo.bmWidth, bmpInfo.bmHeight); //throw SysError - ScopeGuard guardImgData = zen::makeGuard([&] { releaseImageData_impl(imgOut); }); - - unsigned char* rgbPtr = imgOut->rgb; - unsigned char* alphaPtr = imgOut->alpha; - - for (int i = 0; i < bmpInfo.bmWidth * bmpInfo.bmHeight; ++i) - { - unsigned char b = *bitsRgbBmp++; - unsigned char g = *bitsRgbBmp++; - unsigned char r = *bitsRgbBmp++; - unsigned char a = *bitsRgbBmp++; - - *rgbPtr++ = r; - *rgbPtr++ = g; - *rgbPtr++ = b; - *alphaPtr++ = a; - } - - guardImgData.dismiss(); - return imgOut; -} - - -//caller takes ownership! -const thumb::ImageData* getThumbnail_impl(const wchar_t* filename, int requestedSize) //throw SysError -{ - const std::wstring filenameStr(filename); - - ComPtr<IShellFolder> desktopFolder; - ZEN_COM_CHECK(::SHGetDesktopFolder(desktopFolder.init())); //throw SysError - ZEN_COM_ASSERT(desktopFolder); //throw SysError -> better safe than sorry? - - PIDLIST_RELATIVE pidlFolder = nullptr; - { - std::wstring pathName = beforeLast(filenameStr, L'\\'); - ZEN_COM_CHECK(desktopFolder->ParseDisplayName(nullptr, // [in] HWND hwnd, - nullptr, // [in] IBindCtx *pbc, - const_cast<LPWSTR>(pathName.c_str()), // [in] LPWSTR pszDisplayName, - nullptr, // [out] ULONG *pchEaten, - &pidlFolder, // [out] PIDLIST_RELATIVE* ppidl, - nullptr)); // [in, out] ULONG *pdwAttributes - } - ZEN_COM_ASSERT(pidlFolder); - ZEN_ON_SCOPE_EXIT(::ILFree(pidlFolder)); //older version: ::CoTaskMemFree - - ComPtr<IShellFolder> imageFolder; - ZEN_COM_CHECK(desktopFolder->BindToObject(pidlFolder, // [in] PCUIDLIST_RELATIVE pidl, - nullptr, // [in] IBindCtx *pbc, - IID_PPV_ARGS(imageFolder.init()))); - ZEN_COM_ASSERT(imageFolder); - - PIDLIST_RELATIVE pidImage = nullptr; - { - std::wstring shortName = afterLast(filenameStr, L'\\'); - ZEN_COM_CHECK(imageFolder->ParseDisplayName(nullptr, // [in] HWND hwnd, - nullptr, // [in] IBindCtx *pbc, - const_cast<LPWSTR>(shortName.c_str()), // [in] LPWSTR pszDisplayName, - nullptr, // [out] ULONG *pchEaten, - &pidImage, // [out] PIDLIST_RELATIVE *ppidl, - nullptr)); // [in, out] ULONG *pdwAttributes - } - ZEN_COM_ASSERT(pidImage); - ZEN_ON_SCOPE_EXIT(::ILFree(pidImage)); //older version: ::CoTaskMemFree - - ComPtr<IExtractImage> extractImage; - ZEN_COM_CHECK(imageFolder->GetUIObjectOf(nullptr, // [in] HWND hwndOwner, - 1, // [in] UINT cidl, - reinterpret_cast<PCUITEMID_CHILD_ARRAY>(&pidImage), // [in] PCUITEMID_CHILD_ARRAY apidl, - //this is where STRICT_TYPED_ITEMIDS gets us ;) - IID_IExtractImage, // [in] REFIID riid, - nullptr, // [in, out] UINT *rgfReserved, - reinterpret_cast<void**>(extractImage.init()))); // [out] void **ppv - ZEN_COM_ASSERT(extractImage); - - { - wchar_t pathBuffer[MAX_PATH]; - DWORD priority = 0; - const SIZE prgSize = { requestedSize, requestedSize }; - DWORD clrDepth = 32; //"recommended color depth" - DWORD flags = IEIFLAG_SCREEN | IEIFLAG_OFFLINE; - - ZEN_COM_CHECK(extractImage->GetLocation(pathBuffer, // [out] LPWSTR pszPathBuffer, - MAX_PATH, // [in] DWORD cchMax, - &priority, // [out] DWORD *pdwPriority, - &prgSize, // [in] const SIZE *prgSize, - clrDepth, // [in] DWORD dwRecClrDepth, - &flags)); // [in, out] DWORD *pdwFlags - } - - HBITMAP bitmap = nullptr; - ZEN_COM_CHECK(extractImage->Extract(&bitmap)); - ZEN_COM_ASSERT(bitmap); - ZEN_ON_SCOPE_EXIT(::DeleteObject(bitmap)); - - return convertToImageData(bitmap); //throw SysError, pass ownership -} - - -const bool wereVistaOrLater = vistaOrLater(); //thread-safety: init at startup - -//caller takes ownership! -const thumb::ImageData* getIconByIndex_impl(int iconIndex, thumb::IconSizeType st) //throw SysError -{ - //Note: - //- using IExtractIcon::Extract is *no* alternative, just as ::SHGetFileInfo(), it only supports small (16x16) and large (32x32) icons - //- IShellItemImageFactory::GetImage requires Vista or later - - using namespace thumb; - int requestedSize = 16; - int shilIconType = SHIL_SMALL; //16x16, size can be customized by the user. - { - if (!wereVistaOrLater && //XP doesn't have jumbo icons - (st == ICON_SIZE_128 || - st == ICON_SIZE_256)) - st = ICON_SIZE_48; - - switch (st) - { - case ICON_SIZE_16: - break; - case ICON_SIZE_32: - requestedSize = 32; - shilIconType = SHIL_LARGE; //32x32, may be 48x48 if "Use large icon" option is set in Display Properties - break; - case ICON_SIZE_48: - requestedSize = 48; - shilIconType = SHIL_EXTRALARGE; //48x48, size can be customized by the user. - break; - case ICON_SIZE_128: - requestedSize = 128; - shilIconType = SHIL_JUMBO; //256x256 pixels -> scale down! - break; - case ICON_SIZE_256: - requestedSize = 256; - shilIconType = SHIL_JUMBO; //256x256 pixels; Vista and later only - break; - } - } - - ComPtr<IImageList> imageList; //perf: 0,12 s only to get the image list - ZEN_COM_CHECK(::SHGetImageList(shilIconType, //__in int iImageList, - IID_PPV_ARGS(imageList.init()))); - ZEN_COM_ASSERT(imageList); - - int srcWidth = 0; - int srcHeight = 0; - ZEN_COM_CHECK(imageList->GetIconSize(&srcWidth, &srcHeight)); - - int targetWidth = srcWidth; - int targetHeight = srcHeight; - bool needDownScale = false; //scale down if required (e.g Vista Jumbo icons/user-customized icon sizes) - - ZEN_COM_ASSERT(srcWidth > 0 && srcHeight > 0 && requestedSize > 0); - - const int maxExtent = std::max(srcWidth, srcHeight); - if (requestedSize < maxExtent) - { - needDownScale = true; - targetWidth = srcWidth * requestedSize / maxExtent; - targetHeight = srcHeight * requestedSize / maxExtent; - } - - HDC hScreenDC = ::GetDC(nullptr); - ZEN_COM_ASSERT(hScreenDC); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::ReleaseDC(nullptr, hScreenDC)); - - auto createRGBDib = [&](unsigned char** rawBits) -> HBITMAP - { - BITMAPINFO bi = {}; - bi.bmiHeader.biSize = sizeof(bi); - bi.bmiHeader.biWidth = targetWidth; - bi.bmiHeader.biHeight = -targetHeight; //negative for top left origin - bi.bmiHeader.biPlanes = 1; - bi.bmiHeader.biBitCount = 24; //we don't want an alpha channel - bi.bmiHeader.biCompression = BI_RGB; - - return ::CreateDIBSection(hScreenDC, //_In_ HDC hdc, - &bi, //_In_ const BITMAPINFO *pbmi, - DIB_RGB_COLORS, //_In_ UINT iUsage, - reinterpret_cast<VOID**>(rawBits), //_Out_ VOID **ppvBits, - nullptr, //_In_ HANDLE hSection, - 0); //_In_ DWORD dwOffset - }; - - unsigned char* bitsBlackBg = nullptr; - HBITMAP bmpBlackBg = createRGBDib(&bitsBlackBg); - ZEN_COM_ASSERT(bmpBlackBg); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::DeleteObject(bmpBlackBg);); - ZEN_COM_ASSERT(bitsBlackBg); //check after bmpBlackBg is owned by us - - HDC memDC = ::CreateCompatibleDC(hScreenDC); - ZEN_COM_ASSERT(memDC); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::DeleteDC(memDC)); - - HGDIOBJ hgdiOld = ::SelectObject(memDC, bmpBlackBg); - ZEN_COM_ASSERT(hgdiOld); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::SelectObject(memDC, hgdiOld)); - - IMAGELISTDRAWPARAMS drawParams = {}; - drawParams.cbSize = sizeof(drawParams); - drawParams.hdcDst = memDC; - drawParams.i = iconIndex; - drawParams.rgbBk = 0x000000; //black - drawParams.fStyle = ILD_NORMAL; - //other flags: http://msdn.microsoft.com/en-us/library/windows/desktop/bb775230(v=vs.85).aspx - - if (needDownScale) - { - drawParams.fStyle |= ILD_SCALE; - drawParams.cx = targetWidth; - drawParams.cy = targetHeight; - } - - //IDO_SHGIOI_LINK does not draw properly in some cases: - //Win7: draws link overlay *twice* if SHIL_JUMBO is requested, but icon does not have this size - //XP: drawing IDO_SHGIOI_LINK generally draws corrupted icons and links - //if (addShortcutOverlay) - //{ - // int linkOverlay = ::SHGetIconOverlayIndex(nullptr, IDO_SHGIOI_LINK); //-1 on error - // if (linkOverlay != -1) - // { - // //int imgIndex = 0; - // //if (SUCCEEDED(imageList->GetOverlayImage(linkOverlay, &imgIndex))) - // //{ - // // drawParams.i = imgIndex; - // // ZEN_COM_CHECK(imageList->Draw(&drawParams)); - // //} - - // drawParams.fStyle |= INDEXTOOVERLAYMASK(linkOverlay); - // } - //} - - ZEN_COM_CHECK(imageList->Draw(&drawParams)); - - //----------------------------------------------- - //we draw the icon twice on different backgrounds to extract the alpha channel: - //- IImageList::GetIcon doesn't properly render SHIL_JUMBO for icons that don't have jumbo sizes, but IImageList::Draw does! - //- minor: each HICON consumes 3 GDI handles - //- IImageList::Draw does not reliably support alpha channel on device context (Windows XP) - //- wxBitmap created from HBITMAP is very unreliable; often drawn incorrectly by wxDC::DrawBitmap => support wxImage instead - - unsigned char* bitsWhiteBg = nullptr; - HBITMAP bmpWhiteBg = createRGBDib(&bitsWhiteBg); - ZEN_COM_ASSERT(bmpWhiteBg); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::DeleteObject(bmpWhiteBg)); - ZEN_COM_ASSERT(bitsWhiteBg); //check after bmpWhiteBg is owned by us - - HGDIOBJ hgdiOld2 = ::SelectObject(memDC, bmpWhiteBg); - ZEN_COM_ASSERT(hgdiOld2); //no documented extended error info - ZEN_ON_SCOPE_EXIT(::SelectObject(memDC, hgdiOld2)); - - drawParams.rgbBk = 0xFFFFFF; //white - - ZEN_COM_CHECK(imageList->Draw(&drawParams)); - - //##################################################################################### - - //"Access to the bitmap must be synchronized. [...]. This applies to any use of the pointer to the bitmap bit values." - /*bool rv = */ - ::GdiFlush(); - - ImageData* imgOut = allocImageData(targetWidth, targetHeight); //throw SysError - ScopeGuard guardImgData = zen::makeGuard([&] { releaseImageData_impl(imgOut); }); - - unsigned char* rgbPtr = imgOut->rgb; - unsigned char* alphaPtr = imgOut->alpha; - - for (int i = 0; i < targetWidth * targetHeight; ++i) - { - unsigned char b_black = *bitsBlackBg++; - unsigned char g_black = *bitsBlackBg++; - unsigned char r_black = *bitsBlackBg++; - - unsigned char b_white = *bitsWhiteBg++; - unsigned char g_white = *bitsWhiteBg++; - unsigned char r_white = *bitsWhiteBg++; - - const int tmp = 255 + r_black - r_white + //mixed mode arithmetics! - 255 + g_black - g_white + - 255 + b_black - b_white; - unsigned char alpha = static_cast<unsigned char>(numeric::confineCpy(tmp / 3, 0, 255)); - - auto calcColor = [&](unsigned char c_black, unsigned char c_white) - { - return static_cast<unsigned char>(tmp == 0 ? 0 : numeric::confineCpy - (255 * (3 * (-255 + c_white + c_black) + tmp) / (2 * tmp), //mixed mode arithmetics! - 0, 255)); - }; - - *rgbPtr++ = calcColor(r_black, r_white); - *rgbPtr++ = calcColor(g_black, g_white); - *rgbPtr++ = calcColor(b_black, b_white); - *alphaPtr++ = alpha; - } - - guardImgData.dismiss(); - return imgOut; -} -} - - -const thumb::ImageData* thumb::getThumbnail(const wchar_t* filename, int requestedSize) //return 0 on failure, caller takes ownership! -{ - try - { - return getThumbnail_impl(filename, requestedSize); //throw SysError - } - catch (const SysError&) - { - return nullptr; - } -} - - -const thumb::ImageData* thumb::getIconByIndex(int iconIndex, thumb::IconSizeType st) //return 0 on failure, caller takes ownership! -{ - try - { - return getIconByIndex_impl(iconIndex, st); //throw SysError - } - catch (const SysError&) - { - return nullptr; - } -} - - -void thumb::releaseImageData(const thumb::ImageData* id) -{ - releaseImageData_impl(id); -} diff --git a/FreeFileSync/Source/dll/Thumbnail/thumbnail.h b/FreeFileSync/Source/dll/Thumbnail/thumbnail.h deleted file mode 100644 index 307fc7cc..00000000 --- a/FreeFileSync/Source/dll/Thumbnail/thumbnail.h +++ /dev/null @@ -1,85 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef THUMBNAIL_DLL_HEADER_487108471324 -#define THUMBNAIL_DLL_HEADER_487108471324 - -#ifdef THUMBNAIL_DLL_EXPORTS -#define DLL_FUNCTION_DECLARATION extern "C" __declspec(dllexport) -#else -#define DLL_FUNCTION_DECLARATION extern "C" __declspec(dllimport) -#endif - -#include <zen/build_info.h> -//#include <WinDef.h> - -namespace thumb -{ -/* -PREREQUISITES: - -1. COM must be initialized for the current thread via ::CoInitialize(nullptr) or ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED), - but NOT ::CoInitializeEx(nullptr, COINIT_MULTITHREADED) -> internal access violation crash! -2. call ::FileIconInit() on app start to remedy obscure errors like SHELL_E_WRONG_BITDEPTH (0x80270102) - for certain file types, e.g. lnk, mpg - required on Windows 7 see http://msdn.microsoft.com/en-us/library/ms683212(v=VS.85).aspx -*/ - -/*-------------- - |declarations| - --------------*/ -struct ImageData //consider alignment! -{ - unsigned char* rgb; //rgb-byte order for use with wxImage - unsigned char* alpha; - int width; - int height; -}; - -DLL_FUNCTION_DECLARATION -const ImageData* getThumbnail(const wchar_t* filename, int requestedSize); //return nullptr on failure, release after use -//Note: not all file types support thumbnails! implement fallback to file icon! - -enum IconSizeType -{ - ICON_SIZE_16, - ICON_SIZE_32, - ICON_SIZE_48, - ICON_SIZE_128, - ICON_SIZE_256, -}; -//"iconIndex" as returned by ::SHGetFileInfo() -DLL_FUNCTION_DECLARATION -const ImageData* getIconByIndex(int iconIndex, IconSizeType st); //return nullptr on failure, release after use - -DLL_FUNCTION_DECLARATION -void releaseImageData(const ImageData* id); - - -/*---------- - |typedefs| - ----------*/ -typedef const ImageData* (*FunType_getThumbnail )(const wchar_t* filename, int requestedSize); -typedef const ImageData* (*FunType_getIconByIndex )(int iconIndex, IconSizeType st); -typedef void (*FunType_releaseImageData)(const ImageData* id); - - -/*-------------- - |symbol names| - --------------*/ -//(use const pointers to ensure internal linkage) -const char funName_getThumbnail [] = "getThumbnail"; -const char funName_getIconByIndex [] = "getIconByIndex"; -const char funName_releaseImageData[] = "releaseImageData"; - -/*--------------- - |library names| - ---------------*/ -inline const wchar_t* getDllName() { return zen::is64BitBuild ? L"Thumbnail_x64.dll" : L"Thumbnail_Win32.dll"; } -} - -#undef DLL_FUNCTION_DECLARATION - -#endif //THUMBNAIL_DLL_HEADER_487108471324 diff --git a/FreeFileSync/Source/lib/generate_logfile.h b/FreeFileSync/Source/lib/generate_logfile.h index 313a80ed..95392e74 100644 --- a/FreeFileSync/Source/lib/generate_logfile.h +++ b/FreeFileSync/Source/lib/generate_logfile.h @@ -106,7 +106,7 @@ void saveLogToFile(const SummaryInfo& summary, //throw FileError fileOut.write(&*header.begin(), header.size()); //throw FileError //write log items one after the other instead of creating one big string: memory allocation might fail; think 1 million entries! - for (const LogEntry& entry : log) + for (const LogEntry& entry : log) { Utf8String msg = replaceCpy(utfCvrtTo<Utf8String>(formatMessage<std::wstring>(entry)), '\n', LINE_BREAK); msg += LINE_BREAK; //make sure string is not empty! diff --git a/FreeFileSync/Source/lib/parallel_scan.cpp b/FreeFileSync/Source/lib/parallel_scan.cpp index 7c77d115..b7c10baf 100644 --- a/FreeFileSync/Source/lib/parallel_scan.cpp +++ b/FreeFileSync/Source/lib/parallel_scan.cpp @@ -436,6 +436,7 @@ void DirCallback::releaseDirTraverser(TraverseCallback* trav) DirCallback::HandleError DirCallback::reportDirError(const std::wstring& msg, size_t retryNumber) { + //AsyncCallback::reportError() blocks while implementing boost::this_thread::interruption_point() switch (cfg.acb_.reportError(msg, retryNumber)) { case FillBufferCallback::ON_ERROR_IGNORE: @@ -452,6 +453,7 @@ DirCallback::HandleError DirCallback::reportDirError(const std::wstring& msg, si DirCallback::HandleError DirCallback::reportItemError(const std::wstring& msg, size_t retryNumber, const Zchar* shortName) { + //AsyncCallback::reportError() blocks while implementing boost::this_thread::interruption_point() switch (cfg.acb_.reportError(msg, retryNumber)) { case FillBufferCallback::ON_ERROR_IGNORE: @@ -478,6 +480,8 @@ public: private: virtual void requestUiRefresh(const Zstring& filename) //applying DST hack imposes significant one-time performance drawback => callback to inform user { + boost::this_thread::interruption_point(); + acb_.reportCurrentStatus(replaceCpy(textApplyingDstHack, L"%x", fmtFileName(filename)), threadID_); } diff --git a/FreeFileSync/Source/lib/process_xml.cpp b/FreeFileSync/Source/lib/process_xml.cpp index 128f1f14..aaff3d83 100644 --- a/FreeFileSync/Source/lib/process_xml.cpp +++ b/FreeFileSync/Source/lib/process_xml.cpp @@ -7,12 +7,10 @@ #include "process_xml.h" #include <utility> #include <zenxml/xml.h> -#include "ffs_paths.h" #include <zen/file_handling.h> #include <zen/file_io.h> - -//#include <zen/time.h> -#include "xml_base.h" +#include <zen/xml_io.h> +#include "ffs_paths.h" using namespace zen; using namespace xmlAccess; //functionally needed for correct overload resolution!!! @@ -46,10 +44,10 @@ XmlType getXmlTypeNoThrow(const zen::XmlDoc& doc) //throw() } -XmlType xmlAccess::getXmlType(const Zstring& filename) //throw FfsXmlError +XmlType xmlAccess::getXmlType(const Zstring& filename) //throw FileError { //do NOT use zen::loadStream as it will needlessly load even huge files! - XmlDoc doc = loadXmlDocument(filename); //throw FfsXmlError, quick exit if file is not an FFS XML + XmlDoc doc = loadXmlDocument(filename); //throw FileError; quick exit if file is not an FFS XML return ::getXmlTypeNoThrow(doc); } @@ -1144,102 +1142,98 @@ bool needsMigration(const XmlDoc& doc, int currentXmlFormatVer) template <class ConfigType> -void readConfig(const Zstring& filename, XmlType type, ConfigType& cfg, int currentXmlFormatVer, bool& needMigration) //throw FfsXmlError +void readConfig(const Zstring& filename, XmlType type, ConfigType& cfg, int currentXmlFormatVer, std::wstring& warningMsg) //throw FileError { - XmlDoc doc = loadXmlDocument(filename); //throw FfsXmlError + XmlDoc doc = loadXmlDocument(filename); //throw FileError - if (getXmlTypeNoThrow(doc) != type) //throw() - throw FfsXmlError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); + if (getXmlTypeNoThrow(doc) != type) //noexcept + throw FileError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); XmlIn in(doc); ::readConfig(in, cfg); - if (in.errorsOccured()) - throw FfsXmlError(replaceCpy(_("Configuration file %x loaded partially only."), L"%x", fmtFileName(filename)) + L"\n\n" + - getErrorMessageFormatted(in.getErrorsAs<std::wstring>()), FfsXmlError::WARNING); + try + { + checkForMappingErrors(in, filename); //throw FileError - //(try to) migrate old configuration if needed - needMigration = needsMigration(doc, currentXmlFormatVer); + //(try to) migrate old configuration if needed + if (needsMigration(doc, currentXmlFormatVer)) + try { xmlAccess::writeConfig(cfg, filename); /*throw FileError*/ } + catch (FileError&) { assert(false); } //don't bother user! + } + catch (const FileError& e) + { + warningMsg = e.toString(); + } } } -void xmlAccess::readConfig(const Zstring& filename, xmlAccess::XmlGuiConfig& cfg) +void xmlAccess::readConfig(const Zstring& filename, xmlAccess::XmlGuiConfig& cfg, std::wstring& warningMsg) { - bool needMigration = false; - ::readConfig(filename, XML_TYPE_GUI, cfg, XML_FORMAT_VER_FFS_GUI, needMigration); //throw FfsXmlError - - if (needMigration) //(try to) migrate old configuration - try { xmlAccess::writeConfig(cfg, filename); /*throw FfsXmlError*/ } - catch (FfsXmlError&) { assert(false); } //don't bother user! + ::readConfig(filename, XML_TYPE_GUI, cfg, XML_FORMAT_VER_FFS_GUI, warningMsg); //throw FileError } -void xmlAccess::readConfig(const Zstring& filename, xmlAccess::XmlBatchConfig& cfg) +void xmlAccess::readConfig(const Zstring& filename, xmlAccess::XmlBatchConfig& cfg, std::wstring& warningMsg) { - bool needMigration = false; - ::readConfig(filename, XML_TYPE_BATCH, cfg, XML_FORMAT_VER_FFS_BATCH, needMigration); //throw FfsXmlError - - if (needMigration) //(try to) migrate old configuration - try { xmlAccess::writeConfig(cfg, filename); /*throw FfsXmlError*/ } - catch (FfsXmlError&) { assert(false); } //don't bother user! + ::readConfig(filename, XML_TYPE_BATCH, cfg, XML_FORMAT_VER_FFS_BATCH, warningMsg); //throw FileError } -void xmlAccess::readConfig(xmlAccess::XmlGlobalSettings& cfg) +void xmlAccess::readConfig(const Zstring& filename, xmlAccess::XmlGlobalSettings& cfg, std::wstring& warningMsg) { - bool needMigration = false; - ::readConfig(getGlobalConfigFile(), XML_TYPE_GLOBAL, cfg, XML_FORMAT_VER_GLOBAL, needMigration); //throw FfsXmlError + ::readConfig(filename, XML_TYPE_GLOBAL, cfg, XML_FORMAT_VER_GLOBAL, warningMsg); //throw FileError } namespace { template <class XmlCfg> -XmlCfg parseConfig(const XmlDoc& doc, const Zstring& filename, int currentXmlFormatVer, std::unique_ptr<FfsXmlError>& warning) //nothrow +XmlCfg parseConfig(const XmlDoc& doc, const Zstring& filename, int currentXmlFormatVer, std::wstring& warningMsg) //nothrow { - XmlCfg cfg; XmlIn in(doc); + XmlCfg cfg; ::readConfig(in, cfg); - if (in.errorsOccured()) - { - if (!warning) - warning = make_unique<FfsXmlError>(replaceCpy(_("Configuration file %x loaded partially only."), L"%x", fmtFileName(filename)) + L"\n\n" + - getErrorMessageFormatted(in.getErrorsAs<std::wstring>()), FfsXmlError::WARNING); - } - else + try { + checkForMappingErrors(in, filename); //throw FileError + //(try to) migrate old configuration if needed if (needsMigration(doc, currentXmlFormatVer)) - try { xmlAccess::writeConfig(cfg, filename); /*throw FfsXmlError*/ } - catch (FfsXmlError&) { assert(false); } //don't bother user! + try { xmlAccess::writeConfig(cfg, filename); /*throw FileError*/ } + catch (FileError&) { assert(false); } //don't bother user! + } + catch (const FileError& e) + { + if (warningMsg.empty()) + warningMsg = e.toString(); } + return cfg; } } -void xmlAccess::readAnyConfig(const std::vector<Zstring>& filenames, XmlGuiConfig& config) //throw FfsXmlError +void xmlAccess::readAnyConfig(const std::vector<Zstring>& filenames, XmlGuiConfig& config, std::wstring& warningMsg) //throw FileError { assert(!filenames.empty()); std::vector<zen::MainConfiguration> mainCfgs; - std::unique_ptr<FfsXmlError> warning; for (auto it = filenames.begin(); it != filenames.end(); ++it) { const Zstring& filename = *it; const bool firstItem = it == filenames.begin(); //init all non-"mainCfg" settings with first config file - XmlDoc doc = loadXmlDocument(filename); //throw FfsXmlError - //do NOT use zen::loadStream as it will superfluously load even huge files! + XmlDoc doc = loadXmlDocument(filename); //throw FileError switch (getXmlTypeNoThrow(doc)) { case XML_TYPE_GUI: { - XmlGuiConfig guiCfg = parseConfig<XmlGuiConfig>(doc, filename, XML_FORMAT_VER_FFS_GUI, warning); //nothrow + XmlGuiConfig guiCfg = parseConfig<XmlGuiConfig>(doc, filename, XML_FORMAT_VER_FFS_GUI, warningMsg); //nothrow if (firstItem) config = guiCfg; mainCfgs.push_back(guiCfg.mainCfg); @@ -1248,7 +1242,7 @@ void xmlAccess::readAnyConfig(const std::vector<Zstring>& filenames, XmlGuiConfi case XML_TYPE_BATCH: { - XmlBatchConfig batchCfg = parseConfig<XmlBatchConfig>(doc, filename, XML_FORMAT_VER_FFS_BATCH, warning); //nothrow + XmlBatchConfig batchCfg = parseConfig<XmlBatchConfig>(doc, filename, XML_FORMAT_VER_FFS_BATCH, warningMsg); //nothrow if (firstItem) config = convertBatchToGui(batchCfg); mainCfgs.push_back(batchCfg.mainCfg); @@ -1257,14 +1251,11 @@ void xmlAccess::readAnyConfig(const std::vector<Zstring>& filenames, XmlGuiConfi case XML_TYPE_GLOBAL: case XML_TYPE_OTHER: - throw FfsXmlError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); + throw FileError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); } } config.mainCfg = merge(mainCfgs); - - if (warning) - throw* warning; } //################################################################################################ @@ -1526,25 +1517,25 @@ void writeConfig(const ConfigType& config, XmlType type, int xmlFormatVer, const XmlOut out(doc); writeConfig(config, out); - saveXmlDocument(doc, filename); //throw FfsXmlError + saveXmlDocument(doc, filename); //throw FileError } } void xmlAccess::writeConfig(const XmlGuiConfig& cfg, const Zstring& filename) { - ::writeConfig(cfg, XML_TYPE_GUI, XML_FORMAT_VER_FFS_GUI, filename); //throw FfsXmlError + ::writeConfig(cfg, XML_TYPE_GUI, XML_FORMAT_VER_FFS_GUI, filename); //throw FileError } void xmlAccess::writeConfig(const XmlBatchConfig& cfg, const Zstring& filename) { - ::writeConfig(cfg, XML_TYPE_BATCH, XML_FORMAT_VER_FFS_BATCH, filename); //throw FfsXmlError + ::writeConfig(cfg, XML_TYPE_BATCH, XML_FORMAT_VER_FFS_BATCH, filename); //throw FileError } -void xmlAccess::writeConfig(const XmlGlobalSettings& cfg) +void xmlAccess::writeConfig(const XmlGlobalSettings& cfg, const Zstring& filename) { - ::writeConfig(cfg, XML_TYPE_GLOBAL, XML_FORMAT_VER_GLOBAL, getGlobalConfigFile()); //throw FfsXmlError + ::writeConfig(cfg, XML_TYPE_GLOBAL, XML_FORMAT_VER_GLOBAL, filename); //throw FileError } diff --git a/FreeFileSync/Source/lib/process_xml.h b/FreeFileSync/Source/lib/process_xml.h index 33981ebe..2790fb58 100644 --- a/FreeFileSync/Source/lib/process_xml.h +++ b/FreeFileSync/Source/lib/process_xml.h @@ -7,10 +7,10 @@ #ifndef PROCESSXML_H_INCLUDED #define PROCESSXML_H_INCLUDED +#include <zen/xml_io.h> #include <wx/gdicmn.h> -#include "../structures.h" -#include "xml_base.h" #include "localization.h" +#include "../structures.h" #include "../ui/column_attr.h" #include "../ui/folder_history_types.h" //#include "ffs_paths.h" @@ -25,7 +25,7 @@ enum XmlType XML_TYPE_OTHER }; -XmlType getXmlType(const Zstring& filename); //throw FfsXmlError +XmlType getXmlType(const Zstring& filename); //throw FileError enum OnError @@ -274,16 +274,16 @@ struct XmlGlobalSettings }; //read/write specific config types -void readConfig(const Zstring& filename, XmlGuiConfig& config); // -void readConfig(const Zstring& filename, XmlBatchConfig& config); //throw FfsXmlError -void readConfig( XmlGlobalSettings& config); // +void readConfig(const Zstring& filename, XmlGuiConfig& config, std::wstring& warningMsg); // +void readConfig(const Zstring& filename, XmlBatchConfig& config, std::wstring& warningMsg); //throw FileError +void readConfig(const Zstring& filename, XmlGlobalSettings& config, std::wstring& warningMsg); // void writeConfig(const XmlGuiConfig& config, const Zstring& filename); // -void writeConfig(const XmlBatchConfig& config, const Zstring& filename); //throw FfsXmlError -void writeConfig(const XmlGlobalSettings& config); // +void writeConfig(const XmlBatchConfig& config, const Zstring& filename); //throw FileError +void writeConfig(const XmlGlobalSettings& config, const Zstring& filename); // //convert (multiple) *.ffs_gui, *.ffs_batch files or combinations of both into target config structure: -void readAnyConfig(const std::vector<Zstring>& filenames, XmlGuiConfig& config); //throw FfsXmlError +void readAnyConfig(const std::vector<Zstring>& filenames, XmlGuiConfig& config, std::wstring& warningMsg); //throw FileError //config conversion utilities XmlGuiConfig convertBatchToGui(const XmlBatchConfig& batchCfg); //noexcept diff --git a/FreeFileSync/Source/lib/resolve_path.cpp b/FreeFileSync/Source/lib/resolve_path.cpp index 768876c9..09bc4509 100644 --- a/FreeFileSync/Source/lib/resolve_path.cpp +++ b/FreeFileSync/Source/lib/resolve_path.cpp @@ -588,8 +588,8 @@ void zen::loginNetworkShare(const Zstring& dirnameOrig, bool allowUserInteractio ____________________________________________________________________________________________________________ Windows Login Prompt Naming Conventions: - user account: <Domain>\<user> e.g. WIN-XP\ZenJu - network share: \\<server>\<share> e.g. \\WIN-XP\test + network share: \\<server>\<share> e.g. \\WIN-XP\folder or \\192.168.1.50\folder + user account: <Domain>\<user> e.g. WIN-XP\Zenju or 192.168.1.50\Zenju Windows Command Line: - list *all* active network connections, including deviceless ones which are hidden in Explorer: @@ -614,6 +614,7 @@ void zen::loginNetworkShare(const Zstring& dirnameOrig, bool allowUserInteractio nullptr, // __in LPCTSTR lpUsername, 0); //__in DWORD dwFlags //53L ERROR_BAD_NETPATH The network path was not found. + //67L ERROR_BAD_NET_NAME //86L ERROR_INVALID_PASSWORD //1219L ERROR_SESSION_CREDENTIAL_CONFLICT Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed. Disconnect all previous connections to the server or shared resource and try again. //1326L ERROR_LOGON_FAILURE Logon failure: unknown user name or bad password. @@ -621,8 +622,8 @@ void zen::loginNetworkShare(const Zstring& dirnameOrig, bool allowUserInteractio if (somethingExists(trgRes.lpRemoteName)) //blocks! return; //success: connection usable! -> don't care about "rv" - if (rv == ERROR_BAD_NETPATH || //Windows 7 - rv == ERROR_BAD_NET_NAME|| //XP + if (rv == ERROR_BAD_NETPATH || //like ERROR_PATH_NOT_FOUND + rv == ERROR_BAD_NET_NAME|| //like ERROR_FILE_NOT_FOUND rv == ERROR_CONNECTION_ABORTED) //failed to connect to a network that existed not too long ago; will later return ERROR_BAD_NETPATH return; //no need to show a prompt for an unreachable network device diff --git a/FreeFileSync/Source/lib/status_handler.h b/FreeFileSync/Source/lib/status_handler.h index baf772d3..d775ee65 100644 --- a/FreeFileSync/Source/lib/status_handler.h +++ b/FreeFileSync/Source/lib/status_handler.h @@ -60,7 +60,7 @@ public: protected: //implement parts of ProcessCallback - virtual void initNewPhase(int objectsTotal, Int64 dataTotal, Phase phaseId) + virtual void initNewPhase(int objectsTotal, Int64 dataTotal, Phase phaseId) //may throw { currentPhase_ = phaseId; refNumbers(numbersTotal_, currentPhase_) = std::make_pair(objectsTotal, dataTotal); diff --git a/FreeFileSync/Source/lib/xml_base.cpp b/FreeFileSync/Source/lib/xml_base.cpp deleted file mode 100644 index f504d19a..00000000 --- a/FreeFileSync/Source/lib/xml_base.cpp +++ /dev/null @@ -1,108 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "xml_base.h" -#include <zen/file_handling.h> -#include <zen/file_io.h> - -using namespace zen; - - -//loadXmlDocument vs loadStream: -//1. better error reporting -//2. quick exit if (potentially large) input file is not an XML -XmlDoc xmlAccess::loadXmlDocument(const Zstring& filename) //throw FfsXmlError -{ - std::string stream; - try - { - FileInput inputFile(filename); //throw FileError - { - //quick test whether input is an XML: avoid loading large binary files up front! - const std::string xmlBegin = "<?xml version="; - stream.resize(strLength(zen::BYTE_ORDER_MARK_UTF8) + xmlBegin.size()); - - const size_t bytesRead = inputFile.read(&stream[0], stream.size()); //throw FileError - stream.resize(bytesRead); - - if (!startsWith(stream, xmlBegin) && - !startsWith(stream, zen::BYTE_ORDER_MARK_UTF8 + xmlBegin)) //respect BOM! - throw FfsXmlError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); - } - - const size_t blockSize = 128 * 1024; - do - { - stream.resize(stream.size() + blockSize); - - const size_t bytesRead = inputFile.read(&*stream.begin() + stream.size() - blockSize, blockSize); //throw FileError - if (bytesRead < blockSize) - stream.resize(stream.size() - (blockSize - bytesRead)); //caveat: unsigned arithmetics - } - while (!inputFile.eof()); - } - catch (const FileError& error) - { - throw FfsXmlError(error.toString()); - } - - try - { - return zen::parse(stream); //throw XmlParsingError - } - catch (const XmlParsingError& e) - { - throw FfsXmlError( - replaceCpy(replaceCpy(replaceCpy(_("Error parsing file %x, row %y, column %z."), - L"%x", fmtFileName(filename)), - L"%y", numberTo<std::wstring>(e.row + 1)), - L"%z", numberTo<std::wstring>(e.col + 1))); - } -} - - -const std::wstring xmlAccess::getErrorMessageFormatted(const std::vector<std::wstring>& failedElements) -{ - std::wstring msg; - - if (!failedElements.empty()) - { - msg = _("Cannot read the following XML elements:") + L"\n"; - std::for_each(failedElements.begin(), failedElements.end(), [&](const std::wstring& elem) { msg += L"\n" + elem; }); - } - - return msg; -} - - -void xmlAccess::saveXmlDocument(const zen::XmlDoc& doc, const Zstring& filename) //throw FfsXmlError -{ - std::string stream = serialize(doc); //throw () - - bool saveNecessary = true; - try - { - if (zen::getFilesize(filename) == stream.size()) //throw FileError - try - { - if (zen::loadStream(filename) == stream) //throw XmlFileError - saveNecessary = false; - } - catch (const zen::XmlFileError&) {} - } - catch (FileError&) {} - - if (saveNecessary) - try - { - FileOutput outputFile(filename, FileOutput::ACC_OVERWRITE); //throw FileError - outputFile.write(stream.c_str(), stream.length()); // - } - catch (const FileError& error) - { - throw FfsXmlError(error.toString()); - } -} diff --git a/FreeFileSync/Source/lib/xml_base.h b/FreeFileSync/Source/lib/xml_base.h deleted file mode 100644 index 85d4dfa1..00000000 --- a/FreeFileSync/Source/lib/xml_base.h +++ /dev/null @@ -1,42 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef XMLBASE_H_INCLUDED -#define XMLBASE_H_INCLUDED - -#include <zenxml/xml.h> -#include <zen/zstring.h> -#include <zen/file_error.h> - -//bind zen::Xml and zen file handling together - -namespace xmlAccess -{ -class FfsXmlError //Exception class -{ -public: - enum Severity - { - WARNING = 77, - FATAL - }; - - explicit FfsXmlError(const std::wstring& message, Severity sev = FATAL) : errorMessage(message), m_severity(sev) {} - - const std::wstring& toString() const { return errorMessage; } - Severity getSeverity() const { return m_severity; } -private: - const std::wstring errorMessage; - const Severity m_severity; -}; - -void saveXmlDocument(const zen::XmlDoc& doc, const Zstring& filename); //throw FfsXmlError -zen::XmlDoc loadXmlDocument(const Zstring& filename); //throw FfsXmlError - -const std::wstring getErrorMessageFormatted(const std::vector<std::wstring>& failedElements); -} - -#endif // XMLBASE_H_INCLUDED diff --git a/FreeFileSync/Source/process_callback.h b/FreeFileSync/Source/process_callback.h index 74c5fa06..909acf16 100644 --- a/FreeFileSync/Source/process_callback.h +++ b/FreeFileSync/Source/process_callback.h @@ -30,7 +30,7 @@ struct ProcessCallback PHASE_COMPARING_CONTENT, PHASE_SYNCHRONIZING }; - virtual void initNewPhase(int objectsTotal, zen::Int64 dataTotal, Phase phaseId) = 0; //informs about the estimated amount of data that will be processed in this phase + virtual void initNewPhase(int objectsTotal, zen::Int64 dataTotal, Phase phaseId) = 0; //throw ?; informs about the estimated amount of data that will be processed in this phase //note: this one must NOT throw in order to properly allow undoing setting of statistics! //it is in general paired with a call to requestUiRefresh() to compensate! @@ -54,12 +54,12 @@ struct ProcessCallback virtual void forceUiRefresh () = 0; //throw ? - called before starting long running tasks which don't update regularly //called periodically after data was processed: expected(!) to request GUI update - virtual void reportStatus(const std::wstring& text) = 0; //UI info only, should not be logged! + virtual void reportStatus(const std::wstring& text) = 0; //throw ?; UI info only, should not be logged! //called periodically after data was processed: expected(!) to request GUI update - virtual void reportInfo(const std::wstring& text) = 0; + virtual void reportInfo(const std::wstring& text) = 0; //throw ? - virtual void reportWarning(const std::wstring& warningMessage, bool& warningActive) = 0; + virtual void reportWarning(const std::wstring& warningMessage, bool& warningActive) = 0; //throw ? //error handling: enum Response @@ -67,8 +67,8 @@ struct ProcessCallback IGNORE_ERROR = 10, RETRY }; - virtual Response reportError (const std::wstring& errorMessage, size_t retryNumber) = 0; //recoverable error situation - virtual void reportFatalError(const std::wstring& errorMessage) = 0; //non-recoverable error situation + virtual Response reportError (const std::wstring& errorMessage, size_t retryNumber) = 0; //throw ?; recoverable error situation + virtual void reportFatalError(const std::wstring& errorMessage) = 0; //throw ?; non-recoverable error situation virtual void abortProcessNow() = 0; //will throw an exception => don't call while in a C GUI callstack }; diff --git a/FreeFileSync/Source/synchronization.cpp b/FreeFileSync/Source/synchronization.cpp index 6f2cdb6a..1e4743fb 100644 --- a/FreeFileSync/Source/synchronization.cpp +++ b/FreeFileSync/Source/synchronization.cpp @@ -1999,7 +1999,7 @@ void zen::synchronize(const TimeComp& timeStamp, const SyncStatistics statisticsTotal(folderCmp); //keep at beginning so that all gui elements are initialized properly - callback.initNewPhase(getCUD(statisticsTotal), + callback.initNewPhase(getCUD(statisticsTotal), //may throw statisticsTotal.getDataToProcess(), ProcessCallback::PHASE_SYNCHRONIZING); diff --git a/FreeFileSync/Source/ui/batch_config.cpp b/FreeFileSync/Source/ui/batch_config.cpp index 4807e4a1..f99d8731 100644 --- a/FreeFileSync/Source/ui/batch_config.cpp +++ b/FreeFileSync/Source/ui/batch_config.cpp @@ -6,7 +6,6 @@ #include "batch_config.h" #include <wx/wupdlock.h> -#include <wx+/mouse_move_dlg.h> #include <wx+/std_button_order.h> #include <wx+/font_size.h> #include <wx+/image_resources.h> @@ -15,6 +14,10 @@ #include "../ui/exec_finished_box.h" #include "../lib/help_provider.h" +#ifdef ZEN_WIN +#include <wx+/mouse_move_dlg.h> +#endif + using namespace zen; using namespace xmlAccess; diff --git a/FreeFileSync/Source/ui/batch_status_handler.cpp b/FreeFileSync/Source/ui/batch_status_handler.cpp index 50537e84..28888606 100644 --- a/FreeFileSync/Source/ui/batch_status_handler.cpp +++ b/FreeFileSync/Source/ui/batch_status_handler.cpp @@ -258,7 +258,7 @@ BatchStatusHandler::~BatchStatusHandler() renameFile(oldLogfilename, addStatusToLogfilename(oldLogfilename, _("Stopped"))); //throw FileError else if (totalErrors > 0) renameFile(oldLogfilename, addStatusToLogfilename(oldLogfilename, _("Error"))); //throw FileError - //status "warning" is not important enough to show up in log file name + //status "warning" is not important enough to show up in log file name } catch (FileError&) {} } @@ -305,6 +305,8 @@ void BatchStatusHandler::initNewPhase(int objectsTotal, Int64 dataTotal, Process StatusHandler::initNewPhase(objectsTotal, dataTotal, phaseID); if (progressDlg) progressDlg->initNewPhase(); //call after "StatusHandler::initNewPhase" + + forceUiRefresh(); //throw ?; OS X needs a full yield to update GUI and get rid of "dummy" texts } diff --git a/FreeFileSync/Source/ui/column_attr.h b/FreeFileSync/Source/ui/column_attr.h index a5564293..bbc523b0 100644 --- a/FreeFileSync/Source/ui/column_attr.h +++ b/FreeFileSync/Source/ui/column_attr.h @@ -52,13 +52,13 @@ inline std::vector<ColumnAttributeRim> getDefaultColumnAttributesRight() { std::vector<ColumnAttributeRim> attr; - attr.push_back(ColumnAttributeRim(COL_TYPE_FULL_PATH, 250, 0, false)); - attr.push_back(ColumnAttributeRim(COL_TYPE_DIRECTORY, 200, 0, false)); - attr.push_back(ColumnAttributeRim(COL_TYPE_REL_PATH, 200, 0, false)); //already shown on left side - attr.push_back(ColumnAttributeRim(COL_TYPE_FILENAME, 200, 0, true)); - attr.push_back(ColumnAttributeRim(COL_TYPE_DATE, 112, 0, false)); - attr.push_back(ColumnAttributeRim(COL_TYPE_SIZE, 80, 0, true)); - attr.push_back(ColumnAttributeRim(COL_TYPE_EXTENSION, 60, 0, false)); + attr.push_back(ColumnAttributeRim(COL_TYPE_FULL_PATH, 250, 0, false)); + attr.push_back(ColumnAttributeRim(COL_TYPE_DIRECTORY, 200, 0, false)); + attr.push_back(ColumnAttributeRim(COL_TYPE_REL_PATH, -280, 1, false)); //already shown on left side + attr.push_back(ColumnAttributeRim(COL_TYPE_FILENAME, 200, 0, true)); + attr.push_back(ColumnAttributeRim(COL_TYPE_DATE, 112, 0, false)); + attr.push_back(ColumnAttributeRim(COL_TYPE_SIZE, 80, 0, true)); + attr.push_back(ColumnAttributeRim(COL_TYPE_EXTENSION, 60, 0, false)); return attr; } diff --git a/FreeFileSync/Source/ui/exec_finished_box.cpp b/FreeFileSync/Source/ui/exec_finished_box.cpp index 2c7464c7..ade8af73 100644 --- a/FreeFileSync/Source/ui/exec_finished_box.cpp +++ b/FreeFileSync/Source/ui/exec_finished_box.cpp @@ -108,21 +108,21 @@ void ExecFinishedBox::addItemHistory() trim(command); if (command == separationLine || //do not add sep. line - command == cmdTxtCloseProgressDlg || //do not add special command - command.empty()) - return; + command == cmdTxtCloseProgressDlg || //do not add special command + command.empty()) + return; //do not add built-in commands to history - for (const auto& item : defaultCommands) - if (command == item.first || - command == item.second) - return; + for (const auto& item : defaultCommands) + if (command == item.first || + command == item.second) + return; - for (const std::wstring& item : *history_) - if (command == item) - return; + for (const std::wstring& item : *history_) + if (command == item) + return; - history_->insert(history_->begin(), command); + history_->insert(history_->begin(), command); if (history_->size() > historyMax_) history_->resize(historyMax_); diff --git a/FreeFileSync/Source/ui/grid_view.cpp b/FreeFileSync/Source/ui/grid_view.cpp index b19bf49d..27b0d6ae 100644 --- a/FreeFileSync/Source/ui/grid_view.cpp +++ b/FreeFileSync/Source/ui/grid_view.cpp @@ -14,7 +14,7 @@ using namespace zen; template <class StatusResult> -void getNumbers(const FileSystemObject& fsObj, StatusResult& result) +void addNumbers(const FileSystemObject& fsObj, StatusResult& result) { struct GetValues : public FSObjectVisitor { @@ -176,7 +176,7 @@ GridView::StatusCmpResult GridView::updateCmpResult(bool showExcluded, //maps so break; } //calculate total number of bytes for each side - getNumbers(fsObj, output); + addNumbers(fsObj, output); return true; }); @@ -270,7 +270,7 @@ GridView::StatusSyncPreview GridView::updateSyncPreview(bool showExcluded, //map } //calculate total number of bytes for each side - getNumbers(fsObj, output); + addNumbers(fsObj, output); return true; }); diff --git a/FreeFileSync/Source/ui/gui_generated.cpp b/FreeFileSync/Source/ui/gui_generated.cpp index 17bde8bd..c933c5ef 100644 --- a/FreeFileSync/Source/ui/gui_generated.cpp +++ b/FreeFileSync/Source/ui/gui_generated.cpp @@ -19,869 +19,869 @@ MainDialogGenerated::MainDialogGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( 640,400 ), wxDefaultSize ); - - m_menubar1 = new wxMenuBar( 0 ); - m_menuFile = new wxMenu(); - m_menuItemNew = new wxMenuItem( m_menuFile, wxID_NEW, wxString( _("&New") ) + wxT('\t') + wxT("Ctrl+N"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemNew ); - - m_menuItemLoad = new wxMenuItem( m_menuFile, wxID_OPEN, wxString( _("&Open...") ) + wxT('\t') + wxT("Ctrl+O"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemLoad ); - - m_menuItemSave = new wxMenuItem( m_menuFile, wxID_SAVE, wxString( _("&Save") ) + wxT('\t') + wxT("Ctrl+S"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemSave ); - - m_menuItemSaveAs = new wxMenuItem( m_menuFile, wxID_SAVEAS, wxString( _("Save &as...") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemSaveAs ); - - m_menuItem7 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("Save as &batch job...") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItem7 ); - - m_menuFile->AppendSeparator(); - - m_menuItem10 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("1. &Compare") ) + wxT('\t') + wxT("F5"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItem10 ); - - m_menuItem11 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("2. &Synchronize") ) + wxT('\t') + wxT("F9"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItem11 ); - - m_menuFile->AppendSeparator(); - - wxMenuItem* m_menuItem4; - m_menuItem4 = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("&Quit") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItem4 ); - - m_menubar1->Append( m_menuFile, _("&Program") ); - - m_menuTools = new wxMenu(); - m_menuItemGlobSett = new wxMenuItem( m_menuTools, wxID_PREFERENCES, wxString( _("&Global settings") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItemGlobSett ); - - m_menuTools->AppendSeparator(); - - m_menuLanguages = new wxMenu(); - m_menuTools->Append( -1, _("&Language"), m_menuLanguages ); - - wxMenuItem* m_menuItem15; - m_menuItem15 = new wxMenuItem( m_menuTools, wxID_FIND, wxString( _("&Find...") ) + wxT('\t') + wxT("Ctrl+F"), wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItem15 ); - - wxMenuItem* m_menuItem5; - m_menuItem5 = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("&Export file list...") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItem5 ); - - m_menubar1->Append( m_menuTools, _("&Tools") ); - - m_menuHelp = new wxMenu(); - m_menuItemManual = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&View help") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); - m_menuHelp->Append( m_menuItemManual ); - - m_menuCheckVersion = new wxMenu(); - m_menuItemCheckVersionNow = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("&Check now") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuCheckVersion->Append( m_menuItemCheckVersionNow ); - - m_menuItemCheckVersionAuto = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("Check &automatically once a week") ) , wxEmptyString, wxITEM_CHECK ); - m_menuCheckVersion->Append( m_menuItemCheckVersionAuto ); - m_menuItemCheckVersionAuto->Check( true ); - - m_menuHelp->Append( -1, _("&Check for new version"), m_menuCheckVersion ); - - m_menuHelp->AppendSeparator(); - - m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL ); - m_menuHelp->Append( m_menuItemAbout ); - - m_menubar1->Append( m_menuHelp, _("&Help") ); - - this->SetMenuBar( m_menubar1 ); - - bSizerPanelHolder = new wxBoxSizer( wxVERTICAL ); - - m_panelTopButtons = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER|wxTAB_TRAVERSAL ); - bSizerTopButtons = new wxBoxSizer( wxHORIZONTAL ); - - - bSizerTopButtons->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer1721; - bSizer1721 = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonCompare = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Compare"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_buttonCompare->SetDefault(); - m_buttonCompare->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_buttonCompare->SetToolTip( _("dummy") ); - - bSizer1721->Add( m_buttonCompare, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_buttonCancel = new zen::BitmapTextButton( m_panelTopButtons, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( 180,-1 ), 0 ); - m_buttonCancel->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_buttonCancel->Enable( false ); - m_buttonCancel->Hide(); - - bSizer1721->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_bpButtonCmpConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 44,44 ), wxBU_AUTODRAW ); - m_bpButtonCmpConfig->SetToolTip( _("dummy") ); - - bSizer1721->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 3 ); - - - bSizer1721->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonFilter = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 60,44 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE ); - bSizer1721->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - - bSizer1721->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonSyncConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 44,44 ), wxBU_AUTODRAW ); - m_bpButtonSyncConfig->SetToolTip( _("dummy") ); - - bSizer1721->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND, 3 ); - - m_buttonSync = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Synchronize"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_buttonSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_buttonSync->SetToolTip( _("dummy") ); - - bSizer1721->Add( m_buttonSync, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerTopButtons->Add( bSizer1721, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 4 ); - - - bSizerTopButtons->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelTopButtons->SetSizer( bSizerTopButtons ); - m_panelTopButtons->Layout(); - bSizerTopButtons->Fit( m_panelTopButtons ); - bSizerPanelHolder->Add( m_panelTopButtons, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_panelDirectoryPairs = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1601; - bSizer1601 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer91; - bSizer91 = new wxBoxSizer( wxHORIZONTAL ); - - m_panelTopLeft = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelTopLeft->SetMinSize( wxSize( 1,-1 ) ); - - wxFlexGridSizer* fgSizer8; - fgSizer8 = new wxFlexGridSizer( 0, 2, 0, 0 ); - fgSizer8->AddGrowableCol( 1 ); - fgSizer8->SetFlexibleDirection( wxBOTH ); - fgSizer8->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_ALL ); - - - fgSizer8->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextResolvedPathL = new wxStaticText( m_panelTopLeft, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextResolvedPathL->Wrap( -1 ); - fgSizer8->Add( m_staticTextResolvedPathL, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); - - wxBoxSizer* bSizer159; - bSizer159 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonAddPair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - m_bpButtonAddPair->SetToolTip( _("Add folder pair") ); - - bSizer159->Add( m_bpButtonAddPair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonRemovePair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); - - bSizer159->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - fgSizer8->Add( bSizer159, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer182; - bSizer182 = new wxBoxSizer( wxHORIZONTAL ); - - m_directoryLeft = new FolderHistoryBox( m_panelTopLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer182->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectDirLeft = new wxButton( m_panelTopLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectDirLeft->SetToolTip( _("Select a folder") ); - - bSizer182->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - fgSizer8->Add( bSizer182, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - m_panelTopLeft->SetSizer( fgSizer8 ); - m_panelTopLeft->Layout(); - fgSizer8->Fit( m_panelTopLeft ); - bSizer91->Add( m_panelTopLeft, 1, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_panelTopMiddle = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1771; - bSizer1771 = new wxBoxSizer( wxVERTICAL ); - - - bSizer1771->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bpButtonSwapSides = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW ); - m_bpButtonSwapSides->SetToolTip( _("Swap sides") ); - - bSizer1771->Add( m_bpButtonSwapSides, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonAltCompCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer160->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonLocalFilter = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer160->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 2 ); - - m_bpButtonAltSyncCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer160->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer1771->Add( bSizer160, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer1771->Add( 0, 0, 1, wxEXPAND, 5 ); - - - m_panelTopMiddle->SetSizer( bSizer1771 ); - m_panelTopMiddle->Layout(); - bSizer1771->Fit( m_panelTopMiddle ); - bSizer91->Add( m_panelTopMiddle, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_panelTopRight = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelTopRight->SetMinSize( wxSize( 1,-1 ) ); - - wxBoxSizer* bSizer183; - bSizer183 = new wxBoxSizer( wxVERTICAL ); - - m_staticTextResolvedPathR = new wxStaticText( m_panelTopRight, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextResolvedPathR->Wrap( -1 ); - bSizer183->Add( m_staticTextResolvedPathR, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); - - wxBoxSizer* bSizer179; - bSizer179 = new wxBoxSizer( wxHORIZONTAL ); - - m_directoryRight = new FolderHistoryBox( m_panelTopRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer179->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectDirRight = new wxButton( m_panelTopRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectDirRight->SetToolTip( _("Select a folder") ); - - bSizer179->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer183->Add( bSizer179, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - m_panelTopRight->SetSizer( bSizer183 ); - m_panelTopRight->Layout(); - bSizer183->Fit( m_panelTopRight ); - bSizer91->Add( m_panelTopRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - - bSizer1601->Add( bSizer91, 0, wxEXPAND, 5 ); - - m_scrolledWindowFolderPairs = new wxScrolledWindow( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxHSCROLL|wxVSCROLL ); - m_scrolledWindowFolderPairs->SetScrollRate( 10, 10 ); - m_scrolledWindowFolderPairs->SetMinSize( wxSize( -1,0 ) ); - - bSizerAddFolderPairs = new wxBoxSizer( wxVERTICAL ); - - - m_scrolledWindowFolderPairs->SetSizer( bSizerAddFolderPairs ); - m_scrolledWindowFolderPairs->Layout(); - bSizerAddFolderPairs->Fit( m_scrolledWindowFolderPairs ); - bSizer1601->Add( m_scrolledWindowFolderPairs, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - m_panelDirectoryPairs->SetSizer( bSizer1601 ); - m_panelDirectoryPairs->Layout(); - bSizer1601->Fit( m_panelDirectoryPairs ); - bSizerPanelHolder->Add( m_panelDirectoryPairs, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_gridNavi = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_gridNavi->SetScrollRate( 5, 5 ); - bSizerPanelHolder->Add( m_gridNavi, 1, wxEXPAND, 5 ); - - m_panelCenter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1711; - bSizer1711 = new wxBoxSizer( wxVERTICAL ); - - m_splitterMain = new zen::TripleSplitter( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1781; - bSizer1781 = new wxBoxSizer( wxHORIZONTAL ); - - m_gridMainL = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_gridMainL->SetScrollRate( 5, 5 ); - bSizer1781->Add( m_gridMainL, 1, wxEXPAND, 5 ); - - m_gridMainC = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_gridMainC->SetScrollRate( 5, 5 ); - bSizer1781->Add( m_gridMainC, 0, wxEXPAND, 5 ); - - m_gridMainR = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_gridMainR->SetScrollRate( 5, 5 ); - bSizer1781->Add( m_gridMainR, 1, wxEXPAND, 5 ); - - - m_splitterMain->SetSizer( bSizer1781 ); - m_splitterMain->Layout(); - bSizer1781->Fit( m_splitterMain ); - bSizer1711->Add( m_splitterMain, 1, wxEXPAND, 5 ); - - m_panelStatusBar = new wxPanel( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer451; - bSizer451 = new wxBoxSizer( wxHORIZONTAL ); - - bSizer451->SetMinSize( wxSize( -1,22 ) ); - bSizerFileStatus = new wxBoxSizer( wxHORIZONTAL ); - - bSizerStatusLeft = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer53; - bSizer53 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - bSizerStatusLeftDirectories = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapSmallDirectoryLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerStatusLeftDirectories->Add( m_bitmapSmallDirectoryLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusLeftDirectories->Add( 2, 0, 0, 0, 5 ); - - m_staticTextStatusLeftDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusLeftDirs->Wrap( -1 ); - bSizerStatusLeftDirectories->Add( m_staticTextStatusLeftDirs, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer53->Add( bSizerStatusLeftDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - bSizerStatusLeftFiles = new wxBoxSizer( wxHORIZONTAL ); - - - bSizerStatusLeftFiles->Add( 10, 0, 0, 0, 5 ); - - m_bitmapSmallFileLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerStatusLeftFiles->Add( m_bitmapSmallFileLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusLeftFiles->Add( 2, 0, 0, 0, 5 ); - - m_staticTextStatusLeftFiles = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusLeftFiles->Wrap( -1 ); - bSizerStatusLeftFiles->Add( m_staticTextStatusLeftFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusLeftFiles->Add( 4, 0, 0, 0, 5 ); - - m_staticTextStatusLeftBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusLeftBytes->Wrap( -1 ); - bSizerStatusLeftFiles->Add( m_staticTextStatusLeftBytes, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer53->Add( bSizerStatusLeftFiles, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusLeft->Add( bSizer53, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticline9 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizerStatusLeft->Add( m_staticline9, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 2 ); - - - bSizerFileStatus->Add( bSizerStatusLeft, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextStatusMiddle = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusMiddle->Wrap( -1 ); - bSizerFileStatus->Add( m_staticTextStatusMiddle, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - bSizerStatusRight = new wxBoxSizer( wxHORIZONTAL ); - - m_staticline10 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizerStatusRight->Add( m_staticline10, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP, 2 ); - - wxBoxSizer* bSizer52; - bSizer52 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - bSizerStatusRightDirectories = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapSmallDirectoryRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerStatusRightDirectories->Add( m_bitmapSmallDirectoryRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusRightDirectories->Add( 2, 0, 0, 0, 5 ); - - m_staticTextStatusRightDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusRightDirs->Wrap( -1 ); - bSizerStatusRightDirectories->Add( m_staticTextStatusRightDirs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer52->Add( bSizerStatusRightDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - bSizerStatusRightFiles = new wxBoxSizer( wxHORIZONTAL ); - - - bSizerStatusRightFiles->Add( 10, 0, 0, 0, 5 ); - - m_bitmapSmallFileRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerStatusRightFiles->Add( m_bitmapSmallFileRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusRightFiles->Add( 2, 0, 0, 0, 5 ); - - m_staticTextStatusRightFiles = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusRightFiles->Wrap( -1 ); - bSizerStatusRightFiles->Add( m_staticTextStatusRightFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusRightFiles->Add( 4, 0, 0, 0, 5 ); - - m_staticTextStatusRightBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusRightBytes->Wrap( -1 ); - bSizerStatusRightFiles->Add( m_staticTextStatusRightBytes, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer52->Add( bSizerStatusRightFiles, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatusRight->Add( bSizer52, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerFileStatus->Add( bSizerStatusRight, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer451->Add( bSizerFileStatus, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_staticTextFullStatus = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextFullStatus->Wrap( -1 ); - m_staticTextFullStatus->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer451->Add( m_staticTextFullStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - - m_panelStatusBar->SetSizer( bSizer451 ); - m_panelStatusBar->Layout(); - bSizer451->Fit( m_panelStatusBar ); - bSizer1711->Add( m_panelStatusBar, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - - m_panelCenter->SetSizer( bSizer1711 ); - m_panelCenter->Layout(); - bSizer1711->Fit( m_panelCenter ); - bSizerPanelHolder->Add( m_panelCenter, 1, wxEXPAND, 5 ); - - m_panelSearch = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1713; - bSizer1713 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonHideSearch = new wxBitmapButton( m_panelSearch, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - m_bpButtonHideSearch->SetToolTip( _("Close search bar") ); - - bSizer1713->Add( m_bpButtonHideSearch, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_staticText101 = new wxStaticText( m_panelSearch, wxID_ANY, _("Find:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText101->Wrap( -1 ); - bSizer1713->Add( m_staticText101, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_textCtrlSearchTxt = new wxTextCtrl( m_panelSearch, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220,-1 ), 0|wxWANTS_CHARS ); - m_textCtrlSearchTxt->SetMaxLength( 0 ); - bSizer1713->Add( m_textCtrlSearchTxt, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_checkBoxMatchCase = new wxCheckBox( m_panelSearch, wxID_ANY, _("Match case"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer1713->Add( m_checkBoxMatchCase, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - - m_panelSearch->SetSizer( bSizer1713 ); - m_panelSearch->Layout(); - bSizer1713->Fit( m_panelSearch ); - bSizerPanelHolder->Add( m_panelSearch, 0, 0, 5 ); - - m_panelConfig = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - bSizerConfig = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer151; - bSizer151 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonOpen = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonOpen->SetToolTip( _("dummy") ); - - bSizer151->Add( m_bpButtonOpen, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonSave = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonSave->SetToolTip( _("dummy") ); - - bSizer151->Add( m_bpButtonSave, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonBatchJob = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonBatchJob->SetToolTip( _("Save as batch job") ); - - bSizer151->Add( m_bpButtonBatchJob, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerConfig->Add( bSizer151, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_listBoxHistory = new wxListBox( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB ); - m_listBoxHistory->SetMinSize( wxSize( -1,40 ) ); - - bSizerConfig->Add( m_listBoxHistory, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelConfig->SetSizer( bSizerConfig ); - m_panelConfig->Layout(); - bSizerConfig->Fit( m_panelConfig ); - bSizerPanelHolder->Add( m_panelConfig, 0, 0, 5 ); - - m_panelViewFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - bSizerViewFilter = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonViewTypeSyncAction = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 82,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonViewTypeSyncAction, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 ); - - m_bpButtonShowExcluded = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowExcluded, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bpButtonShowCreateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowUpdateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowDeleteLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowDeleteLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowLeftOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowLeftOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowLeftNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowLeftNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowEqual = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowEqual, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowDifferent = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowDifferent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowDoNothing = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowDoNothing, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowRightNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowRightNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowRightOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowRightOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowDeleteRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowDeleteRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowUpdateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowCreateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonShowConflict = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonShowConflict, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_panelStatistics = new wxPanel( m_panelViewFilter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL ); - m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer1801 = new wxBoxSizer( wxVERTICAL ); - - bSizerStatistics = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer1712; - bSizer1712 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); - - bSizer1712->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer1712->Add( 5, 2, 0, 0, 5 ); - - - bSizer1712->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCreateLeft->Wrap( -1 ); - m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); - - bSizer1712->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerStatistics->Add( bSizer1712, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); - - bSizer172->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer172->Add( 5, 2, 0, 0, 5 ); - - - bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextUpdateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdateLeft->Wrap( -1 ); - m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); - - bSizer172->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerStatistics->Add( bSizer172, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer173; - bSizer173 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); - - bSizer173->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer173->Add( 5, 2, 0, 0, 5 ); - - - bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeleteLeft->Wrap( -1 ); - m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); - - bSizer173->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizer173, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - bSizerData = new wxBoxSizer( wxVERTICAL ); - - m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapData->SetToolTip( _("Total bytes to copy") ); - - bSizerData->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerData->Add( 5, 2, 0, 0, 5 ); - - - bSizerData->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextData->Wrap( -1 ); - m_staticTextData->SetToolTip( _("Total bytes to copy") ); - - bSizerData->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizerData, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer176; - bSizer176 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); - - bSizer176->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer176->Add( 5, 2, 0, 0, 5 ); - - - bSizer176->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextDeleteRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeleteRight->Wrap( -1 ); - m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); - - bSizer176->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizer176, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer177; - bSizer177 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); - - bSizer177->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer177->Add( 5, 2, 0, 0, 5 ); - - - bSizer177->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextUpdateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdateRight->Wrap( -1 ); - m_staticTextUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); - - bSizer177->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizer177, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer178; - bSizer178 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") ); - - bSizer178->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer178->Add( 5, 2, 0, 0, 5 ); - - - bSizer178->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextCreateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCreateRight->Wrap( -1 ); - m_staticTextCreateRight->SetToolTip( _("Number of files and folders that will be created") ); - - bSizer178->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer1801->Add( bSizerStatistics, 0, wxALIGN_CENTER_VERTICAL|wxALL, 4 ); - - - m_panelStatistics->SetSizer( bSizer1801 ); - m_panelStatistics->Layout(); - bSizer1801->Fit( m_panelStatistics ); - bSizerViewFilter->Add( m_panelStatistics, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - m_panelViewFilter->SetSizer( bSizerViewFilter ); - m_panelViewFilter->Layout(); - bSizerViewFilter->Fit( m_panelViewFilter ); - bSizerPanelHolder->Add( m_panelViewFilter, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - this->SetSizer( bSizerPanelHolder ); - this->Layout(); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) ); - this->Connect( m_menuItemNew->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigNew ) ); - this->Connect( m_menuItemLoad->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ) ); - this->Connect( m_menuItemSave->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ) ); - this->Connect( m_menuItemSaveAs->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSaveAs ) ); - this->Connect( m_menuItem7->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ) ); - this->Connect( m_menuItem10->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) ); - this->Connect( m_menuItem11->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) ); - this->Connect( m_menuItem4->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) ); - this->Connect( m_menuItemGlobSett->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuGlobalSettings ) ); - this->Connect( m_menuItem15->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuFindItem ) ); - this->Connect( m_menuItem5->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) ); - this->Connect( m_menuItemManual->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) ); - this->Connect( m_menuItemCheckVersionNow->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) ); - this->Connect( m_menuItemCheckVersionAuto->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersionAutomatically ) ); - this->Connect( m_menuItemAbout->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) ); - m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this ); - m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this ); - m_bpButtonCmpConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCompSettingsContext ), NULL, this ); - m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this ); - m_bpButtonFilter->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnGlobalFilterContext ), NULL, this ); - m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this ); - m_bpButtonSyncConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnSyncSettingsContext ), NULL, this ); - m_buttonSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this ); - m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this ); - m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this ); - m_bpButtonSwapSides->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this ); - m_bpButtonHideSearch->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnHideSearchPanel ), NULL, this ); - m_textCtrlSearchTxt->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( MainDialogGenerated::OnSearchGridEnter ), NULL, this ); - m_bpButtonOpen->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ), NULL, this ); - m_bpButtonSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ), NULL, this ); - m_bpButtonBatchJob->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ), NULL, this ); - m_listBoxHistory->Connect( wxEVT_CHAR, wxKeyEventHandler( MainDialogGenerated::OnCfgHistoryKeyEvent ), NULL, this ); - m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistory ), NULL, this ); - m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistoryDoubleClick ), NULL, this ); - m_listBoxHistory->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCfgHistoryRightClick ), NULL, this ); - m_bpButtonViewTypeSyncAction->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewType ), NULL, this ); - m_bpButtonShowExcluded->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowExcluded->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowCreateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowCreateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowUpdateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowUpdateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowDeleteLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowDeleteLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowLeftOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowLeftNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowEqual->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowEqual->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowDifferent->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowDoNothing->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowDoNothing->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowRightNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowRightOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowDeleteRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowDeleteRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowUpdateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowUpdateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowCreateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowCreateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); - m_bpButtonShowConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); - m_bpButtonShowConflict->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + this->SetSizeHints( wxSize( 640,400 ), wxDefaultSize ); + + m_menubar1 = new wxMenuBar( 0 ); + m_menuFile = new wxMenu(); + m_menuItemNew = new wxMenuItem( m_menuFile, wxID_NEW, wxString( _("&New") ) + wxT('\t') + wxT("Ctrl+N"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemNew ); + + m_menuItemLoad = new wxMenuItem( m_menuFile, wxID_OPEN, wxString( _("&Open...") ) + wxT('\t') + wxT("Ctrl+O"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemLoad ); + + m_menuItemSave = new wxMenuItem( m_menuFile, wxID_SAVE, wxString( _("&Save") ) + wxT('\t') + wxT("Ctrl+S"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemSave ); + + m_menuItemSaveAs = new wxMenuItem( m_menuFile, wxID_SAVEAS, wxString( _("Save &as...") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemSaveAs ); + + m_menuItem7 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("Save as &batch job...") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItem7 ); + + m_menuFile->AppendSeparator(); + + m_menuItem10 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("1. &Compare") ) + wxT('\t') + wxT("F5"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItem10 ); + + m_menuItem11 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("2. &Synchronize") ) + wxT('\t') + wxT("F9"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItem11 ); + + m_menuFile->AppendSeparator(); + + wxMenuItem* m_menuItem4; + m_menuItem4 = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("&Quit") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItem4 ); + + m_menubar1->Append( m_menuFile, _("&Program") ); + + m_menuTools = new wxMenu(); + m_menuItemGlobSett = new wxMenuItem( m_menuTools, wxID_PREFERENCES, wxString( _("&Global settings") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItemGlobSett ); + + m_menuTools->AppendSeparator(); + + m_menuLanguages = new wxMenu(); + m_menuTools->Append( -1, _("&Language"), m_menuLanguages ); + + wxMenuItem* m_menuItem15; + m_menuItem15 = new wxMenuItem( m_menuTools, wxID_FIND, wxString( _("&Find...") ) + wxT('\t') + wxT("Ctrl+F"), wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItem15 ); + + wxMenuItem* m_menuItem5; + m_menuItem5 = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("&Export file list...") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItem5 ); + + m_menubar1->Append( m_menuTools, _("&Tools") ); + + m_menuHelp = new wxMenu(); + m_menuItemManual = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&View help") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemManual ); + + m_menuCheckVersion = new wxMenu(); + m_menuItemCheckVersionNow = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("&Check now") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuCheckVersion->Append( m_menuItemCheckVersionNow ); + + m_menuItemCheckVersionAuto = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("Check &automatically once a week") ) , wxEmptyString, wxITEM_CHECK ); + m_menuCheckVersion->Append( m_menuItemCheckVersionAuto ); + m_menuItemCheckVersionAuto->Check( true ); + + m_menuHelp->Append( -1, _("&Check for new version"), m_menuCheckVersion ); + + m_menuHelp->AppendSeparator(); + + m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemAbout ); + + m_menubar1->Append( m_menuHelp, _("&Help") ); + + this->SetMenuBar( m_menubar1 ); + + bSizerPanelHolder = new wxBoxSizer( wxVERTICAL ); + + m_panelTopButtons = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER|wxTAB_TRAVERSAL ); + bSizerTopButtons = new wxBoxSizer( wxHORIZONTAL ); + + + bSizerTopButtons->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer1721; + bSizer1721 = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonCompare = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Compare"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonCompare->SetDefault(); + m_buttonCompare->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_buttonCompare->SetToolTip( _("dummy") ); + + bSizer1721->Add( m_buttonCompare, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_buttonCancel = new zen::BitmapTextButton( m_panelTopButtons, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( 180,-1 ), 0 ); + m_buttonCancel->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_buttonCancel->Enable( false ); + m_buttonCancel->Hide(); + + bSizer1721->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_bpButtonCmpConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 44,44 ), wxBU_AUTODRAW ); + m_bpButtonCmpConfig->SetToolTip( _("dummy") ); + + bSizer1721->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 3 ); + + + bSizer1721->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonFilter = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 60,44 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE ); + bSizer1721->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bSizer1721->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonSyncConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 44,44 ), wxBU_AUTODRAW ); + m_bpButtonSyncConfig->SetToolTip( _("dummy") ); + + bSizer1721->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND, 3 ); + + m_buttonSync = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Synchronize"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_buttonSync->SetToolTip( _("dummy") ); + + bSizer1721->Add( m_buttonSync, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerTopButtons->Add( bSizer1721, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 4 ); + + + bSizerTopButtons->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelTopButtons->SetSizer( bSizerTopButtons ); + m_panelTopButtons->Layout(); + bSizerTopButtons->Fit( m_panelTopButtons ); + bSizerPanelHolder->Add( m_panelTopButtons, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_panelDirectoryPairs = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1601; + bSizer1601 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer91; + bSizer91 = new wxBoxSizer( wxHORIZONTAL ); + + m_panelTopLeft = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelTopLeft->SetMinSize( wxSize( 1,-1 ) ); + + wxFlexGridSizer* fgSizer8; + fgSizer8 = new wxFlexGridSizer( 0, 2, 0, 0 ); + fgSizer8->AddGrowableCol( 1 ); + fgSizer8->SetFlexibleDirection( wxBOTH ); + fgSizer8->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_ALL ); + + + fgSizer8->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextResolvedPathL = new wxStaticText( m_panelTopLeft, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextResolvedPathL->Wrap( -1 ); + fgSizer8->Add( m_staticTextResolvedPathL, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); + + wxBoxSizer* bSizer159; + bSizer159 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonAddPair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + m_bpButtonAddPair->SetToolTip( _("Add folder pair") ); + + bSizer159->Add( m_bpButtonAddPair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonRemovePair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); + + bSizer159->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + fgSizer8->Add( bSizer159, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer182; + bSizer182 = new wxBoxSizer( wxHORIZONTAL ); + + m_directoryLeft = new FolderHistoryBox( m_panelTopLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer182->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectDirLeft = new wxButton( m_panelTopLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectDirLeft->SetToolTip( _("Select a folder") ); + + bSizer182->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + fgSizer8->Add( bSizer182, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + m_panelTopLeft->SetSizer( fgSizer8 ); + m_panelTopLeft->Layout(); + fgSizer8->Fit( m_panelTopLeft ); + bSizer91->Add( m_panelTopLeft, 1, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_panelTopMiddle = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1771; + bSizer1771 = new wxBoxSizer( wxVERTICAL ); + + + bSizer1771->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bpButtonSwapSides = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW ); + m_bpButtonSwapSides->SetToolTip( _("Swap sides") ); + + bSizer1771->Add( m_bpButtonSwapSides, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + wxBoxSizer* bSizer160; + bSizer160 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonAltCompCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer160->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonLocalFilter = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer160->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 2 ); + + m_bpButtonAltSyncCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer160->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer1771->Add( bSizer160, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer1771->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panelTopMiddle->SetSizer( bSizer1771 ); + m_panelTopMiddle->Layout(); + bSizer1771->Fit( m_panelTopMiddle ); + bSizer91->Add( m_panelTopMiddle, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_panelTopRight = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelTopRight->SetMinSize( wxSize( 1,-1 ) ); + + wxBoxSizer* bSizer183; + bSizer183 = new wxBoxSizer( wxVERTICAL ); + + m_staticTextResolvedPathR = new wxStaticText( m_panelTopRight, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextResolvedPathR->Wrap( -1 ); + bSizer183->Add( m_staticTextResolvedPathR, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); + + wxBoxSizer* bSizer179; + bSizer179 = new wxBoxSizer( wxHORIZONTAL ); + + m_directoryRight = new FolderHistoryBox( m_panelTopRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer179->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectDirRight = new wxButton( m_panelTopRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectDirRight->SetToolTip( _("Select a folder") ); + + bSizer179->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer183->Add( bSizer179, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + m_panelTopRight->SetSizer( bSizer183 ); + m_panelTopRight->Layout(); + bSizer183->Fit( m_panelTopRight ); + bSizer91->Add( m_panelTopRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + + bSizer1601->Add( bSizer91, 0, wxEXPAND, 5 ); + + m_scrolledWindowFolderPairs = new wxScrolledWindow( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxHSCROLL|wxVSCROLL ); + m_scrolledWindowFolderPairs->SetScrollRate( 10, 10 ); + m_scrolledWindowFolderPairs->SetMinSize( wxSize( -1,0 ) ); + + bSizerAddFolderPairs = new wxBoxSizer( wxVERTICAL ); + + + m_scrolledWindowFolderPairs->SetSizer( bSizerAddFolderPairs ); + m_scrolledWindowFolderPairs->Layout(); + bSizerAddFolderPairs->Fit( m_scrolledWindowFolderPairs ); + bSizer1601->Add( m_scrolledWindowFolderPairs, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + m_panelDirectoryPairs->SetSizer( bSizer1601 ); + m_panelDirectoryPairs->Layout(); + bSizer1601->Fit( m_panelDirectoryPairs ); + bSizerPanelHolder->Add( m_panelDirectoryPairs, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_gridNavi = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridNavi->SetScrollRate( 5, 5 ); + bSizerPanelHolder->Add( m_gridNavi, 1, wxEXPAND, 5 ); + + m_panelCenter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1711; + bSizer1711 = new wxBoxSizer( wxVERTICAL ); + + m_splitterMain = new zen::TripleSplitter( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1781; + bSizer1781 = new wxBoxSizer( wxHORIZONTAL ); + + m_gridMainL = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridMainL->SetScrollRate( 5, 5 ); + bSizer1781->Add( m_gridMainL, 1, wxEXPAND, 5 ); + + m_gridMainC = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridMainC->SetScrollRate( 5, 5 ); + bSizer1781->Add( m_gridMainC, 0, wxEXPAND, 5 ); + + m_gridMainR = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridMainR->SetScrollRate( 5, 5 ); + bSizer1781->Add( m_gridMainR, 1, wxEXPAND, 5 ); + + + m_splitterMain->SetSizer( bSizer1781 ); + m_splitterMain->Layout(); + bSizer1781->Fit( m_splitterMain ); + bSizer1711->Add( m_splitterMain, 1, wxEXPAND, 5 ); + + m_panelStatusBar = new wxPanel( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer451; + bSizer451 = new wxBoxSizer( wxHORIZONTAL ); + + bSizer451->SetMinSize( wxSize( -1,22 ) ); + bSizerFileStatus = new wxBoxSizer( wxHORIZONTAL ); + + bSizerStatusLeft = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer53; + bSizer53 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + bSizerStatusLeftDirectories = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapSmallDirectoryLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerStatusLeftDirectories->Add( m_bitmapSmallDirectoryLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusLeftDirectories->Add( 2, 0, 0, 0, 5 ); + + m_staticTextStatusLeftDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusLeftDirs->Wrap( -1 ); + bSizerStatusLeftDirectories->Add( m_staticTextStatusLeftDirs, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer53->Add( bSizerStatusLeftDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + bSizerStatusLeftFiles = new wxBoxSizer( wxHORIZONTAL ); + + + bSizerStatusLeftFiles->Add( 10, 0, 0, 0, 5 ); + + m_bitmapSmallFileLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerStatusLeftFiles->Add( m_bitmapSmallFileLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusLeftFiles->Add( 2, 0, 0, 0, 5 ); + + m_staticTextStatusLeftFiles = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusLeftFiles->Wrap( -1 ); + bSizerStatusLeftFiles->Add( m_staticTextStatusLeftFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusLeftFiles->Add( 4, 0, 0, 0, 5 ); + + m_staticTextStatusLeftBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusLeftBytes->Wrap( -1 ); + bSizerStatusLeftFiles->Add( m_staticTextStatusLeftBytes, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer53->Add( bSizerStatusLeftFiles, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusLeft->Add( bSizer53, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticline9 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizerStatusLeft->Add( m_staticline9, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 2 ); + + + bSizerFileStatus->Add( bSizerStatusLeft, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextStatusMiddle = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusMiddle->Wrap( -1 ); + bSizerFileStatus->Add( m_staticTextStatusMiddle, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + bSizerStatusRight = new wxBoxSizer( wxHORIZONTAL ); + + m_staticline10 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizerStatusRight->Add( m_staticline10, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP, 2 ); + + wxBoxSizer* bSizer52; + bSizer52 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + bSizerStatusRightDirectories = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapSmallDirectoryRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerStatusRightDirectories->Add( m_bitmapSmallDirectoryRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusRightDirectories->Add( 2, 0, 0, 0, 5 ); + + m_staticTextStatusRightDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusRightDirs->Wrap( -1 ); + bSizerStatusRightDirectories->Add( m_staticTextStatusRightDirs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer52->Add( bSizerStatusRightDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + bSizerStatusRightFiles = new wxBoxSizer( wxHORIZONTAL ); + + + bSizerStatusRightFiles->Add( 10, 0, 0, 0, 5 ); + + m_bitmapSmallFileRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerStatusRightFiles->Add( m_bitmapSmallFileRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusRightFiles->Add( 2, 0, 0, 0, 5 ); + + m_staticTextStatusRightFiles = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusRightFiles->Wrap( -1 ); + bSizerStatusRightFiles->Add( m_staticTextStatusRightFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusRightFiles->Add( 4, 0, 0, 0, 5 ); + + m_staticTextStatusRightBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusRightBytes->Wrap( -1 ); + bSizerStatusRightFiles->Add( m_staticTextStatusRightBytes, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer52->Add( bSizerStatusRightFiles, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatusRight->Add( bSizer52, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerFileStatus->Add( bSizerStatusRight, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer451->Add( bSizerFileStatus, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticTextFullStatus = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextFullStatus->Wrap( -1 ); + m_staticTextFullStatus->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer451->Add( m_staticTextFullStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + m_panelStatusBar->SetSizer( bSizer451 ); + m_panelStatusBar->Layout(); + bSizer451->Fit( m_panelStatusBar ); + bSizer1711->Add( m_panelStatusBar, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + + m_panelCenter->SetSizer( bSizer1711 ); + m_panelCenter->Layout(); + bSizer1711->Fit( m_panelCenter ); + bSizerPanelHolder->Add( m_panelCenter, 1, wxEXPAND, 5 ); + + m_panelSearch = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1713; + bSizer1713 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonHideSearch = new wxBitmapButton( m_panelSearch, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + m_bpButtonHideSearch->SetToolTip( _("Close search bar") ); + + bSizer1713->Add( m_bpButtonHideSearch, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_staticText101 = new wxStaticText( m_panelSearch, wxID_ANY, _("Find:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText101->Wrap( -1 ); + bSizer1713->Add( m_staticText101, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_textCtrlSearchTxt = new wxTextCtrl( m_panelSearch, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220,-1 ), 0|wxWANTS_CHARS ); + m_textCtrlSearchTxt->SetMaxLength( 0 ); + bSizer1713->Add( m_textCtrlSearchTxt, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_checkBoxMatchCase = new wxCheckBox( m_panelSearch, wxID_ANY, _("Match case"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer1713->Add( m_checkBoxMatchCase, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + m_panelSearch->SetSizer( bSizer1713 ); + m_panelSearch->Layout(); + bSizer1713->Fit( m_panelSearch ); + bSizerPanelHolder->Add( m_panelSearch, 0, 0, 5 ); + + m_panelConfig = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + bSizerConfig = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer151; + bSizer151 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonOpen = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + m_bpButtonOpen->SetToolTip( _("dummy") ); + + bSizer151->Add( m_bpButtonOpen, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonSave = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + m_bpButtonSave->SetToolTip( _("dummy") ); + + bSizer151->Add( m_bpButtonSave, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonBatchJob = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + m_bpButtonBatchJob->SetToolTip( _("Save as batch job") ); + + bSizer151->Add( m_bpButtonBatchJob, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerConfig->Add( bSizer151, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_listBoxHistory = new wxListBox( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB ); + m_listBoxHistory->SetMinSize( wxSize( -1,40 ) ); + + bSizerConfig->Add( m_listBoxHistory, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelConfig->SetSizer( bSizerConfig ); + m_panelConfig->Layout(); + bSizerConfig->Fit( m_panelConfig ); + bSizerPanelHolder->Add( m_panelConfig, 0, 0, 5 ); + + m_panelViewFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + bSizerViewFilter = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonViewTypeSyncAction = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 82,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonViewTypeSyncAction, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 ); + + m_bpButtonShowExcluded = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowExcluded, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowDoNothing = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowDoNothing, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bpButtonShowCreateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowUpdateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowDeleteLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowDeleteLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowLeftOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowLeftOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowLeftNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowLeftNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowEqual = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowEqual, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowDifferent = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowDifferent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowRightNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowRightNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowRightOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowRightOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowDeleteRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowDeleteRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowUpdateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowCreateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonShowConflict = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonShowConflict, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_panelStatistics = new wxPanel( m_panelViewFilter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL ); + m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer1801 = new wxBoxSizer( wxVERTICAL ); + + bSizerStatistics = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer1712; + bSizer1712 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + + bSizer1712->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer1712->Add( 5, 2, 0, 0, 5 ); + + + bSizer1712->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCreateLeft->Wrap( -1 ); + m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + + bSizer1712->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerStatistics->Add( bSizer1712, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); + + bSizer172->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer172->Add( 5, 2, 0, 0, 5 ); + + + bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextUpdateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdateLeft->Wrap( -1 ); + m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); + + bSizer172->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerStatistics->Add( bSizer172, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer173; + bSizer173 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + + bSizer173->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer173->Add( 5, 2, 0, 0, 5 ); + + + bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeleteLeft->Wrap( -1 ); + m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + + bSizer173->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizer173, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + bSizerData = new wxBoxSizer( wxVERTICAL ); + + m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapData->SetToolTip( _("Total bytes to copy") ); + + bSizerData->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerData->Add( 5, 2, 0, 0, 5 ); + + + bSizerData->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextData->Wrap( -1 ); + m_staticTextData->SetToolTip( _("Total bytes to copy") ); + + bSizerData->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizerData, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer176; + bSizer176 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); + + bSizer176->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer176->Add( 5, 2, 0, 0, 5 ); + + + bSizer176->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextDeleteRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeleteRight->Wrap( -1 ); + m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); + + bSizer176->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizer176, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer177; + bSizer177 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); + + bSizer177->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer177->Add( 5, 2, 0, 0, 5 ); + + + bSizer177->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextUpdateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdateRight->Wrap( -1 ); + m_staticTextUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); + + bSizer177->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizer177, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer178; + bSizer178 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") ); + + bSizer178->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer178->Add( 5, 2, 0, 0, 5 ); + + + bSizer178->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextCreateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCreateRight->Wrap( -1 ); + m_staticTextCreateRight->SetToolTip( _("Number of files and folders that will be created") ); + + bSizer178->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer1801->Add( bSizerStatistics, 0, wxALIGN_CENTER_VERTICAL|wxALL, 4 ); + + + m_panelStatistics->SetSizer( bSizer1801 ); + m_panelStatistics->Layout(); + bSizer1801->Fit( m_panelStatistics ); + bSizerViewFilter->Add( m_panelStatistics, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + m_panelViewFilter->SetSizer( bSizerViewFilter ); + m_panelViewFilter->Layout(); + bSizerViewFilter->Fit( m_panelViewFilter ); + bSizerPanelHolder->Add( m_panelViewFilter, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + this->SetSizer( bSizerPanelHolder ); + this->Layout(); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) ); + this->Connect( m_menuItemNew->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigNew ) ); + this->Connect( m_menuItemLoad->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ) ); + this->Connect( m_menuItemSave->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ) ); + this->Connect( m_menuItemSaveAs->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSaveAs ) ); + this->Connect( m_menuItem7->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ) ); + this->Connect( m_menuItem10->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) ); + this->Connect( m_menuItem11->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) ); + this->Connect( m_menuItem4->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) ); + this->Connect( m_menuItemGlobSett->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuGlobalSettings ) ); + this->Connect( m_menuItem15->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuFindItem ) ); + this->Connect( m_menuItem5->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) ); + this->Connect( m_menuItemManual->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) ); + this->Connect( m_menuItemCheckVersionNow->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) ); + this->Connect( m_menuItemCheckVersionAuto->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersionAutomatically ) ); + this->Connect( m_menuItemAbout->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) ); + m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this ); + m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this ); + m_bpButtonCmpConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCompSettingsContext ), NULL, this ); + m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this ); + m_bpButtonFilter->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnGlobalFilterContext ), NULL, this ); + m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this ); + m_bpButtonSyncConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnSyncSettingsContext ), NULL, this ); + m_buttonSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this ); + m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this ); + m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this ); + m_bpButtonSwapSides->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this ); + m_bpButtonHideSearch->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnHideSearchPanel ), NULL, this ); + m_textCtrlSearchTxt->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( MainDialogGenerated::OnSearchGridEnter ), NULL, this ); + m_bpButtonOpen->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ), NULL, this ); + m_bpButtonSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ), NULL, this ); + m_bpButtonBatchJob->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ), NULL, this ); + m_listBoxHistory->Connect( wxEVT_CHAR, wxKeyEventHandler( MainDialogGenerated::OnCfgHistoryKeyEvent ), NULL, this ); + m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistory ), NULL, this ); + m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistoryDoubleClick ), NULL, this ); + m_listBoxHistory->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCfgHistoryRightClick ), NULL, this ); + m_bpButtonViewTypeSyncAction->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewType ), NULL, this ); + m_bpButtonShowExcluded->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowExcluded->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowDoNothing->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowDoNothing->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowCreateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowCreateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowUpdateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowUpdateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowDeleteLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowDeleteLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowLeftOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowLeftNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowEqual->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowEqual->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowDifferent->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowRightNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowRightOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowDeleteRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowDeleteRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowUpdateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowUpdateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowCreateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowCreateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); + m_bpButtonShowConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this ); + m_bpButtonShowConflict->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this ); } MainDialogGenerated::~MainDialogGenerated() @@ -890,120 +890,120 @@ MainDialogGenerated::~MainDialogGenerated() CmpCfgDlgGenerated::CmpCfgDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer136; - bSizer136 = new wxBoxSizer( wxVERTICAL ); - - m_panel36 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel36->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer159; - bSizer159 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer182; - bSizer182 = new wxBoxSizer( wxVERTICAL ); - - m_staticText91 = new wxStaticText( m_panel36, wxID_ANY, _("Select a variant:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText91->Wrap( -1 ); - bSizer182->Add( m_staticText91, 0, wxALL, 5 ); - - wxFlexGridSizer* fgSizer16; - fgSizer16 = new wxFlexGridSizer( 2, 2, 5, 5 ); - fgSizer16->SetFlexibleDirection( wxBOTH ); - fgSizer16->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_bitmapByTime = new wxStaticBitmap( m_panel36, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapByTime->SetToolTip( _("Identify equal files by comparing modification time and size.") ); - - fgSizer16->Add( m_bitmapByTime, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_toggleBtnTimeSize = new wxToggleButton( m_panel36, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_toggleBtnTimeSize->SetValue( true ); - m_toggleBtnTimeSize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_toggleBtnTimeSize->SetToolTip( _("Identify equal files by comparing modification time and size.") ); - - fgSizer16->Add( m_toggleBtnTimeSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_bitmapByContent = new wxStaticBitmap( m_panel36, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapByContent->SetToolTip( _("Identify equal files by comparing the file content.") ); - - fgSizer16->Add( m_bitmapByContent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_toggleBtnContent = new wxToggleButton( m_panel36, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_toggleBtnContent->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_toggleBtnContent->SetToolTip( _("Identify equal files by comparing the file content.") ); - - fgSizer16->Add( m_toggleBtnContent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer182->Add( fgSizer16, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer159->Add( bSizer182, 0, wxALL, 5 ); - - m_staticline33 = new wxStaticLine( m_panel36, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer159->Add( m_staticline33, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxVERTICAL ); - - m_staticText92 = new wxStaticText( m_panel36, wxID_ANY, _("Symbolic links:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText92->Wrap( -1 ); - bSizer172->Add( m_staticText92, 0, wxBOTTOM, 5 ); - - wxArrayString m_choiceHandleSymlinksChoices; - m_choiceHandleSymlinks = new wxChoice( m_panel36, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleSymlinksChoices, 0 ); - m_choiceHandleSymlinks->SetSelection( -1 ); - bSizer172->Add( m_choiceHandleSymlinks, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_hyperlink24 = new wxHyperlinkCtrl( m_panel36, wxID_ANY, _("More information"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - bSizer172->Add( m_hyperlink24, 0, wxTOP, 5 ); - - - bSizer159->Add( bSizer172, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 10 ); - - - m_panel36->SetSizer( bSizer159 ); - m_panel36->Layout(); - bSizer159->Fit( m_panel36 ); - bSizer136->Add( m_panel36, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline14 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer136->Add( m_staticline14, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer136->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - this->SetSizer( bSizer136 ); - this->Layout(); - bSizer136->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) ); - m_toggleBtnTimeSize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this ); - m_toggleBtnTimeSize->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this ); - m_toggleBtnContent->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this ); - m_toggleBtnContent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this ); - m_choiceHandleSymlinks->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this ); - m_hyperlink24->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( CmpCfgDlgGenerated::OnHelpComparisonSettings ), NULL, this ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer136; + bSizer136 = new wxBoxSizer( wxVERTICAL ); + + m_panel36 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel36->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer159; + bSizer159 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer182; + bSizer182 = new wxBoxSizer( wxVERTICAL ); + + m_staticText91 = new wxStaticText( m_panel36, wxID_ANY, _("Select a variant:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText91->Wrap( -1 ); + bSizer182->Add( m_staticText91, 0, wxALL, 5 ); + + wxFlexGridSizer* fgSizer16; + fgSizer16 = new wxFlexGridSizer( 2, 2, 5, 5 ); + fgSizer16->SetFlexibleDirection( wxBOTH ); + fgSizer16->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_bitmapByTime = new wxStaticBitmap( m_panel36, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapByTime->SetToolTip( _("Identify equal files by comparing modification time and size.") ); + + fgSizer16->Add( m_bitmapByTime, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_toggleBtnTimeSize = new wxToggleButton( m_panel36, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_toggleBtnTimeSize->SetValue( true ); + m_toggleBtnTimeSize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_toggleBtnTimeSize->SetToolTip( _("Identify equal files by comparing modification time and size.") ); + + fgSizer16->Add( m_toggleBtnTimeSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_bitmapByContent = new wxStaticBitmap( m_panel36, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapByContent->SetToolTip( _("Identify equal files by comparing the file content.") ); + + fgSizer16->Add( m_bitmapByContent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_toggleBtnContent = new wxToggleButton( m_panel36, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_toggleBtnContent->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_toggleBtnContent->SetToolTip( _("Identify equal files by comparing the file content.") ); + + fgSizer16->Add( m_toggleBtnContent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer182->Add( fgSizer16, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer159->Add( bSizer182, 0, wxALL, 5 ); + + m_staticline33 = new wxStaticLine( m_panel36, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer159->Add( m_staticline33, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); + + m_staticText92 = new wxStaticText( m_panel36, wxID_ANY, _("Symbolic links:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText92->Wrap( -1 ); + bSizer172->Add( m_staticText92, 0, wxBOTTOM, 5 ); + + wxArrayString m_choiceHandleSymlinksChoices; + m_choiceHandleSymlinks = new wxChoice( m_panel36, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleSymlinksChoices, 0 ); + m_choiceHandleSymlinks->SetSelection( -1 ); + bSizer172->Add( m_choiceHandleSymlinks, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_hyperlink24 = new wxHyperlinkCtrl( m_panel36, wxID_ANY, _("More information"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + bSizer172->Add( m_hyperlink24, 0, wxTOP, 5 ); + + + bSizer159->Add( bSizer172, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 10 ); + + + m_panel36->SetSizer( bSizer159 ); + m_panel36->Layout(); + bSizer159->Fit( m_panel36 ); + bSizer136->Add( m_panel36, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline14 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer136->Add( m_staticline14, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer136->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + + + this->SetSizer( bSizer136 ); + this->Layout(); + bSizer136->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) ); + m_toggleBtnTimeSize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this ); + m_toggleBtnTimeSize->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this ); + m_toggleBtnContent->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this ); + m_toggleBtnContent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this ); + m_choiceHandleSymlinks->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this ); + m_hyperlink24->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( CmpCfgDlgGenerated::OnHelpComparisonSettings ), NULL, this ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this ); } CmpCfgDlgGenerated::~CmpCfgDlgGenerated() @@ -1012,500 +1012,500 @@ CmpCfgDlgGenerated::~CmpCfgDlgGenerated() SyncCfgDlgGenerated::SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer7; - bSizer7 = new wxBoxSizer( wxVERTICAL ); - - m_panel37 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel37->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer181; - bSizer181 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer29; - bSizer29 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer183; - bSizer183 = new wxBoxSizer( wxVERTICAL ); - - m_staticText86 = new wxStaticText( m_panel37, wxID_ANY, _("Select a variant:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText86->Wrap( -1 ); - bSizer183->Add( m_staticText86, 0, wxALL, 5 ); - - wxFlexGridSizer* fgSizer1; - fgSizer1 = new wxFlexGridSizer( 4, 2, 5, 5 ); - fgSizer1->SetFlexibleDirection( wxBOTH ); - fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - wxBoxSizer* bSizer171; - bSizer171 = new wxBoxSizer( wxVERTICAL ); - - - bSizer171->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_toggleBtnTwoWay = new wxToggleButton( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_toggleBtnTwoWay->SetValue( true ); - m_toggleBtnTwoWay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer171->Add( m_toggleBtnTwoWay, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer171->Add( 0, 0, 1, wxEXPAND, 5 ); - - - fgSizer1->Add( bSizer171, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_staticTextAutomatic = new wxStaticText( m_panel37, wxID_ANY, _("Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextAutomatic->Wrap( 480 ); - fgSizer1->Add( m_staticTextAutomatic, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxVERTICAL ); - - - bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_toggleBtnMirror = new wxToggleButton( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_toggleBtnMirror->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer172->Add( m_toggleBtnMirror, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); - - - fgSizer1->Add( bSizer172, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextMirror = new wxStaticText( m_panel37, wxID_ANY, _("Create a mirror backup of the left folder by adapting the right folder to match."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextMirror->Wrap( 480 ); - fgSizer1->Add( m_staticTextMirror, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer173; - bSizer173 = new wxBoxSizer( wxVERTICAL ); - - - bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_toggleBtnUpdate = new wxToggleButton( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_toggleBtnUpdate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer173->Add( m_toggleBtnUpdate, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); - - - fgSizer1->Add( bSizer173, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_staticTextUpdate = new wxStaticText( m_panel37, wxID_ANY, _("Copy new and updated files to the right folder."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdate->Wrap( 480 ); - fgSizer1->Add( m_staticTextUpdate, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer1741; - bSizer1741 = new wxBoxSizer( wxVERTICAL ); - - - bSizer1741->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_toggleBtnCustom = new wxToggleButton( m_panel37, wxID_ANY, _("Custom"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_toggleBtnCustom->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer1741->Add( m_toggleBtnCustom, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer1741->Add( 0, 0, 1, wxEXPAND, 5 ); - - - fgSizer1->Add( bSizer1741, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextCustom = new wxStaticText( m_panel37, wxID_ANY, _("Configure your own synchronization rules."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCustom->Wrap( 480 ); - fgSizer1->Add( m_staticTextCustom, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer183->Add( fgSizer1, 0, wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer1751; - bSizer1751 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer1751->Add( 8, 0, 0, 0, 5 ); - - m_checkBoxDetectMove = new wxCheckBox( m_panel37, wxID_ANY, _("Detect moved files"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxDetectMove->SetValue(true); - m_checkBoxDetectMove->SetToolTip( _("- Requires and creates database files\n- Detection active after initial sync\n- Not supported by all file systems") ); - - bSizer1751->Add( m_checkBoxDetectMove, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); - - - bSizer183->Add( bSizer1751, 0, wxEXPAND, 5 ); - - - bSizer29->Add( bSizer183, 0, wxALL, 5 ); - - m_staticline32 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer29->Add( m_staticline32, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer184; - bSizer184 = new wxBoxSizer( wxVERTICAL ); - - m_staticText87 = new wxStaticText( m_panel37, wxID_ANY, _("Delete files:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText87->Wrap( -1 ); - bSizer184->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer180; - bSizer180 = new wxBoxSizer( wxHORIZONTAL ); - - m_toggleBtnPermanent = new wxToggleButton( m_panel37, wxID_ANY, _("Permanent"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnPermanent->SetToolTip( _("Delete or overwrite files permanently") ); - - bSizer180->Add( m_toggleBtnPermanent, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_toggleBtnRecycler = new wxToggleButton( m_panel37, wxID_ANY, _("Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnRecycler->SetToolTip( _("Back up deleted and overwritten files in the recycle bin") ); - - bSizer180->Add( m_toggleBtnRecycler, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_toggleBtnVersioning = new wxToggleButton( m_panel37, wxID_ANY, _("Versioning"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnVersioning->SetToolTip( _("Move files to a user-defined folder") ); - - bSizer180->Add( m_toggleBtnVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer184->Add( bSizer180, 0, wxTOP, 5 ); - - m_panelVersioning = new wxPanel( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelVersioning->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer191; - bSizer191 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer156; - bSizer156 = new wxBoxSizer( wxHORIZONTAL ); - - m_versioningFolder = new FolderHistoryBox( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer156->Add( m_versioningFolder, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectDirVersioning = new wxButton( m_panelVersioning, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectDirVersioning->SetToolTip( _("Select a folder") ); - - bSizer156->Add( m_buttonSelectDirVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer191->Add( bSizer156, 1, wxEXPAND|wxBOTTOM, 5 ); - - bSizer192 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText93 = new wxStaticText( m_panelVersioning, wxID_ANY, _("Naming convention:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText93->Wrap( -1 ); - bSizer192->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - wxArrayString m_choiceVersioningStyleChoices; - m_choiceVersioningStyle = new wxChoice( m_panelVersioning, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceVersioningStyleChoices, 0 ); - m_choiceVersioningStyle->SetSelection( 0 ); - bSizer192->Add( m_choiceVersioningStyle, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_staticTextNamingCvtPart1 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextNamingCvtPart1->Wrap( -1 ); - m_staticTextNamingCvtPart1->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - bSizer192->Add( m_staticTextNamingCvtPart1, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextNamingCvtPart2Bold = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextNamingCvtPart2Bold->Wrap( -1 ); - m_staticTextNamingCvtPart2Bold->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_staticTextNamingCvtPart2Bold->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - bSizer192->Add( m_staticTextNamingCvtPart2Bold, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextNamingCvtPart3 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextNamingCvtPart3->Wrap( -1 ); - m_staticTextNamingCvtPart3->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - bSizer192->Add( m_staticTextNamingCvtPart3, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer192->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_hyperlink17 = new wxHyperlinkCtrl( m_panelVersioning, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - bSizer192->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - - bSizer191->Add( bSizer192, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - m_panelVersioning->SetSizer( bSizer191 ); - m_panelVersioning->Layout(); - bSizer191->Fit( m_panelVersioning ); - bSizer184->Add( m_panelVersioning, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 5 ); - - - bSizer29->Add( bSizer184, 0, wxALL|wxEXPAND, 10 ); - - bSizerExtraConfig = new wxBoxSizer( wxVERTICAL ); - - m_staticline321 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerExtraConfig->Add( m_staticline321, 0, wxEXPAND, 5 ); - - bSizer179 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer174; - bSizer174 = new wxBoxSizer( wxVERTICAL ); - - m_staticText88 = new wxStaticText( m_panel37, wxID_ANY, _("Handle errors:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText88->Wrap( -1 ); - bSizer174->Add( m_staticText88, 0, wxBOTTOM, 5 ); - - wxBoxSizer* bSizer175; - bSizer175 = new wxBoxSizer( wxHORIZONTAL ); - - m_toggleBtnErrorIgnore = new wxToggleButton( m_panel37, wxID_ANY, _("Ignore"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") ); - - bSizer175->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_toggleBtnErrorPopup = new wxToggleButton( m_panel37, wxID_ANY, _("Pop-up"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") ); - - bSizer175->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer174->Add( bSizer175, 0, 0, 5 ); - - - bSizer179->Add( bSizer174, 0, wxALL, 10 ); - - m_staticline36 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer179->Add( m_staticline36, 0, wxEXPAND, 5 ); - - bSizerOnCompletion = new wxBoxSizer( wxVERTICAL ); - - m_staticText89 = new wxStaticText( m_panel37, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText89->Wrap( -1 ); - bSizerOnCompletion->Add( m_staticText89, 0, wxBOTTOM, 5 ); - - m_comboBoxExecFinished = new ExecFinishedBox( m_panel37, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizerOnCompletion->Add( m_comboBoxExecFinished, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer179->Add( bSizerOnCompletion, 1, wxALL, 10 ); - - - bSizerExtraConfig->Add( bSizer179, 0, wxEXPAND, 5 ); - - - bSizer29->Add( bSizerExtraConfig, 0, wxEXPAND, 5 ); - - - bSizer181->Add( bSizer29, 0, wxEXPAND, 5 ); - - m_staticline31 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer181->Add( m_staticline31, 0, wxEXPAND, 5 ); - - bSizerConfig = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer18011; - bSizer18011 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextHeaderCategory1 = new wxStaticText( m_panel37, wxID_ANY, _("Category"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); - m_staticTextHeaderCategory1->Wrap( -1 ); - bSizer18011->Add( m_staticTextHeaderCategory1, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer18011->Add( 5, 0, 0, 0, 5 ); - - m_staticTextHeaderAction1 = new wxStaticText( m_panel37, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT ); - m_staticTextHeaderAction1->Wrap( -1 ); - bSizer18011->Add( m_staticTextHeaderAction1, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerConfig->Add( bSizer18011, 0, wxEXPAND, 5 ); - - - bSizerConfig->Add( 0, 5, 0, 0, 5 ); - - m_bitmapDatabase = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmapDatabase->SetToolTip( _("Detect synchronization directions with the help of database files") ); - - bSizerConfig->Add( m_bitmapDatabase, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 10 ); - - wxBoxSizer* sbSizerKeepWidthStableIfSyncDirsNotShown; - sbSizerKeepWidthStableIfSyncDirsNotShown = new wxBoxSizer( wxHORIZONTAL ); - - - sbSizerKeepWidthStableIfSyncDirsNotShown->Add( 45, 0, 0, 0, 5 ); - - - sbSizerKeepWidthStableIfSyncDirsNotShown->Add( 5, 0, 0, 0, 5 ); - - - sbSizerKeepWidthStableIfSyncDirsNotShown->Add( 46, 0, 0, 0, 5 ); - - - bSizerConfig->Add( sbSizerKeepWidthStableIfSyncDirsNotShown, 0, 0, 5 ); - - sbSizerSyncDirections = new wxBoxSizer( wxVERTICAL ); - - bSizerLeftOnly = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapLeftOnly = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapLeftOnly->SetToolTip( _("Item exists on left side only") ); - - bSizerLeftOnly->Add( m_bitmapLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerLeftOnly->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonLeftOnly = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerLeftOnly->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerRightOnly = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapRightOnly = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapRightOnly->SetToolTip( _("Item exists on right side only") ); - - bSizerRightOnly->Add( m_bitmapRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerRightOnly->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonRightOnly = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerRightOnly->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerRightOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerLeftNewer = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapLeftNewer = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapLeftNewer->SetToolTip( _("Left side is newer") ); - - bSizerLeftNewer->Add( m_bitmapLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerLeftNewer->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonLeftNewer = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerLeftNewer->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerRightNewer = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapRightNewer = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapRightNewer->SetToolTip( _("Right side is newer") ); - - bSizerRightNewer->Add( m_bitmapRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerRightNewer->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonRightNewer = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerRightNewer->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerRightNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerDifferent = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapDifferent = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapDifferent->SetToolTip( _("Items have different content") ); - - bSizerDifferent->Add( m_bitmapDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerDifferent->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonDifferent = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerDifferent->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerDifferent, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerConflict = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapConflict = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapConflict->SetToolTip( _("Conflict/item cannot be categorized") ); - - bSizerConflict->Add( m_bitmapConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerConflict->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonConflict = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerConflict->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerConflict, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerConfig->Add( sbSizerSyncDirections, 0, wxEXPAND, 5 ); - - - bSizer181->Add( bSizerConfig, 0, wxALL|wxEXPAND, 10 ); - - - m_panel37->SetSizer( bSizer181 ); - m_panel37->Layout(); - bSizer181->Fit( m_panel37 ); - bSizer7->Add( m_panel37, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline15 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer7->Add( m_staticline15, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOK->SetDefault(); - m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer7->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - this->SetSizer( bSizer7 ); - this->Layout(); - bSizer7->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) ); - m_toggleBtnTwoWay->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncTwoWayDouble ), NULL, this ); - m_toggleBtnTwoWay->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncTwoWay ), NULL, this ); - m_toggleBtnMirror->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this ); - m_toggleBtnMirror->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this ); - m_toggleBtnUpdate->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this ); - m_toggleBtnUpdate->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this ); - m_toggleBtnCustom->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this ); - m_toggleBtnCustom->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this ); - m_checkBoxDetectMove->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnToggleDetectMovedFiles ), NULL, this ); - m_toggleBtnPermanent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionPermanent ), NULL, this ); - m_toggleBtnRecycler->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionRecycler ), NULL, this ); - m_toggleBtnVersioning->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionVersioning ), NULL, this ); - m_choiceVersioningStyle->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnParameterChange ), NULL, this ); - m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( SyncCfgDlgGenerated::OnHelpVersioning ), NULL, this ); - m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorIgnore ), NULL, this ); - m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorPopup ), NULL, this ); - m_bpButtonLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExLeftSideOnly ), NULL, this ); - m_bpButtonRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExRightSideOnly ), NULL, this ); - m_bpButtonLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnLeftNewer ), NULL, this ); - m_bpButtonRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnRightNewer ), NULL, this ); - m_bpButtonDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDifferent ), NULL, this ); - m_bpButtonConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnConflict ), NULL, this ); - m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer7; + bSizer7 = new wxBoxSizer( wxVERTICAL ); + + m_panel37 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel37->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer181; + bSizer181 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer29; + bSizer29 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer183; + bSizer183 = new wxBoxSizer( wxVERTICAL ); + + m_staticText86 = new wxStaticText( m_panel37, wxID_ANY, _("Select a variant:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText86->Wrap( -1 ); + bSizer183->Add( m_staticText86, 0, wxALL, 5 ); + + wxFlexGridSizer* fgSizer1; + fgSizer1 = new wxFlexGridSizer( 4, 2, 5, 5 ); + fgSizer1->SetFlexibleDirection( wxBOTH ); + fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + wxBoxSizer* bSizer171; + bSizer171 = new wxBoxSizer( wxVERTICAL ); + + + bSizer171->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_toggleBtnTwoWay = new wxToggleButton( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_toggleBtnTwoWay->SetValue( true ); + m_toggleBtnTwoWay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer171->Add( m_toggleBtnTwoWay, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer171->Add( 0, 0, 1, wxEXPAND, 5 ); + + + fgSizer1->Add( bSizer171, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticTextAutomatic = new wxStaticText( m_panel37, wxID_ANY, _("Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextAutomatic->Wrap( 480 ); + fgSizer1->Add( m_staticTextAutomatic, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); + + + bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_toggleBtnMirror = new wxToggleButton( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_toggleBtnMirror->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer172->Add( m_toggleBtnMirror, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); + + + fgSizer1->Add( bSizer172, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextMirror = new wxStaticText( m_panel37, wxID_ANY, _("Create a mirror backup of the left folder by adapting the right folder to match."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextMirror->Wrap( 480 ); + fgSizer1->Add( m_staticTextMirror, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer173; + bSizer173 = new wxBoxSizer( wxVERTICAL ); + + + bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_toggleBtnUpdate = new wxToggleButton( m_panel37, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_toggleBtnUpdate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer173->Add( m_toggleBtnUpdate, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); + + + fgSizer1->Add( bSizer173, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticTextUpdate = new wxStaticText( m_panel37, wxID_ANY, _("Copy new and updated files to the right folder."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdate->Wrap( 480 ); + fgSizer1->Add( m_staticTextUpdate, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer1741; + bSizer1741 = new wxBoxSizer( wxVERTICAL ); + + + bSizer1741->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_toggleBtnCustom = new wxToggleButton( m_panel37, wxID_ANY, _("Custom"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_toggleBtnCustom->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer1741->Add( m_toggleBtnCustom, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer1741->Add( 0, 0, 1, wxEXPAND, 5 ); + + + fgSizer1->Add( bSizer1741, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextCustom = new wxStaticText( m_panel37, wxID_ANY, _("Configure your own synchronization rules."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCustom->Wrap( 480 ); + fgSizer1->Add( m_staticTextCustom, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer183->Add( fgSizer1, 0, wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer1751; + bSizer1751 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer1751->Add( 8, 0, 0, 0, 5 ); + + m_checkBoxDetectMove = new wxCheckBox( m_panel37, wxID_ANY, _("Detect moved files"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxDetectMove->SetValue(true); + m_checkBoxDetectMove->SetToolTip( _("- Requires and creates database files\n- Detection active after initial sync\n- Not supported by all file systems") ); + + bSizer1751->Add( m_checkBoxDetectMove, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); + + + bSizer183->Add( bSizer1751, 0, wxEXPAND, 5 ); + + + bSizer29->Add( bSizer183, 0, wxALL, 5 ); + + m_staticline32 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer29->Add( m_staticline32, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer184; + bSizer184 = new wxBoxSizer( wxVERTICAL ); + + m_staticText87 = new wxStaticText( m_panel37, wxID_ANY, _("Delete files:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText87->Wrap( -1 ); + bSizer184->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer180; + bSizer180 = new wxBoxSizer( wxHORIZONTAL ); + + m_toggleBtnPermanent = new wxToggleButton( m_panel37, wxID_ANY, _("Permanent"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnPermanent->SetToolTip( _("Delete or overwrite files permanently") ); + + bSizer180->Add( m_toggleBtnPermanent, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_toggleBtnRecycler = new wxToggleButton( m_panel37, wxID_ANY, _("Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnRecycler->SetToolTip( _("Back up deleted and overwritten files in the recycle bin") ); + + bSizer180->Add( m_toggleBtnRecycler, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_toggleBtnVersioning = new wxToggleButton( m_panel37, wxID_ANY, _("Versioning"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnVersioning->SetToolTip( _("Move files to a user-defined folder") ); + + bSizer180->Add( m_toggleBtnVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer184->Add( bSizer180, 0, wxTOP, 5 ); + + m_panelVersioning = new wxPanel( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelVersioning->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer191; + bSizer191 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer156; + bSizer156 = new wxBoxSizer( wxHORIZONTAL ); + + m_versioningFolder = new FolderHistoryBox( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer156->Add( m_versioningFolder, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectDirVersioning = new wxButton( m_panelVersioning, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectDirVersioning->SetToolTip( _("Select a folder") ); + + bSizer156->Add( m_buttonSelectDirVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer191->Add( bSizer156, 1, wxEXPAND|wxBOTTOM, 5 ); + + bSizer192 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText93 = new wxStaticText( m_panelVersioning, wxID_ANY, _("Naming convention:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText93->Wrap( -1 ); + bSizer192->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + wxArrayString m_choiceVersioningStyleChoices; + m_choiceVersioningStyle = new wxChoice( m_panelVersioning, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceVersioningStyleChoices, 0 ); + m_choiceVersioningStyle->SetSelection( 0 ); + bSizer192->Add( m_choiceVersioningStyle, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_staticTextNamingCvtPart1 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextNamingCvtPart1->Wrap( -1 ); + m_staticTextNamingCvtPart1->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer192->Add( m_staticTextNamingCvtPart1, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextNamingCvtPart2Bold = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextNamingCvtPart2Bold->Wrap( -1 ); + m_staticTextNamingCvtPart2Bold->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_staticTextNamingCvtPart2Bold->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer192->Add( m_staticTextNamingCvtPart2Bold, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextNamingCvtPart3 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextNamingCvtPart3->Wrap( -1 ); + m_staticTextNamingCvtPart3->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer192->Add( m_staticTextNamingCvtPart3, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer192->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_hyperlink17 = new wxHyperlinkCtrl( m_panelVersioning, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + bSizer192->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + + + bSizer191->Add( bSizer192, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + m_panelVersioning->SetSizer( bSizer191 ); + m_panelVersioning->Layout(); + bSizer191->Fit( m_panelVersioning ); + bSizer184->Add( m_panelVersioning, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 5 ); + + + bSizer29->Add( bSizer184, 0, wxALL|wxEXPAND, 10 ); + + bSizerExtraConfig = new wxBoxSizer( wxVERTICAL ); + + m_staticline321 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerExtraConfig->Add( m_staticline321, 0, wxEXPAND, 5 ); + + bSizer179 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer174; + bSizer174 = new wxBoxSizer( wxVERTICAL ); + + m_staticText88 = new wxStaticText( m_panel37, wxID_ANY, _("Handle errors:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText88->Wrap( -1 ); + bSizer174->Add( m_staticText88, 0, wxBOTTOM, 5 ); + + wxBoxSizer* bSizer175; + bSizer175 = new wxBoxSizer( wxHORIZONTAL ); + + m_toggleBtnErrorIgnore = new wxToggleButton( m_panel37, wxID_ANY, _("Ignore"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") ); + + bSizer175->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_toggleBtnErrorPopup = new wxToggleButton( m_panel37, wxID_ANY, _("Pop-up"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") ); + + bSizer175->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer174->Add( bSizer175, 0, 0, 5 ); + + + bSizer179->Add( bSizer174, 0, wxALL, 10 ); + + m_staticline36 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer179->Add( m_staticline36, 0, wxEXPAND, 5 ); + + bSizerOnCompletion = new wxBoxSizer( wxVERTICAL ); + + m_staticText89 = new wxStaticText( m_panel37, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText89->Wrap( -1 ); + bSizerOnCompletion->Add( m_staticText89, 0, wxBOTTOM, 5 ); + + m_comboBoxExecFinished = new ExecFinishedBox( m_panel37, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizerOnCompletion->Add( m_comboBoxExecFinished, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer179->Add( bSizerOnCompletion, 1, wxALL, 10 ); + + + bSizerExtraConfig->Add( bSizer179, 0, wxEXPAND, 5 ); + + + bSizer29->Add( bSizerExtraConfig, 0, wxEXPAND, 5 ); + + + bSizer181->Add( bSizer29, 0, wxEXPAND, 5 ); + + m_staticline31 = new wxStaticLine( m_panel37, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer181->Add( m_staticline31, 0, wxEXPAND, 5 ); + + bSizerConfig = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer18011; + bSizer18011 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextHeaderCategory1 = new wxStaticText( m_panel37, wxID_ANY, _("Category"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); + m_staticTextHeaderCategory1->Wrap( -1 ); + bSizer18011->Add( m_staticTextHeaderCategory1, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer18011->Add( 5, 0, 0, 0, 5 ); + + m_staticTextHeaderAction1 = new wxStaticText( m_panel37, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT ); + m_staticTextHeaderAction1->Wrap( -1 ); + bSizer18011->Add( m_staticTextHeaderAction1, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerConfig->Add( bSizer18011, 0, wxEXPAND, 5 ); + + + bSizerConfig->Add( 0, 5, 0, 0, 5 ); + + m_bitmapDatabase = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_bitmapDatabase->SetToolTip( _("Detect synchronization directions with the help of database files") ); + + bSizerConfig->Add( m_bitmapDatabase, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 10 ); + + wxBoxSizer* sbSizerKeepWidthStableIfSyncDirsNotShown; + sbSizerKeepWidthStableIfSyncDirsNotShown = new wxBoxSizer( wxHORIZONTAL ); + + + sbSizerKeepWidthStableIfSyncDirsNotShown->Add( 45, 0, 0, 0, 5 ); + + + sbSizerKeepWidthStableIfSyncDirsNotShown->Add( 5, 0, 0, 0, 5 ); + + + sbSizerKeepWidthStableIfSyncDirsNotShown->Add( 46, 0, 0, 0, 5 ); + + + bSizerConfig->Add( sbSizerKeepWidthStableIfSyncDirsNotShown, 0, 0, 5 ); + + sbSizerSyncDirections = new wxBoxSizer( wxVERTICAL ); + + bSizerLeftOnly = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapLeftOnly = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapLeftOnly->SetToolTip( _("Item exists on left side only") ); + + bSizerLeftOnly->Add( m_bitmapLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerLeftOnly->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonLeftOnly = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerLeftOnly->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerRightOnly = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapRightOnly = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapRightOnly->SetToolTip( _("Item exists on right side only") ); + + bSizerRightOnly->Add( m_bitmapRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerRightOnly->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonRightOnly = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerRightOnly->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerRightOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerLeftNewer = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapLeftNewer = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapLeftNewer->SetToolTip( _("Left side is newer") ); + + bSizerLeftNewer->Add( m_bitmapLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerLeftNewer->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonLeftNewer = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerLeftNewer->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerRightNewer = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapRightNewer = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapRightNewer->SetToolTip( _("Right side is newer") ); + + bSizerRightNewer->Add( m_bitmapRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerRightNewer->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonRightNewer = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerRightNewer->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerRightNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerDifferent = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapDifferent = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapDifferent->SetToolTip( _("Items have different content") ); + + bSizerDifferent->Add( m_bitmapDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerDifferent->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonDifferent = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerDifferent->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerDifferent, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerConflict = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapConflict = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapConflict->SetToolTip( _("Conflict/item cannot be categorized") ); + + bSizerConflict->Add( m_bitmapConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerConflict->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonConflict = new wxBitmapButton( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerConflict->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerConflict, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerConfig->Add( sbSizerSyncDirections, 0, wxEXPAND, 5 ); + + + bSizer181->Add( bSizerConfig, 0, wxALL|wxEXPAND, 10 ); + + + m_panel37->SetSizer( bSizer181 ); + m_panel37->Layout(); + bSizer181->Fit( m_panel37 ); + bSizer7->Add( m_panel37, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline15 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer7->Add( m_staticline15, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOK->SetDefault(); + m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer7->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + + + this->SetSizer( bSizer7 ); + this->Layout(); + bSizer7->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) ); + m_toggleBtnTwoWay->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncTwoWayDouble ), NULL, this ); + m_toggleBtnTwoWay->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncTwoWay ), NULL, this ); + m_toggleBtnMirror->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this ); + m_toggleBtnMirror->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this ); + m_toggleBtnUpdate->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this ); + m_toggleBtnUpdate->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this ); + m_toggleBtnCustom->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this ); + m_toggleBtnCustom->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this ); + m_checkBoxDetectMove->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnToggleDetectMovedFiles ), NULL, this ); + m_toggleBtnPermanent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionPermanent ), NULL, this ); + m_toggleBtnRecycler->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionRecycler ), NULL, this ); + m_toggleBtnVersioning->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionVersioning ), NULL, this ); + m_choiceVersioningStyle->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnParameterChange ), NULL, this ); + m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( SyncCfgDlgGenerated::OnHelpVersioning ), NULL, this ); + m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorIgnore ), NULL, this ); + m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorPopup ), NULL, this ); + m_bpButtonLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExLeftSideOnly ), NULL, this ); + m_bpButtonRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExRightSideOnly ), NULL, this ); + m_bpButtonLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnLeftNewer ), NULL, this ); + m_bpButtonRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnRightNewer ), NULL, this ); + m_bpButtonDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDifferent ), NULL, this ); + m_bpButtonConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnConflict ), NULL, this ); + m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this ); } SyncCfgDlgGenerated::~SyncCfgDlgGenerated() @@ -1514,221 +1514,221 @@ SyncCfgDlgGenerated::~SyncCfgDlgGenerated() SyncConfirmationDlgGenerated::SyncConfirmationDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer134; - bSizer134 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapSync = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer72->Add( m_bitmapSync, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); - - m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("Start synchronization now?"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextHeader->Wrap( -1 ); - bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - - - bSizer134->Add( bSizer72, 0, 0, 5 ); - - m_staticline371 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer134->Add( m_staticline371, 0, wxEXPAND, 5 ); - - m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer185; - bSizer185 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer185->Add( 40, 0, 0, 0, 5 ); - - - bSizer185->Add( 0, 0, 1, 0, 5 ); - - m_staticline38 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer185->Add( m_staticline38, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer162; - bSizer162 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer182; - bSizer182 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText84 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Variant:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText84->Wrap( -1 ); - bSizer182->Add( m_staticText84, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - - - bSizer182->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextVariant = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextVariant->Wrap( -1 ); - m_staticTextVariant->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer182->Add( m_staticTextVariant, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - - bSizer182->Add( 0, 0, 1, wxEXPAND, 5 ); - - - bSizer162->Add( bSizer182, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 ); - - m_staticline14 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer162->Add( m_staticline14, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer181; - bSizer181 = new wxBoxSizer( wxVERTICAL ); - - m_staticText83 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Statistics"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText83->Wrap( -1 ); - bSizer181->Add( m_staticText83, 0, wxALL, 5 ); - - wxFlexGridSizer* fgSizer11; - fgSizer11 = new wxFlexGridSizer( 2, 7, 2, 5 ); - fgSizer11->SetFlexibleDirection( wxBOTH ); - fgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); - - fgSizer11->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); - - fgSizer11->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); - - fgSizer11->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapData->SetToolTip( _("Total bytes to copy") ); - - fgSizer11->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); - - fgSizer11->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); - - fgSizer11->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") ); - - fgSizer11->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCreateLeft->Wrap( -1 ); - m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); - - fgSizer11->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticTextUpdateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdateLeft->Wrap( -1 ); - m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); - - fgSizer11->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeleteLeft->Wrap( -1 ); - m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); - - fgSizer11->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextData->Wrap( -1 ); - m_staticTextData->SetToolTip( _("Total bytes to copy") ); - - fgSizer11->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextDeleteRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeleteRight->Wrap( -1 ); - m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); - - fgSizer11->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextUpdateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdateRight->Wrap( -1 ); - m_staticTextUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); - - fgSizer11->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextCreateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCreateRight->Wrap( -1 ); - m_staticTextCreateRight->SetToolTip( _("Number of files and folders that will be created") ); - - fgSizer11->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer181->Add( fgSizer11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer162->Add( bSizer181, 0, wxEXPAND|wxALL, 5 ); - - - bSizer185->Add( bSizer162, 0, 0, 5 ); - - m_staticline381 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer185->Add( m_staticline381, 0, wxEXPAND, 5 ); - - - bSizer185->Add( 0, 0, 1, 0, 5 ); - - - bSizer185->Add( 40, 0, 0, 0, 5 ); - - - m_panelStatistics->SetSizer( bSizer185 ); - m_panelStatistics->Layout(); - bSizer185->Fit( m_panelStatistics ); - bSizer134->Add( m_panelStatistics, 0, wxEXPAND, 5 ); - - m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer164; - bSizer164 = new wxBoxSizer( wxVERTICAL ); - - m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("&Don't show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer164->Add( m_checkBoxDontShowAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonStartSync = new wxButton( this, wxID_OK, _("&Start"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonStartSync->SetDefault(); - m_buttonStartSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonStartSync, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer164->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - bSizer134->Add( bSizer164, 1, wxEXPAND, 5 ); - - - this->SetSizer( bSizer134 ); - this->Layout(); - bSizer134->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncConfirmationDlgGenerated::OnClose ) ); - m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnStartSync ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer134; + bSizer134 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapSync = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer72->Add( m_bitmapSync, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + + m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("Start synchronization now?"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextHeader->Wrap( -1 ); + bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + + + bSizer134->Add( bSizer72, 0, 0, 5 ); + + m_staticline371 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer134->Add( m_staticline371, 0, wxEXPAND, 5 ); + + m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer185; + bSizer185 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer185->Add( 40, 0, 0, 0, 5 ); + + + bSizer185->Add( 0, 0, 1, 0, 5 ); + + m_staticline38 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer185->Add( m_staticline38, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer162; + bSizer162 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer182; + bSizer182 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText84 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Variant:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText84->Wrap( -1 ); + bSizer182->Add( m_staticText84, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + + bSizer182->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextVariant = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextVariant->Wrap( -1 ); + m_staticTextVariant->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer182->Add( m_staticTextVariant, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + bSizer182->Add( 0, 0, 1, wxEXPAND, 5 ); + + + bSizer162->Add( bSizer182, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 ); + + m_staticline14 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer162->Add( m_staticline14, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer181; + bSizer181 = new wxBoxSizer( wxVERTICAL ); + + m_staticText83 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Statistics"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText83->Wrap( -1 ); + bSizer181->Add( m_staticText83, 0, wxALL, 5 ); + + wxFlexGridSizer* fgSizer11; + fgSizer11 = new wxFlexGridSizer( 2, 7, 2, 5 ); + fgSizer11->SetFlexibleDirection( wxBOTH ); + fgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + + fgSizer11->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); + + fgSizer11->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + + fgSizer11->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapData->SetToolTip( _("Total bytes to copy") ); + + fgSizer11->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); + + fgSizer11->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); + + fgSizer11->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") ); + + fgSizer11->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCreateLeft->Wrap( -1 ); + m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + + fgSizer11->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticTextUpdateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdateLeft->Wrap( -1 ); + m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); + + fgSizer11->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeleteLeft->Wrap( -1 ); + m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + + fgSizer11->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextData->Wrap( -1 ); + m_staticTextData->SetToolTip( _("Total bytes to copy") ); + + fgSizer11->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextDeleteRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeleteRight->Wrap( -1 ); + m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); + + fgSizer11->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextUpdateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdateRight->Wrap( -1 ); + m_staticTextUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); + + fgSizer11->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextCreateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCreateRight->Wrap( -1 ); + m_staticTextCreateRight->SetToolTip( _("Number of files and folders that will be created") ); + + fgSizer11->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer181->Add( fgSizer11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer162->Add( bSizer181, 0, wxEXPAND|wxALL, 5 ); + + + bSizer185->Add( bSizer162, 0, 0, 5 ); + + m_staticline381 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer185->Add( m_staticline381, 0, wxEXPAND, 5 ); + + + bSizer185->Add( 0, 0, 1, 0, 5 ); + + + bSizer185->Add( 40, 0, 0, 0, 5 ); + + + m_panelStatistics->SetSizer( bSizer185 ); + m_panelStatistics->Layout(); + bSizer185->Fit( m_panelStatistics ); + bSizer134->Add( m_panelStatistics, 0, wxEXPAND, 5 ); + + m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer164; + bSizer164 = new wxBoxSizer( wxVERTICAL ); + + m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("&Don't show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer164->Add( m_checkBoxDontShowAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonStartSync = new wxButton( this, wxID_OK, _("&Start"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonStartSync->SetDefault(); + m_buttonStartSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonStartSync, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer164->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + + + bSizer134->Add( bSizer164, 1, wxEXPAND, 5 ); + + + this->SetSizer( bSizer134 ); + this->Layout(); + bSizer134->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncConfirmationDlgGenerated::OnClose ) ); + m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnStartSync ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnCancel ), NULL, this ); } SyncConfirmationDlgGenerated::~SyncConfirmationDlgGenerated() @@ -1737,83 +1737,83 @@ SyncConfirmationDlgGenerated::~SyncConfirmationDlgGenerated() FolderPairPanelGenerated::FolderPairPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) { - wxBoxSizer* bSizer74; - bSizer74 = new wxBoxSizer( wxHORIZONTAL ); - - m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelLeft->SetMinSize( wxSize( 1,-1 ) ); - - wxBoxSizer* bSizer134; - bSizer134 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonRemovePair = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); - - bSizer134->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_directoryLeft = new FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer134->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectDirLeft = new wxButton( m_panelLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectDirLeft->SetToolTip( _("Select a folder") ); - - bSizer134->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelLeft->SetSizer( bSizer134 ); - m_panelLeft->Layout(); - bSizer134->Fit( m_panelLeft ); - bSizer74->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 5 ); - - m_panel20 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer95; - bSizer95 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer95->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bpButtonAltCompCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer95->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonLocalFilter = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer95->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 2 ); - - m_bpButtonAltSyncCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer95->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer95->Add( 0, 0, 1, wxEXPAND, 5 ); - - - m_panel20->SetSizer( bSizer95 ); - m_panel20->Layout(); - bSizer95->Fit( m_panel20 ); - bSizer74->Add( m_panel20, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelRight->SetMinSize( wxSize( 1,-1 ) ); - - wxBoxSizer* bSizer135; - bSizer135 = new wxBoxSizer( wxHORIZONTAL ); - - m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer135->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectDirRight = new wxButton( m_panelRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectDirRight->SetToolTip( _("Select a folder") ); - - bSizer135->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelRight->SetSizer( bSizer135 ); - m_panelRight->Layout(); - bSizer135->Fit( m_panelRight ); - bSizer74->Add( m_panelRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND, 5 ); - - - this->SetSizer( bSizer74 ); - this->Layout(); - bSizer74->Fit( this ); + wxBoxSizer* bSizer74; + bSizer74 = new wxBoxSizer( wxHORIZONTAL ); + + m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelLeft->SetMinSize( wxSize( 1,-1 ) ); + + wxBoxSizer* bSizer134; + bSizer134 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonRemovePair = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); + + bSizer134->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_directoryLeft = new FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer134->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectDirLeft = new wxButton( m_panelLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectDirLeft->SetToolTip( _("Select a folder") ); + + bSizer134->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelLeft->SetSizer( bSizer134 ); + m_panelLeft->Layout(); + bSizer134->Fit( m_panelLeft ); + bSizer74->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 5 ); + + m_panel20 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer95; + bSizer95 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer95->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bpButtonAltCompCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer95->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonLocalFilter = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer95->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 2 ); + + m_bpButtonAltSyncCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer95->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer95->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panel20->SetSizer( bSizer95 ); + m_panel20->Layout(); + bSizer95->Fit( m_panel20 ); + bSizer74->Add( m_panel20, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelRight->SetMinSize( wxSize( 1,-1 ) ); + + wxBoxSizer* bSizer135; + bSizer135 = new wxBoxSizer( wxHORIZONTAL ); + + m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer135->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectDirRight = new wxButton( m_panelRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectDirRight->SetToolTip( _("Select a folder") ); + + bSizer135->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelRight->SetSizer( bSizer135 ); + m_panelRight->Layout(); + bSizer135->Fit( m_panelRight ); + bSizer74->Add( m_panelRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND, 5 ); + + + this->SetSizer( bSizer74 ); + this->Layout(); + bSizer74->Fit( this ); } FolderPairPanelGenerated::~FolderPairPanelGenerated() @@ -1822,147 +1822,147 @@ FolderPairPanelGenerated::~FolderPairPanelGenerated() CompareProgressDlgGenerated::CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) { - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer40; - bSizer40 = new wxBoxSizer( wxVERTICAL ); - - - bSizer40->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_textCtrlStatus = new wxTextCtrl( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); - m_textCtrlStatus->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer40->Add( m_textCtrlStatus, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - m_gauge2 = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,14 ), wxGA_HORIZONTAL|wxGA_SMOOTH ); - bSizer40->Add( m_gauge2, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - - bSizer42 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer162StretchSpeedAndRemTimeIndependently; - bSizer162StretchSpeedAndRemTimeIndependently = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer157; - bSizer157 = new wxBoxSizer( wxVERTICAL ); - - bSizerFilesFound = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText321 = new wxStaticText( this, wxID_ANY, _("Items found:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText321->Wrap( -1 ); - bSizerFilesFound->Add( m_staticText321, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextScanned = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextScanned->Wrap( -1 ); - m_staticTextScanned->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerFilesFound->Add( m_staticTextScanned, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); - - - bSizer157->Add( bSizerFilesFound, 0, 0, 5 ); - - bSizerFilesRemaining = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText46 = new wxStaticText( this, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText46->Wrap( -1 ); - bSizerFilesRemaining->Add( m_staticText46, 0, wxALIGN_BOTTOM, 5 ); - - wxBoxSizer* bSizer154; - bSizer154 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextFilesRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextFilesRemaining->Wrap( -1 ); - m_staticTextFilesRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer154->Add( m_staticTextFilesRemaining, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextDataRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDataRemaining->Wrap( -1 ); - bSizer154->Add( m_staticTextDataRemaining, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); - - - bSizerFilesRemaining->Add( bSizer154, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); - - - bSizer157->Add( bSizerFilesRemaining, 0, 0, 5 ); - - - bSizer162StretchSpeedAndRemTimeIndependently->Add( bSizer157, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer162StretchSpeedAndRemTimeIndependently->Add( 0, 0, 1, wxEXPAND, 5 ); - - sSizerSpeed = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText104 = new wxStaticText( this, wxID_ANY, _("Speed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText104->Wrap( -1 ); - sSizerSpeed->Add( m_staticText104, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextSpeed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextSpeed->Wrap( -1 ); - m_staticTextSpeed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - sSizerSpeed->Add( m_staticTextSpeed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer162StretchSpeedAndRemTimeIndependently->Add( sSizerSpeed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer42->Add( bSizer162StretchSpeedAndRemTimeIndependently, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer42->Add( 10, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer163; - bSizer163 = new wxBoxSizer( wxHORIZONTAL ); - - sSizerTimeRemaining = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextTimeRemFixed = new wxStaticText( this, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeRemFixed->Wrap( -1 ); - sSizerTimeRemaining->Add( m_staticTextTimeRemFixed, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextRemTime = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextRemTime->Wrap( -1 ); - m_staticTextRemTime->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - sSizerTimeRemaining->Add( m_staticTextRemTime, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer163->Add( sSizerTimeRemaining, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer163->Add( 0, 0, 1, wxEXPAND, 5 ); - - sSizerTimeElapsed = new wxBoxSizer( wxHORIZONTAL ); - - wxStaticText* m_staticText37; - m_staticText37 = new wxStaticText( this, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText37->Wrap( -1 ); - sSizerTimeElapsed->Add( m_staticText37, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextTimeElapsed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeElapsed->Wrap( -1 ); - m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - sSizerTimeElapsed->Add( m_staticTextTimeElapsed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer163->Add( sSizerTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer42->Add( bSizer163, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer40->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - - - bSizer40->Add( 0, 0, 1, wxEXPAND, 5 ); - - - this->SetSizer( bSizer40 ); - this->Layout(); - bSizer40->Fit( this ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer40; + bSizer40 = new wxBoxSizer( wxVERTICAL ); + + + bSizer40->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_textCtrlStatus = new wxTextCtrl( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); + m_textCtrlStatus->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer40->Add( m_textCtrlStatus, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + + m_gauge2 = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,14 ), wxGA_HORIZONTAL|wxGA_SMOOTH ); + bSizer40->Add( m_gauge2, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + bSizer42 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer162StretchSpeedAndRemTimeIndependently; + bSizer162StretchSpeedAndRemTimeIndependently = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer157; + bSizer157 = new wxBoxSizer( wxVERTICAL ); + + bSizerFilesFound = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText321 = new wxStaticText( this, wxID_ANY, _("Items found:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText321->Wrap( -1 ); + bSizerFilesFound->Add( m_staticText321, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextScanned = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextScanned->Wrap( -1 ); + m_staticTextScanned->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerFilesFound->Add( m_staticTextScanned, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); + + + bSizer157->Add( bSizerFilesFound, 0, 0, 5 ); + + bSizerFilesRemaining = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText46 = new wxStaticText( this, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText46->Wrap( -1 ); + bSizerFilesRemaining->Add( m_staticText46, 0, wxALIGN_BOTTOM, 5 ); + + wxBoxSizer* bSizer154; + bSizer154 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextFilesRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextFilesRemaining->Wrap( -1 ); + m_staticTextFilesRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer154->Add( m_staticTextFilesRemaining, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextDataRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDataRemaining->Wrap( -1 ); + bSizer154->Add( m_staticTextDataRemaining, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); + + + bSizerFilesRemaining->Add( bSizer154, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); + + + bSizer157->Add( bSizerFilesRemaining, 0, 0, 5 ); + + + bSizer162StretchSpeedAndRemTimeIndependently->Add( bSizer157, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer162StretchSpeedAndRemTimeIndependently->Add( 0, 0, 1, wxEXPAND, 5 ); + + sSizerSpeed = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText104 = new wxStaticText( this, wxID_ANY, _("Speed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText104->Wrap( -1 ); + sSizerSpeed->Add( m_staticText104, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextSpeed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextSpeed->Wrap( -1 ); + m_staticTextSpeed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + sSizerSpeed->Add( m_staticTextSpeed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer162StretchSpeedAndRemTimeIndependently->Add( sSizerSpeed, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer42->Add( bSizer162StretchSpeedAndRemTimeIndependently, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer42->Add( 10, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer163; + bSizer163 = new wxBoxSizer( wxHORIZONTAL ); + + sSizerTimeRemaining = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextTimeRemFixed = new wxStaticText( this, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeRemFixed->Wrap( -1 ); + sSizerTimeRemaining->Add( m_staticTextTimeRemFixed, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextRemTime = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRemTime->Wrap( -1 ); + m_staticTextRemTime->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + sSizerTimeRemaining->Add( m_staticTextRemTime, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer163->Add( sSizerTimeRemaining, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer163->Add( 0, 0, 1, wxEXPAND, 5 ); + + sSizerTimeElapsed = new wxBoxSizer( wxHORIZONTAL ); + + wxStaticText* m_staticText37; + m_staticText37 = new wxStaticText( this, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText37->Wrap( -1 ); + sSizerTimeElapsed->Add( m_staticText37, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextTimeElapsed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeElapsed->Wrap( -1 ); + m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + sSizerTimeElapsed->Add( m_staticTextTimeElapsed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer163->Add( sSizerTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer42->Add( bSizer163, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer40->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + + bSizer40->Add( 0, 0, 1, wxEXPAND, 5 ); + + + this->SetSizer( bSizer40 ); + this->Layout(); + bSizer40->Fit( this ); } CompareProgressDlgGenerated::~CompareProgressDlgGenerated() @@ -1971,295 +1971,295 @@ CompareProgressDlgGenerated::~CompareProgressDlgGenerated() SyncProgressPanelGenerated::SyncProgressPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) { - bSizerRoot = new wxBoxSizer( wxVERTICAL ); - - bSizer42 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer42->Add( 32, 0, 0, 0, 5 ); - - - bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bitmapStatus = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 ); - bSizer42->Add( m_bitmapStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); - - m_staticTextPhase = new wxStaticText( this, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextPhase->Wrap( -1 ); - m_staticTextPhase->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer42->Add( m_staticTextPhase, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); - - m_animCtrlSyncing = new wxAnimationCtrl( this, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( 32,32 ), wxAC_DEFAULT_STYLE ); - bSizer42->Add( m_animCtrlSyncing, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); - - - bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bpButtonMinimizeToTray = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), wxBU_AUTODRAW ); - m_bpButtonMinimizeToTray->SetToolTip( _("Minimize to notification area") ); - - bSizer42->Add( m_bpButtonMinimizeToTray, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerRoot->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - bSizerStatusText = new wxBoxSizer( wxVERTICAL ); - - m_staticTextStatus = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatus->Wrap( -1 ); - bSizerStatusText->Add( m_staticTextStatus, 0, wxEXPAND|wxLEFT, 10 ); - - - bSizerStatusText->Add( 0, 5, 0, 0, 5 ); - - - bSizerRoot->Add( bSizerStatusText, 0, wxEXPAND, 5 ); - - wxStaticLine* m_staticlineHeader; - m_staticlineHeader = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerRoot->Add( m_staticlineHeader, 0, wxEXPAND, 5 ); - - m_panelProgress = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelProgress->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer173; - bSizer173 = new wxBoxSizer( wxVERTICAL ); - - bSizer171 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer171->Add( 10, 0, 0, 0, 5 ); - - wxBoxSizer* bSizer164; - bSizer164 = new wxBoxSizer( wxVERTICAL ); - - m_panelItemsProcessed = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelItemsProcessed->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer165; - bSizer165 = new wxBoxSizer( wxVERTICAL ); - - - bSizer165->Add( 0, 5, 0, 0, 5 ); - - wxStaticText* m_staticText96; - m_staticText96 = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("Items processed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText96->Wrap( -1 ); - bSizer165->Add( m_staticText96, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer169; - bSizer169 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextProcessedObj = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextProcessedObj->Wrap( -1 ); - m_staticTextProcessedObj->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer169->Add( m_staticTextProcessedObj, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextDataProcessed = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDataProcessed->Wrap( -1 ); - bSizer169->Add( m_staticTextDataProcessed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer165->Add( bSizer169, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer165->Add( 0, 5, 0, 0, 5 ); - - - m_panelItemsProcessed->SetSizer( bSizer165 ); - m_panelItemsProcessed->Layout(); - bSizer165->Fit( m_panelItemsProcessed ); - bSizer164->Add( m_panelItemsProcessed, 0, wxEXPAND|wxTOP, 7 ); - - m_panelItemsRemaining = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelItemsRemaining->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer166; - bSizer166 = new wxBoxSizer( wxVERTICAL ); - - - bSizer166->Add( 0, 5, 0, 0, 5 ); - - wxStaticText* m_staticText97; - m_staticText97 = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText97->Wrap( -1 ); - bSizer166->Add( m_staticText97, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer170; - bSizer170 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextRemainingObj = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextRemainingObj->Wrap( -1 ); - m_staticTextRemainingObj->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer170->Add( m_staticTextRemainingObj, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextDataRemaining = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDataRemaining->Wrap( -1 ); - bSizer170->Add( m_staticTextDataRemaining, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer166->Add( bSizer170, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer166->Add( 0, 5, 0, 0, 5 ); - - - m_panelItemsRemaining->SetSizer( bSizer166 ); - m_panelItemsRemaining->Layout(); - bSizer166->Fit( m_panelItemsRemaining ); - bSizer164->Add( m_panelItemsRemaining, 0, wxTOP|wxEXPAND, 7 ); - - m_panelTimeRemaining = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelTimeRemaining->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer167; - bSizer167 = new wxBoxSizer( wxVERTICAL ); - - - bSizer167->Add( 0, 5, 0, 0, 5 ); - - wxStaticText* m_staticText98; - m_staticText98 = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText98->Wrap( -1 ); - bSizer167->Add( m_staticText98, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - m_staticTextRemTime = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextRemTime->Wrap( -1 ); - m_staticTextRemTime->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer167->Add( m_staticTextRemTime, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer167->Add( 0, 5, 0, 0, 5 ); - - - m_panelTimeRemaining->SetSizer( bSizer167 ); - m_panelTimeRemaining->Layout(); - bSizer167->Fit( m_panelTimeRemaining ); - bSizer164->Add( m_panelTimeRemaining, 0, wxTOP|wxEXPAND, 7 ); - - wxPanel* m_panelTimeElapsed; - m_panelTimeElapsed = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelTimeElapsed->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer168; - bSizer168 = new wxBoxSizer( wxVERTICAL ); - - - bSizer168->Add( 0, 5, 0, 0, 5 ); - - wxStaticText* m_staticText961; - m_staticText961 = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText961->Wrap( -1 ); - bSizer168->Add( m_staticText961, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - m_staticTextTimeElapsed = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeElapsed->Wrap( -1 ); - m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer168->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer168->Add( 0, 5, 0, 0, 5 ); - - - m_panelTimeElapsed->SetSizer( bSizer168 ); - m_panelTimeElapsed->Layout(); - bSizer168->Fit( m_panelTimeElapsed ); - bSizer164->Add( m_panelTimeElapsed, 0, wxTOP|wxEXPAND, 7 ); - - - bSizer171->Add( bSizer164, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer171->Add( 10, 0, 0, 0, 5 ); - - wxBoxSizer* bSizer161; - bSizer161 = new wxBoxSizer( wxVERTICAL ); - - - bSizer161->Add( 0, 15, 0, 0, 5 ); - - m_panelGraphBytes = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_panelGraphBytes->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer161->Add( m_panelGraphBytes, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_panelGraphItems = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_panelGraphItems->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer161->Add( m_panelGraphItems, 1, wxEXPAND, 5 ); - - - bSizer161->Add( 430, 0, 0, 0, 5 ); - - - bSizer171->Add( bSizer161, 1, wxEXPAND, 5 ); - - - bSizer171->Add( 0, 230, 0, 0, 5 ); - - - bSizer173->Add( bSizer171, 1, wxEXPAND, 5 ); - - - m_panelProgress->SetSizer( bSizer173 ); - m_panelProgress->Layout(); - bSizer173->Fit( m_panelProgress ); - bSizerRoot->Add( m_panelProgress, 1, wxEXPAND, 5 ); - - m_notebookResult = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_FIXEDWIDTH ); - - bSizerRoot->Add( m_notebookResult, 1, wxEXPAND, 5 ); - - m_staticlineFooter = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerRoot->Add( m_staticlineFooter, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxHORIZONTAL ); - - bSizerExecFinished = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText87 = new wxStaticText( this, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText87->Wrap( -1 ); - bSizerExecFinished->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_comboBoxExecFinished = new ExecFinishedBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizerExecFinished->Add( m_comboBoxExecFinished, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer160->Add( bSizerExecFinished, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer160->Add( 0, 0, 0, 0, 5 ); - - - bSizerStdButtons->Add( bSizer160, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonClose->SetDefault(); - m_buttonClose->Enable( false ); - - bSizerStdButtons->Add( m_buttonClose, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonPause = new wxButton( this, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonPause, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - m_buttonStop = new wxButton( this, wxID_CANCEL, _("Stop"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonStop, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizerRoot->Add( bSizerStdButtons, 0, wxALIGN_RIGHT|wxEXPAND, 5 ); - - - this->SetSizer( bSizerRoot ); - this->Layout(); - bSizerRoot->Fit( this ); + bSizerRoot = new wxBoxSizer( wxVERTICAL ); + + bSizer42 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer42->Add( 32, 0, 0, 0, 5 ); + + + bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bitmapStatus = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 ); + bSizer42->Add( m_bitmapStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); + + m_staticTextPhase = new wxStaticText( this, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPhase->Wrap( -1 ); + m_staticTextPhase->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer42->Add( m_staticTextPhase, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); + + m_animCtrlSyncing = new wxAnimationCtrl( this, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( 32,32 ), wxAC_DEFAULT_STYLE ); + bSizer42->Add( m_animCtrlSyncing, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); + + + bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bpButtonMinimizeToTray = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), wxBU_AUTODRAW ); + m_bpButtonMinimizeToTray->SetToolTip( _("Minimize to notification area") ); + + bSizer42->Add( m_bpButtonMinimizeToTray, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerRoot->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + bSizerStatusText = new wxBoxSizer( wxVERTICAL ); + + m_staticTextStatus = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatus->Wrap( -1 ); + bSizerStatusText->Add( m_staticTextStatus, 0, wxEXPAND|wxLEFT, 10 ); + + + bSizerStatusText->Add( 0, 5, 0, 0, 5 ); + + + bSizerRoot->Add( bSizerStatusText, 0, wxEXPAND, 5 ); + + wxStaticLine* m_staticlineHeader; + m_staticlineHeader = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerRoot->Add( m_staticlineHeader, 0, wxEXPAND, 5 ); + + m_panelProgress = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelProgress->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer173; + bSizer173 = new wxBoxSizer( wxVERTICAL ); + + bSizer171 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer171->Add( 10, 0, 0, 0, 5 ); + + wxBoxSizer* bSizer164; + bSizer164 = new wxBoxSizer( wxVERTICAL ); + + m_panelItemsProcessed = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelItemsProcessed->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer165; + bSizer165 = new wxBoxSizer( wxVERTICAL ); + + + bSizer165->Add( 0, 5, 0, 0, 5 ); + + wxStaticText* m_staticText96; + m_staticText96 = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("Items processed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText96->Wrap( -1 ); + bSizer165->Add( m_staticText96, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer169; + bSizer169 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextProcessedObj = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_staticTextProcessedObj->Wrap( -1 ); + m_staticTextProcessedObj->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer169->Add( m_staticTextProcessedObj, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextDataProcessed = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDataProcessed->Wrap( -1 ); + bSizer169->Add( m_staticTextDataProcessed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer165->Add( bSizer169, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer165->Add( 0, 5, 0, 0, 5 ); + + + m_panelItemsProcessed->SetSizer( bSizer165 ); + m_panelItemsProcessed->Layout(); + bSizer165->Fit( m_panelItemsProcessed ); + bSizer164->Add( m_panelItemsProcessed, 0, wxEXPAND|wxTOP, 7 ); + + m_panelItemsRemaining = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelItemsRemaining->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer166; + bSizer166 = new wxBoxSizer( wxVERTICAL ); + + + bSizer166->Add( 0, 5, 0, 0, 5 ); + + wxStaticText* m_staticText97; + m_staticText97 = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText97->Wrap( -1 ); + bSizer166->Add( m_staticText97, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer170; + bSizer170 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextRemainingObj = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_staticTextRemainingObj->Wrap( -1 ); + m_staticTextRemainingObj->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer170->Add( m_staticTextRemainingObj, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextDataRemaining = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDataRemaining->Wrap( -1 ); + bSizer170->Add( m_staticTextDataRemaining, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer166->Add( bSizer170, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer166->Add( 0, 5, 0, 0, 5 ); + + + m_panelItemsRemaining->SetSizer( bSizer166 ); + m_panelItemsRemaining->Layout(); + bSizer166->Fit( m_panelItemsRemaining ); + bSizer164->Add( m_panelItemsRemaining, 0, wxTOP|wxEXPAND, 7 ); + + m_panelTimeRemaining = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelTimeRemaining->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer167; + bSizer167 = new wxBoxSizer( wxVERTICAL ); + + + bSizer167->Add( 0, 5, 0, 0, 5 ); + + wxStaticText* m_staticText98; + m_staticText98 = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText98->Wrap( -1 ); + bSizer167->Add( m_staticText98, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticTextRemTime = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRemTime->Wrap( -1 ); + m_staticTextRemTime->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer167->Add( m_staticTextRemTime, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer167->Add( 0, 5, 0, 0, 5 ); + + + m_panelTimeRemaining->SetSizer( bSizer167 ); + m_panelTimeRemaining->Layout(); + bSizer167->Fit( m_panelTimeRemaining ); + bSizer164->Add( m_panelTimeRemaining, 0, wxTOP|wxEXPAND, 7 ); + + wxPanel* m_panelTimeElapsed; + m_panelTimeElapsed = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelTimeElapsed->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer168; + bSizer168 = new wxBoxSizer( wxVERTICAL ); + + + bSizer168->Add( 0, 5, 0, 0, 5 ); + + wxStaticText* m_staticText961; + m_staticText961 = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText961->Wrap( -1 ); + bSizer168->Add( m_staticText961, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticTextTimeElapsed = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeElapsed->Wrap( -1 ); + m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer168->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer168->Add( 0, 5, 0, 0, 5 ); + + + m_panelTimeElapsed->SetSizer( bSizer168 ); + m_panelTimeElapsed->Layout(); + bSizer168->Fit( m_panelTimeElapsed ); + bSizer164->Add( m_panelTimeElapsed, 0, wxTOP|wxEXPAND, 7 ); + + + bSizer171->Add( bSizer164, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer171->Add( 10, 0, 0, 0, 5 ); + + wxBoxSizer* bSizer161; + bSizer161 = new wxBoxSizer( wxVERTICAL ); + + m_panelGraphBytes = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_panelGraphBytes->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer161->Add( m_panelGraphBytes, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT, 15 ); + + + bSizer161->Add( 0, 15, 0, 0, 5 ); + + m_panelGraphItems = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_panelGraphItems->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer161->Add( m_panelGraphItems, 1, wxEXPAND|wxBOTTOM|wxRIGHT, 15 ); + + + bSizer161->Add( 430, 0, 0, 0, 5 ); + + + bSizer171->Add( bSizer161, 1, wxEXPAND, 5 ); + + + bSizer171->Add( 0, 230, 0, 0, 5 ); + + + bSizer173->Add( bSizer171, 1, wxEXPAND, 5 ); + + + m_panelProgress->SetSizer( bSizer173 ); + m_panelProgress->Layout(); + bSizer173->Fit( m_panelProgress ); + bSizerRoot->Add( m_panelProgress, 1, wxEXPAND, 5 ); + + m_notebookResult = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_FIXEDWIDTH ); + + bSizerRoot->Add( m_notebookResult, 1, wxEXPAND, 5 ); + + m_staticlineFooter = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerRoot->Add( m_staticlineFooter, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer160; + bSizer160 = new wxBoxSizer( wxHORIZONTAL ); + + bSizerExecFinished = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText87 = new wxStaticText( this, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText87->Wrap( -1 ); + bSizerExecFinished->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_comboBoxExecFinished = new ExecFinishedBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizerExecFinished->Add( m_comboBoxExecFinished, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer160->Add( bSizerExecFinished, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer160->Add( 0, 0, 0, 0, 5 ); + + + bSizerStdButtons->Add( bSizer160, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + + m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonClose->SetDefault(); + m_buttonClose->Enable( false ); + + bSizerStdButtons->Add( m_buttonClose, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonPause = new wxButton( this, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonPause, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + m_buttonStop = new wxButton( this, wxID_CANCEL, _("Stop"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonStop, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizerRoot->Add( bSizerStdButtons, 0, wxALIGN_RIGHT|wxEXPAND, 5 ); + + + this->SetSizer( bSizerRoot ); + this->Layout(); + bSizerRoot->Fit( this ); } SyncProgressPanelGenerated::~SyncProgressPanelGenerated() @@ -2268,48 +2268,48 @@ SyncProgressPanelGenerated::~SyncProgressPanelGenerated() LogPanelGenerated::LogPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) { - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer179; - bSizer179 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer153; - bSizer153 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer154; - bSizer154 = new wxBoxSizer( wxVERTICAL ); - - m_bpButtonErrors = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW ); - bSizer154->Add( m_bpButtonErrors, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonWarnings = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW ); - bSizer154->Add( m_bpButtonWarnings, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonInfo = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW ); - bSizer154->Add( m_bpButtonInfo, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer153->Add( bSizer154, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer153->Add( m_staticline13, 0, wxEXPAND, 5 ); - - m_gridMessages = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_gridMessages->SetScrollRate( 5, 5 ); - bSizer153->Add( m_gridMessages, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer179->Add( bSizer153, 1, wxEXPAND, 5 ); - - - this->SetSizer( bSizer179 ); - this->Layout(); - bSizer179->Fit( this ); - - // Connect Events - m_bpButtonErrors->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnErrors ), NULL, this ); - m_bpButtonWarnings->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnWarnings ), NULL, this ); - m_bpButtonInfo->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnInfo ), NULL, this ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer179; + bSizer179 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer153; + bSizer153 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer154; + bSizer154 = new wxBoxSizer( wxVERTICAL ); + + m_bpButtonErrors = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW ); + bSizer154->Add( m_bpButtonErrors, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonWarnings = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW ); + bSizer154->Add( m_bpButtonWarnings, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonInfo = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW ); + bSizer154->Add( m_bpButtonInfo, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer153->Add( bSizer154, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer153->Add( m_staticline13, 0, wxEXPAND, 5 ); + + m_gridMessages = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridMessages->SetScrollRate( 5, 5 ); + bSizer153->Add( m_gridMessages, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer179->Add( bSizer153, 1, wxEXPAND, 5 ); + + + this->SetSizer( bSizer179 ); + this->Layout(); + bSizer179->Fit( this ); + + // Connect Events + m_bpButtonErrors->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnErrors ), NULL, this ); + m_bpButtonWarnings->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnWarnings ), NULL, this ); + m_bpButtonInfo->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnInfo ), NULL, this ); } LogPanelGenerated::~LogPanelGenerated() @@ -2318,184 +2318,184 @@ LogPanelGenerated::~LogPanelGenerated() BatchDlgGenerated::BatchDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer54; - bSizer54 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapBatchJob = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer72->Add( m_bitmapBatchJob, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); - - m_staticTextDescr = new wxStaticText( this, wxID_ANY, _("Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDescr->Wrap( 520 ); - bSizer72->Add( m_staticTextDescr, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - - - bSizer54->Add( bSizer72, 0, 0, 5 ); - - m_staticline18 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer54->Add( m_staticline18, 0, wxEXPAND, 5 ); - - m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer180; - bSizer180 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer171; - bSizer171 = new wxBoxSizer( wxVERTICAL ); - - m_staticText82 = new wxStaticText( m_panel35, wxID_ANY, _("Handle errors:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText82->Wrap( -1 ); - bSizer171->Add( m_staticText82, 0, wxALL, 5 ); - - wxBoxSizer* bSizer169; - bSizer169 = new wxBoxSizer( wxHORIZONTAL ); - - m_toggleBtnErrorIgnore = new wxToggleButton( m_panel35, wxID_ANY, _("Ignore"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") ); - - bSizer169->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_toggleBtnErrorPopup = new wxToggleButton( m_panel35, wxID_ANY, _("Pop-up"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") ); - - bSizer169->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_toggleBtnErrorStop = new wxToggleButton( m_panel35, wxID_ANY, _("Stop"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorStop->SetToolTip( _("Stop synchronization at first error") ); - - bSizer169->Add( m_toggleBtnErrorStop, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer171->Add( bSizer169, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer180->Add( bSizer171, 0, wxALL, 5 ); - - m_staticline26 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer180->Add( m_staticline26, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer170; - bSizer170 = new wxBoxSizer( wxVERTICAL ); - - m_checkBoxShowProgress = new wxCheckBox( m_panel35, wxID_ANY, _("Show progress dialog"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer170->Add( m_checkBoxShowProgress, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALL, 5 ); - - wxBoxSizer* bSizer179; - bSizer179 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText81 = new wxStaticText( m_panel35, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText81->Wrap( -1 ); - bSizer179->Add( m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_comboBoxExecFinished = new ExecFinishedBox( m_panel35, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer179->Add( m_comboBoxExecFinished, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer170->Add( bSizer179, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer180->Add( bSizer170, 1, wxALL, 5 ); - - - bSizer172->Add( bSizer180, 0, wxEXPAND, 5 ); - - m_staticline25 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer172->Add( m_staticline25, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer191; - bSizer191 = new wxBoxSizer( wxVERTICAL ); - - m_checkBoxGenerateLogfile = new wxCheckBox( m_panel35, wxID_ANY, _("Save log:"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer191->Add( m_checkBoxGenerateLogfile, 0, wxEXPAND|wxBOTTOM, 5 ); - - m_panelLogfile = new wxPanel( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelLogfile->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer1721; - bSizer1721 = new wxBoxSizer( wxHORIZONTAL ); - - m_logfileDir = new FolderHistoryBox( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer1721->Add( m_logfileDir, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectLogfileDir = new wxButton( m_panelLogfile, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectLogfileDir->SetToolTip( _("Select a folder") ); - - bSizer1721->Add( m_buttonSelectLogfileDir, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_checkBoxLogfilesLimit = new wxCheckBox( m_panelLogfile, wxID_ANY, _("Limit:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxLogfilesLimit->SetToolTip( _("Limit maximum number of log files") ); - - bSizer1721->Add( m_checkBoxLogfilesLimit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_spinCtrlLogfileLimit = new wxSpinCtrl( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); - m_spinCtrlLogfileLimit->SetToolTip( _("Limit maximum number of log files") ); - - bSizer1721->Add( m_spinCtrlLogfileLimit, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelLogfile->SetSizer( bSizer1721 ); - m_panelLogfile->Layout(); - bSizer1721->Fit( m_panelLogfile ); - bSizer191->Add( m_panelLogfile, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer172->Add( bSizer191, 0, wxEXPAND|wxALL, 10 ); - - m_hyperlink17 = new wxHyperlinkCtrl( m_panel35, wxID_ANY, _("How can I schedule a batch job?"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - bSizer172->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - - - m_panel35->SetSizer( bSizer172 ); - m_panel35->Layout(); - bSizer172->Fit( m_panel35 ); - bSizer54->Add( m_panel35, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer54->Add( m_staticline13, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - - bSizerStdButtons->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_buttonSaveAs = new wxButton( this, wxID_SAVE, _("Save &as..."), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonSaveAs->SetDefault(); - m_buttonSaveAs->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonSaveAs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer54->Add( bSizerStdButtons, 0, wxALIGN_RIGHT|wxEXPAND, 5 ); - - - this->SetSizer( bSizer54 ); - this->Layout(); - bSizer54->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); - m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorIgnore ), NULL, this ); - m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorPopup ), NULL, this ); - m_toggleBtnErrorStop->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorStop ), NULL, this ); - m_checkBoxGenerateLogfile->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleGenerateLogfile ), NULL, this ); - m_checkBoxLogfilesLimit->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleLogfilesLimit ), NULL, this ); - m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( BatchDlgGenerated::OnHelpScheduleBatch ), NULL, this ); - m_buttonSaveAs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer54; + bSizer54 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapBatchJob = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer72->Add( m_bitmapBatchJob, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + + m_staticTextDescr = new wxStaticText( this, wxID_ANY, _("Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDescr->Wrap( 520 ); + bSizer72->Add( m_staticTextDescr, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + + + bSizer54->Add( bSizer72, 0, 0, 5 ); + + m_staticline18 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer54->Add( m_staticline18, 0, wxEXPAND, 5 ); + + m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer180; + bSizer180 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer171; + bSizer171 = new wxBoxSizer( wxVERTICAL ); + + m_staticText82 = new wxStaticText( m_panel35, wxID_ANY, _("Handle errors:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText82->Wrap( -1 ); + bSizer171->Add( m_staticText82, 0, wxALL, 5 ); + + wxBoxSizer* bSizer169; + bSizer169 = new wxBoxSizer( wxHORIZONTAL ); + + m_toggleBtnErrorIgnore = new wxToggleButton( m_panel35, wxID_ANY, _("Ignore"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") ); + + bSizer169->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_toggleBtnErrorPopup = new wxToggleButton( m_panel35, wxID_ANY, _("Pop-up"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") ); + + bSizer169->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_toggleBtnErrorStop = new wxToggleButton( m_panel35, wxID_ANY, _("Stop"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorStop->SetToolTip( _("Stop synchronization at first error") ); + + bSizer169->Add( m_toggleBtnErrorStop, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer171->Add( bSizer169, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer180->Add( bSizer171, 0, wxALL, 5 ); + + m_staticline26 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer180->Add( m_staticline26, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer170; + bSizer170 = new wxBoxSizer( wxVERTICAL ); + + m_checkBoxShowProgress = new wxCheckBox( m_panel35, wxID_ANY, _("Show progress dialog"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer170->Add( m_checkBoxShowProgress, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALL, 5 ); + + wxBoxSizer* bSizer179; + bSizer179 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText81 = new wxStaticText( m_panel35, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText81->Wrap( -1 ); + bSizer179->Add( m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_comboBoxExecFinished = new ExecFinishedBox( m_panel35, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer179->Add( m_comboBoxExecFinished, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer170->Add( bSizer179, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer180->Add( bSizer170, 1, wxALL, 5 ); + + + bSizer172->Add( bSizer180, 0, wxEXPAND, 5 ); + + m_staticline25 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer172->Add( m_staticline25, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer191; + bSizer191 = new wxBoxSizer( wxVERTICAL ); + + m_checkBoxGenerateLogfile = new wxCheckBox( m_panel35, wxID_ANY, _("Save log:"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer191->Add( m_checkBoxGenerateLogfile, 0, wxEXPAND|wxBOTTOM, 5 ); + + m_panelLogfile = new wxPanel( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelLogfile->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer1721; + bSizer1721 = new wxBoxSizer( wxHORIZONTAL ); + + m_logfileDir = new FolderHistoryBox( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer1721->Add( m_logfileDir, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectLogfileDir = new wxButton( m_panelLogfile, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectLogfileDir->SetToolTip( _("Select a folder") ); + + bSizer1721->Add( m_buttonSelectLogfileDir, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_checkBoxLogfilesLimit = new wxCheckBox( m_panelLogfile, wxID_ANY, _("Limit:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxLogfilesLimit->SetToolTip( _("Limit maximum number of log files") ); + + bSizer1721->Add( m_checkBoxLogfilesLimit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_spinCtrlLogfileLimit = new wxSpinCtrl( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); + m_spinCtrlLogfileLimit->SetToolTip( _("Limit maximum number of log files") ); + + bSizer1721->Add( m_spinCtrlLogfileLimit, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelLogfile->SetSizer( bSizer1721 ); + m_panelLogfile->Layout(); + bSizer1721->Fit( m_panelLogfile ); + bSizer191->Add( m_panelLogfile, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer172->Add( bSizer191, 0, wxEXPAND|wxALL, 10 ); + + m_hyperlink17 = new wxHyperlinkCtrl( m_panel35, wxID_ANY, _("How can I schedule a batch job?"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + bSizer172->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + + + m_panel35->SetSizer( bSizer172 ); + m_panel35->Layout(); + bSizer172->Fit( m_panel35 ); + bSizer54->Add( m_panel35, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer54->Add( m_staticline13, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + + bSizerStdButtons->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_buttonSaveAs = new wxButton( this, wxID_SAVE, _("Save &as..."), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonSaveAs->SetDefault(); + m_buttonSaveAs->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonSaveAs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer54->Add( bSizerStdButtons, 0, wxALIGN_RIGHT|wxEXPAND, 5 ); + + + this->SetSizer( bSizer54 ); + this->Layout(); + bSizer54->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); + m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorIgnore ), NULL, this ); + m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorPopup ), NULL, this ); + m_toggleBtnErrorStop->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorStop ), NULL, this ); + m_checkBoxGenerateLogfile->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleGenerateLogfile ), NULL, this ); + m_checkBoxLogfilesLimit->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleLogfilesLimit ), NULL, this ); + m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( BatchDlgGenerated::OnHelpScheduleBatch ), NULL, this ); + m_buttonSaveAs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); } BatchDlgGenerated::~BatchDlgGenerated() @@ -2504,94 +2504,94 @@ BatchDlgGenerated::~BatchDlgGenerated() DeleteDlgGenerated::DeleteDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer24; - bSizer24 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapDeleteType = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer72->Add( m_bitmapDeleteType, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); - - m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0|wxNO_BORDER ); - m_staticTextHeader->Wrap( -1 ); - bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - - - bSizer24->Add( bSizer72, 0, 0, 5 ); - - m_staticline91 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer24->Add( m_staticline91, 0, wxEXPAND, 5 ); - - m_panel31 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel31->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer185; - bSizer185 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer185->Add( 60, 0, 0, 0, 5 ); - - m_staticline42 = new wxStaticLine( m_panel31, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer185->Add( m_staticline42, 0, wxEXPAND, 5 ); - - m_textCtrlFileList = new wxTextCtrl( m_panel31, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 500,200 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER ); - bSizer185->Add( m_textCtrlFileList, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panel31->SetSizer( bSizer185 ); - m_panel31->Layout(); - bSizer185->Fit( m_panel31 ); - bSizer24->Add( m_panel31, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer99; - bSizer99 = new wxBoxSizer( wxVERTICAL ); - - m_checkBoxUseRecycler = new wxCheckBox( this, wxID_ANY, _("&Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer99->Add( m_checkBoxUseRecycler, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 ); - - m_checkBoxDeleteBothSides = new wxCheckBox( this, wxID_ANY, _("Delete on both sides"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxDeleteBothSides->Hide(); - m_checkBoxDeleteBothSides->SetToolTip( _("Delete on both sides even if the file is selected on one side only") ); - - bSizer99->Add( m_checkBoxDeleteBothSides, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxLEFT, 5 ); - - - bSizerStdButtons->Add( bSizer99, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonOK = new wxButton( this, wxID_OK, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOK->SetDefault(); - m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer24->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); - - - this->SetSizer( bSizer24 ); - this->Layout(); - bSizer24->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) ); - m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this ); - m_checkBoxDeleteBothSides->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this ); - m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer24; + bSizer24 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapDeleteType = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer72->Add( m_bitmapDeleteType, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + + m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0|wxNO_BORDER ); + m_staticTextHeader->Wrap( -1 ); + bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + + + bSizer24->Add( bSizer72, 0, 0, 5 ); + + m_staticline91 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer24->Add( m_staticline91, 0, wxEXPAND, 5 ); + + m_panel31 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel31->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer185; + bSizer185 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer185->Add( 60, 0, 0, 0, 5 ); + + m_staticline42 = new wxStaticLine( m_panel31, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer185->Add( m_staticline42, 0, wxEXPAND, 5 ); + + m_textCtrlFileList = new wxTextCtrl( m_panel31, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 500,200 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER ); + bSizer185->Add( m_textCtrlFileList, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panel31->SetSizer( bSizer185 ); + m_panel31->Layout(); + bSizer185->Fit( m_panel31 ); + bSizer24->Add( m_panel31, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer99; + bSizer99 = new wxBoxSizer( wxVERTICAL ); + + m_checkBoxUseRecycler = new wxCheckBox( this, wxID_ANY, _("&Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer99->Add( m_checkBoxUseRecycler, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + m_checkBoxDeleteBothSides = new wxCheckBox( this, wxID_ANY, _("Delete on both sides"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxDeleteBothSides->Hide(); + m_checkBoxDeleteBothSides->SetToolTip( _("Delete on both sides even if the file is selected on one side only") ); + + bSizer99->Add( m_checkBoxDeleteBothSides, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxLEFT, 5 ); + + + bSizerStdButtons->Add( bSizer99, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonOK = new wxButton( this, wxID_OK, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOK->SetDefault(); + m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer24->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizer24 ); + this->Layout(); + bSizer24->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) ); + m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this ); + m_checkBoxDeleteBothSides->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this ); + m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this ); } DeleteDlgGenerated::~DeleteDlgGenerated() @@ -2600,248 +2600,248 @@ DeleteDlgGenerated::~DeleteDlgGenerated() FilterDlgGenerated::FilterDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer21; - bSizer21 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapFilter = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer72->Add( m_bitmapFilter, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); - - m_staticText44 = new wxStaticText( this, wxID_ANY, _("Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair."), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticText44->Wrap( 480 ); - bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - - - bSizer21->Add( bSizer72, 0, 0, 5 ); - - m_staticline17 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer21->Add( m_staticline17, 0, wxEXPAND, 5 ); - - m_panel38 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel38->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer159; - bSizer159 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer166; - bSizer166 = new wxBoxSizer( wxVERTICAL ); - - - bSizer166->Add( 0, 10, 0, 0, 5 ); - - wxBoxSizer* bSizer1661; - bSizer1661 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapInclude = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); - bSizer1661->Add( m_bitmapInclude, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - - wxBoxSizer* bSizer173; - bSizer173 = new wxBoxSizer( wxVERTICAL ); - - m_staticText78 = new wxStaticText( m_panel38, wxID_ANY, _("Include:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText78->Wrap( -1 ); - bSizer173->Add( m_staticText78, 0, 0, 5 ); - - m_textCtrlInclude = new wxTextCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); - m_textCtrlInclude->SetMinSize( wxSize( 280,-1 ) ); - - bSizer173->Add( m_textCtrlInclude, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP, 5 ); - - - bSizer1661->Add( bSizer173, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer166->Add( bSizer1661, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxLEFT, 5 ); - - m_staticline22 = new wxStaticLine( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer166->Add( m_staticline22, 0, wxEXPAND, 5 ); - - - bSizer166->Add( 0, 10, 0, 0, 5 ); - - wxBoxSizer* bSizer1651; - bSizer1651 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapExclude = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); - bSizer1651->Add( m_bitmapExclude, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - wxBoxSizer* bSizer174; - bSizer174 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer189; - bSizer189 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText77 = new wxStaticText( m_panel38, wxID_ANY, _("Exclude:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText77->Wrap( -1 ); - bSizer189->Add( m_staticText77, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer189->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_hyperlink17 = new wxHyperlinkCtrl( m_panel38, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - bSizer189->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - - bSizer174->Add( bSizer189, 0, wxEXPAND, 5 ); - - m_textCtrlExclude = new wxTextCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); - bSizer174->Add( m_textCtrlExclude, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxTOP, 5 ); - - - bSizer1651->Add( bSizer174, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer166->Add( bSizer1651, 2, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxLEFT, 5 ); - - - bSizer159->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_staticline24 = new wxStaticLine( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer159->Add( m_staticline24, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer167; - bSizer167 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapFilterDate = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 34,34 ), 0 ); - bSizer167->Add( m_bitmapFilterDate, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - wxBoxSizer* bSizer165; - bSizer165 = new wxBoxSizer( wxVERTICAL ); - - m_staticText79 = new wxStaticText( m_panel38, wxID_ANY, _("Time span:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText79->Wrap( -1 ); - bSizer165->Add( m_staticText79, 0, wxBOTTOM, 5 ); - - m_spinCtrlTimespan = new wxSpinCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer165->Add( m_spinCtrlTimespan, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - wxArrayString m_choiceUnitTimespanChoices; - m_choiceUnitTimespan = new wxChoice( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitTimespanChoices, 0 ); - m_choiceUnitTimespan->SetSelection( 0 ); - bSizer165->Add( m_choiceUnitTimespan, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer167->Add( bSizer165, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer160->Add( bSizer167, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 ); - - m_staticline23 = new wxStaticLine( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer160->Add( m_staticline23, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer168; - bSizer168 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapFilterSize = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 ); - bSizer168->Add( m_bitmapFilterSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - - wxBoxSizer* bSizer158; - bSizer158 = new wxBoxSizer( wxVERTICAL ); - - m_staticText80 = new wxStaticText( m_panel38, wxID_ANY, _("File size:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText80->Wrap( -1 ); - bSizer158->Add( m_staticText80, 0, wxBOTTOM, 5 ); - - wxBoxSizer* bSizer162; - bSizer162 = new wxBoxSizer( wxVERTICAL ); - - m_staticText101 = new wxStaticText( m_panel38, wxID_ANY, _("Minimum:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText101->Wrap( -1 ); - bSizer162->Add( m_staticText101, 0, wxBOTTOM, 2 ); - - m_spinCtrlMinSize = new wxSpinCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer162->Add( m_spinCtrlMinSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - wxArrayString m_choiceUnitMinSizeChoices; - m_choiceUnitMinSize = new wxChoice( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMinSizeChoices, 0 ); - m_choiceUnitMinSize->SetSelection( 0 ); - bSizer162->Add( m_choiceUnitMinSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer158->Add( bSizer162, 0, wxBOTTOM|wxEXPAND, 5 ); - - wxBoxSizer* bSizer163; - bSizer163 = new wxBoxSizer( wxVERTICAL ); - - m_staticText102 = new wxStaticText( m_panel38, wxID_ANY, _("Maximum:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText102->Wrap( -1 ); - bSizer163->Add( m_staticText102, 0, wxBOTTOM, 2 ); - - m_spinCtrlMaxSize = new wxSpinCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer163->Add( m_spinCtrlMaxSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - wxArrayString m_choiceUnitMaxSizeChoices; - m_choiceUnitMaxSize = new wxChoice( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMaxSizeChoices, 0 ); - m_choiceUnitMaxSize->SetSelection( 0 ); - bSizer163->Add( m_choiceUnitMaxSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer158->Add( bSizer163, 0, wxEXPAND, 5 ); - - - bSizer168->Add( bSizer158, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer160->Add( bSizer168, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 ); - - - bSizer159->Add( bSizer160, 0, wxEXPAND, 5 ); - - - m_panel38->SetSizer( bSizer159 ); - m_panel38->Layout(); - bSizer159->Fit( m_panel38 ); - bSizer21->Add( m_panel38, 1, wxEXPAND, 5 ); - - m_staticline16 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer21->Add( m_staticline16, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonClear = new wxButton( this, wxID_DEFAULT, _("&Clear"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonClear, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - - - bSizerStdButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonOk = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOk->SetDefault(); - m_buttonOk->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOk, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer21->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); - - - this->SetSizer( bSizer21 ); - this->Layout(); - bSizer21->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) ); - m_textCtrlInclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); - m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( FilterDlgGenerated::OnHelpShowExamples ), NULL, this ); - m_textCtrlExclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); - m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_choiceUnitMinSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_choiceUnitMaxSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_buttonClear->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnClear ), NULL, this ); - m_buttonOk->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer21; + bSizer21 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapFilter = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer72->Add( m_bitmapFilter, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + + m_staticText44 = new wxStaticText( this, wxID_ANY, _("Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair."), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_staticText44->Wrap( 480 ); + bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + + + bSizer21->Add( bSizer72, 0, 0, 5 ); + + m_staticline17 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer21->Add( m_staticline17, 0, wxEXPAND, 5 ); + + m_panel38 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel38->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer159; + bSizer159 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer166; + bSizer166 = new wxBoxSizer( wxVERTICAL ); + + + bSizer166->Add( 0, 10, 0, 0, 5 ); + + wxBoxSizer* bSizer1661; + bSizer1661 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapInclude = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); + bSizer1661->Add( m_bitmapInclude, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + + wxBoxSizer* bSizer173; + bSizer173 = new wxBoxSizer( wxVERTICAL ); + + m_staticText78 = new wxStaticText( m_panel38, wxID_ANY, _("Include:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText78->Wrap( -1 ); + bSizer173->Add( m_staticText78, 0, 0, 5 ); + + m_textCtrlInclude = new wxTextCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); + m_textCtrlInclude->SetMinSize( wxSize( 280,-1 ) ); + + bSizer173->Add( m_textCtrlInclude, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP, 5 ); + + + bSizer1661->Add( bSizer173, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer166->Add( bSizer1661, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxLEFT, 5 ); + + m_staticline22 = new wxStaticLine( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer166->Add( m_staticline22, 0, wxEXPAND, 5 ); + + + bSizer166->Add( 0, 10, 0, 0, 5 ); + + wxBoxSizer* bSizer1651; + bSizer1651 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapExclude = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); + bSizer1651->Add( m_bitmapExclude, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + wxBoxSizer* bSizer174; + bSizer174 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer189; + bSizer189 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText77 = new wxStaticText( m_panel38, wxID_ANY, _("Exclude:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText77->Wrap( -1 ); + bSizer189->Add( m_staticText77, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer189->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_hyperlink17 = new wxHyperlinkCtrl( m_panel38, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + bSizer189->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + + bSizer174->Add( bSizer189, 0, wxEXPAND, 5 ); + + m_textCtrlExclude = new wxTextCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); + bSizer174->Add( m_textCtrlExclude, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxTOP, 5 ); + + + bSizer1651->Add( bSizer174, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer166->Add( bSizer1651, 2, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxLEFT, 5 ); + + + bSizer159->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticline24 = new wxStaticLine( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer159->Add( m_staticline24, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + wxBoxSizer* bSizer160; + bSizer160 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer167; + bSizer167 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapFilterDate = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 34,34 ), 0 ); + bSizer167->Add( m_bitmapFilterDate, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + wxBoxSizer* bSizer165; + bSizer165 = new wxBoxSizer( wxVERTICAL ); + + m_staticText79 = new wxStaticText( m_panel38, wxID_ANY, _("Time span:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText79->Wrap( -1 ); + bSizer165->Add( m_staticText79, 0, wxBOTTOM, 5 ); + + m_spinCtrlTimespan = new wxSpinCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + bSizer165->Add( m_spinCtrlTimespan, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + wxArrayString m_choiceUnitTimespanChoices; + m_choiceUnitTimespan = new wxChoice( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitTimespanChoices, 0 ); + m_choiceUnitTimespan->SetSelection( 0 ); + bSizer165->Add( m_choiceUnitTimespan, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer167->Add( bSizer165, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer160->Add( bSizer167, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 ); + + m_staticline23 = new wxStaticLine( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer160->Add( m_staticline23, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer168; + bSizer168 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapFilterSize = new wxStaticBitmap( m_panel38, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 ); + bSizer168->Add( m_bitmapFilterSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + + wxBoxSizer* bSizer158; + bSizer158 = new wxBoxSizer( wxVERTICAL ); + + m_staticText80 = new wxStaticText( m_panel38, wxID_ANY, _("File size:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText80->Wrap( -1 ); + bSizer158->Add( m_staticText80, 0, wxBOTTOM, 5 ); + + wxBoxSizer* bSizer162; + bSizer162 = new wxBoxSizer( wxVERTICAL ); + + m_staticText101 = new wxStaticText( m_panel38, wxID_ANY, _("Minimum:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText101->Wrap( -1 ); + bSizer162->Add( m_staticText101, 0, wxBOTTOM, 2 ); + + m_spinCtrlMinSize = new wxSpinCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + bSizer162->Add( m_spinCtrlMinSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + wxArrayString m_choiceUnitMinSizeChoices; + m_choiceUnitMinSize = new wxChoice( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMinSizeChoices, 0 ); + m_choiceUnitMinSize->SetSelection( 0 ); + bSizer162->Add( m_choiceUnitMinSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer158->Add( bSizer162, 0, wxBOTTOM|wxEXPAND, 5 ); + + wxBoxSizer* bSizer163; + bSizer163 = new wxBoxSizer( wxVERTICAL ); + + m_staticText102 = new wxStaticText( m_panel38, wxID_ANY, _("Maximum:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText102->Wrap( -1 ); + bSizer163->Add( m_staticText102, 0, wxBOTTOM, 2 ); + + m_spinCtrlMaxSize = new wxSpinCtrl( m_panel38, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + bSizer163->Add( m_spinCtrlMaxSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + wxArrayString m_choiceUnitMaxSizeChoices; + m_choiceUnitMaxSize = new wxChoice( m_panel38, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMaxSizeChoices, 0 ); + m_choiceUnitMaxSize->SetSelection( 0 ); + bSizer163->Add( m_choiceUnitMaxSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer158->Add( bSizer163, 0, wxEXPAND, 5 ); + + + bSizer168->Add( bSizer158, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer160->Add( bSizer168, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 ); + + + bSizer159->Add( bSizer160, 0, wxEXPAND, 5 ); + + + m_panel38->SetSizer( bSizer159 ); + m_panel38->Layout(); + bSizer159->Fit( m_panel38 ); + bSizer21->Add( m_panel38, 1, wxEXPAND, 5 ); + + m_staticline16 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer21->Add( m_staticline16, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonClear = new wxButton( this, wxID_DEFAULT, _("&Clear"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonClear, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + + bSizerStdButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonOk = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOk->SetDefault(); + m_buttonOk->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonOk, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer21->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizer21 ); + this->Layout(); + bSizer21->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) ); + m_textCtrlInclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); + m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( FilterDlgGenerated::OnHelpShowExamples ), NULL, this ); + m_textCtrlExclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); + m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); + m_choiceUnitMinSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); + m_choiceUnitMaxSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); + m_buttonClear->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnClear ), NULL, this ); + m_buttonOk->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); } FilterDlgGenerated::~FilterDlgGenerated() @@ -2850,256 +2850,256 @@ FilterDlgGenerated::~FilterDlgGenerated() GlobalSettingsDlgGenerated::GlobalSettingsDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer95; - bSizer95 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapSettings = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer72->Add( m_bitmapSettings, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); - - m_staticText44 = new wxStaticText( this, wxID_ANY, _("The following settings are used for all synchronization jobs."), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticText44->Wrap( 500 ); - bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - - - bSizer95->Add( bSizer72, 0, 0, 5 ); - - m_staticline20 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer95->Add( m_staticline20, 0, wxEXPAND, 5 ); - - m_panel39 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel39->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer166; - bSizer166 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer186; - bSizer186 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer176; - bSizer176 = new wxBoxSizer( wxHORIZONTAL ); - - m_checkBoxFailSafe = new wxCheckBox( m_panel39, wxID_ANY, _("Fail-safe file copy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxFailSafe->SetValue(true); - m_checkBoxFailSafe->SetToolTip( _("Copy to a temporary file (*.ffs_tmp) before overwriting target.\nThis guarantees a consistent state even in case of a serious error.") ); - - bSizer176->Add( m_checkBoxFailSafe, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticText91 = new wxStaticText( m_panel39, wxID_ANY, _("(recommended)"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText91->Wrap( -1 ); - m_staticText91->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - bSizer176->Add( m_staticText91, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer160->Add( bSizer176, 0, wxEXPAND, 5 ); - - bSizerLockedFiles = new wxBoxSizer( wxHORIZONTAL ); - - m_checkBoxCopyLocked = new wxCheckBox( m_panel39, wxID_ANY, _("Copy locked files"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxCopyLocked->SetValue(true); - m_checkBoxCopyLocked->SetToolTip( _("Copy shared or locked files using the Volume Shadow Copy Service.") ); - - bSizerLockedFiles->Add( m_checkBoxCopyLocked, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticText92 = new wxStaticText( m_panel39, wxID_ANY, _("(requires administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText92->Wrap( -1 ); - m_staticText92->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - bSizerLockedFiles->Add( m_staticText92, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer160->Add( bSizerLockedFiles, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer178; - bSizer178 = new wxBoxSizer( wxHORIZONTAL ); - - m_checkBoxCopyPermissions = new wxCheckBox( m_panel39, wxID_ANY, _("Copy file access permissions"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxCopyPermissions->SetValue(true); - m_checkBoxCopyPermissions->SetToolTip( _("Transfer file and folder permissions.") ); - - bSizer178->Add( m_checkBoxCopyPermissions, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_staticText93 = new wxStaticText( m_panel39, wxID_ANY, _("(requires administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText93->Wrap( -1 ); - m_staticText93->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - bSizer178->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer160->Add( bSizer178, 0, wxEXPAND, 5 ); - - - bSizer186->Add( bSizer160, 0, wxEXPAND|wxALL, 5 ); - - m_staticline39 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer186->Add( m_staticline39, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer188; - bSizer188 = new wxBoxSizer( wxVERTICAL ); - - m_staticText95 = new wxStaticText( m_panel39, wxID_ANY, _("Automatic retry on error:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText95->Wrap( -1 ); - bSizer188->Add( m_staticText95, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); - - wxFlexGridSizer* fgSizer6; - fgSizer6 = new wxFlexGridSizer( 0, 2, 5, 5 ); - fgSizer6->SetFlexibleDirection( wxBOTH ); - fgSizer6->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_staticText96 = new wxStaticText( m_panel39, wxID_ANY, _("Retry count:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText96->Wrap( -1 ); - fgSizer6->Add( m_staticText96, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_spinCtrlAutoRetryCount = new wxSpinCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 0, 2000000000, 4 ); - fgSizer6->Add( m_spinCtrlAutoRetryCount, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextAutoRetryDelay = new wxStaticText( m_panel39, wxID_ANY, _("Delay (in seconds):"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextAutoRetryDelay->Wrap( -1 ); - fgSizer6->Add( m_staticTextAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_spinCtrlAutoRetryDelay = new wxSpinCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - fgSizer6->Add( m_spinCtrlAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer188->Add( fgSizer6, 0, wxLEFT, 10 ); - - - bSizer186->Add( bSizer188, 0, wxALL, 10 ); - - - bSizer166->Add( bSizer186, 0, wxEXPAND, 5 ); - - m_staticline191 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer166->Add( m_staticline191, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer181; - bSizer181 = new wxBoxSizer( wxVERTICAL ); - - m_staticText85 = new wxStaticText( m_panel39, wxID_ANY, _("Customize context menu:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText85->Wrap( -1 ); - bSizer181->Add( m_staticText85, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); - - m_gridCustomCommand = new wxGrid( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - - // Grid - m_gridCustomCommand->CreateGrid( 5, 2 ); - m_gridCustomCommand->EnableEditing( true ); - m_gridCustomCommand->EnableGridLines( true ); - m_gridCustomCommand->EnableDragGridSize( false ); - m_gridCustomCommand->SetMargins( 0, 0 ); - - // Columns - m_gridCustomCommand->SetColSize( 0, 165 ); - m_gridCustomCommand->SetColSize( 1, 196 ); - m_gridCustomCommand->EnableDragColMove( false ); - m_gridCustomCommand->EnableDragColSize( true ); - m_gridCustomCommand->SetColLabelSize( 20 ); - m_gridCustomCommand->SetColLabelValue( 0, _("Description") ); - m_gridCustomCommand->SetColLabelValue( 1, _("Command line") ); - m_gridCustomCommand->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); - - // Rows - m_gridCustomCommand->EnableDragRowSize( false ); - m_gridCustomCommand->SetRowLabelSize( 1 ); - m_gridCustomCommand->SetRowLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE ); - - // Label Appearance - - // Cell Defaults - m_gridCustomCommand->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP ); - bSizer181->Add( m_gridCustomCommand, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - wxBoxSizer* bSizer193; - bSizer193 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonAddRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer193->Add( m_bpButtonAddRow, 0, 0, 5 ); - - m_bpButtonRemoveRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); - bSizer193->Add( m_bpButtonRemoveRow, 0, 0, 5 ); - - - bSizer193->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_hyperlink17 = new wxHyperlinkCtrl( m_panel39, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - bSizer193->Add( m_hyperlink17, 0, wxLEFT, 5 ); - - - bSizer181->Add( bSizer193, 0, wxTOP|wxEXPAND, 5 ); - - - bSizer166->Add( bSizer181, 1, wxEXPAND|wxALL, 10 ); - - m_staticline192 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer166->Add( m_staticline192, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer1881; - bSizer1881 = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonResetDialogs = new zen::BitmapTextButton( m_panel39, wxID_ANY, _("Restore hidden windows"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer1881->Add( m_buttonResetDialogs, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 ); - - m_staticline40 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer1881->Add( m_staticline40, 0, wxEXPAND, 5 ); - - - bSizer166->Add( bSizer1881, 0, 0, 5 ); - - - m_panel39->SetSizer( bSizer166 ); - m_panel39->Layout(); - bSizer166->Fit( m_panel39 ); - bSizer95->Add( m_panel39, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer95->Add( m_staticline36, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonDefault = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonDefault, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStdButtons->Add( 0, 0, 1, 0, 5 ); - - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer95->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); - - - this->SetSizer( bSizer95 ); - this->Layout(); - bSizer95->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) ); - m_spinCtrlAutoRetryCount->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnToggleAutoRetryCount ), NULL, this ); - m_bpButtonAddRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this ); - m_bpButtonRemoveRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this ); - m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( GlobalSettingsDlgGenerated::OnHelpShowExamples ), NULL, this ); - m_buttonResetDialogs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this ); - m_buttonDefault->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer95; + bSizer95 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapSettings = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer72->Add( m_bitmapSettings, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + + m_staticText44 = new wxStaticText( this, wxID_ANY, _("The following settings are used for all synchronization jobs."), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_staticText44->Wrap( 500 ); + bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + + + bSizer95->Add( bSizer72, 0, 0, 5 ); + + m_staticline20 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer95->Add( m_staticline20, 0, wxEXPAND, 5 ); + + m_panel39 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel39->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer166; + bSizer166 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer186; + bSizer186 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer160; + bSizer160 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer176; + bSizer176 = new wxBoxSizer( wxHORIZONTAL ); + + m_checkBoxFailSafe = new wxCheckBox( m_panel39, wxID_ANY, _("Fail-safe file copy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxFailSafe->SetValue(true); + m_checkBoxFailSafe->SetToolTip( _("Copy to a temporary file (*.ffs_tmp) before overwriting target.\nThis guarantees a consistent state even in case of a serious error.") ); + + bSizer176->Add( m_checkBoxFailSafe, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText91 = new wxStaticText( m_panel39, wxID_ANY, _("(recommended)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText91->Wrap( -1 ); + m_staticText91->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer176->Add( m_staticText91, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer160->Add( bSizer176, 0, wxEXPAND, 5 ); + + bSizerLockedFiles = new wxBoxSizer( wxHORIZONTAL ); + + m_checkBoxCopyLocked = new wxCheckBox( m_panel39, wxID_ANY, _("Copy locked files"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxCopyLocked->SetValue(true); + m_checkBoxCopyLocked->SetToolTip( _("Copy shared or locked files using the Volume Shadow Copy Service.") ); + + bSizerLockedFiles->Add( m_checkBoxCopyLocked, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText92 = new wxStaticText( m_panel39, wxID_ANY, _("(requires administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText92->Wrap( -1 ); + m_staticText92->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizerLockedFiles->Add( m_staticText92, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer160->Add( bSizerLockedFiles, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer178; + bSizer178 = new wxBoxSizer( wxHORIZONTAL ); + + m_checkBoxCopyPermissions = new wxCheckBox( m_panel39, wxID_ANY, _("Copy file access permissions"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxCopyPermissions->SetValue(true); + m_checkBoxCopyPermissions->SetToolTip( _("Transfer file and folder permissions.") ); + + bSizer178->Add( m_checkBoxCopyPermissions, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticText93 = new wxStaticText( m_panel39, wxID_ANY, _("(requires administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText93->Wrap( -1 ); + m_staticText93->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer178->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer160->Add( bSizer178, 0, wxEXPAND, 5 ); + + + bSizer186->Add( bSizer160, 0, wxEXPAND|wxALL, 5 ); + + m_staticline39 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer186->Add( m_staticline39, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer188; + bSizer188 = new wxBoxSizer( wxVERTICAL ); + + m_staticText95 = new wxStaticText( m_panel39, wxID_ANY, _("Automatic retry on error:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText95->Wrap( -1 ); + bSizer188->Add( m_staticText95, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); + + wxFlexGridSizer* fgSizer6; + fgSizer6 = new wxFlexGridSizer( 0, 2, 5, 5 ); + fgSizer6->SetFlexibleDirection( wxBOTH ); + fgSizer6->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_staticText96 = new wxStaticText( m_panel39, wxID_ANY, _("Retry count:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText96->Wrap( -1 ); + fgSizer6->Add( m_staticText96, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_spinCtrlAutoRetryCount = new wxSpinCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 0, 2000000000, 4 ); + fgSizer6->Add( m_spinCtrlAutoRetryCount, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextAutoRetryDelay = new wxStaticText( m_panel39, wxID_ANY, _("Delay (in seconds):"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextAutoRetryDelay->Wrap( -1 ); + fgSizer6->Add( m_staticTextAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_spinCtrlAutoRetryDelay = new wxSpinCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + fgSizer6->Add( m_spinCtrlAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer188->Add( fgSizer6, 0, wxLEFT, 10 ); + + + bSizer186->Add( bSizer188, 0, wxALL, 10 ); + + + bSizer166->Add( bSizer186, 0, wxEXPAND, 5 ); + + m_staticline191 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer166->Add( m_staticline191, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer181; + bSizer181 = new wxBoxSizer( wxVERTICAL ); + + m_staticText85 = new wxStaticText( m_panel39, wxID_ANY, _("Customize context menu:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText85->Wrap( -1 ); + bSizer181->Add( m_staticText85, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); + + m_gridCustomCommand = new wxGrid( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + + // Grid + m_gridCustomCommand->CreateGrid( 5, 2 ); + m_gridCustomCommand->EnableEditing( true ); + m_gridCustomCommand->EnableGridLines( true ); + m_gridCustomCommand->EnableDragGridSize( false ); + m_gridCustomCommand->SetMargins( 0, 0 ); + + // Columns + m_gridCustomCommand->SetColSize( 0, 165 ); + m_gridCustomCommand->SetColSize( 1, 196 ); + m_gridCustomCommand->EnableDragColMove( false ); + m_gridCustomCommand->EnableDragColSize( true ); + m_gridCustomCommand->SetColLabelSize( 20 ); + m_gridCustomCommand->SetColLabelValue( 0, _("Description") ); + m_gridCustomCommand->SetColLabelValue( 1, _("Command line") ); + m_gridCustomCommand->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + + // Rows + m_gridCustomCommand->EnableDragRowSize( false ); + m_gridCustomCommand->SetRowLabelSize( 1 ); + m_gridCustomCommand->SetRowLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE ); + + // Label Appearance + + // Cell Defaults + m_gridCustomCommand->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP ); + bSizer181->Add( m_gridCustomCommand, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + wxBoxSizer* bSizer193; + bSizer193 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonAddRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer193->Add( m_bpButtonAddRow, 0, 0, 5 ); + + m_bpButtonRemoveRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW ); + bSizer193->Add( m_bpButtonRemoveRow, 0, 0, 5 ); + + + bSizer193->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_hyperlink17 = new wxHyperlinkCtrl( m_panel39, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + bSizer193->Add( m_hyperlink17, 0, wxLEFT, 5 ); + + + bSizer181->Add( bSizer193, 0, wxTOP|wxEXPAND, 5 ); + + + bSizer166->Add( bSizer181, 1, wxEXPAND|wxALL, 10 ); + + m_staticline192 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer166->Add( m_staticline192, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer1881; + bSizer1881 = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonResetDialogs = new zen::BitmapTextButton( m_panel39, wxID_ANY, _("Restore hidden windows"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer1881->Add( m_buttonResetDialogs, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 ); + + m_staticline40 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer1881->Add( m_staticline40, 0, wxEXPAND, 5 ); + + + bSizer166->Add( bSizer1881, 0, 0, 5 ); + + + m_panel39->SetSizer( bSizer166 ); + m_panel39->Layout(); + bSizer166->Fit( m_panel39 ); + bSizer95->Add( m_panel39, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer95->Add( m_staticline36, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonDefault = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonDefault, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStdButtons->Add( 0, 0, 1, 0, 5 ); + + m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer95->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizer95 ); + this->Layout(); + bSizer95->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) ); + m_spinCtrlAutoRetryCount->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnToggleAutoRetryCount ), NULL, this ); + m_bpButtonAddRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this ); + m_bpButtonRemoveRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this ); + m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( GlobalSettingsDlgGenerated::OnHelpShowExamples ), NULL, this ); + m_buttonResetDialogs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this ); + m_buttonDefault->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this ); } GlobalSettingsDlgGenerated::~GlobalSettingsDlgGenerated() @@ -3108,22 +3108,22 @@ GlobalSettingsDlgGenerated::~GlobalSettingsDlgGenerated() TooltipDialogGenerated::TooltipDialogGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - - wxBoxSizer* bSizer158; - bSizer158 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer158->Add( m_bitmapLeft, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextMain = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextMain->Wrap( 600 ); - bSizer158->Add( m_staticTextMain, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - this->SetSizer( bSizer158 ); - this->Layout(); - bSizer158->Fit( this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* bSizer158; + bSizer158 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer158->Add( m_bitmapLeft, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextMain = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextMain->Wrap( 600 ); + bSizer158->Add( m_staticTextMain, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + this->SetSizer( bSizer158 ); + this->Layout(); + bSizer158->Fit( this ); } TooltipDialogGenerated::~TooltipDialogGenerated() @@ -3132,60 +3132,60 @@ TooltipDialogGenerated::~TooltipDialogGenerated() SelectTimespanDlgGenerated::SelectTimespanDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer96; - bSizer96 = new wxBoxSizer( wxVERTICAL ); - - m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer98; - bSizer98 = new wxBoxSizer( wxHORIZONTAL ); - - m_calendarFrom = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxNO_BORDER ); - bSizer98->Add( m_calendarFrom, 0, wxTOP|wxBOTTOM|wxLEFT, 10 ); - - m_calendarTo = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxNO_BORDER ); - bSizer98->Add( m_calendarTo, 0, wxALL, 10 ); - - - m_panel35->SetSizer( bSizer98 ); - m_panel35->Layout(); - bSizer98->Fit( m_panel35 ); - bSizer96->Add( m_panel35, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticline21 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer96->Add( m_staticline21, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer96->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - this->SetSizer( bSizer96 ); - this->Layout(); - bSizer96->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) ); - m_calendarFrom->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this ); - m_calendarTo->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer96; + bSizer96 = new wxBoxSizer( wxVERTICAL ); + + m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer98; + bSizer98 = new wxBoxSizer( wxHORIZONTAL ); + + m_calendarFrom = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxNO_BORDER ); + bSizer98->Add( m_calendarFrom, 0, wxTOP|wxBOTTOM|wxLEFT, 10 ); + + m_calendarTo = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxNO_BORDER ); + bSizer98->Add( m_calendarTo, 0, wxALL, 10 ); + + + m_panel35->SetSizer( bSizer98 ); + m_panel35->Layout(); + bSizer98->Fit( m_panel35 ); + bSizer96->Add( m_panel35, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticline21 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer96->Add( m_staticline21, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer96->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + + + this->SetSizer( bSizer96 ); + this->Layout(); + bSizer96->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) ); + m_calendarFrom->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this ); + m_calendarTo->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this ); } SelectTimespanDlgGenerated::~SelectTimespanDlgGenerated() @@ -3194,306 +3194,306 @@ SelectTimespanDlgGenerated::~SelectTimespanDlgGenerated() AboutDlgGenerated::AboutDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer31; - bSizer31 = new wxBoxSizer( wxVERTICAL ); - - m_panel41 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel41->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer162; - bSizer162 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapLogo = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer162->Add( m_bitmapLogo, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticline341 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer162->Add( m_staticline341, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer174; - bSizer174 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer181; - bSizer181 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer187; - bSizer187 = new wxBoxSizer( wxVERTICAL ); - - m_staticText96 = new wxStaticText( m_panel41, wxID_ANY, _("Source code written in C++ using:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText96->Wrap( -1 ); - bSizer187->Add( m_staticText96, 0, wxALL, 5 ); - - wxBoxSizer* bSizer171; - bSizer171 = new wxBoxSizer( wxHORIZONTAL ); - - m_hyperlink11 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("MS Visual C++"), wxT("http://msdn.microsoft.com/library/60k1461a.aspx"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink11->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink11->SetToolTip( _("http://msdn.microsoft.com/library/60k1461a.aspx") ); - - bSizer171->Add( m_hyperlink11, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink9 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("MinGW"), wxT("http://www.mingw.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink9->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink9->SetToolTip( _("http://www.mingw.org") ); - - bSizer171->Add( m_hyperlink9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink10 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Code::Blocks"), wxT("http://www.codeblocks.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink10->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink10->SetToolTip( _("http://www.codeblocks.org") ); - - bSizer171->Add( m_hyperlink10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink7 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("wxWidgets"), wxT("http://www.wxwidgets.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink7->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink7->SetToolTip( _("http://www.wxwidgets.org") ); - - bSizer171->Add( m_hyperlink7, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink14 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("wxFormBuilder"), wxT("http://wxformbuilder.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink14->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink14->SetToolTip( _("http://wxformbuilder.org") ); - - bSizer171->Add( m_hyperlink14, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer187->Add( bSizer171, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxHORIZONTAL ); - - m_hyperlink15 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zen::Xml"), wxT("http://zenxml.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink15->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink15->SetToolTip( _("http://zenxml.sourceforge.net") ); - - bSizer172->Add( m_hyperlink15, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink13 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Boost"), wxT("http://www.boost.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink13->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink13->SetToolTip( _("http://www.boost.org") ); - - bSizer172->Add( m_hyperlink13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink16 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Artistic Style"), wxT("http://astyle.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink16->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink16->SetToolTip( _("http://astyle.sourceforge.net") ); - - bSizer172->Add( m_hyperlink16, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink12 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Google Test"), wxT("http://code.google.com/p/googletest"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink12->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink12->SetToolTip( _("http://code.google.com/p/googletest") ); - - bSizer172->Add( m_hyperlink12, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink18 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Unicode NSIS"), wxT("http://www.scratchpaper.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink18->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink18->SetToolTip( _("http://www.scratchpaper.com") ); - - bSizer172->Add( m_hyperlink18, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer187->Add( bSizer172, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer181->Add( bSizer187, 0, wxALL|wxEXPAND, 5 ); - - m_panelDonate = new wxPanel( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelDonate->SetBackgroundColour( wxColour( 153, 170, 187 ) ); - - wxBoxSizer* bSizer183; - bSizer183 = new wxBoxSizer( wxVERTICAL ); - - m_panel39 = new wxPanel( m_panelDonate, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel39->SetBackgroundColour( wxColour( 221, 221, 255 ) ); - - wxBoxSizer* bSizer184; - bSizer184 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer184->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_animCtrlWink = new wxAnimationCtrl( m_panel39, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( 48,48 ), wxAC_DEFAULT_STYLE ); - bSizer184->Add( m_animCtrlWink, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer178; - bSizer178 = new wxBoxSizer( wxVERTICAL ); - - m_staticText83 = new wxStaticText( m_panel39, wxID_ANY, _("If you like FreeFileSync"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText83->Wrap( -1 ); - m_staticText83->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_staticText83->SetForegroundColour( wxColour( 0, 0, 0 ) ); - - bSizer178->Add( m_staticText83, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_buttonDonate = new wxButton( m_panel39, wxID_ANY, _("Donate with PayPal"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonDonate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) ); - m_buttonDonate->SetToolTip( _("http://freefilesync.sourceforge.net/donate.php") ); - - bSizer178->Add( m_buttonDonate, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer184->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer184->Add( 0, 0, 1, wxEXPAND, 5 ); - - - m_panel39->SetSizer( bSizer184 ); - m_panel39->Layout(); - bSizer184->Fit( m_panel39 ); - bSizer183->Add( m_panel39, 0, wxEXPAND|wxALL, 5 ); - - - m_panelDonate->SetSizer( bSizer183 ); - m_panelDonate->Layout(); - bSizer183->Fit( m_panelDonate ); - bSizer181->Add( m_panelDonate, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer186; - bSizer186 = new wxBoxSizer( wxVERTICAL ); - - m_staticText94 = new wxStaticText( m_panel41, wxID_ANY, _("Feedback and suggestions are welcome"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText94->Wrap( -1 ); - bSizer186->Add( m_staticText94, 0, wxALL, 5 ); - - wxBoxSizer* bSizer166; - bSizer166 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer166->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bitmap9 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmap9->SetToolTip( _("Homepage") ); - - bSizer166->Add( m_bitmap9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_hyperlink1 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("freefilesync.sf.net"), wxT("http://freefilesync.sf.net/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) ); - m_hyperlink1->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer166->Add( m_hyperlink1, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer166->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bitmap10 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmap10->SetToolTip( _("Email") ); - - bSizer166->Add( m_bitmap10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_hyperlink2 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zenju@gmx.de"), wxT("mailto:zenju@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink2->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) ); - m_hyperlink2->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer166->Add( m_hyperlink2, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer166->Add( 0, 0, 1, wxEXPAND, 5 ); - - - bSizer186->Add( bSizer166, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer181->Add( bSizer186, 0, wxALL|wxEXPAND, 5 ); - - m_staticline34 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer181->Add( m_staticline34, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer185; - bSizer185 = new wxBoxSizer( wxVERTICAL ); - - m_staticText93 = new wxStaticText( m_panel41, wxID_ANY, _("Published under the GNU General Public License"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText93->Wrap( -1 ); - bSizer185->Add( m_staticText93, 0, wxALL, 5 ); - - wxBoxSizer* bSizer1671; - bSizer1671 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmap13 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer1671->Add( m_bitmap13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink5 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("http://www.gnu.org/licenses/gpl.html"), wxT("http://www.gnu.org/licenses/gpl.html"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink5->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer1671->Add( m_hyperlink5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer185->Add( bSizer1671, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer181->Add( bSizer185, 0, wxALL|wxEXPAND, 5 ); - - - bSizer174->Add( bSizer181, 0, 0, 5 ); - - m_staticline37 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer174->Add( m_staticline37, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer177; - bSizer177 = new wxBoxSizer( wxVERTICAL ); - - m_staticText54 = new wxStaticText( m_panel41, wxID_ANY, _("Many thanks for localization:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText54->Wrap( 200 ); - m_staticText54->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizer177->Add( m_staticText54, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - - - bSizer177->Add( 0, 5, 0, 0, 5 ); - - m_scrolledWindowTranslators = new wxScrolledWindow( m_panel41, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxVSCROLL ); - m_scrolledWindowTranslators->SetScrollRate( 10, 10 ); - m_scrolledWindowTranslators->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_scrolledWindowTranslators->SetMinSize( wxSize( 220,-1 ) ); - - fgSizerTranslators = new wxFlexGridSizer( 0, 2, 2, 10 ); - fgSizerTranslators->SetFlexibleDirection( wxBOTH ); - fgSizerTranslators->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - - m_scrolledWindowTranslators->SetSizer( fgSizerTranslators ); - m_scrolledWindowTranslators->Layout(); - fgSizerTranslators->Fit( m_scrolledWindowTranslators ); - bSizer177->Add( m_scrolledWindowTranslators, 1, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxEXPAND, 5 ); - - - bSizer174->Add( bSizer177, 0, wxEXPAND|wxTOP|wxLEFT, 5 ); - - - bSizer162->Add( bSizer174, 0, 0, 5 ); - - - m_panel41->SetSizer( bSizer162 ); - m_panel41->Layout(); - bSizer162->Fit( m_panel41 ); - bSizer31->Add( m_panel41, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer31->Add( m_staticline36, 0, wxEXPAND, 5 ); - - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonClose->SetDefault(); - bSizerStdButtons->Add( m_buttonClose, 0, wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer31->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - - - this->SetSizer( bSizer31 ); - this->Layout(); - bSizer31->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) ); - m_buttonDonate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnDonate ), NULL, this ); - m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer31; + bSizer31 = new wxBoxSizer( wxVERTICAL ); + + m_panel41 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel41->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer162; + bSizer162 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapLogo = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer162->Add( m_bitmapLogo, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticline341 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer162->Add( m_staticline341, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer174; + bSizer174 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer181; + bSizer181 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer187; + bSizer187 = new wxBoxSizer( wxVERTICAL ); + + m_staticText96 = new wxStaticText( m_panel41, wxID_ANY, _("Source code written in C++ using:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText96->Wrap( -1 ); + bSizer187->Add( m_staticText96, 0, wxALL, 5 ); + + wxBoxSizer* bSizer171; + bSizer171 = new wxBoxSizer( wxHORIZONTAL ); + + m_hyperlink11 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("MS Visual C++"), wxT("http://msdn.microsoft.com/library/60k1461a.aspx"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink11->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink11->SetToolTip( _("http://msdn.microsoft.com/library/60k1461a.aspx") ); + + bSizer171->Add( m_hyperlink11, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink9 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("MinGW"), wxT("http://www.mingw.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink9->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink9->SetToolTip( _("http://www.mingw.org") ); + + bSizer171->Add( m_hyperlink9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink10 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Code::Blocks"), wxT("http://www.codeblocks.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink10->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink10->SetToolTip( _("http://www.codeblocks.org") ); + + bSizer171->Add( m_hyperlink10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink7 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("wxWidgets"), wxT("http://www.wxwidgets.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink7->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink7->SetToolTip( _("http://www.wxwidgets.org") ); + + bSizer171->Add( m_hyperlink7, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink14 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("wxFormBuilder"), wxT("http://wxformbuilder.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink14->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink14->SetToolTip( _("http://wxformbuilder.org") ); + + bSizer171->Add( m_hyperlink14, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer187->Add( bSizer171, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxHORIZONTAL ); + + m_hyperlink15 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zen::Xml"), wxT("http://zenxml.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink15->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink15->SetToolTip( _("http://zenxml.sourceforge.net") ); + + bSizer172->Add( m_hyperlink15, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink13 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Boost"), wxT("http://www.boost.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink13->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink13->SetToolTip( _("http://www.boost.org") ); + + bSizer172->Add( m_hyperlink13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink16 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Artistic Style"), wxT("http://astyle.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink16->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink16->SetToolTip( _("http://astyle.sourceforge.net") ); + + bSizer172->Add( m_hyperlink16, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink12 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Google Test"), wxT("http://code.google.com/p/googletest"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink12->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink12->SetToolTip( _("http://code.google.com/p/googletest") ); + + bSizer172->Add( m_hyperlink12, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink18 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Unicode NSIS"), wxT("http://www.scratchpaper.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink18->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink18->SetToolTip( _("http://www.scratchpaper.com") ); + + bSizer172->Add( m_hyperlink18, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer187->Add( bSizer172, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer181->Add( bSizer187, 0, wxALL|wxEXPAND, 5 ); + + m_panelDonate = new wxPanel( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelDonate->SetBackgroundColour( wxColour( 153, 170, 187 ) ); + + wxBoxSizer* bSizer183; + bSizer183 = new wxBoxSizer( wxVERTICAL ); + + m_panel39 = new wxPanel( m_panelDonate, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel39->SetBackgroundColour( wxColour( 221, 221, 255 ) ); + + wxBoxSizer* bSizer184; + bSizer184 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer184->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_animCtrlWink = new wxAnimationCtrl( m_panel39, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( 48,48 ), wxAC_DEFAULT_STYLE ); + bSizer184->Add( m_animCtrlWink, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer178; + bSizer178 = new wxBoxSizer( wxVERTICAL ); + + m_staticText83 = new wxStaticText( m_panel39, wxID_ANY, _("If you like FreeFileSync"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText83->Wrap( -1 ); + m_staticText83->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + m_staticText83->SetForegroundColour( wxColour( 0, 0, 0 ) ); + + bSizer178->Add( m_staticText83, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_buttonDonate = new wxButton( m_panel39, wxID_ANY, _("Donate with PayPal"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonDonate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) ); + m_buttonDonate->SetToolTip( _("http://freefilesync.sourceforge.net/donate.php") ); + + bSizer178->Add( m_buttonDonate, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer184->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer184->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panel39->SetSizer( bSizer184 ); + m_panel39->Layout(); + bSizer184->Fit( m_panel39 ); + bSizer183->Add( m_panel39, 0, wxEXPAND|wxALL, 5 ); + + + m_panelDonate->SetSizer( bSizer183 ); + m_panelDonate->Layout(); + bSizer183->Fit( m_panelDonate ); + bSizer181->Add( m_panelDonate, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer186; + bSizer186 = new wxBoxSizer( wxVERTICAL ); + + m_staticText94 = new wxStaticText( m_panel41, wxID_ANY, _("Feedback and suggestions are welcome"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText94->Wrap( -1 ); + bSizer186->Add( m_staticText94, 0, wxALL, 5 ); + + wxBoxSizer* bSizer166; + bSizer166 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer166->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bitmap9 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_bitmap9->SetToolTip( _("Homepage") ); + + bSizer166->Add( m_bitmap9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_hyperlink1 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("freefilesync.sf.net"), wxT("http://freefilesync.sf.net/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) ); + m_hyperlink1->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer166->Add( m_hyperlink1, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer166->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bitmap10 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_bitmap10->SetToolTip( _("Email") ); + + bSizer166->Add( m_bitmap10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + m_hyperlink2 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zenju@gmx.de"), wxT("mailto:zenju@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink2->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) ); + m_hyperlink2->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer166->Add( m_hyperlink2, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer166->Add( 0, 0, 1, wxEXPAND, 5 ); + + + bSizer186->Add( bSizer166, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer181->Add( bSizer186, 0, wxALL|wxEXPAND, 5 ); + + m_staticline34 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer181->Add( m_staticline34, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer185; + bSizer185 = new wxBoxSizer( wxVERTICAL ); + + m_staticText93 = new wxStaticText( m_panel41, wxID_ANY, _("Published under the GNU General Public License"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText93->Wrap( -1 ); + bSizer185->Add( m_staticText93, 0, wxALL, 5 ); + + wxBoxSizer* bSizer1671; + bSizer1671 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmap13 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer1671->Add( m_bitmap13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink5 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("http://www.gnu.org/licenses/gpl.html"), wxT("http://www.gnu.org/licenses/gpl.html"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink5->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer1671->Add( m_hyperlink5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer185->Add( bSizer1671, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer181->Add( bSizer185, 0, wxALL|wxEXPAND, 5 ); + + + bSizer174->Add( bSizer181, 0, 0, 5 ); + + m_staticline37 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer174->Add( m_staticline37, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer177; + bSizer177 = new wxBoxSizer( wxVERTICAL ); + + m_staticText54 = new wxStaticText( m_panel41, wxID_ANY, _("Many thanks for localization:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText54->Wrap( 200 ); + m_staticText54->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizer177->Add( m_staticText54, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + + + bSizer177->Add( 0, 5, 0, 0, 5 ); + + m_scrolledWindowTranslators = new wxScrolledWindow( m_panel41, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxVSCROLL ); + m_scrolledWindowTranslators->SetScrollRate( 10, 10 ); + m_scrolledWindowTranslators->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_scrolledWindowTranslators->SetMinSize( wxSize( 220,-1 ) ); + + fgSizerTranslators = new wxFlexGridSizer( 0, 2, 2, 10 ); + fgSizerTranslators->SetFlexibleDirection( wxBOTH ); + fgSizerTranslators->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + + m_scrolledWindowTranslators->SetSizer( fgSizerTranslators ); + m_scrolledWindowTranslators->Layout(); + fgSizerTranslators->Fit( m_scrolledWindowTranslators ); + bSizer177->Add( m_scrolledWindowTranslators, 1, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxEXPAND, 5 ); + + + bSizer174->Add( bSizer177, 0, wxEXPAND|wxTOP|wxLEFT, 5 ); + + + bSizer162->Add( bSizer174, 0, 0, 5 ); + + + m_panel41->SetSizer( bSizer162 ); + m_panel41->Layout(); + bSizer162->Fit( m_panel41 ); + bSizer31->Add( m_panel41, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer31->Add( m_staticline36, 0, wxEXPAND, 5 ); + + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonClose->SetDefault(); + bSizerStdButtons->Add( m_buttonClose, 0, wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer31->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + + + this->SetSizer( bSizer31 ); + this->Layout(); + bSizer31->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) ); + m_buttonDonate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnDonate ), NULL, this ); + m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this ); } AboutDlgGenerated::~AboutDlgGenerated() diff --git a/FreeFileSync/Source/ui/gui_generated.h b/FreeFileSync/Source/ui/gui_generated.h index 1135b594..ed6f020b 100644 --- a/FreeFileSync/Source/ui/gui_generated.h +++ b/FreeFileSync/Source/ui/gui_generated.h @@ -14,10 +14,10 @@ class ExecFinishedBox; class FolderHistoryBox; class ToggleButton; -namespace zen{ class BitmapTextButton; } -namespace zen{ class Graph2D; } -namespace zen{ class Grid; } -namespace zen{ class TripleSplitter; } +namespace zen { class BitmapTextButton; } +namespace zen { class Graph2D; } +namespace zen { class Grid; } +namespace zen { class TripleSplitter; } #include <wx/string.h> #include <wx/bitmap.h> @@ -60,820 +60,820 @@ namespace zen{ class TripleSplitter; } /////////////////////////////////////////////////////////////////////////////// /// Class MainDialogGenerated /////////////////////////////////////////////////////////////////////////////// -class MainDialogGenerated : public wxFrame +class MainDialogGenerated : public wxFrame { - private: - - protected: - wxMenuBar* m_menubar1; - wxMenu* m_menuFile; - wxMenuItem* m_menuItemNew; - wxMenuItem* m_menuItemLoad; - wxMenuItem* m_menuItemSave; - wxMenuItem* m_menuItemSaveAs; - wxMenuItem* m_menuItem7; - wxMenuItem* m_menuItem10; - wxMenuItem* m_menuItem11; - wxMenu* m_menuTools; - wxMenuItem* m_menuItemGlobSett; - wxMenu* m_menuLanguages; - wxMenu* m_menuHelp; - wxMenuItem* m_menuItemManual; - wxMenu* m_menuCheckVersion; - wxMenuItem* m_menuItemCheckVersionNow; - wxMenuItem* m_menuItemCheckVersionAuto; - wxMenuItem* m_menuItemAbout; - wxBoxSizer* bSizerPanelHolder; - wxPanel* m_panelTopButtons; - wxBoxSizer* bSizerTopButtons; - zen::BitmapTextButton* m_buttonCompare; - zen::BitmapTextButton* m_buttonCancel; - wxBitmapButton* m_bpButtonCmpConfig; - wxBitmapButton* m_bpButtonFilter; - wxBitmapButton* m_bpButtonSyncConfig; - zen::BitmapTextButton* m_buttonSync; - wxPanel* m_panelDirectoryPairs; - wxStaticText* m_staticTextResolvedPathL; - wxBitmapButton* m_bpButtonAddPair; - wxButton* m_buttonSelectDirLeft; - wxPanel* m_panelTopMiddle; - wxBitmapButton* m_bpButtonSwapSides; - wxStaticText* m_staticTextResolvedPathR; - wxButton* m_buttonSelectDirRight; - wxScrolledWindow* m_scrolledWindowFolderPairs; - wxBoxSizer* bSizerAddFolderPairs; - zen::Grid* m_gridNavi; - wxPanel* m_panelCenter; - zen::TripleSplitter* m_splitterMain; - zen::Grid* m_gridMainL; - zen::Grid* m_gridMainC; - zen::Grid* m_gridMainR; - wxPanel* m_panelStatusBar; - wxBoxSizer* bSizerFileStatus; - wxBoxSizer* bSizerStatusLeft; - wxBoxSizer* bSizerStatusLeftDirectories; - wxStaticBitmap* m_bitmapSmallDirectoryLeft; - wxStaticText* m_staticTextStatusLeftDirs; - wxBoxSizer* bSizerStatusLeftFiles; - wxStaticBitmap* m_bitmapSmallFileLeft; - wxStaticText* m_staticTextStatusLeftFiles; - wxStaticText* m_staticTextStatusLeftBytes; - wxStaticLine* m_staticline9; - wxStaticText* m_staticTextStatusMiddle; - wxBoxSizer* bSizerStatusRight; - wxStaticLine* m_staticline10; - wxBoxSizer* bSizerStatusRightDirectories; - wxStaticBitmap* m_bitmapSmallDirectoryRight; - wxStaticText* m_staticTextStatusRightDirs; - wxBoxSizer* bSizerStatusRightFiles; - wxStaticBitmap* m_bitmapSmallFileRight; - wxStaticText* m_staticTextStatusRightFiles; - wxStaticText* m_staticTextStatusRightBytes; - wxStaticText* m_staticTextFullStatus; - wxPanel* m_panelSearch; - wxBitmapButton* m_bpButtonHideSearch; - wxStaticText* m_staticText101; - wxTextCtrl* m_textCtrlSearchTxt; - wxCheckBox* m_checkBoxMatchCase; - wxPanel* m_panelConfig; - wxBoxSizer* bSizerConfig; - wxBitmapButton* m_bpButtonOpen; - wxBitmapButton* m_bpButtonSave; - wxBitmapButton* m_bpButtonBatchJob; - wxListBox* m_listBoxHistory; - wxPanel* m_panelViewFilter; - wxBoxSizer* bSizerViewFilter; - ToggleButton* m_bpButtonViewTypeSyncAction; - ToggleButton* m_bpButtonShowExcluded; - ToggleButton* m_bpButtonShowCreateLeft; - ToggleButton* m_bpButtonShowUpdateLeft; - ToggleButton* m_bpButtonShowDeleteLeft; - ToggleButton* m_bpButtonShowLeftOnly; - ToggleButton* m_bpButtonShowLeftNewer; - ToggleButton* m_bpButtonShowEqual; - ToggleButton* m_bpButtonShowDifferent; - ToggleButton* m_bpButtonShowDoNothing; - ToggleButton* m_bpButtonShowRightNewer; - ToggleButton* m_bpButtonShowRightOnly; - ToggleButton* m_bpButtonShowDeleteRight; - ToggleButton* m_bpButtonShowUpdateRight; - ToggleButton* m_bpButtonShowCreateRight; - ToggleButton* m_bpButtonShowConflict; - wxPanel* m_panelStatistics; - wxBoxSizer* bSizer1801; - wxStaticBitmap* m_bitmapCreateLeft; - wxStaticText* m_staticTextCreateLeft; - wxStaticBitmap* m_bitmapUpdateLeft; - wxStaticText* m_staticTextUpdateLeft; - wxStaticBitmap* m_bitmapDeleteLeft; - wxStaticText* m_staticTextDeleteLeft; - wxStaticBitmap* m_bitmapData; - wxStaticText* m_staticTextData; - wxStaticBitmap* m_bitmapDeleteRight; - wxStaticText* m_staticTextDeleteRight; - wxStaticBitmap* m_bitmapUpdateRight; - wxStaticText* m_staticTextUpdateRight; - wxStaticBitmap* m_bitmapCreateRight; - wxStaticText* m_staticTextCreateRight; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnConfigNew( wxCommandEvent& event ) { event.Skip(); } - virtual void OnConfigLoad( wxCommandEvent& event ) { event.Skip(); } - virtual void OnConfigSave( wxCommandEvent& event ) { event.Skip(); } - virtual void OnConfigSaveAs( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSaveAsBatchJob( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCompare( wxCommandEvent& event ) { event.Skip(); } - virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuQuit( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuGlobalSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuFindItem( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuExportFileList( wxCommandEvent& event ) { event.Skip(); } - virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuCheckVersionAutomatically( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuAbout( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCmpSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCompSettingsContext( wxMouseEvent& event ) { event.Skip(); } - virtual void OnConfigureFilter( wxCommandEvent& event ) { event.Skip(); } - virtual void OnGlobalFilterContext( wxMouseEvent& event ) { event.Skip(); } - virtual void OnSyncSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncSettingsContext( wxMouseEvent& event ) { event.Skip(); } - virtual void OnAddFolderPair( wxCommandEvent& event ) { event.Skip(); } - virtual void OnRemoveTopFolderPair( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSwapSides( wxCommandEvent& event ) { event.Skip(); } - virtual void OnHideSearchPanel( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSearchGridEnter( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCfgHistoryKeyEvent( wxKeyEvent& event ) { event.Skip(); } - virtual void OnLoadFromHistory( wxCommandEvent& event ) { event.Skip(); } - virtual void OnLoadFromHistoryDoubleClick( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCfgHistoryRightClick( wxMouseEvent& event ) { event.Skip(); } - virtual void OnToggleViewType( wxCommandEvent& event ) { event.Skip(); } - virtual void OnToggleViewButton( wxCommandEvent& event ) { event.Skip(); } - virtual void OnViewButtonRightClick( wxMouseEvent& event ) { event.Skip(); } - - - public: - wxPanel* m_panelTopLeft; - wxBitmapButton* m_bpButtonRemovePair; - FolderHistoryBox* m_directoryLeft; - wxBitmapButton* m_bpButtonAltCompCfg; - wxBitmapButton* m_bpButtonLocalFilter; - wxBitmapButton* m_bpButtonAltSyncCfg; - wxPanel* m_panelTopRight; - FolderHistoryBox* m_directoryRight; - wxBoxSizer* bSizerStatistics; - wxBoxSizer* bSizerData; - - MainDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 900,600 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL ); - - ~MainDialogGenerated(); - +private: + +protected: + wxMenuBar* m_menubar1; + wxMenu* m_menuFile; + wxMenuItem* m_menuItemNew; + wxMenuItem* m_menuItemLoad; + wxMenuItem* m_menuItemSave; + wxMenuItem* m_menuItemSaveAs; + wxMenuItem* m_menuItem7; + wxMenuItem* m_menuItem10; + wxMenuItem* m_menuItem11; + wxMenu* m_menuTools; + wxMenuItem* m_menuItemGlobSett; + wxMenu* m_menuLanguages; + wxMenu* m_menuHelp; + wxMenuItem* m_menuItemManual; + wxMenu* m_menuCheckVersion; + wxMenuItem* m_menuItemCheckVersionNow; + wxMenuItem* m_menuItemCheckVersionAuto; + wxMenuItem* m_menuItemAbout; + wxBoxSizer* bSizerPanelHolder; + wxPanel* m_panelTopButtons; + wxBoxSizer* bSizerTopButtons; + zen::BitmapTextButton* m_buttonCompare; + zen::BitmapTextButton* m_buttonCancel; + wxBitmapButton* m_bpButtonCmpConfig; + wxBitmapButton* m_bpButtonFilter; + wxBitmapButton* m_bpButtonSyncConfig; + zen::BitmapTextButton* m_buttonSync; + wxPanel* m_panelDirectoryPairs; + wxStaticText* m_staticTextResolvedPathL; + wxBitmapButton* m_bpButtonAddPair; + wxButton* m_buttonSelectDirLeft; + wxPanel* m_panelTopMiddle; + wxBitmapButton* m_bpButtonSwapSides; + wxStaticText* m_staticTextResolvedPathR; + wxButton* m_buttonSelectDirRight; + wxScrolledWindow* m_scrolledWindowFolderPairs; + wxBoxSizer* bSizerAddFolderPairs; + zen::Grid* m_gridNavi; + wxPanel* m_panelCenter; + zen::TripleSplitter* m_splitterMain; + zen::Grid* m_gridMainL; + zen::Grid* m_gridMainC; + zen::Grid* m_gridMainR; + wxPanel* m_panelStatusBar; + wxBoxSizer* bSizerFileStatus; + wxBoxSizer* bSizerStatusLeft; + wxBoxSizer* bSizerStatusLeftDirectories; + wxStaticBitmap* m_bitmapSmallDirectoryLeft; + wxStaticText* m_staticTextStatusLeftDirs; + wxBoxSizer* bSizerStatusLeftFiles; + wxStaticBitmap* m_bitmapSmallFileLeft; + wxStaticText* m_staticTextStatusLeftFiles; + wxStaticText* m_staticTextStatusLeftBytes; + wxStaticLine* m_staticline9; + wxStaticText* m_staticTextStatusMiddle; + wxBoxSizer* bSizerStatusRight; + wxStaticLine* m_staticline10; + wxBoxSizer* bSizerStatusRightDirectories; + wxStaticBitmap* m_bitmapSmallDirectoryRight; + wxStaticText* m_staticTextStatusRightDirs; + wxBoxSizer* bSizerStatusRightFiles; + wxStaticBitmap* m_bitmapSmallFileRight; + wxStaticText* m_staticTextStatusRightFiles; + wxStaticText* m_staticTextStatusRightBytes; + wxStaticText* m_staticTextFullStatus; + wxPanel* m_panelSearch; + wxBitmapButton* m_bpButtonHideSearch; + wxStaticText* m_staticText101; + wxTextCtrl* m_textCtrlSearchTxt; + wxCheckBox* m_checkBoxMatchCase; + wxPanel* m_panelConfig; + wxBoxSizer* bSizerConfig; + wxBitmapButton* m_bpButtonOpen; + wxBitmapButton* m_bpButtonSave; + wxBitmapButton* m_bpButtonBatchJob; + wxListBox* m_listBoxHistory; + wxPanel* m_panelViewFilter; + wxBoxSizer* bSizerViewFilter; + ToggleButton* m_bpButtonViewTypeSyncAction; + ToggleButton* m_bpButtonShowExcluded; + ToggleButton* m_bpButtonShowDoNothing; + ToggleButton* m_bpButtonShowCreateLeft; + ToggleButton* m_bpButtonShowUpdateLeft; + ToggleButton* m_bpButtonShowDeleteLeft; + ToggleButton* m_bpButtonShowLeftOnly; + ToggleButton* m_bpButtonShowLeftNewer; + ToggleButton* m_bpButtonShowEqual; + ToggleButton* m_bpButtonShowDifferent; + ToggleButton* m_bpButtonShowRightNewer; + ToggleButton* m_bpButtonShowRightOnly; + ToggleButton* m_bpButtonShowDeleteRight; + ToggleButton* m_bpButtonShowUpdateRight; + ToggleButton* m_bpButtonShowCreateRight; + ToggleButton* m_bpButtonShowConflict; + wxPanel* m_panelStatistics; + wxBoxSizer* bSizer1801; + wxStaticBitmap* m_bitmapCreateLeft; + wxStaticText* m_staticTextCreateLeft; + wxStaticBitmap* m_bitmapUpdateLeft; + wxStaticText* m_staticTextUpdateLeft; + wxStaticBitmap* m_bitmapDeleteLeft; + wxStaticText* m_staticTextDeleteLeft; + wxStaticBitmap* m_bitmapData; + wxStaticText* m_staticTextData; + wxStaticBitmap* m_bitmapDeleteRight; + wxStaticText* m_staticTextDeleteRight; + wxStaticBitmap* m_bitmapUpdateRight; + wxStaticText* m_staticTextUpdateRight; + wxStaticBitmap* m_bitmapCreateRight; + wxStaticText* m_staticTextCreateRight; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnConfigNew( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConfigLoad( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConfigSave( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConfigSaveAs( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSaveAsBatchJob( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCompare( wxCommandEvent& event ) { event.Skip(); } + virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuQuit( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuGlobalSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuFindItem( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuExportFileList( wxCommandEvent& event ) { event.Skip(); } + virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuCheckVersionAutomatically( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuAbout( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCmpSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCompSettingsContext( wxMouseEvent& event ) { event.Skip(); } + virtual void OnConfigureFilter( wxCommandEvent& event ) { event.Skip(); } + virtual void OnGlobalFilterContext( wxMouseEvent& event ) { event.Skip(); } + virtual void OnSyncSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncSettingsContext( wxMouseEvent& event ) { event.Skip(); } + virtual void OnAddFolderPair( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRemoveTopFolderPair( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSwapSides( wxCommandEvent& event ) { event.Skip(); } + virtual void OnHideSearchPanel( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSearchGridEnter( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCfgHistoryKeyEvent( wxKeyEvent& event ) { event.Skip(); } + virtual void OnLoadFromHistory( wxCommandEvent& event ) { event.Skip(); } + virtual void OnLoadFromHistoryDoubleClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCfgHistoryRightClick( wxMouseEvent& event ) { event.Skip(); } + virtual void OnToggleViewType( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToggleViewButton( wxCommandEvent& event ) { event.Skip(); } + virtual void OnViewButtonRightClick( wxMouseEvent& event ) { event.Skip(); } + + +public: + wxPanel* m_panelTopLeft; + wxBitmapButton* m_bpButtonRemovePair; + FolderHistoryBox* m_directoryLeft; + wxBitmapButton* m_bpButtonAltCompCfg; + wxBitmapButton* m_bpButtonLocalFilter; + wxBitmapButton* m_bpButtonAltSyncCfg; + wxPanel* m_panelTopRight; + FolderHistoryBox* m_directoryRight; + wxBoxSizer* bSizerStatistics; + wxBoxSizer* bSizerData; + + MainDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 900,600 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL ); + + ~MainDialogGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class CmpCfgDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class CmpCfgDlgGenerated : public wxDialog +class CmpCfgDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panel36; - wxStaticText* m_staticText91; - wxStaticBitmap* m_bitmapByTime; - wxToggleButton* m_toggleBtnTimeSize; - wxStaticBitmap* m_bitmapByContent; - wxToggleButton* m_toggleBtnContent; - wxStaticLine* m_staticline33; - wxStaticText* m_staticText92; - wxChoice* m_choiceHandleSymlinks; - wxHyperlinkCtrl* m_hyperlink24; - wxStaticLine* m_staticline14; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonOkay; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnTimeSizeDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnTimeSize( wxCommandEvent& event ) { event.Skip(); } - virtual void OnContentDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnContent( wxCommandEvent& event ) { event.Skip(); } - virtual void OnChangeErrorHandling( wxCommandEvent& event ) { event.Skip(); } - virtual void OnHelpComparisonSettings( wxHyperlinkEvent& event ) { event.Skip(); } - virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - CmpCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE ); - ~CmpCfgDlgGenerated(); - +private: + +protected: + wxPanel* m_panel36; + wxStaticText* m_staticText91; + wxStaticBitmap* m_bitmapByTime; + wxToggleButton* m_toggleBtnTimeSize; + wxStaticBitmap* m_bitmapByContent; + wxToggleButton* m_toggleBtnContent; + wxStaticLine* m_staticline33; + wxStaticText* m_staticText92; + wxChoice* m_choiceHandleSymlinks; + wxHyperlinkCtrl* m_hyperlink24; + wxStaticLine* m_staticline14; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonOkay; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnTimeSizeDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnTimeSize( wxCommandEvent& event ) { event.Skip(); } + virtual void OnContentDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnContent( wxCommandEvent& event ) { event.Skip(); } + virtual void OnChangeErrorHandling( wxCommandEvent& event ) { event.Skip(); } + virtual void OnHelpComparisonSettings( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + CmpCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE ); + ~CmpCfgDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class SyncCfgDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class SyncCfgDlgGenerated : public wxDialog +class SyncCfgDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panel37; - wxStaticText* m_staticText86; - wxToggleButton* m_toggleBtnTwoWay; - wxStaticText* m_staticTextAutomatic; - wxToggleButton* m_toggleBtnMirror; - wxStaticText* m_staticTextMirror; - wxToggleButton* m_toggleBtnUpdate; - wxStaticText* m_staticTextUpdate; - wxToggleButton* m_toggleBtnCustom; - wxStaticText* m_staticTextCustom; - wxCheckBox* m_checkBoxDetectMove; - wxStaticLine* m_staticline32; - wxStaticText* m_staticText87; - wxToggleButton* m_toggleBtnPermanent; - wxToggleButton* m_toggleBtnRecycler; - wxToggleButton* m_toggleBtnVersioning; - wxPanel* m_panelVersioning; - FolderHistoryBox* m_versioningFolder; - wxButton* m_buttonSelectDirVersioning; - wxBoxSizer* bSizer192; - wxStaticText* m_staticText93; - wxChoice* m_choiceVersioningStyle; - wxStaticText* m_staticTextNamingCvtPart1; - wxStaticText* m_staticTextNamingCvtPart2Bold; - wxStaticText* m_staticTextNamingCvtPart3; - wxHyperlinkCtrl* m_hyperlink17; - wxBoxSizer* bSizerExtraConfig; - wxStaticLine* m_staticline321; - wxBoxSizer* bSizer179; - wxStaticText* m_staticText88; - wxToggleButton* m_toggleBtnErrorIgnore; - wxToggleButton* m_toggleBtnErrorPopup; - wxStaticLine* m_staticline36; - wxBoxSizer* bSizerOnCompletion; - wxStaticText* m_staticText89; - ExecFinishedBox* m_comboBoxExecFinished; - wxStaticLine* m_staticline31; - wxBoxSizer* bSizerConfig; - wxStaticText* m_staticTextHeaderCategory1; - wxStaticText* m_staticTextHeaderAction1; - wxStaticBitmap* m_bitmapDatabase; - wxBoxSizer* sbSizerSyncDirections; - wxBoxSizer* bSizerLeftOnly; - wxStaticBitmap* m_bitmapLeftOnly; - wxBitmapButton* m_bpButtonLeftOnly; - wxBoxSizer* bSizerRightOnly; - wxStaticBitmap* m_bitmapRightOnly; - wxBitmapButton* m_bpButtonRightOnly; - wxBoxSizer* bSizerLeftNewer; - wxStaticBitmap* m_bitmapLeftNewer; - wxBitmapButton* m_bpButtonLeftNewer; - wxBoxSizer* bSizerRightNewer; - wxStaticBitmap* m_bitmapRightNewer; - wxBitmapButton* m_bpButtonRightNewer; - wxBoxSizer* bSizerDifferent; - wxStaticBitmap* m_bitmapDifferent; - wxBitmapButton* m_bpButtonDifferent; - wxBoxSizer* bSizerConflict; - wxStaticBitmap* m_bitmapConflict; - wxBitmapButton* m_bpButtonConflict; - wxStaticLine* m_staticline15; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonOK; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnSyncTwoWayDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnSyncTwoWay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncMirrorDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnSyncMirror( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncUpdateDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnSyncUpdate( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncCustomDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnSyncCustom( wxCommandEvent& event ) { event.Skip(); } - virtual void OnToggleDetectMovedFiles( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDeletionPermanent( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDeletionRecycler( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDeletionVersioning( wxCommandEvent& event ) { event.Skip(); } - virtual void OnParameterChange( wxCommandEvent& event ) { event.Skip(); } - virtual void OnHelpVersioning( wxHyperlinkEvent& event ) { event.Skip(); } - virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); } - virtual void OnExLeftSideOnly( wxCommandEvent& event ) { event.Skip(); } - virtual void OnExRightSideOnly( wxCommandEvent& event ) { event.Skip(); } - virtual void OnLeftNewer( wxCommandEvent& event ) { event.Skip(); } - virtual void OnRightNewer( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDifferent( wxCommandEvent& event ) { event.Skip(); } - virtual void OnConflict( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~SyncCfgDlgGenerated(); - +private: + +protected: + wxPanel* m_panel37; + wxStaticText* m_staticText86; + wxToggleButton* m_toggleBtnTwoWay; + wxStaticText* m_staticTextAutomatic; + wxToggleButton* m_toggleBtnMirror; + wxStaticText* m_staticTextMirror; + wxToggleButton* m_toggleBtnUpdate; + wxStaticText* m_staticTextUpdate; + wxToggleButton* m_toggleBtnCustom; + wxStaticText* m_staticTextCustom; + wxCheckBox* m_checkBoxDetectMove; + wxStaticLine* m_staticline32; + wxStaticText* m_staticText87; + wxToggleButton* m_toggleBtnPermanent; + wxToggleButton* m_toggleBtnRecycler; + wxToggleButton* m_toggleBtnVersioning; + wxPanel* m_panelVersioning; + FolderHistoryBox* m_versioningFolder; + wxButton* m_buttonSelectDirVersioning; + wxBoxSizer* bSizer192; + wxStaticText* m_staticText93; + wxChoice* m_choiceVersioningStyle; + wxStaticText* m_staticTextNamingCvtPart1; + wxStaticText* m_staticTextNamingCvtPart2Bold; + wxStaticText* m_staticTextNamingCvtPart3; + wxHyperlinkCtrl* m_hyperlink17; + wxBoxSizer* bSizerExtraConfig; + wxStaticLine* m_staticline321; + wxBoxSizer* bSizer179; + wxStaticText* m_staticText88; + wxToggleButton* m_toggleBtnErrorIgnore; + wxToggleButton* m_toggleBtnErrorPopup; + wxStaticLine* m_staticline36; + wxBoxSizer* bSizerOnCompletion; + wxStaticText* m_staticText89; + ExecFinishedBox* m_comboBoxExecFinished; + wxStaticLine* m_staticline31; + wxBoxSizer* bSizerConfig; + wxStaticText* m_staticTextHeaderCategory1; + wxStaticText* m_staticTextHeaderAction1; + wxStaticBitmap* m_bitmapDatabase; + wxBoxSizer* sbSizerSyncDirections; + wxBoxSizer* bSizerLeftOnly; + wxStaticBitmap* m_bitmapLeftOnly; + wxBitmapButton* m_bpButtonLeftOnly; + wxBoxSizer* bSizerRightOnly; + wxStaticBitmap* m_bitmapRightOnly; + wxBitmapButton* m_bpButtonRightOnly; + wxBoxSizer* bSizerLeftNewer; + wxStaticBitmap* m_bitmapLeftNewer; + wxBitmapButton* m_bpButtonLeftNewer; + wxBoxSizer* bSizerRightNewer; + wxStaticBitmap* m_bitmapRightNewer; + wxBitmapButton* m_bpButtonRightNewer; + wxBoxSizer* bSizerDifferent; + wxStaticBitmap* m_bitmapDifferent; + wxBitmapButton* m_bpButtonDifferent; + wxBoxSizer* bSizerConflict; + wxStaticBitmap* m_bitmapConflict; + wxBitmapButton* m_bpButtonConflict; + wxStaticLine* m_staticline15; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonOK; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnSyncTwoWayDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnSyncTwoWay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncMirrorDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnSyncMirror( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncUpdateDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnSyncUpdate( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncCustomDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnSyncCustom( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToggleDetectMovedFiles( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDeletionPermanent( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDeletionRecycler( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDeletionVersioning( wxCommandEvent& event ) { event.Skip(); } + virtual void OnParameterChange( wxCommandEvent& event ) { event.Skip(); } + virtual void OnHelpVersioning( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); } + virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); } + virtual void OnExLeftSideOnly( wxCommandEvent& event ) { event.Skip(); } + virtual void OnExRightSideOnly( wxCommandEvent& event ) { event.Skip(); } + virtual void OnLeftNewer( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRightNewer( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDifferent( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConflict( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~SyncCfgDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class SyncConfirmationDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class SyncConfirmationDlgGenerated : public wxDialog +class SyncConfirmationDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapSync; - wxStaticText* m_staticTextHeader; - wxStaticLine* m_staticline371; - wxPanel* m_panelStatistics; - wxStaticLine* m_staticline38; - wxStaticText* m_staticText84; - wxStaticText* m_staticTextVariant; - wxStaticLine* m_staticline14; - wxStaticText* m_staticText83; - wxStaticBitmap* m_bitmapCreateLeft; - wxStaticBitmap* m_bitmapUpdateLeft; - wxStaticBitmap* m_bitmapDeleteLeft; - wxStaticBitmap* m_bitmapData; - wxStaticBitmap* m_bitmapDeleteRight; - wxStaticBitmap* m_bitmapUpdateRight; - wxStaticBitmap* m_bitmapCreateRight; - wxStaticText* m_staticTextCreateLeft; - wxStaticText* m_staticTextUpdateLeft; - wxStaticText* m_staticTextDeleteLeft; - wxStaticText* m_staticTextData; - wxStaticText* m_staticTextDeleteRight; - wxStaticText* m_staticTextUpdateRight; - wxStaticText* m_staticTextCreateRight; - wxStaticLine* m_staticline381; - wxStaticLine* m_staticline12; - wxCheckBox* m_checkBoxDontShowAgain; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonStartSync; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - SyncConfirmationDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("FreeFileSync"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~SyncConfirmationDlgGenerated(); - +private: + +protected: + wxStaticBitmap* m_bitmapSync; + wxStaticText* m_staticTextHeader; + wxStaticLine* m_staticline371; + wxPanel* m_panelStatistics; + wxStaticLine* m_staticline38; + wxStaticText* m_staticText84; + wxStaticText* m_staticTextVariant; + wxStaticLine* m_staticline14; + wxStaticText* m_staticText83; + wxStaticBitmap* m_bitmapCreateLeft; + wxStaticBitmap* m_bitmapUpdateLeft; + wxStaticBitmap* m_bitmapDeleteLeft; + wxStaticBitmap* m_bitmapData; + wxStaticBitmap* m_bitmapDeleteRight; + wxStaticBitmap* m_bitmapUpdateRight; + wxStaticBitmap* m_bitmapCreateRight; + wxStaticText* m_staticTextCreateLeft; + wxStaticText* m_staticTextUpdateLeft; + wxStaticText* m_staticTextDeleteLeft; + wxStaticText* m_staticTextData; + wxStaticText* m_staticTextDeleteRight; + wxStaticText* m_staticTextUpdateRight; + wxStaticText* m_staticTextCreateRight; + wxStaticLine* m_staticline381; + wxStaticLine* m_staticline12; + wxCheckBox* m_checkBoxDontShowAgain; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonStartSync; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + SyncConfirmationDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("FreeFileSync"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~SyncConfirmationDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class FolderPairPanelGenerated /////////////////////////////////////////////////////////////////////////////// -class FolderPairPanelGenerated : public wxPanel +class FolderPairPanelGenerated : public wxPanel { - private: - - protected: - wxButton* m_buttonSelectDirLeft; - wxButton* m_buttonSelectDirRight; - - public: - wxPanel* m_panelLeft; - wxBitmapButton* m_bpButtonRemovePair; - FolderHistoryBox* m_directoryLeft; - wxPanel* m_panel20; - wxBitmapButton* m_bpButtonAltCompCfg; - wxBitmapButton* m_bpButtonLocalFilter; - wxBitmapButton* m_bpButtonAltSyncCfg; - wxPanel* m_panelRight; - FolderHistoryBox* m_directoryRight; - - FolderPairPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0 ); - ~FolderPairPanelGenerated(); - +private: + +protected: + wxButton* m_buttonSelectDirLeft; + wxButton* m_buttonSelectDirRight; + +public: + wxPanel* m_panelLeft; + wxBitmapButton* m_bpButtonRemovePair; + FolderHistoryBox* m_directoryLeft; + wxPanel* m_panel20; + wxBitmapButton* m_bpButtonAltCompCfg; + wxBitmapButton* m_bpButtonLocalFilter; + wxBitmapButton* m_bpButtonAltSyncCfg; + wxPanel* m_panelRight; + FolderHistoryBox* m_directoryRight; + + FolderPairPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0 ); + ~FolderPairPanelGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class CompareProgressDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class CompareProgressDlgGenerated : public wxPanel +class CompareProgressDlgGenerated : public wxPanel { - private: - - protected: - wxTextCtrl* m_textCtrlStatus; - wxGauge* m_gauge2; - wxBoxSizer* bSizer42; - wxBoxSizer* bSizerFilesFound; - wxStaticText* m_staticText321; - wxStaticText* m_staticTextScanned; - wxBoxSizer* bSizerFilesRemaining; - wxStaticText* m_staticText46; - wxStaticText* m_staticTextFilesRemaining; - wxStaticText* m_staticTextDataRemaining; - wxBoxSizer* sSizerSpeed; - wxStaticText* m_staticText104; - wxStaticText* m_staticTextSpeed; - wxBoxSizer* sSizerTimeRemaining; - wxStaticText* m_staticTextTimeRemFixed; - wxStaticText* m_staticTextRemTime; - wxBoxSizer* sSizerTimeElapsed; - wxStaticText* m_staticTextTimeElapsed; - - public: - - CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxRAISED_BORDER ); - ~CompareProgressDlgGenerated(); - +private: + +protected: + wxTextCtrl* m_textCtrlStatus; + wxGauge* m_gauge2; + wxBoxSizer* bSizer42; + wxBoxSizer* bSizerFilesFound; + wxStaticText* m_staticText321; + wxStaticText* m_staticTextScanned; + wxBoxSizer* bSizerFilesRemaining; + wxStaticText* m_staticText46; + wxStaticText* m_staticTextFilesRemaining; + wxStaticText* m_staticTextDataRemaining; + wxBoxSizer* sSizerSpeed; + wxStaticText* m_staticText104; + wxStaticText* m_staticTextSpeed; + wxBoxSizer* sSizerTimeRemaining; + wxStaticText* m_staticTextTimeRemFixed; + wxStaticText* m_staticTextRemTime; + wxBoxSizer* sSizerTimeElapsed; + wxStaticText* m_staticTextTimeElapsed; + +public: + + CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxRAISED_BORDER ); + ~CompareProgressDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class SyncProgressPanelGenerated /////////////////////////////////////////////////////////////////////////////// -class SyncProgressPanelGenerated : public wxPanel +class SyncProgressPanelGenerated : public wxPanel { - private: - - protected: - wxBoxSizer* bSizer42; - wxBoxSizer* bSizer171; - wxStaticText* m_staticText87; - - public: - wxBoxSizer* bSizerRoot; - wxStaticBitmap* m_bitmapStatus; - wxStaticText* m_staticTextPhase; - wxAnimationCtrl* m_animCtrlSyncing; - wxBitmapButton* m_bpButtonMinimizeToTray; - wxBoxSizer* bSizerStatusText; - wxStaticText* m_staticTextStatus; - wxPanel* m_panelProgress; - wxPanel* m_panelItemsProcessed; - wxStaticText* m_staticTextProcessedObj; - wxStaticText* m_staticTextDataProcessed; - wxPanel* m_panelItemsRemaining; - wxStaticText* m_staticTextRemainingObj; - wxStaticText* m_staticTextDataRemaining; - wxPanel* m_panelTimeRemaining; - wxStaticText* m_staticTextRemTime; - wxStaticText* m_staticTextTimeElapsed; - zen::Graph2D* m_panelGraphBytes; - zen::Graph2D* m_panelGraphItems; - wxNotebook* m_notebookResult; - wxStaticLine* m_staticlineFooter; - wxBoxSizer* bSizerStdButtons; - wxBoxSizer* bSizerExecFinished; - ExecFinishedBox* m_comboBoxExecFinished; - wxButton* m_buttonClose; - wxButton* m_buttonPause; - wxButton* m_buttonStop; - - SyncProgressPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL ); - ~SyncProgressPanelGenerated(); - +private: + +protected: + wxBoxSizer* bSizer42; + wxBoxSizer* bSizer171; + wxStaticText* m_staticText87; + +public: + wxBoxSizer* bSizerRoot; + wxStaticBitmap* m_bitmapStatus; + wxStaticText* m_staticTextPhase; + wxAnimationCtrl* m_animCtrlSyncing; + wxBitmapButton* m_bpButtonMinimizeToTray; + wxBoxSizer* bSizerStatusText; + wxStaticText* m_staticTextStatus; + wxPanel* m_panelProgress; + wxPanel* m_panelItemsProcessed; + wxStaticText* m_staticTextProcessedObj; + wxStaticText* m_staticTextDataProcessed; + wxPanel* m_panelItemsRemaining; + wxStaticText* m_staticTextRemainingObj; + wxStaticText* m_staticTextDataRemaining; + wxPanel* m_panelTimeRemaining; + wxStaticText* m_staticTextRemTime; + wxStaticText* m_staticTextTimeElapsed; + zen::Graph2D* m_panelGraphBytes; + zen::Graph2D* m_panelGraphItems; + wxNotebook* m_notebookResult; + wxStaticLine* m_staticlineFooter; + wxBoxSizer* bSizerStdButtons; + wxBoxSizer* bSizerExecFinished; + ExecFinishedBox* m_comboBoxExecFinished; + wxButton* m_buttonClose; + wxButton* m_buttonPause; + wxButton* m_buttonStop; + + SyncProgressPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL ); + ~SyncProgressPanelGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class LogPanelGenerated /////////////////////////////////////////////////////////////////////////////// -class LogPanelGenerated : public wxPanel +class LogPanelGenerated : public wxPanel { - private: - - protected: - ToggleButton* m_bpButtonErrors; - ToggleButton* m_bpButtonWarnings; - ToggleButton* m_bpButtonInfo; - wxStaticLine* m_staticline13; - zen::Grid* m_gridMessages; - - // Virtual event handlers, overide them in your derived class - virtual void OnErrors( wxCommandEvent& event ) { event.Skip(); } - virtual void OnWarnings( wxCommandEvent& event ) { event.Skip(); } - virtual void OnInfo( wxCommandEvent& event ) { event.Skip(); } - - - public: - - LogPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL ); - ~LogPanelGenerated(); - +private: + +protected: + ToggleButton* m_bpButtonErrors; + ToggleButton* m_bpButtonWarnings; + ToggleButton* m_bpButtonInfo; + wxStaticLine* m_staticline13; + zen::Grid* m_gridMessages; + + // Virtual event handlers, overide them in your derived class + virtual void OnErrors( wxCommandEvent& event ) { event.Skip(); } + virtual void OnWarnings( wxCommandEvent& event ) { event.Skip(); } + virtual void OnInfo( wxCommandEvent& event ) { event.Skip(); } + + +public: + + LogPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL ); + ~LogPanelGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class BatchDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class BatchDlgGenerated : public wxDialog +class BatchDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapBatchJob; - wxStaticText* m_staticTextDescr; - wxStaticLine* m_staticline18; - wxPanel* m_panel35; - wxStaticText* m_staticText82; - wxToggleButton* m_toggleBtnErrorIgnore; - wxToggleButton* m_toggleBtnErrorPopup; - wxToggleButton* m_toggleBtnErrorStop; - wxStaticLine* m_staticline26; - wxCheckBox* m_checkBoxShowProgress; - wxStaticText* m_staticText81; - ExecFinishedBox* m_comboBoxExecFinished; - wxStaticLine* m_staticline25; - wxCheckBox* m_checkBoxGenerateLogfile; - wxPanel* m_panelLogfile; - wxButton* m_buttonSelectLogfileDir; - wxCheckBox* m_checkBoxLogfilesLimit; - wxSpinCtrl* m_spinCtrlLogfileLimit; - wxHyperlinkCtrl* m_hyperlink17; - wxStaticLine* m_staticline13; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonSaveAs; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorStop( wxCommandEvent& event ) { event.Skip(); } - virtual void OnToggleGenerateLogfile( wxCommandEvent& event ) { event.Skip(); } - virtual void OnToggleLogfilesLimit( wxCommandEvent& event ) { event.Skip(); } - virtual void OnHelpScheduleBatch( wxHyperlinkEvent& event ) { event.Skip(); } - virtual void OnSaveBatchJob( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - FolderHistoryBox* m_logfileDir; - - BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Save as Batch Job"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - ~BatchDlgGenerated(); - +private: + +protected: + wxStaticBitmap* m_bitmapBatchJob; + wxStaticText* m_staticTextDescr; + wxStaticLine* m_staticline18; + wxPanel* m_panel35; + wxStaticText* m_staticText82; + wxToggleButton* m_toggleBtnErrorIgnore; + wxToggleButton* m_toggleBtnErrorPopup; + wxToggleButton* m_toggleBtnErrorStop; + wxStaticLine* m_staticline26; + wxCheckBox* m_checkBoxShowProgress; + wxStaticText* m_staticText81; + ExecFinishedBox* m_comboBoxExecFinished; + wxStaticLine* m_staticline25; + wxCheckBox* m_checkBoxGenerateLogfile; + wxPanel* m_panelLogfile; + wxButton* m_buttonSelectLogfileDir; + wxCheckBox* m_checkBoxLogfilesLimit; + wxSpinCtrl* m_spinCtrlLogfileLimit; + wxHyperlinkCtrl* m_hyperlink17; + wxStaticLine* m_staticline13; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonSaveAs; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); } + virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); } + virtual void OnErrorStop( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToggleGenerateLogfile( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToggleLogfilesLimit( wxCommandEvent& event ) { event.Skip(); } + virtual void OnHelpScheduleBatch( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnSaveBatchJob( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + FolderHistoryBox* m_logfileDir; + + BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Save as Batch Job"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~BatchDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class DeleteDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class DeleteDlgGenerated : public wxDialog +class DeleteDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapDeleteType; - wxStaticText* m_staticTextHeader; - wxStaticLine* m_staticline91; - wxPanel* m_panel31; - wxStaticLine* m_staticline42; - wxTextCtrl* m_textCtrlFileList; - wxStaticLine* m_staticline9; - wxBoxSizer* bSizerStdButtons; - wxCheckBox* m_checkBoxUseRecycler; - wxCheckBox* m_checkBoxDeleteBothSides; - wxButton* m_buttonOK; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnUseRecycler( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDelOnBothSides( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOK( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - DeleteDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Delete Items"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); - ~DeleteDlgGenerated(); - +private: + +protected: + wxStaticBitmap* m_bitmapDeleteType; + wxStaticText* m_staticTextHeader; + wxStaticLine* m_staticline91; + wxPanel* m_panel31; + wxStaticLine* m_staticline42; + wxTextCtrl* m_textCtrlFileList; + wxStaticLine* m_staticline9; + wxBoxSizer* bSizerStdButtons; + wxCheckBox* m_checkBoxUseRecycler; + wxCheckBox* m_checkBoxDeleteBothSides; + wxButton* m_buttonOK; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnUseRecycler( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDelOnBothSides( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOK( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + DeleteDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Delete Items"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); + ~DeleteDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class FilterDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class FilterDlgGenerated : public wxDialog +class FilterDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapFilter; - wxStaticText* m_staticText44; - wxStaticLine* m_staticline17; - wxPanel* m_panel38; - wxStaticBitmap* m_bitmapInclude; - wxStaticText* m_staticText78; - wxTextCtrl* m_textCtrlInclude; - wxStaticLine* m_staticline22; - wxStaticBitmap* m_bitmapExclude; - wxStaticText* m_staticText77; - wxHyperlinkCtrl* m_hyperlink17; - wxTextCtrl* m_textCtrlExclude; - wxStaticLine* m_staticline24; - wxStaticBitmap* m_bitmapFilterDate; - wxStaticText* m_staticText79; - wxSpinCtrl* m_spinCtrlTimespan; - wxChoice* m_choiceUnitTimespan; - wxStaticLine* m_staticline23; - wxStaticBitmap* m_bitmapFilterSize; - wxStaticText* m_staticText80; - wxStaticText* m_staticText101; - wxSpinCtrl* m_spinCtrlMinSize; - wxChoice* m_choiceUnitMinSize; - wxStaticText* m_staticText102; - wxSpinCtrl* m_spinCtrlMaxSize; - wxChoice* m_choiceUnitMaxSize; - wxStaticLine* m_staticline16; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonClear; - wxButton* m_buttonOk; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnUpdateNameFilter( wxCommandEvent& event ) { event.Skip(); } - virtual void OnHelpShowExamples( wxHyperlinkEvent& event ) { event.Skip(); } - virtual void OnUpdateChoice( wxCommandEvent& event ) { event.Skip(); } - virtual void OnClear( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - FilterDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); - ~FilterDlgGenerated(); - +private: + +protected: + wxStaticBitmap* m_bitmapFilter; + wxStaticText* m_staticText44; + wxStaticLine* m_staticline17; + wxPanel* m_panel38; + wxStaticBitmap* m_bitmapInclude; + wxStaticText* m_staticText78; + wxTextCtrl* m_textCtrlInclude; + wxStaticLine* m_staticline22; + wxStaticBitmap* m_bitmapExclude; + wxStaticText* m_staticText77; + wxHyperlinkCtrl* m_hyperlink17; + wxTextCtrl* m_textCtrlExclude; + wxStaticLine* m_staticline24; + wxStaticBitmap* m_bitmapFilterDate; + wxStaticText* m_staticText79; + wxSpinCtrl* m_spinCtrlTimespan; + wxChoice* m_choiceUnitTimespan; + wxStaticLine* m_staticline23; + wxStaticBitmap* m_bitmapFilterSize; + wxStaticText* m_staticText80; + wxStaticText* m_staticText101; + wxSpinCtrl* m_spinCtrlMinSize; + wxChoice* m_choiceUnitMinSize; + wxStaticText* m_staticText102; + wxSpinCtrl* m_spinCtrlMaxSize; + wxChoice* m_choiceUnitMaxSize; + wxStaticLine* m_staticline16; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonClear; + wxButton* m_buttonOk; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnUpdateNameFilter( wxCommandEvent& event ) { event.Skip(); } + virtual void OnHelpShowExamples( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnUpdateChoice( wxCommandEvent& event ) { event.Skip(); } + virtual void OnClear( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + FilterDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); + ~FilterDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class GlobalSettingsDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class GlobalSettingsDlgGenerated : public wxDialog +class GlobalSettingsDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapSettings; - wxStaticText* m_staticText44; - wxStaticLine* m_staticline20; - wxPanel* m_panel39; - wxCheckBox* m_checkBoxFailSafe; - wxStaticText* m_staticText91; - wxBoxSizer* bSizerLockedFiles; - wxCheckBox* m_checkBoxCopyLocked; - wxStaticText* m_staticText92; - wxCheckBox* m_checkBoxCopyPermissions; - wxStaticText* m_staticText93; - wxStaticLine* m_staticline39; - wxStaticText* m_staticText95; - wxStaticText* m_staticText96; - wxSpinCtrl* m_spinCtrlAutoRetryCount; - wxStaticText* m_staticTextAutoRetryDelay; - wxSpinCtrl* m_spinCtrlAutoRetryDelay; - wxStaticLine* m_staticline191; - wxStaticText* m_staticText85; - wxGrid* m_gridCustomCommand; - wxBitmapButton* m_bpButtonAddRow; - wxBitmapButton* m_bpButtonRemoveRow; - wxHyperlinkCtrl* m_hyperlink17; - wxStaticLine* m_staticline192; - zen::BitmapTextButton* m_buttonResetDialogs; - wxStaticLine* m_staticline40; - wxStaticLine* m_staticline36; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonDefault; - wxButton* m_buttonOkay; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnToggleAutoRetryCount( wxCommandEvent& event ) { event.Skip(); } - virtual void OnAddRow( wxCommandEvent& event ) { event.Skip(); } - virtual void OnRemoveRow( wxCommandEvent& event ) { event.Skip(); } - virtual void OnHelpShowExamples( wxHyperlinkEvent& event ) { event.Skip(); } - virtual void OnResetDialogs( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - GlobalSettingsDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Global Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - ~GlobalSettingsDlgGenerated(); - +private: + +protected: + wxStaticBitmap* m_bitmapSettings; + wxStaticText* m_staticText44; + wxStaticLine* m_staticline20; + wxPanel* m_panel39; + wxCheckBox* m_checkBoxFailSafe; + wxStaticText* m_staticText91; + wxBoxSizer* bSizerLockedFiles; + wxCheckBox* m_checkBoxCopyLocked; + wxStaticText* m_staticText92; + wxCheckBox* m_checkBoxCopyPermissions; + wxStaticText* m_staticText93; + wxStaticLine* m_staticline39; + wxStaticText* m_staticText95; + wxStaticText* m_staticText96; + wxSpinCtrl* m_spinCtrlAutoRetryCount; + wxStaticText* m_staticTextAutoRetryDelay; + wxSpinCtrl* m_spinCtrlAutoRetryDelay; + wxStaticLine* m_staticline191; + wxStaticText* m_staticText85; + wxGrid* m_gridCustomCommand; + wxBitmapButton* m_bpButtonAddRow; + wxBitmapButton* m_bpButtonRemoveRow; + wxHyperlinkCtrl* m_hyperlink17; + wxStaticLine* m_staticline192; + zen::BitmapTextButton* m_buttonResetDialogs; + wxStaticLine* m_staticline40; + wxStaticLine* m_staticline36; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonDefault; + wxButton* m_buttonOkay; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnToggleAutoRetryCount( wxCommandEvent& event ) { event.Skip(); } + virtual void OnAddRow( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRemoveRow( wxCommandEvent& event ) { event.Skip(); } + virtual void OnHelpShowExamples( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnResetDialogs( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + GlobalSettingsDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Global Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~GlobalSettingsDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class TooltipDialogGenerated /////////////////////////////////////////////////////////////////////////////// -class TooltipDialogGenerated : public wxDialog +class TooltipDialogGenerated : public wxDialog { - private: - - protected: - - public: - wxStaticBitmap* m_bitmapLeft; - wxStaticText* m_staticTextMain; - - TooltipDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~TooltipDialogGenerated(); - +private: + +protected: + +public: + wxStaticBitmap* m_bitmapLeft; + wxStaticText* m_staticTextMain; + + TooltipDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~TooltipDialogGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class SelectTimespanDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class SelectTimespanDlgGenerated : public wxDialog +class SelectTimespanDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panel35; - wxCalendarCtrl* m_calendarFrom; - wxCalendarCtrl* m_calendarTo; - wxStaticLine* m_staticline21; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonOkay; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnChangeSelectionFrom( wxCalendarEvent& event ) { event.Skip(); } - virtual void OnChangeSelectionTo( wxCalendarEvent& event ) { event.Skip(); } - virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - SelectTimespanDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select Time Span"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~SelectTimespanDlgGenerated(); - +private: + +protected: + wxPanel* m_panel35; + wxCalendarCtrl* m_calendarFrom; + wxCalendarCtrl* m_calendarTo; + wxStaticLine* m_staticline21; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonOkay; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnChangeSelectionFrom( wxCalendarEvent& event ) { event.Skip(); } + virtual void OnChangeSelectionTo( wxCalendarEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + SelectTimespanDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select Time Span"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~SelectTimespanDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class AboutDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class AboutDlgGenerated : public wxDialog +class AboutDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panel41; - wxStaticBitmap* m_bitmapLogo; - wxStaticLine* m_staticline341; - wxStaticText* m_staticText96; - wxHyperlinkCtrl* m_hyperlink11; - wxHyperlinkCtrl* m_hyperlink9; - wxHyperlinkCtrl* m_hyperlink10; - wxHyperlinkCtrl* m_hyperlink7; - wxHyperlinkCtrl* m_hyperlink14; - wxHyperlinkCtrl* m_hyperlink15; - wxHyperlinkCtrl* m_hyperlink13; - wxHyperlinkCtrl* m_hyperlink16; - wxHyperlinkCtrl* m_hyperlink12; - wxHyperlinkCtrl* m_hyperlink18; - wxPanel* m_panelDonate; - wxPanel* m_panel39; - wxAnimationCtrl* m_animCtrlWink; - wxStaticText* m_staticText83; - wxButton* m_buttonDonate; - wxStaticText* m_staticText94; - wxStaticBitmap* m_bitmap9; - wxHyperlinkCtrl* m_hyperlink1; - wxStaticBitmap* m_bitmap10; - wxHyperlinkCtrl* m_hyperlink2; - wxStaticLine* m_staticline34; - wxStaticText* m_staticText93; - wxStaticBitmap* m_bitmap13; - wxHyperlinkCtrl* m_hyperlink5; - wxStaticLine* m_staticline37; - wxStaticText* m_staticText54; - wxScrolledWindow* m_scrolledWindowTranslators; - wxFlexGridSizer* fgSizerTranslators; - wxStaticLine* m_staticline36; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonClose; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnDonate( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOK( wxCommandEvent& event ) { event.Skip(); } - - - public: - - AboutDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~AboutDlgGenerated(); - +private: + +protected: + wxPanel* m_panel41; + wxStaticBitmap* m_bitmapLogo; + wxStaticLine* m_staticline341; + wxStaticText* m_staticText96; + wxHyperlinkCtrl* m_hyperlink11; + wxHyperlinkCtrl* m_hyperlink9; + wxHyperlinkCtrl* m_hyperlink10; + wxHyperlinkCtrl* m_hyperlink7; + wxHyperlinkCtrl* m_hyperlink14; + wxHyperlinkCtrl* m_hyperlink15; + wxHyperlinkCtrl* m_hyperlink13; + wxHyperlinkCtrl* m_hyperlink16; + wxHyperlinkCtrl* m_hyperlink12; + wxHyperlinkCtrl* m_hyperlink18; + wxPanel* m_panelDonate; + wxPanel* m_panel39; + wxAnimationCtrl* m_animCtrlWink; + wxStaticText* m_staticText83; + wxButton* m_buttonDonate; + wxStaticText* m_staticText94; + wxStaticBitmap* m_bitmap9; + wxHyperlinkCtrl* m_hyperlink1; + wxStaticBitmap* m_bitmap10; + wxHyperlinkCtrl* m_hyperlink2; + wxStaticLine* m_staticline34; + wxStaticText* m_staticText93; + wxStaticBitmap* m_bitmap13; + wxHyperlinkCtrl* m_hyperlink5; + wxStaticLine* m_staticline37; + wxStaticText* m_staticText54; + wxScrolledWindow* m_scrolledWindowTranslators; + wxFlexGridSizer* fgSizerTranslators; + wxStaticLine* m_staticline36; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonClose; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnDonate( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOK( wxCommandEvent& event ) { event.Skip(); } + + +public: + + AboutDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~AboutDlgGenerated(); + }; #endif //__GUI_GENERATED_H__ diff --git a/FreeFileSync/Source/ui/gui_status_handler.cpp b/FreeFileSync/Source/ui/gui_status_handler.cpp index 0db000c4..95a0da00 100644 --- a/FreeFileSync/Source/ui/gui_status_handler.cpp +++ b/FreeFileSync/Source/ui/gui_status_handler.cpp @@ -90,6 +90,8 @@ void CompareStatusHandler::initNewPhase(int objectsTotal, Int64 dataTotal, Phase } break; } + + forceUiRefresh(); //throw ?; OS X needs a full yield to update GUI and get rid of "dummy" texts } @@ -303,6 +305,8 @@ void SyncStatusHandler::initNewPhase(int objectsTotal, Int64 dataTotal, Phase ph StatusHandler::initNewPhase(objectsTotal, dataTotal, phaseID); if (progressDlg) progressDlg->initNewPhase(); //call after "StatusHandler::initNewPhase" + + forceUiRefresh(); //throw ?; OS X needs a full yield to update GUI and get rid of "dummy" texts } diff --git a/FreeFileSync/Source/ui/main_dlg.cpp b/FreeFileSync/Source/ui/main_dlg.cpp index d4a76765..a9d5064a 100644 --- a/FreeFileSync/Source/ui/main_dlg.cpp +++ b/FreeFileSync/Source/ui/main_dlg.cpp @@ -21,7 +21,6 @@ #include <wx+/bitmap_button.h> #include <wx+/app_main.h> #include <wx+/toggle_button.h> -#include <wx+/mouse_move_dlg.h> #include <wx+/no_flicker.h> #include <wx+/rtl.h> #include <wx+/font_size.h> @@ -37,7 +36,6 @@ #include "batch_config.h" #include "triple_splitter.h" #include "app_icon.h" -//#include "config_history.h" #include "../comparison.h" #include "../synchronization.h" #include "../algorithm.h" @@ -47,7 +45,10 @@ #include "../lib/lock_holder.h" #include "../lib/localization.h" -#ifdef ZEN_MAC +#ifdef ZEN_WIN +#include <wx+/mouse_move_dlg.h> + +#elif defined ZEN_MAC #include <ApplicationServices/ApplicationServices.h> #endif @@ -101,7 +102,7 @@ public: using namespace xmlAccess; try { - switch (getXmlType(utfCvrtTo<Zstring>(filename))) //throw FfsXmlError + switch (getXmlType(utfCvrtTo<Zstring>(filename))) //throw FileError { case XML_TYPE_GUI: case XML_TYPE_BATCH: @@ -111,7 +112,7 @@ public: break; } } - catch (const FfsXmlError&) {} + catch (const FileError&) {} return false; })) @@ -336,9 +337,8 @@ void updateTopButton(wxBitmapButton& btn, const wxBitmap& bmp, const wxString& v minSize.x = std::max(minSize.x, 180); btn.SetMinSize(minSize); - btn.SetBitmapLabel(wxBitmap(dynImage)); - //SetLabel() calls confuse wxBitmapButton in the disabled state and it won't show the image! workaround: - btn.SetBitmapDisabled(wxBitmap(dynImage.ConvertToDisabled())); + + setImage(btn, wxBitmap(dynImage)); } //################################################################################################################################## @@ -347,18 +347,19 @@ xmlAccess::XmlGlobalSettings retrieveGlobalCfgFromDisk() //blocks on GUI on erro { using namespace xmlAccess; XmlGlobalSettings globalCfg; - try - { - if (fileExists(getGlobalConfigFile())) - readConfig(globalCfg); //throw FfsXmlError - //else: globalCfg already has default values - } - catch (const FfsXmlError& e) - { - if (e.getSeverity() != FfsXmlError::WARNING) //ignore parsing errors: should be migration problems only *cross-fingers* + + if (fileExists(getGlobalConfigFile())) //else: globalCfg already has default values + try + { + std::wstring warningMsg; + readConfig(getGlobalConfigFile(), globalCfg, warningMsg); //throw FileError + + assert(warningMsg.empty()); //ignore parsing errors: should be migration problems only *cross-fingers* + } + catch (const FileError& e) + { showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); //no parent window: main dialog not yet created! - assert(false); - } + } return globalCfg; } } @@ -375,10 +376,9 @@ void MainDialog::create() //check existence of all files in parallel: RunUntilFirstHit<NullType> findFirstMissing; - std::for_each(filenames.begin(), filenames.end(), [&](const Zstring& filename) - { - findFirstMissing.addJob([=] { return filename.empty() /*ever empty??*/ || !fileExists(filename) ? zen::make_unique<NullType>() : nullptr; }); - }); + for (const Zstring& filename : filenames) + findFirstMissing.addJob([filename] { return filename.empty() /*ever empty??*/ || !fileExists(filename) ? zen::make_unique<NullType>() : nullptr; }); + //potentially slow network access: give all checks 500ms to finish const bool allFilesExist = findFirstMissing.timedWait(boost::posix_time::milliseconds(500)) && //false: time elapsed !findFirstMissing.get(); //no missing @@ -406,15 +406,16 @@ void MainDialog::create() else try { - readAnyConfig(filenames, guiCfg); //throw FfsXmlError + std::wstring warningMsg; + readAnyConfig(filenames, guiCfg, warningMsg); //throw FileError + + if (!warningMsg.empty()) + showNotificationDialog(nullptr, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(warningMsg)); + //what about simulating changed config on parsing errors???? } - catch (const FfsXmlError& e) + catch (const FileError& e) { - if (e.getSeverity() == FfsXmlError::WARNING) - showNotificationDialog(nullptr, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(e.toString())); - //what about simulating changed config on parsing errors???? - else - showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); + showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } //------------------------------------------------------------------------------------------ @@ -763,21 +764,23 @@ MainDialog::MainDialog(const xmlAccess::XmlGuiConfig& guiCfg, MainDialog::~MainDialog() { + using namespace xmlAccess; + try //save "GlobalSettings.xml" { - xmlAccess::writeConfig(getGlobalCfgBeforeExit()); //throw FfsXmlError + writeConfig(getGlobalCfgBeforeExit(), getGlobalConfigFile()); //throw FileError } - catch (const xmlAccess::FfsXmlError& e) + catch (const FileError& e) { showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } try //save "LastRun.ffs_gui" { - xmlAccess::writeConfig(getConfig(), lastRunConfigName()); //throw FfsXmlError + writeConfig(getConfig(), lastRunConfigName()); //throw FileError } //don't annoy users on read-only drives: it's enough to show a single error message when saving global config - catch (const xmlAccess::FfsXmlError&) {} + catch (const FileError&) {} //important! event source wxTheApp is NOT dependent on this instance -> disconnect! wxTheApp->Disconnect(wxEVT_KEY_DOWN, wxKeyEventHandler(MainDialog::OnGlobalKeyEvent), nullptr, this); @@ -800,11 +803,13 @@ MainDialog::~MainDialog() void MainDialog::onQueryEndSession() { - try { xmlAccess::writeConfig(getGlobalCfgBeforeExit()); } - catch (const xmlAccess::FfsXmlError&) {} //we try our best do to something useful in this extreme situation - no reason to notify or even log errors here! + using namespace xmlAccess; - try { xmlAccess::writeConfig(getConfig(), lastRunConfigName()); } - catch (const xmlAccess::FfsXmlError&) {} + try { writeConfig(getGlobalCfgBeforeExit(), getGlobalConfigFile()); } + catch (const FileError&) {} //we try our best do to something useful in this extreme situation - no reason to notify or even log errors here! + + try { writeConfig(getConfig(), lastRunConfigName()); } + catch (const FileError&) {} } @@ -1078,21 +1083,21 @@ std::vector<FileSystemObject*> MainDialog::getTreeSelection() const if (std::unique_ptr<TreeView::Node> node = treeDataView->getLine(row)) { if (auto root = dynamic_cast<const TreeView::RootNode*>(node.get())) - { - //selecting root means "select everything", *ignoring* current view filter! - BaseDirPair& baseDir = root->baseDirObj_; + { + //selecting root means "select everything", *ignoring* current view filter! + BaseDirPair& baseDir = root->baseDirObj_; std::vector<FileSystemObject*> dirsFilesAndLinks; for (FileSystemObject& fsObj : baseDir.refSubDirs()) //no need to explicitly add child elements! - dirsFilesAndLinks.push_back(&fsObj); + dirsFilesAndLinks.push_back(&fsObj); for (FileSystemObject& fsObj : baseDir.refSubFiles()) - dirsFilesAndLinks.push_back(&fsObj); + dirsFilesAndLinks.push_back(&fsObj); for (FileSystemObject& fsObj : baseDir.refSubLinks()) - dirsFilesAndLinks.push_back(&fsObj); + dirsFilesAndLinks.push_back(&fsObj); - vector_append(output, dirsFilesAndLinks); - } + vector_append(output, dirsFilesAndLinks); + } else if (auto dir = dynamic_cast<const TreeView::DirNode*>(node.get())) output.push_back(&(dir->dirObj_)); else if (auto file = dynamic_cast<const TreeView::FilesNode*>(node.get())) @@ -1523,6 +1528,7 @@ void MainDialog::disableAllElements(bool enableAbort) m_menubar1->EnableTop(1, false); m_menubar1->EnableTop(2, false); m_bpButtonCmpConfig ->Disable(); + m_bpButtonFilter ->Disable(); m_bpButtonSyncConfig ->Disable(); m_buttonSync ->Disable(); m_panelDirectoryPairs->Disable(); @@ -1557,6 +1563,7 @@ void MainDialog::enableAllElements() m_menubar1->EnableTop(1, true); m_menubar1->EnableTop(2, true); m_bpButtonCmpConfig ->Enable(); + m_bpButtonFilter ->Enable(); m_bpButtonSyncConfig ->Enable(); m_buttonSync ->Enable(); m_panelDirectoryPairs->Enable(); @@ -1697,9 +1704,9 @@ void MainDialog::onTreeButtonEvent(wxKeyEvent& event) { const std::vector<FileSystemObject*>& selection = getTreeSelection(); if (!selection.empty()) - setFilterManually(selection, m_bpButtonShowExcluded->isActive() && !selection[0]->isActive()); - //always exclude items if "m_bpButtonShowExcluded is unchecked" => yes, it's possible to have already unchecked items in selection, so we need to overwrite: - //e.g. select root node while the first item returned is not shown on grid! + setFilterManually(selection, m_bpButtonShowExcluded->isActive() && !selection[0]->isActive()); + //always exclude items if "m_bpButtonShowExcluded is unchecked" => yes, it's possible to have already unchecked items in selection, so we need to overwrite: + //e.g. select root node while the first item returned is not shown on grid! } return; @@ -2552,19 +2559,26 @@ void MainDialog::addFileToCfgHistory(const std::vector<Zstring>& filenames) } else //insert { + const wxString lastSessionLabel = L"<" + _("Last session") + L">"; + wxString label; unsigned int newPos = 0; if (EqualFilename()(filename, lastRunConfigName())) - label = L"<" + _("Last session") + L">"; + label = lastSessionLabel; else { //workaround wxWidgets 2.9 bug on GTK screwing up the client data if the list box is sorted: label = getFormattedHistoryElement(filename); + //"linear-time insertion sort": for (; newPos < m_listBoxHistory->GetCount(); ++newPos) - if (label.CmpNoCase(m_listBoxHistory->GetString(newPos)) < 0) - break; + { + const wxString& itemLabel = m_listBoxHistory->GetString(newPos); + if (itemLabel != lastSessionLabel) //last session label should always be at top position! + if (label.CmpNoCase(itemLabel) < 0) + break; + } } assert(!m_listBoxHistory->IsSorted()); @@ -2686,7 +2700,7 @@ void MainDialog::OnConfigSave(wxCommandEvent& event) else try { - switch (getXmlType(activeCfgFilename)) //throw FfsXmlError + switch (getXmlType(activeCfgFilename)) //throw FileError { case XML_TYPE_GUI: trySaveConfig(&activeCfgFilename); @@ -2701,7 +2715,7 @@ void MainDialog::OnConfigSave(wxCommandEvent& event) break; } } - catch (const FfsXmlError& e) + catch (const FileError& e) { showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } @@ -2752,13 +2766,13 @@ bool MainDialog::trySaveConfig(const Zstring* guiFilename) //return true if save try { - xmlAccess::writeConfig(guiCfg, targetFilename); //throw FfsXmlError + xmlAccess::writeConfig(guiCfg, targetFilename); //throw FileError setLastUsedConfig(targetFilename, guiCfg); flashStatusInformation(_("Configuration saved")); return true; } - catch (const xmlAccess::FfsXmlError& e) + catch (const FileError& e) { showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); return false; @@ -2783,7 +2797,7 @@ bool MainDialog::trySaveBatchConfig(const Zstring* batchFileToUpdate) if (batchFileToUpdate) referenceBatchFile = *batchFileToUpdate; else if (!activeCfgFilename.empty()) - if (getXmlType(activeCfgFilename) == XML_TYPE_BATCH) //throw FfsXmlError + if (getXmlType(activeCfgFilename) == XML_TYPE_BATCH) //throw FileError referenceBatchFile = activeCfgFilename; if (referenceBatchFile.empty()) @@ -2791,11 +2805,17 @@ bool MainDialog::trySaveBatchConfig(const Zstring* batchFileToUpdate) else { XmlBatchConfig referenceBatchCfg; - readConfig(referenceBatchFile, referenceBatchCfg); //throw FfsXmlError + + std::wstring warningMsg; + readConfig(referenceBatchFile, referenceBatchCfg, warningMsg); //throw FileError + + if (!warningMsg.empty()) + throw FileError(warningMsg); //error out on warnings, too! + batchCfg = convertGuiToBatch(guiCfg, &referenceBatchCfg); } } - catch (const FfsXmlError& e) + catch (const FileError& e) { showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); return false; @@ -2803,10 +2823,10 @@ bool MainDialog::trySaveBatchConfig(const Zstring* batchFileToUpdate) Zstring targetFilename; if (batchFileToUpdate) - { - targetFilename = *batchFileToUpdate; - assert(endsWith(targetFilename, Zstr(".ffs_batch"))); - } + { + targetFilename = *batchFileToUpdate; + assert(endsWith(targetFilename, Zstr(".ffs_batch"))); + } else { //let user update batch config: this should change batch-exclusive settings only, else the "setLastUsedConfig" below would be somewhat of a lie @@ -2835,13 +2855,13 @@ bool MainDialog::trySaveBatchConfig(const Zstring* batchFileToUpdate) try { - writeConfig(batchCfg, targetFilename); //throw FfsXmlError + writeConfig(batchCfg, targetFilename); //throw FileError setLastUsedConfig(targetFilename, guiCfg); //[!] behave as if we had saved guiCfg flashStatusInformation(_("Configuration saved")); return true; } - catch (const FfsXmlError& e) + catch (const FileError& e) { showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); return false; @@ -2872,7 +2892,7 @@ bool MainDialog::saveOldConfig() //return false on user abort try { - switch (getXmlType(activeCfgFilename)) //throw FfsXmlError + switch (getXmlType(activeCfgFilename)) //throw FileError { case XML_TYPE_GUI: return trySaveConfig(&activeCfgFilename); @@ -2885,7 +2905,7 @@ bool MainDialog::saveOldConfig() //return false on user abort return false; } } - catch (const FfsXmlError& e) + catch (const FileError& e) { showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); return false; @@ -3017,24 +3037,26 @@ bool MainDialog::loadConfiguration(const std::vector<Zstring>& filenames) try { //allow reading batch configurations also - xmlAccess::readAnyConfig(filenames, newGuiCfg); //throw FfsXmlError + std::wstring warningMsg; + xmlAccess::readAnyConfig(filenames, newGuiCfg, warningMsg); //throw FileError - setConfig(newGuiCfg, filenames); - //flashStatusInformation(("Configuration loaded")); -> irrelevant!? - return true; - } - catch (const xmlAccess::FfsXmlError& e) - { - if (e.getSeverity() == xmlAccess::FfsXmlError::WARNING) + if (!warningMsg.empty()) { - showNotificationDialog(this, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(e.toString())); + showNotificationDialog(this, DialogInfoType::WARNING, PopupDialogCfg().setDetailInstructions(warningMsg)); setConfig(newGuiCfg, filenames); setLastUsedConfig(filenames, xmlAccess::XmlGuiConfig()); //simulate changed config due to parsing errors + return false; } - else - showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); + } + catch (const FileError& e) + { + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); return false; } + + setConfig(newGuiCfg, filenames); + //flashStatusInformation(("Configuration loaded")); -> irrelevant!? + return true; } @@ -3541,31 +3563,35 @@ void MainDialog::clearGrid() void MainDialog::updateStatistics() { - //update preview of item count and bytes to be transferred: - const SyncStatistics st(folderCmp); - - setText(*m_staticTextData, filesizeToShortString(st.getDataToProcess())); - if (st.getDataToProcess() == 0) - m_bitmapData->SetBitmap(greyScale(getResourceImage(L"data"))); - else - m_bitmapData->SetBitmap(getResourceImage(L"data")); - - auto setValue = [](wxStaticText& txtControl, int value, wxStaticBitmap& bmpControl, const wchar_t* bmpName) + auto setValue = [](wxStaticText& txtControl, bool isZeroValue, const wxString& valueAsString, wxStaticBitmap& bmpControl, const wchar_t* bmpName) { - setText(txtControl, toGuiString(value)); + wxFont fnt = txtControl.GetFont(); + fnt.SetWeight(isZeroValue ? wxFONTWEIGHT_NORMAL : wxFONTWEIGHT_BOLD); + txtControl.SetFont(fnt); + + setText(txtControl, valueAsString); - if (value == 0) + if (isZeroValue) bmpControl.SetBitmap(greyScale(mirrorIfRtl(getResourceImage(bmpName)))); else bmpControl.SetBitmap(mirrorIfRtl(getResourceImage(bmpName))); }; - setValue(*m_staticTextCreateLeft, st.getCreate<LEFT_SIDE >(), *m_bitmapCreateLeft, L"so_create_left_small"); - setValue(*m_staticTextUpdateLeft, st.getUpdate<LEFT_SIDE >(), *m_bitmapUpdateLeft, L"so_update_left_small"); - setValue(*m_staticTextDeleteLeft, st.getDelete<LEFT_SIDE >(), *m_bitmapDeleteLeft, L"so_delete_left_small"); - setValue(*m_staticTextCreateRight, st.getCreate<RIGHT_SIDE>(), *m_bitmapCreateRight, L"so_create_right_small"); - setValue(*m_staticTextUpdateRight, st.getUpdate<RIGHT_SIDE>(), *m_bitmapUpdateRight, L"so_update_right_small"); - setValue(*m_staticTextDeleteRight, st.getDelete<RIGHT_SIDE>(), *m_bitmapDeleteRight, L"so_delete_right_small"); + auto setIntValue = [&setValue](wxStaticText& txtControl, int value, wxStaticBitmap& bmpControl, const wchar_t* bmpName) + { + setValue(txtControl, value == 0, toGuiString(value), bmpControl, bmpName); + }; + + //update preview of item count and bytes to be transferred: + const SyncStatistics st(folderCmp); + + setValue(*m_staticTextData, st.getDataToProcess() == 0, filesizeToShortString(st.getDataToProcess()), *m_bitmapData, L"data"); + setIntValue(*m_staticTextCreateLeft, st.getCreate<LEFT_SIDE >(), *m_bitmapCreateLeft, L"so_create_left_small"); + setIntValue(*m_staticTextUpdateLeft, st.getUpdate<LEFT_SIDE >(), *m_bitmapUpdateLeft, L"so_update_left_small"); + setIntValue(*m_staticTextDeleteLeft, st.getDelete<LEFT_SIDE >(), *m_bitmapDeleteLeft, L"so_delete_left_small"); + setIntValue(*m_staticTextCreateRight, st.getCreate<RIGHT_SIDE>(), *m_bitmapCreateRight, L"so_create_right_small"); + setIntValue(*m_staticTextUpdateRight, st.getUpdate<RIGHT_SIDE>(), *m_bitmapUpdateRight, L"so_update_right_small"); + setIntValue(*m_staticTextDeleteRight, st.getDelete<RIGHT_SIDE>(), *m_bitmapDeleteRight, L"so_delete_right_small"); m_panelStatistics->Layout(); m_panelStatistics->Refresh(); //fix small mess up on RTL layout diff --git a/FreeFileSync/Source/ui/progress_indicator.cpp b/FreeFileSync/Source/ui/progress_indicator.cpp index 1eebd3bb..04bb739c 100644 --- a/FreeFileSync/Source/ui/progress_indicator.cpp +++ b/FreeFileSync/Source/ui/progress_indicator.cpp @@ -18,7 +18,6 @@ #include <zen/format_unit.h> #include <zen/scope_guard.h> #include <wx+/grid.h> -#include <wx+/mouse_move_dlg.h> #include <wx+/toggle_button.h> #include <wx+/image_tools.h> #include <wx+/graph.h> @@ -37,7 +36,11 @@ #include "taskbar.h" #include "exec_finished_box.h" #include "app_icon.h" -#ifdef ZEN_MAC + +#ifdef ZEN_WIN +#include <wx+/mouse_move_dlg.h> + +#elif defined ZEN_MAC #include <ApplicationServices/ApplicationServices.h> #endif @@ -873,8 +876,135 @@ private: //######################################################################################## +warn_static("remove after test") +#define NEW_BAR_PROGRESS_GRAPH + namespace { +#ifdef NEW_BAR_PROGRESS_GRAPH +class CurveDataProgressBar : public CurveData +{ +public: + CurveDataProgressBar() : x(0), xMax(0) {} + + void setValue(double val, double valMax) { x = val; xMax = valMax; } + +private: + virtual std::pair<double, double> getRangeX() const override { return std::make_pair(0, xMax); } //irrelevant; graph range is fixed + + virtual void getPoints(double minX, double maxX, int pixelWidth, std::vector<CurvePoint>& points) const override + { + //- draw a filled rectangle partly outside visible graph area [0, xMax] x [0, xMax] to simulate a progress bar + //- make sure to start within visible area to avoid automatic trimming + points.push_back(CurvePoint( x, xMax / 2)); + points.push_back(CurvePoint( x, -xMax)); + points.push_back(CurvePoint(-xMax, -xMax)); + points.push_back(CurvePoint(-xMax, xMax * 2)); + points.push_back(CurvePoint( x, xMax * 2)); + points.push_back(CurvePoint( x, xMax / 2)); + } + + double x; + double xMax; +}; + + +class CurveDataStretchedGraph : public SparseCurveData +{ +public: + CurveDataStretchedGraph() : SparseCurveData(true), /*true: add steps*/ timeNow(0) {} + + void clear() { samples.clear(); timeNow = 0; } + + void addRecord(int64_t timeNowMs, double value) + { + timeNow = timeNowMs; + + //allow for at most one sample per 100ms (handles duplicate inserts, too!) => this is unrelated to UI_UPDATE_INTERVAL! + if (!samples.empty() && timeNowMs / 100 == samples.rbegin()->first / 100) + { + samples.rbegin()->second = value; + return; + } + + samples.insert(samples.end(), std::make_pair(timeNowMs, value)); //time is "expected" to be monotonously ascending + //documentation differs about whether "hint" should be before or after the to be inserted element! + //however "std::map<>::end()" is interpreted correctly by GCC and VS2010 + + if (samples.size() > MAX_BUFFER_SIZE) //limit buffer size + samples.erase(samples.begin()); + } + +private: + virtual std::pair<double, double> getRangeX() const override { return std::make_pair(0, samples.empty() ? 0 : samples.rbegin()->second); } //irrelevant; graph range is fixed + + virtual Opt<CurvePoint> getLessEq(double x) const override //x: both input and output have unit "data processed" + { + if (samples.empty()) + return NoValue(); + + const double dataCurrent = samples.rbegin()->second; + const int64_t curveDuration = samples.rbegin()->first - samples.begin()->first; + if (numeric::isNull(dataCurrent) || curveDuration == 0) + return NoValue(); + + //map x from [0, dataCurrent] to [curveTimeBegin, curveTimeEnd] + const double timeMs = samples.begin()->first + curveDuration * x / dataCurrent; + auto timePointToX = [&](int64_t tp) { return (tp - samples.begin()->first) * dataCurrent / curveDuration; }; + + //-------------------------------------------------- + const int64_t timex = std::floor(timeMs); + //------ add artifical last sample value ------- + if (samples.rbegin()->first < timeNow) + if (timeNow <= timex) + return CurvePoint(timePointToX(timeNow), samples.rbegin()->second); + //-------------------------------------------------- + + //find first key > x, then go one step back: => samples must be a std::map, NOT std::multimap!!! + auto it = samples.upper_bound(timex); + if (it == samples.begin()) + return NoValue(); + //=> samples not empty in this context + --it; + return CurvePoint(timePointToX(it->first), it->second); + } + + virtual Opt<CurvePoint> getGreaterEq(double x) const override + { + if (samples.empty()) + return NoValue(); + + const double dataCurrent = samples.rbegin()->second; + const int64_t curveDuration = samples.rbegin()->first - samples.begin()->first; + if (numeric::isNull(dataCurrent) || curveDuration == 0) + return NoValue(); + + //map x from [0, dataCurrent] to [curveTimeBegin, curveTimeEnd] + const double timeMs = samples.begin()->first + curveDuration * x / dataCurrent; + auto timePointToX = [&](int64_t tp) { return (tp - samples.begin()->first) * dataCurrent / curveDuration; }; + + //-------------------------------------------------- + const int64_t timex = std::ceil(timeMs); + //------ add artifical last sample value ------- + if (samples.rbegin()->first < timeNow) + if (samples.rbegin()->first < timex && timex <= timeNow) + return CurvePoint(timePointToX(timeNow), samples.rbegin()->second); + //-------------------------------------------------- + + auto it = samples.lower_bound(timex); + if (it == samples.end()) + return NoValue(); + return CurvePoint(timePointToX(it->first), it->second); + } + + static const size_t MAX_BUFFER_SIZE = 2500000; //sizeof(single node) worst case ~ 3 * 8 byte ptr + 16 byte key/value = 40 byte + + std::map<int64_t, double> samples; //time, unit: [ms] !don't use std::multimap, see getLessEq() + int64_t timeNow; //help create an artificial record at the end of samples to visualize current time! +}; + + +#else class CurveDataStatistics : public SparseCurveData { public: @@ -1102,6 +1232,7 @@ struct LabelFormatterTimeElapsed : public LabelFormatter private: bool drawLabel_; }; +#endif } @@ -1190,13 +1321,20 @@ private: //help calculate total speed int64_t phaseStartMs; //begin of current phase in [ms] - std::shared_ptr<CurveDataStatistics> curveDataBytes; - std::shared_ptr<CurveDataStatistics> curveDataItems; - +#ifdef NEW_BAR_PROGRESS_GRAPH + std::shared_ptr<CurveDataProgressBar> curveDataBytesPerc; + std::shared_ptr<CurveDataProgressBar> curveDataItemsPerc; + std::shared_ptr<CurveDataStretchedGraph> curveDataBytes; + std::shared_ptr<CurveDataStretchedGraph> curveDataItems; +#else + std::shared_ptr<CurveDataStatistics > curveDataBytes; std::shared_ptr<CurveDataTotalValue > curveDataBytesTotal; std::shared_ptr<CurveDataCurrentValue> curveDataBytesCurrent; + + std::shared_ptr<CurveDataStatistics > curveDataItems; std::shared_ptr<CurveDataTotalValue > curveDataItemsTotal; std::shared_ptr<CurveDataCurrentValue> curveDataItemsCurrent; +#endif wxString parentFrameTitleBackup; std::unique_ptr<FfsTrayIcon> trayIcon; //optional: if filled all other windows should be hidden and conversely @@ -1285,10 +1423,36 @@ SyncProgressDialogImpl<TopLevelDialog>::SyncProgressDialogImpl(long style, //wxF pnl.m_bpButtonMinimizeToTray->SetBitmapLabel(getResourceImage(L"minimize_to_tray")); //init graph +#ifdef NEW_BAR_PROGRESS_GRAPH + curveDataBytesPerc = std::make_shared<CurveDataProgressBar>(); + curveDataItemsPerc = std::make_shared<CurveDataProgressBar>(); + curveDataBytes = std::make_shared<CurveDataStretchedGraph>(); + curveDataItems = std::make_shared<CurveDataStretchedGraph>(); + + pnl.m_panelGraphBytes->setAttributes(Graph2D::MainAttributes().setLabelX(Graph2D::X_LABEL_NONE).setLabelY(Graph2D::Y_LABEL_NONE).setSelectionMode(Graph2D::SELECT_NONE)); + pnl.m_panelGraphItems->setAttributes(Graph2D::MainAttributes().setLabelX(Graph2D::X_LABEL_NONE).setLabelY(Graph2D::Y_LABEL_NONE).setSelectionMode(Graph2D::SELECT_NONE)); + + pnl.m_panelGraphBytes->setCurve(curveDataBytesPerc, Graph2D::CurveAttributes().setLineWidth(2). + fillCurveArea(wxColor(205, 255, 202)). //faint green + setColor (wxColor(12, 128, 0))); //dark green + + pnl.m_panelGraphItems->setCurve(curveDataItemsPerc, Graph2D::CurveAttributes().setLineWidth(2). + fillCurveArea(wxColor(198, 206, 255)). //faint blue + setColor (wxColor(53, 25, 255))); //dark blue + + pnl.m_panelGraphBytes->addCurve(curveDataBytes, Graph2D::CurveAttributes().setLineWidth(2). + fillCurveArea(wxColor(111, 255, 99)). //light green + setColor (wxColor( 20, 200, 0))); //medium green + + pnl.m_panelGraphItems->addCurve(curveDataItems, Graph2D::CurveAttributes().setLineWidth(2). + fillCurveArea(wxColor(127, 147, 255)). //light blue + setColor (wxColor( 90, 120, 255))); //medium blue + +#else curveDataBytes = std::make_shared<CurveDataStatistics>(); - curveDataItems = std::make_shared<CurveDataStatistics>(); curveDataBytesTotal = std::make_shared<CurveDataTotalValue>(); curveDataBytesCurrent = std::make_shared<CurveDataCurrentValue>(); + curveDataItems = std::make_shared<CurveDataStatistics>(); curveDataItemsTotal = std::make_shared<CurveDataTotalValue>(); curveDataItemsCurrent = std::make_shared<CurveDataCurrentValue>(); @@ -1319,6 +1483,7 @@ SyncProgressDialogImpl<TopLevelDialog>::SyncProgressDialogImpl(long style, //wxF pnl.m_panelGraphItems->addCurve(curveDataItemsTotal, Graph2D::CurveAttributes().setLineWidth(2).setColor(wxColor(53, 25, 255))); //dark blue pnl.m_panelGraphItems->addCurve(curveDataItemsCurrent, Graph2D::CurveAttributes().setLineWidth(1).setColor(wxColor(53, 25, 255))); // +#endif //allow changing on completion command pnl.m_comboBoxExecFinished->initHistory(execFinishedHistory, execFinishedHistory.size()); //-> we won't use addItemHistory() later @@ -1403,10 +1568,15 @@ void SyncProgressDialogImpl<TopLevelDialog>::initNewPhase() updateDialogStatus(); //evaluates "syncStat_->currentPhase()" //reset graphs (e.g. after binary comparison) +#ifdef NEW_BAR_PROGRESS_GRAPH + curveDataBytesPerc->setValue(0, 0); + curveDataItemsPerc->setValue(0, 0); +#else curveDataBytesTotal ->setValue(0, 0); curveDataBytesCurrent->setValue(0, 0, 0); curveDataItemsTotal ->setValue(0, 0); curveDataItemsCurrent->setValue(0, 0, 0); +#endif curveDataBytes->clear(); curveDataItems->clear(); @@ -1588,11 +1758,20 @@ void SyncProgressDialogImpl<TopLevelDialog>::updateGuiInt(bool allowYield) if (trayIcon.get()) trayIcon->setProgress(fraction); if (taskbar_.get()) taskbar_->setProgress(fraction); +#ifdef NEW_BAR_PROGRESS_GRAPH + curveDataBytesPerc->setValue(to<double>(dataCurrent), to<double>(dataTotal)); + curveDataItemsPerc->setValue(itemsCurrent, itemsTotal); + + //(re-)set progress graph max, just in case it changed during sync + pnl.m_panelGraphBytes->setAttributes(pnl.m_panelGraphBytes->getAttributes().setMinX(0).setMaxX(to<double>(dataTotal)).setMinY(0).setMaxY(to<double>(dataTotal))); + pnl.m_panelGraphItems->setAttributes(pnl.m_panelGraphItems->getAttributes().setMinX(0).setMaxX( itemsTotal).setMinY(0).setMaxY( itemsTotal)); +#else //constant line graph curveDataBytesTotal ->setValue(timeNow, to<double>(dataTotal)); curveDataBytesCurrent->setValue(timeNow, to<double>(dataCurrent), to<double>(dataTotal)); curveDataItemsTotal ->setValue(timeNow, itemsTotal); curveDataItemsCurrent->setValue(timeNow, itemsCurrent, itemsTotal); +#endif //even though notifyProgressChange() already set the latest data, let's add another sample to have all curves consider "timeNow" //no problem with adding too many records: CurveDataStatistics will remove duplicate entries! curveDataBytes->addRecord(timeNow, to<double>(dataCurrent)); @@ -2141,13 +2320,13 @@ SyncProgressDialog* createProgressDialog(zen::AbortCallback& abortCb, { if (parentWindow) //sync from GUI return new SyncProgressDialogImpl<wxDialog>(wxDEFAULT_DIALOG_STYLE | wxMAXIMIZE_BOX | wxMINIMIZE_BOX | wxRESIZE_BORDER, - [&](wxDialog& progDlg) { return parentWindow; }, abortCb, - notifyWindowTerminate, syncStat, parentWindow, showProgress, jobName, execWhenFinished, execFinishedHistory); + [&](wxDialog& progDlg) { return parentWindow; }, + abortCb, notifyWindowTerminate, syncStat, parentWindow, showProgress, jobName, execWhenFinished, execFinishedHistory); else //FFS batch job { auto dlg = new SyncProgressDialogImpl<wxFrame>(wxDEFAULT_FRAME_STYLE, - [](wxFrame& progDlg) { return &progDlg; }, abortCb, - notifyWindowTerminate, syncStat, parentWindow, showProgress, jobName, execWhenFinished, execFinishedHistory); + [](wxFrame& progDlg) { return &progDlg; }, + abortCb, notifyWindowTerminate, syncStat, parentWindow, showProgress, jobName, execWhenFinished, execFinishedHistory); //only top level windows should have an icon: dlg->SetIcon(getFfsIcon()); diff --git a/FreeFileSync/Source/ui/small_dlgs.cpp b/FreeFileSync/Source/ui/small_dlgs.cpp index 6630c405..bd6701ed 100644 --- a/FreeFileSync/Source/ui/small_dlgs.cpp +++ b/FreeFileSync/Source/ui/small_dlgs.cpp @@ -14,7 +14,6 @@ #include <wx+/bitmap_button.h> #include <wx+/rtl.h> #include <wx+/no_flicker.h> -#include <wx+/mouse_move_dlg.h> #include <wx+/image_tools.h> #include <wx+/font_size.h> #include <wx+/std_button_order.h> @@ -28,6 +27,10 @@ #include "../lib/hard_filter.h" #include "../version/version.h" +#ifdef ZEN_WIN +#include <wx+/mouse_move_dlg.h> +#endif + using namespace zen; @@ -508,28 +511,32 @@ SyncConfirmationDlg::SyncConfirmationDlg(wxWindow* parent, m_checkBoxDontShowAgain->SetValue(dontShowAgain); //update preview of item count and bytes to be transferred: - setText(*m_staticTextData, filesizeToShortString(st.getDataToProcess())); - if (st.getDataToProcess() == 0) - m_bitmapData->SetBitmap(greyScale(getResourceImage(L"data"))); - else - m_bitmapData->SetBitmap(getResourceImage(L"data")); - - auto setValue = [](wxStaticText& txtControl, int value, wxStaticBitmap& bmpControl, const wchar_t* bmpName) + auto setValue = [](wxStaticText& txtControl, bool isZeroValue, const wxString& valueAsString, wxStaticBitmap& bmpControl, const wchar_t* bmpName) { - setText(txtControl, toGuiString(value)); + wxFont fnt = txtControl.GetFont(); + fnt.SetWeight(isZeroValue ? wxFONTWEIGHT_NORMAL : wxFONTWEIGHT_BOLD); + txtControl.SetFont(fnt); - if (value == 0) + setText(txtControl, valueAsString); + + if (isZeroValue) bmpControl.SetBitmap(greyScale(mirrorIfRtl(getResourceImage(bmpName)))); else bmpControl.SetBitmap(mirrorIfRtl(getResourceImage(bmpName))); }; - setValue(*m_staticTextCreateLeft, st.getCreate<LEFT_SIDE >(), *m_bitmapCreateLeft, L"so_create_left_small"); - setValue(*m_staticTextUpdateLeft, st.getUpdate<LEFT_SIDE >(), *m_bitmapUpdateLeft, L"so_update_left_small"); - setValue(*m_staticTextDeleteLeft, st.getDelete<LEFT_SIDE >(), *m_bitmapDeleteLeft, L"so_delete_left_small"); - setValue(*m_staticTextCreateRight, st.getCreate<RIGHT_SIDE>(), *m_bitmapCreateRight, L"so_create_right_small"); - setValue(*m_staticTextUpdateRight, st.getUpdate<RIGHT_SIDE>(), *m_bitmapUpdateRight, L"so_update_right_small"); - setValue(*m_staticTextDeleteRight, st.getDelete<RIGHT_SIDE>(), *m_bitmapDeleteRight, L"so_delete_right_small"); + auto setIntValue = [&setValue](wxStaticText& txtControl, int value, wxStaticBitmap& bmpControl, const wchar_t* bmpName) + { + setValue(txtControl, value == 0, toGuiString(value), bmpControl, bmpName); + }; + + setValue(*m_staticTextData, st.getDataToProcess() == 0, filesizeToShortString(st.getDataToProcess()), *m_bitmapData, L"data"); + setIntValue(*m_staticTextCreateLeft, st.getCreate<LEFT_SIDE >(), *m_bitmapCreateLeft, L"so_create_left_small"); + setIntValue(*m_staticTextUpdateLeft, st.getUpdate<LEFT_SIDE >(), *m_bitmapUpdateLeft, L"so_update_left_small"); + setIntValue(*m_staticTextDeleteLeft, st.getDelete<LEFT_SIDE >(), *m_bitmapDeleteLeft, L"so_delete_left_small"); + setIntValue(*m_staticTextCreateRight, st.getCreate<RIGHT_SIDE>(), *m_bitmapCreateRight, L"so_create_right_small"); + setIntValue(*m_staticTextUpdateRight, st.getUpdate<RIGHT_SIDE>(), *m_bitmapUpdateRight, L"so_update_right_small"); + setIntValue(*m_staticTextDeleteRight, st.getDelete<RIGHT_SIDE>(), *m_bitmapDeleteRight, L"so_delete_right_small"); m_panelStatistics->Layout(); @@ -702,9 +709,10 @@ private: virtual void OnToggleAutoRetryCount(wxCommandEvent& event) { updateGui(); } void setExtApp(const xmlAccess::ExternalApps& extApp); - xmlAccess::ExternalApps getExtApp(); + xmlAccess::ExternalApps getExtApp() const; xmlAccess::XmlGlobalSettings& settings; + std::map<std::wstring, std::wstring> descriptionTransToEng; //"translated description" -> "english" mapping for external application config }; @@ -856,13 +864,18 @@ void GlobalSettingsDlg::setExtApp(const xmlAccess::ExternalApps& extApp) for (auto it = extAppTmp.begin(); it != extAppTmp.end(); ++it) { const int row = it - extAppTmp.begin(); - m_gridCustomCommand->SetCellValue(row, 0, it->first); //description - m_gridCustomCommand->SetCellValue(row, 1, it->second); //commandline + + const std::wstring description = zen::implementation::translate(it->first); + if (description != it->first) //remember english description to save in GlobalSettings.xml later rather than hard-code translation + descriptionTransToEng[description] = it->first; + + m_gridCustomCommand->SetCellValue(row, 0, description); //description + m_gridCustomCommand->SetCellValue(row, 1, it->second); //commandline } } -xmlAccess::ExternalApps GlobalSettingsDlg::getExtApp() +xmlAccess::ExternalApps GlobalSettingsDlg::getExtApp() const { xmlAccess::ExternalApps output; for (int i = 0; i < m_gridCustomCommand->GetNumberRows(); ++i) @@ -870,6 +883,11 @@ xmlAccess::ExternalApps GlobalSettingsDlg::getExtApp() auto description = copyStringTo<std::wstring>(m_gridCustomCommand->GetCellValue(i, 0)); auto commandline = copyStringTo<std::wstring>(m_gridCustomCommand->GetCellValue(i, 1)); + //try to undo translation of description for GlobalSettings.xml + auto it = descriptionTransToEng.find(description); + if (it != descriptionTransToEng.end()) + description = it->second; + if (!description.empty() || !commandline.empty()) output.push_back(std::make_pair(description, commandline)); } diff --git a/FreeFileSync/Source/ui/sync_cfg.cpp b/FreeFileSync/Source/ui/sync_cfg.cpp index 38e583fc..747c2701 100644 --- a/FreeFileSync/Source/ui/sync_cfg.cpp +++ b/FreeFileSync/Source/ui/sync_cfg.cpp @@ -6,9 +6,7 @@ #include "sync_cfg.h" #include <memory> -//#include <zen/format_unit.h> #include <wx/wupdlock.h> -#include <wx+/mouse_move_dlg.h> #include <wx+/rtl.h> #include <wx+/no_flicker.h> #include <wx+/choice_enum.h> @@ -23,6 +21,10 @@ #include "../file_hierarchy.h" #include "../lib/help_provider.h" +#ifdef ZEN_WIN +#include <wx+/mouse_move_dlg.h> +#endif + using namespace zen; using namespace xmlAccess; diff --git a/FreeFileSync/Source/ui/tree_view.cpp b/FreeFileSync/Source/ui/tree_view.cpp index e2db3673..7a96bee5 100644 --- a/FreeFileSync/Source/ui/tree_view.cpp +++ b/FreeFileSync/Source/ui/tree_view.cpp @@ -1218,7 +1218,7 @@ private: menu.popup(grid_); - event.Skip(); + //event.Skip(); } void onGridLabelLeftClick(GridClickEvent& event) diff --git a/FreeFileSync/Source/version/version.h b/FreeFileSync/Source/version/version.h index e3b7e082..4d7b4022 100644 --- a/FreeFileSync/Source/version/version.h +++ b/FreeFileSync/Source/version/version.h @@ -3,7 +3,7 @@ namespace zen { -const wchar_t currentVersion[] = L"6.1"; //internal linkage! +const wchar_t currentVersion[] = L"6.2"; //internal linkage! } #endif diff --git a/wx+/bitmap_button.h b/wx+/bitmap_button.h index 5674f66b..4e5adb87 100644 --- a/wx+/bitmap_button.h +++ b/wx+/bitmap_button.h @@ -74,7 +74,13 @@ inline void setImage(wxBitmapButton& button, const wxBitmap& bmp) { if (!isEqual(button.GetBitmapLabel(), bmp)) + { button.SetBitmapLabel(bmp); + + //wxWidgets excels at screwing up consistently once again: + //the first call to SetBitmapLabel() *implicitly* sets the disabled bitmap, too, subsequent calls, DON'T! + button.SetBitmapDisabled(bmp.ConvertToDisabled()); //inefficiency: wxBitmap::ConvertToDisabled() implicitly converts to wxImage! + } } } diff --git a/wx+/create_pch.cpp b/wx+/create_pch.cpp deleted file mode 100644 index be54115f..00000000 --- a/wx+/create_pch.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -//dummy file for Visual Studio to compile precompiled header: -//associating pch with any other cpp file will trigger a full pch rebuild each time code is changed!
\ No newline at end of file diff --git a/wx+/grid.cpp b/wx+/grid.cpp index 95baaf3b..30192548 100644 --- a/wx+/grid.cpp +++ b/wx+/grid.cpp @@ -57,6 +57,8 @@ const wxColor COLOR_LABEL_GRADIENT_FROM_FOCUS = COLOR_LABEL_GRADIENT_FROM; const wxColor COLOR_LABEL_GRADIENT_TO_FOCUS = getColorSelectionGradientFrom(); const wxColor colorGridLine = wxColour(192, 192, 192); //light grey + +const bool fillGapAfterColumns = true; //draw rows/column label to fill full window width; may become an instance variable some time? } //---------------------------------------------------------------------------------------------------------------- @@ -246,7 +248,7 @@ public: Connect(wxEVT_ERASE_BACKGROUND, wxEraseEventHandler(SubWindow::onEraseBackGround), nullptr, this); //SetDoubleBuffered(true); slow as hell! - + SetBackgroundStyle(wxBG_STYLE_PAINT); Connect(wxEVT_SET_FOCUS, wxFocusEventHandler(SubWindow::onFocus), nullptr, this); @@ -333,8 +335,14 @@ private: On OS X there is no such propagation! => we need a redirection (the same wxGrid implements) */ - if (!sendEventNow(event)) - event.Skip(); + + //new wxWidgets 3.0 screw-up for GTK2: wxScrollHelperEvtHandler::ProcessEvent() ignores wxEVT_MOUSEWHEEL events + //thereby breaking the scenario of redirection to parent we need here (but also breaking their very own wxGrid sample) + //=> call wxScrolledWindow mouse wheel handler directly + parent_.HandleOnMouseWheel(event); + + //if (!sendEventNow(event)) + // event.Skip(); } void onPaintEvent(wxPaintEvent& event) @@ -627,11 +635,25 @@ private: const int width = it->width_; //don't use unsigned for calculations! if (labelAreaTL.x > rect.GetRight()) - return; //done + return; //done, rect is fully covered if (labelAreaTL.x + width > rect.x) drawColumnLabel(dc, wxRect(labelAreaTL, wxSize(width, colLabelHeight)), col, it->type_); labelAreaTL.x += width; } + if (labelAreaTL.x > rect.GetRight()) + return; //done, rect is fully covered + + //fill gap after columns and cover full width + if (fillGapAfterColumns) + { + int totalWidth = 0; + for (const ColumnWidth& cw : absWidths) + totalWidth += cw.width_; + const int clientWidth = GetClientSize().GetWidth(); //need reliable, stable width in contrast to rect.width + + if (totalWidth < clientWidth) + drawColumnLabel(dc, wxRect(labelAreaTL, wxSize(clientWidth - totalWidth, colLabelHeight)), absWidths.size(), DUMMY_COLUMN_TYPE); + } } void drawColumnLabel(wxDC& dc, const wxRect& rect, size_t col, ColumnType colType) @@ -672,10 +694,10 @@ private: { if (!event.LeftDClick()) //double-clicks never seem to arrive here; why is this checked at all??? if (Opt<int> colWidth = refParent().getColWidth(action->col)) - activeResizing.reset(new ColumnResizing(*this, action->col, *colWidth, event.GetPosition().x)); + activeResizing = make_unique<ColumnResizing>(*this, action->col, *colWidth, event.GetPosition().x); } else //a move or single click - activeMove.reset(new ColumnMove(*this, action->col, event.GetPosition().x)); + activeMove = make_unique<ColumnMove>(*this, action->col, event.GetPosition().x); } event.Skip(); } @@ -769,7 +791,7 @@ private: { if (const Opt<ColAction> action = refParent().clientPosToColumnAction(event.GetPosition())) { - highlightCol.reset(new size_t(action->col)); + highlightCol = make_unique<size_t>(action->col); if (action->wantResize) SetCursor(wxCURSOR_SIZEWE); //set window-local only! :) @@ -811,7 +833,13 @@ private: { if (const Opt<ColumnType> colType = refParent().colToType(action->col)) sendEventNow(GridClickEvent(EVENT_GRID_COL_LABEL_MOUSE_RIGHT, event, -1, *colType)); //notify right click + else assert(false); } + else + //notify right click (on free space after last column) + if (fillGapAfterColumns) + sendEventNow(GridClickEvent(EVENT_GRID_COL_LABEL_MOUSE_RIGHT, event, -1, DUMMY_COLUMN_TYPE)); + event.Skip(); } @@ -878,9 +906,13 @@ private: std::vector<ColumnWidth> absWidths = refParent().getColWidths(); //resolve stretched widths { - int totalWidth = 0; + int totalRowWidth = 0; for (const ColumnWidth& cw : absWidths) - totalWidth += cw.width_; + totalRowWidth += cw.width_; + + //fill gap after columns and cover full width + if (fillGapAfterColumns) + totalRowWidth = std::max(totalRowWidth, GetClientSize().GetWidth()); if (auto prov = refParent().getDataProvider()) { @@ -889,7 +921,7 @@ private: //draw background lines for (int row = rowFirst; row < rowLast; ++row) { - const wxRect rowRect(cellAreaTL + wxPoint(0, row * rowHeight), wxSize(totalWidth, rowHeight)); + const wxRect rowRect(cellAreaTL + wxPoint(0, row * rowHeight), wxSize(totalRowWidth, rowHeight)); RecursiveDcClipper dummy3(dc, rowRect); prov->renderRowBackgound(dc, rowRect, row, refParent().IsThisEnabled(), drawAsSelected(row)); } @@ -960,15 +992,15 @@ private: if (!event.RightDown() || !refParent().isSelected(row)) //do NOT start a new selection if user right-clicks on a selected area! { if (event.ControlDown()) - activeSelection.reset(new MouseSelection(*this, row, !refParent().isSelected(row))); + activeSelection = make_unique<MouseSelection>(*this, row, !refParent().isSelected(row)); else if (event.ShiftDown()) { - activeSelection.reset(new MouseSelection(*this, selectionAnchor, true)); + activeSelection = make_unique<MouseSelection>(*this, selectionAnchor, true); refParent().clearSelection(ALLOW_GRID_EVENT); } else { - activeSelection.reset(new MouseSelection(*this, row, true)); + activeSelection = make_unique<MouseSelection>(*this, row, true); refParent().clearSelection(ALLOW_GRID_EVENT); } } @@ -1236,7 +1268,7 @@ Grid::Grid(wxWindow* parent, Connect(wxEVT_ERASE_BACKGROUND, wxEraseEventHandler(Grid::onEraseBackGround), nullptr, this); Connect(wxEVT_SIZE, wxSizeEventHandler (Grid::onSizeEvent ), nullptr, this); - Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(Grid::onKeyDown), nullptr, this); + Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(Grid::onKeyDown), nullptr, this); } @@ -1414,7 +1446,7 @@ void Grid::onKeyDown(wxKeyEvent& event) keyCode = WXK_NUMPAD_LEFT; } - const ptrdiff_t rowCount = getRowCount(); + const ptrdiff_t rowCount = getRowCount(); const ptrdiff_t cursorRow = mainWin_->getCursor(); auto moveCursorTo = [&](ptrdiff_t row) @@ -1916,7 +1948,7 @@ void Grid::setGridCursor(size_t row) void Grid::selectWithCursor(ptrdiff_t row) { const size_t anchorRow = mainWin_->getAnchor(); - + mainWin_->setCursor(row, anchorRow); makeRowVisible(row); @@ -42,7 +42,7 @@ struct GridClickEvent : public wxMouseEvent virtual wxEvent* Clone() const { return new GridClickEvent(*this); } const ptrdiff_t row_; //-1 for invalid position, >= rowCount if out of range - const ColumnType colType_; + const ColumnType colType_; //may be DUMMY_COLUMN_TYPE }; struct GridColumnResizeEvent : public wxCommandEvent diff --git a/wx+/image_resources.cpp b/wx+/image_resources.cpp index 7b74c161..ba725d63 100644 --- a/wx+/image_resources.cpp +++ b/wx+/image_resources.cpp @@ -62,7 +62,7 @@ private: void GlobalResources::init(const Zstring& filename) { - assert(bitmaps.empty() && anims.empty()); + assert(bitmaps.empty() && anims.empty()); wxFFileInputStream input(utfCvrtTo<wxString>(filename)); if (input.IsOk()) //if not... we don't want to react too harsh here @@ -70,12 +70,12 @@ void GlobalResources::init(const Zstring& filename) //activate support for .png files wxImage::AddHandler(new wxPNGHandler); //ownership passed - wxZipInputStream resourceFile(input, wxConvUTF8); + wxZipInputStream streamIn(input, wxConvUTF8); //do NOT rely on wxConvLocal! On failure shows unhelpful popup "Cannot convert from the charset 'Unknown encoding (-1)'!" while (true) { - std::unique_ptr<wxZipEntry> entry(resourceFile.GetNextEntry()); //take ownership! + std::unique_ptr<wxZipEntry> entry(streamIn.GetNextEntry()); //take ownership! if (!entry) break; @@ -83,9 +83,9 @@ void GlobalResources::init(const Zstring& filename) //generic image loading if (endsWith(name, L".png")) - bitmaps.insert(std::make_pair(name, wxImage(resourceFile, wxBITMAP_TYPE_PNG))); + bitmaps.insert(std::make_pair(name, wxImage(streamIn, wxBITMAP_TYPE_PNG))); else if (endsWith(name, L".gif")) - loadAnimFromZip(resourceFile, anims[name]); + loadAnimFromZip(streamIn, anims[name]); } } } diff --git a/wx+/mouse_move_dlg.cpp b/wx+/mouse_move_dlg.cpp deleted file mode 100644 index 5c2a0a97..00000000 --- a/wx+/mouse_move_dlg.cpp +++ /dev/null @@ -1,76 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "mouse_move_dlg.h" -#include <vector> -#include <zen/win.h> //includes "windows.h" -#include <wx/stattext.h> -#include <wx/statbmp.h> -#include <wx/statline.h> -#include <wx/animate.h> -#include <wx/panel.h> -#include <wx/gauge.h> -#include <wx/statusbr.h> -#include <wx/frame.h> -#include <wx/dialog.h> - -using namespace zen; - - -namespace -{ -template <class Fun> inline -void forEachChild(wxWindow& parent, Fun f) -{ - wxWindowList& wl = parent.GetChildren(); - for (auto it = wl.begin(); it != wl.end(); ++it) //yet another wxWidgets bug keeps us from using std::for_each - { - wxWindow& wnd = **it; - f(wnd); - forEachChild(wnd, f); - } -} -} - -MouseMoveWindow::MouseMoveWindow(wxWindow& parent, bool includeParent) : wxWindow(&parent, wxID_ANY) -{ - wxObjectEventFunction memFunMouseDown = wxMouseEventHandler(MouseMoveWindow::LeftButtonDown); //wxWidgets macros are obviously not C++11 ready - auto connect = [&](wxWindow& wnd) - { - if (dynamic_cast<wxStaticText*> (&wnd) || //redirect clicks on these "dead" controls to move dialog instead - dynamic_cast<wxStaticBitmap*> (&wnd) || - dynamic_cast<wxAnimationCtrl*>(&wnd) || - dynamic_cast<wxGauge*> (&wnd) || - dynamic_cast<wxStaticLine*> (&wnd) || - dynamic_cast<wxStatusBar*> (&wnd) || - dynamic_cast<wxPanel*> (&wnd) || - dynamic_cast<wxFrame*> (&wnd) || - dynamic_cast<wxDialog*> (&wnd)) - wnd.Connect(wxEVT_LEFT_DOWN, memFunMouseDown, nullptr, this); - }; - - if (includeParent) - connect(parent); - forEachChild(parent, connect); - - Hide(); //this is just a dummy window so that its parent can have ownership - Disable(); -} - - -void MouseMoveWindow::LeftButtonDown(wxMouseEvent& event) -{ - if (GetParent() && allowMove(event)) - { - ::ReleaseCapture(); - //::SendMessage(GetHwndOf(dialogToMove_), WM_NCLBUTTONDOWN, HTCAPTION, 0); - ::SendMessage(static_cast<HWND>(GetParent()->GetHWND()), WM_NCLBUTTONDOWN, HTCAPTION, 0); - - return; - //event.Skip(); -> swallow event, to avoid other windows losing focus - } - event.Skip(); -} diff --git a/wx+/mouse_move_dlg.h b/wx+/mouse_move_dlg.h deleted file mode 100644 index 18cd38d6..00000000 --- a/wx+/mouse_move_dlg.h +++ /dev/null @@ -1,32 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef MOUSEMOVEWINDOW_H_INCLUDED -#define MOUSEMOVEWINDOW_H_INCLUDED - -#include <wx/window.h> - -namespace zen -{ -/* -move dialog by mouse-dragging contained sub-windows: just attach to parent via new in constructor: - -Syntax: - new MouseMoveWindow(parent); //ownership passed to parent -*/ -class MouseMoveWindow : public wxWindow //private wxEvtHandler -{ -public: - MouseMoveWindow(wxWindow& parent, bool includeParent = true); //parent including all relevant child elements - - virtual bool allowMove(const wxMouseEvent& event) { return true; } - -private: - void LeftButtonDown(wxMouseEvent& event); -}; -} - -#endif // MOUSEMOVEWINDOW_H_INCLUDED diff --git a/wx+/pch.h b/wx+/pch.h deleted file mode 100644 index 5bfdb6cb..00000000 --- a/wx+/pch.h +++ /dev/null @@ -1,103 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef FFS_PRECOMPILED_HEADER -#define FFS_PRECOMPILED_HEADER - -//pay attention when using this file: might cause issues! -#ifdef NDEBUG -#error do NOT use in release build! -#endif - -//##################################################### - -// basic wxWidgets headers -#ifndef WX_PRECOMP -#define WX_PRECOMP -#endif -#include <wx/wxprec.h> //includes <wx/msw/wrapwin.h> - -//other wxWidgets headers -#include <wx/log.h> -#include <wx/grid.h> -#include <wx/animate.h> -#include <wx/app.h> -#include <wx/arrstr.h> -#include <wx/bitmap.h> -#include <wx/bmpbuttn.h> -#include <wx/button.h> -#include <wx/checkbox.h> -#include <wx/choice.h> -#include <wx/clipbrd.h> -#include <wx/cmdline.h> -#include <wx/colour.h> -#include <wx/config.h> -#include <wx/dc.h> -#include <wx/dialog.h> -//#include <wx/dir.h> -> MSVC: avoid annoying IntelliSense error: wxZipStreamLink -//#include <wx/zipstrm.h> -#include <wx/dnd.h> -#include <wx/file.h> -#include <wx/filename.h> -#include <wx/filepicker.h> -#include <wx/font.h> -#include <wx/frame.h> -#include <wx/gauge.h> -#include <wx/gdicmn.h> -#include <wx/grid.h> -#include <wx/hyperlink.h> -#include <wx/icon.h> -#include <wx/image.h> -#include <wx/intl.h> -#include <wx/log.h> -#include <wx/menu.h> -#include <wx/msgdlg.h> -#include <wx/panel.h> -#include <wx/radiobut.h> -#include <wx/settings.h> -#include <wx/sizer.h> -#include <wx/statbmp.h> -#include <wx/statbox.h> -#include <wx/statline.h> -#include <wx/stattext.h> -#include <wx/stdpaths.h> -#include <wx/stopwatch.h> -#include <wx/stream.h> -#include <wx/string.h> -#include <wx/textctrl.h> -#include <wx/thread.h> -#include <wx/utils.h> -#include <wx/wfstream.h> -#include <wx/scrolwin.h> -#include <wx/notebook.h> -#include <wx/help.h> -#include <wx/event.h> - -//STL headers -#include <string> -#include <vector> -#include <set> -#include <map> -#include <queue> -#include <deque> -#include <stack> -#include <list> -#include <algorithm> -#include <functional> -#include <iterator> -#include <numeric> -#include <memory> -#include <utility> -#include <fstream> -#include <iostream> -#include <sstream> -#include <new> -#include <stdexcept> - -//Boost - - -#endif //FFS_PRECOMPILED_HEADER diff --git a/wx+/popup_dlg.cpp b/wx+/popup_dlg.cpp index d7d1960e..66b3117e 100644 --- a/wx+/popup_dlg.cpp +++ b/wx+/popup_dlg.cpp @@ -6,12 +6,15 @@ #include "popup_dlg.h" #include <wx/app.h> -#include <wx+/mouse_move_dlg.h> #include <wx+/std_button_order.h> #include <wx+/font_size.h> #include <wx+/image_resources.h> #include "popup_dlg_generated.h" +#ifdef ZEN_WIN +#include <wx+/mouse_move_dlg.h> +#endif + using namespace zen; namespace diff --git a/wx+/toggle_button.h b/wx+/toggle_button.h index 858082d3..e532d9d8 100644 --- a/wx+/toggle_button.h +++ b/wx+/toggle_button.h @@ -8,6 +8,7 @@ #define TOGGLEBUTTON_H_INCLUDED #include <wx/bmpbuttn.h> +#include <wx+/bitmap_button.h> class ToggleButton : public wxBitmapButton { @@ -68,7 +69,7 @@ inline void ToggleButton::setActive(bool value) { active = value; - SetBitmapLabel(active ? activeBmp_ : inactiveBmp_); + zen::setImage(*this, active ? activeBmp_ : inactiveBmp_); } #endif // TOGGLEBUTTON_H_INCLUDED diff --git a/zen/FindFilePlus/FindFilePlus.vcxproj b/zen/FindFilePlus/FindFilePlus.vcxproj deleted file mode 100644 index eb5c672e..00000000 --- a/zen/FindFilePlus/FindFilePlus.vcxproj +++ /dev/null @@ -1,173 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{814047ED-7701-494D-BBAF-AFEDF43EDC4E}</ProjectGuid> - <RootNamespace>ShadowDll</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\FreeFileSync\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\FreeFileSync\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\FreeFileSync\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\FreeFileSync\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\FreeFileSync\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\FreeFileSync\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\FreeFileSync\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\FreeFileSync\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)_$(Platform)</TargetName> - <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">C:\Data\C++\WinDDK\inc\ddk;C:\Data\C++\WinDDK\inc\api;C:\Data\C++\WinDDK\inc\crt;$(WindowsSdkDir)\include;$(VCInstallDir)include</IncludePath> - <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">C:\Data\C++\WinDDK\inc\ddk;C:\Data\C++\WinDDK\inc\api;C:\Data\C++\WinDDK\inc\crt;$(WindowsSdkDir)\include;$(VCInstallDir)include</IncludePath> - <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\Data\C++\WinDDK\inc\ddk;C:\Data\C++\WinDDK\inc\api;C:\Data\C++\WinDDK\inc\crt;$(WindowsSdkDir)\include;$(VCInstallDir)include</IncludePath> - <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\Data\C++\WinDDK\inc\ddk;C:\Data\C++\WinDDK\inc\api;C:\Data\C++\WinDDK\inc\crt;$(WindowsSdkDir)\include;$(VCInstallDir)include</IncludePath> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>_X86_;_DEBUG;_WINDOWS;_USRDLL;FIND_FILE_PLUS_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <SmallerTypeCheck>true</SmallerTypeCheck> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>_AMD64_;_DEBUG;_WINDOWS;_USRDLL;FIND_FILE_PLUS_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <SmallerTypeCheck>true</SmallerTypeCheck> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <PreprocessorDefinitions>_X86_;NDEBUG;_WINDOWS;_USRDLL;FIND_FILE_PLUS_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <PreprocessorDefinitions>_AMD64_;NDEBUG;_WINDOWS;_USRDLL;FIND_FILE_PLUS_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <AdditionalIncludeDirectories>C:\Data\Projects;</AdditionalIncludeDirectories> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\debug_memory_leaks.cpp" /> - <ClCompile Include="dll_main.cpp" /> - <ClCompile Include="find_file_plus.cpp" /> - <ClCompile Include="load_dll.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="find_file_plus.h" /> - <ClInclude Include="load_dll.h" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> -</Project>
\ No newline at end of file diff --git a/zen/FindFilePlus/dll_main.cpp b/zen/FindFilePlus/dll_main.cpp deleted file mode 100644 index caa5930d..00000000 --- a/zen/FindFilePlus/dll_main.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#define WIN32_LEAN_AND_MEAN -#include <zen/win.h> - -#include "init_dll_binding.h" - -/* -http://www.microsoft.com/whdc/driver/kernel/DLL_bestprac.mspx -"DllMain is called while the loader-lock is held. [...] You cannot call any function in -DllMain that directly or indirectly tries to acquire the loader lock. Otherwise, you will -introduce the possibility that your application deadlocks or crashes." - -it's even worse: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx -"If your DLL is linked with the C run-time library (CRT), the entry point provided by the CRT calls the constructors -and destructors for global and static C++ objects. Therefore, these restrictions for DllMain also apply to constructors -and destructors and any code that is called from them." - -Example: http://blog.barthe.ph/2009/07/30/no-stdlib-in-dllmai/ - -Empirical study on DLL initialization order -------------------------------------------- -I. statically linked DLL: - DLL, static object constructors - DLL, DllMain(): DLL_PROCESS_ATTACH - main thread, static object constructors - main thread, enter main() - DLL, DllMain(): DLL_THREAD_ATTACH - DLL, DllMain(): DLL_THREAD_DETACH - main thread, exit main() - main thread, static object destructors - DLL, DllMain(): DLL_PROCESS_DETACH - DLL, static object destructors - -II. dynamically linked DLL (living in main()): - main thread, static object constructors - main thread, main(): LoadLibrary - DLL, static object constructors - DLL, DllMain(): DLL_PROCESS_ATTACH - main thread, main(): FreeLibrary - DLL, DllMain(): DLL_PROCESS_DETACH - DLL, static object destructors - main thread, static object destructors -*/ - -//optional: add init/teardown logic here -BOOL APIENTRY DllMain(HINSTANCE hinstDLL, - DWORD fdwReason, - LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - if (!findplus::initDllBinding()) - return false; - case DLL_PROCESS_DETACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - break; - } - return true; -} diff --git a/zen/FindFilePlus/find_file_plus.cpp b/zen/FindFilePlus/find_file_plus.cpp deleted file mode 100644 index 247b916c..00000000 --- a/zen/FindFilePlus/find_file_plus.cpp +++ /dev/null @@ -1,452 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "find_file_plus.h" -#include "init_dll_binding.h" -//#include <windows.h> //these two don't play nice with each other -#include "load_dll.h" -#include <new> - -using namespace dll; -using namespace findplus; - - -namespace -{ -struct NtFileError //exception class -{ - NtFileError(NTSTATUS errorCode) : ntError(errorCode) {} - NTSTATUS ntError; -}; - - -//-------------------------------------------------------------------------------------------------------------- -typedef NTSTATUS (NTAPI* NtOpenFileFunc)(PHANDLE fileHandle, - ACCESS_MASK desiredAccess, - POBJECT_ATTRIBUTES objectAttributes, - PIO_STATUS_BLOCK ioStatusBlock, - ULONG shareAccess, - ULONG openOptions); - -typedef NTSTATUS (NTAPI* NtCloseFunc)(HANDLE handle); - -typedef NTSTATUS (NTAPI* NtQueryDirectoryFileFunc)(HANDLE fileHandle, - HANDLE event, - PIO_APC_ROUTINE apcRoutine, - PVOID apcContext, - PIO_STATUS_BLOCK ioStatusBlock, - PVOID fileInformation, - ULONG length, - FILE_INFORMATION_CLASS fileInformationClass, - BOOLEAN ReturnSingleEntry, - PUNICODE_STRING fileMask, - BOOLEAN restartScan); - -typedef ULONG (NTAPI* RtlNtStatusToDosErrorFunc)(NTSTATUS /*__in status*/); - -typedef struct _RTL_RELATIVE_NAME_U -{ - UNICODE_STRING RelativeName; - HANDLE ContainingDirectory; - PVOID /*PRTLP_CURDIR_REF*/ CurDirRef; -} RTL_RELATIVE_NAME_U, *PRTL_RELATIVE_NAME_U; - -typedef BOOLEAN (NTAPI* RtlDosPathNameToNtPathName_UFunc)(PCWSTR dosFileName, //__in - PUNICODE_STRING ntFileName, //__out - PCWSTR* filePart, //__out - PRTL_RELATIVE_NAME_U relativeName); //__out - -typedef BOOLEAN (NTAPI* RtlDosPathNameToRelativeNtPathName_UFunc)(PCWSTR dosFileName, //__in - PUNICODE_STRING ntFileName, //__out - PCWSTR* filePart, //__out - PRTL_RELATIVE_NAME_U relativeName); //__out - -typedef BOOLEAN (NTAPI* RtlCreateUnicodeStringFunc)(PUNICODE_STRING DestinationString, //_Out_ - PCWSTR SourceString); //_In_ - -typedef VOID (NTAPI* RtlFreeUnicodeStringFunc)(PUNICODE_STRING); //__inout unicodeString - -//-------------------------------------------------------------------------------------------------------------- - -//it seems we cannot use any of the ntoskrnl.lib files in WinDDK as they produce access violations -//fortunately dynamic binding works fine: -const SysDllFun<NtOpenFileFunc> ntOpenFile (L"ntdll.dll", "NtOpenFile"); -const SysDllFun<NtCloseFunc> ntClose (L"ntdll.dll", "NtClose"); -const SysDllFun<NtQueryDirectoryFileFunc> ntQueryDirectoryFile (L"ntdll.dll", "NtQueryDirectoryFile"); -const SysDllFun<RtlNtStatusToDosErrorFunc> rtlNtStatusToDosError (L"ntdll.dll", "RtlNtStatusToDosError"); -const SysDllFun<RtlCreateUnicodeStringFunc> rtlCreateUnicodeString (L"ntdll.dll", "RtlCreateUnicodeString"); -const SysDllFun<RtlFreeUnicodeStringFunc> rtlFreeUnicodeString (L"ntdll.dll", "RtlFreeUnicodeString"); -const SysDllFun<RtlDosPathNameToNtPathName_UFunc> rtlDosPathNameToNtPathName_U(SysDllFun<RtlDosPathNameToRelativeNtPathName_UFunc>(L"ntdll.dll", "RtlDosPathNameToRelativeNtPathName_U") ? - SysDllFun<RtlDosPathNameToRelativeNtPathName_UFunc>(L"ntdll.dll", "RtlDosPathNameToRelativeNtPathName_U") : //use the newer version if available - SysDllFun<RtlDosPathNameToNtPathName_UFunc>(L"ntdll.dll", "RtlDosPathNameToNtPathName_U")); //fallback for XP -//global constants only -> preserve thread safety! -} - - -bool findplus::initDllBinding() //evaluate in ::DllMain() when attaching process -{ - //NT/ZwXxx Routines - //http://msdn.microsoft.com/en-us/library/ff567122(v=VS.85).aspx - - //Run-Time Library (RTL) Routines - //http://msdn.microsoft.com/en-us/library/ff563638(v=VS.85).aspx - - //verify dynamic dll binding - return ntOpenFile && - ntClose && - ntQueryDirectoryFile && - rtlNtStatusToDosError && - rtlCreateUnicodeString && - rtlFreeUnicodeString && - rtlDosPathNameToNtPathName_U; - - //this may become handy some time: nt status code STATUS_ORDINAL_NOT_FOUND maps to win32 code ERROR_INVALID_ORDINAL -} - - -class findplus::FileSearcher -{ -public: - FileSearcher(const wchar_t* dirname); //throw NtFileError - ~FileSearcher(); - - bool readDir(FileInformation& output); //throw NtFileError; returns false if "no more files" - -private: - template <class QueryPolicy> bool readDirImpl(FileInformation& output); //throw NtFileError - - UNICODE_STRING dirnameNt; //it seems hDir implicitly keeps a reference to this, at least ::FindFirstFile() does no cleanup before ::FindClose()! - HANDLE hDir; - - ULONG nextEntryOffset; //!= 0 if entry is waiting in buffer - //::FindNextFileW() uses 0x1000 = 4096 = sizeof(FILE_BOTH_DIR_INFORMATION) + sizeof(TCHAR) * 2000 - //=> let's use the same, even if our header is 16 byte larger; maybe there is some packet size advantage for networks? Note that larger buffers seem to degrade performance. - static const ULONG BUFFER_SIZE = 4096; - LONGLONG buffer[BUFFER_SIZE / sizeof(LONGLONG)]; //buffer needs to be aligned at LONGLONG boundary - - static_assert(BUFFER_SIZE % sizeof(LONGLONG) == 0, "ups, our buffer is trimmed!"); -}; - - -//a simple scope guard without <utility>, <type_traits>, <cassert> dependencies: -template <typename F> -class ScopeGuardLean -{ -public: - explicit ScopeGuardLean(F fun) : dismissed_(false), fun_(fun) {} - ScopeGuardLean(ScopeGuardLean&& other) : dismissed_(other.dismissed_), fun_(std::move(other.fun_)) { other.dismiss(); } - - void dismiss() { dismissed_ = true; } - - ~ScopeGuardLean() - { - if (!dismissed_) - try { fun_(); } - catch (...) {} - } - -private: - ScopeGuardLean (const ScopeGuardLean&); // = delete - ScopeGuardLean& operator=(const ScopeGuardLean&); // - - bool dismissed_; - F fun_; -}; - -template <class F> inline -ScopeGuardLean<F> makeGuard(F fun) { return ScopeGuardLean<F>(fun); } - - -FileSearcher::FileSearcher(const wchar_t* dirname) : - dirnameNt(), //[!] - hDir(nullptr), - nextEntryOffset(0) -{ - auto guardConstructor = makeGuard([&] { this->~FileSearcher(); }); - //-------------------------------------------------------------------------------------------------------------- - - //convert dosFileName, e.g. C:\Users or \\?\C:\Users to ntFileName \??\C:\Users - //in contrast to ::FindFirstFile() implementation we don't evaluate the relativeName, - //however tests indicate ntFileName is *always* filled with an absolute name, even if dosFileName is relative - - PCWSTR filePart = nullptr; - RTL_RELATIVE_NAME_U relativeName = {}; - - //NOTE: RtlDosPathNameToNtPathName_U may be used on all XP/Win7/Win8 for compatibility - // RtlDosPathNameToNtPathName_U: used by Windows XP available with OS version 3.51 (Windows NT) and higher - // RtlDosPathNameToRelativeNtPathName_U: used by Win7/Win8 available with OS version 5.2 (Windows Server 2003) and higher - if (!rtlDosPathNameToNtPathName_U(dirname, //__in dosFileName, - &dirnameNt, //__out ntFileName, - &filePart, //__out FilePart - points into ntFileName - &relativeName)) //__out relativeName - points into ntFileName; empty if dosFileName is absolute - throw NtFileError(STATUS_OBJECT_PATH_NOT_FOUND); //translates to ERROR_PATH_NOT_FOUND, same behavior like ::FindFirstFileEx() - //note 1: internally it distinguishes between "quick path" == \\?\ and "slow path" handling! - //http://doxygen.reactos.org/d9/d6e/lib_2rtl_2path_8c_a11c87ad0f7752999b0b8972af6165d7a.html#a11c87ad0f7752999b0b8972af6165d7a - - //note 2: without \\?\, i.e. slow path handling it calls RtlGetFullPathName_Ustr() which removes trailing spaces!!! - //http://doxygen.reactos.org/d9/d6e/lib_2rtl_2path_8c_a8624b864678ca64b031f5fc273e022af.html#a8624b864678ca64b031f5fc273e022af - //FindFirstFile() gets lucky because it passes "<dirname>\*" which never has trailing space chars! >:( - - OBJECT_ATTRIBUTES objAttr = {}; - if (relativeName.RelativeName.Length == 0) //absolute name - { - InitializeObjectAttributes(&objAttr, //[out] POBJECT_ATTRIBUTES initializedAttributes, - &dirnameNt, //[in] PUNICODE_STRING objectName, - OBJ_CASE_INSENSITIVE, //[in] ULONG attributes, - nullptr, //[in] HANDLE rootDirectory, - nullptr); //[in, optional] PSECURITY_DESCRIPTOR securityDescriptor - } - else //relative name (it seems we alternatively could also use dirnameNt here?) - { - InitializeObjectAttributes(&objAttr, //[out] POBJECT_ATTRIBUTES initializedAttributes, - &relativeName.RelativeName, //[in] PUNICODE_STRING objectName, - OBJ_CASE_INSENSITIVE, //[in] ULONG attributes, - relativeName.ContainingDirectory, //[in] HANDLE rootDirectory, - nullptr); //[in, optional] PSECURITY_DESCRIPTOR securityDescriptor - } - - { - IO_STATUS_BLOCK status = {}; - NTSTATUS rv = ntOpenFile(&hDir, //__out PHANDLE FileHandle, - FILE_LIST_DIRECTORY | SYNCHRONIZE, //__in ACCESS_MASK desiredAccess, - 100001 used by ::FindFirstFile() on all XP/Win7/Win8 - &objAttr, //__in POBJECT_ATTRIBUTES objectAttributes, - &status, //__out PIO_STATUS_BLOCK ioStatusBlock, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, //__in ULONG shareAccess, - 7 on Win7/Win8, 3 on XP - FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT | FILE_OPEN_FOR_BACKUP_INTENT); //__in ULONG openOptions - 4021 used on all XP/Win7/Win8 - if (!NT_SUCCESS(rv)) - throw NtFileError(rv); - } - - guardConstructor.dismiss(); -} - - -inline -FileSearcher::~FileSearcher() -{ - //cleanup in reverse order - if (hDir) - ntClose(hDir); - - if (dirnameNt.Buffer) - rtlFreeUnicodeString(&dirnameNt); //cleanup identical to ::FindFirstFile() - //note that most of this function seems inlined by the linker, so that its assembly looks equivalent to "RtlFreeHeap(RtlGetProcessHeap(), 0, ntPathName.Buffer)" -} - - -namespace -{ -/* -Common C-style policy handling directory traversal: - -struct QueryPolicy -{ - typedef ... RawFileInfo; - static const FILE_INFORMATION_CLASS fileInformationClass = ...; - static void extractFileId(const RawFileInfo& rawInfo, FileInformation& fileInfo); -}; -*/ - -struct DirQueryDefault //as implemented in Win32 FindFirstFile()/FindNextFile() -{ - typedef FILE_BOTH_DIR_INFORMATION RawFileInfo; - static const FILE_INFORMATION_CLASS fileInformationClass = FileBothDirectoryInformation; - static void extractFileId(const RawFileInfo& rawInfo, FileInformation& fileInfo) { fileInfo.fileId.QuadPart = 0; } -}; - -struct DirQueryFileId -{ - typedef FILE_ID_BOTH_DIR_INFORMATION RawFileInfo; - static const FILE_INFORMATION_CLASS fileInformationClass = FileIdBothDirectoryInformation; - static void extractFileId(const RawFileInfo& rawInfo, FileInformation& fileInfo) - { - fileInfo.fileId.QuadPart = rawInfo.FileId.QuadPart; //may be 0 even in this context, e.g. for mapped FTP drive! - static_assert(sizeof(fileInfo.fileId) == sizeof(rawInfo.FileId), "dang!"); - } -}; -} - - -inline -bool FileSearcher::readDir(FileInformation& output) { return readDirImpl<DirQueryFileId>(output); } //throw NtFileError - - -template <class QueryPolicy> -bool FileSearcher::readDirImpl(FileInformation& output) //throw NtFileError; returns false if "no more files" -{ - //although FILE_ID_FULL_DIR_INFORMATION should suffice for our purposes, there are problems on Windows XP for certain directories, e.g. "\\Vboxsvr\build" - //making NtQueryDirectoryFile() return with STATUS_INVALID_PARAMETER while other directories, e.g. "C:\" work fine for some reason - //FILE_ID_BOTH_DIR_INFORMATION on the other hand works on XP/Win7/Win8 - //performance: there is no noticeable difference between FILE_ID_BOTH_DIR_INFORMATION and FILE_ID_FULL_DIR_INFORMATION - - /* corresponding first access in ::FindFirstFileW() - - NTSTATUS rv = ntQueryDirectoryFile(hDir, //__in HANDLE fileHandle, - nullptr, //__in_opt HANDLE event, - nullptr, //__in_opt PIO_APC_ROUTINE apcRoutine, - nullptr, //__in_opt PVOID apcContext, - &status, //__out PIO_STATUS_BLOCK ioStatusBlock, - &buffer, //__out_bcount(Length) PVOID fileInformation, - BUFFER_SIZE, //__in ULONG length, ::FindFirstFileW() on all XP/Win7/Win8 uses sizeof(FILE_BOTH_DIR_INFORMATION) + sizeof(TCHAR) * MAX_PATH == 0x268 - FileIdBothDirectoryInformation, //__in FILE_INFORMATION_CLASS fileInformationClass - all XP/Win7/Win8 use "FileBothDirectoryInformation" - true, //__in BOOLEAN returnSingleEntry, - nullptr, //__in_opt PUNICODE_STRING mask, - false); //__in BOOLEAN restartScan - */ - - //analog to ::FindNextFileW() with performance optimized access (in contrast to first access in ::FindFirstFileW()) - if (nextEntryOffset == 0) - { - IO_STATUS_BLOCK status = {}; - NTSTATUS rv = ntQueryDirectoryFile(hDir, //__in HANDLE fileHandle, - nullptr, //__in_opt HANDLE event, - nullptr, //__in_opt PIO_APC_ROUTINE apcRoutine, - nullptr, //__in_opt PVOID apcContext, - &status, //__out PIO_STATUS_BLOCK ioStatusBlock, - &buffer, //__out_bcount(Length) PVOID fileInformation, - BUFFER_SIZE, //__in ULONG length, ::FindNextFileW() on all XP/Win7/Win8 uses sizeof(FILE_BOTH_DIR_INFORMATION) + sizeof(TCHAR) * 2000 == 0x1000 - QueryPolicy::fileInformationClass, //__in FILE_INFORMATION_CLASS fileInformationClass - all XP/Win7/Win8 use "FileBothDirectoryInformation" - false, //__in BOOLEAN returnSingleEntry, - nullptr, //__in_opt PUNICODE_STRING mask, - false); //__in BOOLEAN restartScan - if (!NT_SUCCESS(rv)) - { - /* - fallback to default directory query method, if FileIdBothDirectoryInformation is not properly implemented - this is required for NetDrive mounted Webdav, e.g. www.box.net and NT4, 2000 remote drives, et al. - - NT status code | Win32 error code - --------------------------------|------------------------ - STATUS_INVALID_LEVEL | ERROR_INVALID_LEVEL - STATUS_NOT_SUPPORTED | ERROR_NOT_SUPPORTED - STATUS_UNEXPECTED_NETWORK_ERROR | ERROR_UNEXP_NET_ERR -> traverse network drive hosted by Win98 - STATUS_INVALID_PARAMETER | ERROR_INVALID_PARAMETER - STATUS_INVALID_NETWORK_RESPONSE | ERROR_BAD_NET_RESP - STATUS_INVALID_INFO_CLASS | ERROR_INVALID_PARAMETER - STATUS_UNSUCCESSFUL | ERROR_GEN_FAILURE - STATUS_ACCESS_VIOLATION | ERROR_NOACCESS ->FileIdBothDirectoryInformation on XP accessing UDF - STATUS_NO_SUCH_FILE | ERROR_FILE_NOT_FOUND - - rv == STATUS_NO_SUCH_FILE: - failure to find a file on first call returns STATUS_NO_SUCH_FILE, while subsequent accesses return STATUS_NO_MORE_FILES - note: not all directories contain ".", ".." entries! E.g. a drive's root directory or NetDrive + ftp.gnu.org\CRYPTO.README" - -> addon: this is NOT a directory, it looks like one in NetDrive, but it's a file in Opera - STATUS_NO_SUCH_FILE is abused by some citrix shares instead of "STATUS_INVALID_PARAMETER" so we treat it as such! - => since the directory is "truly empty" a fallback won't hurt - */ - if (rv == STATUS_NO_MORE_FILES) //perf: don't throw an exception in this common case! => 8% perf boost for FFS comparison phase! - return false; - - if (rv == STATUS_NOT_SUPPORTED || - rv == STATUS_INVALID_LEVEL || - rv == STATUS_NO_SUCH_FILE || //[!] - rv == STATUS_UNEXPECTED_NETWORK_ERROR || - rv == STATUS_INVALID_PARAMETER || - rv == STATUS_INVALID_NETWORK_RESPONSE || - rv == STATUS_INVALID_INFO_CLASS || - //rv == STATUS_NOT_IMPLEMENTED || -> first confirm that these codes - //rv == STATUS_INVALID_DEVICE_REQUEST || -> are in fact used! - rv == STATUS_UNSUCCESSFUL || - rv == STATUS_ACCESS_VIOLATION) - rv = STATUS_NOT_SUPPORTED; - - throw NtFileError(rv); //throws STATUS_NO_MORE_FILES when finished - } - - // for (NTSTATUS i = 0xC0000000L; i != -1; ++i) - // { - // if (rtlNtStatusToDosError(i) == 59) //ERROR_UNEXP_NET_ERR - // __debugbreak(); //__asm int 3; - // } - - if (status.Information == 0) //except for the first call to call ::NtQueryDirectoryFile(): - throw NtFileError(STATUS_BUFFER_OVERFLOW); //if buffer size is too small, return value is STATUS_SUCCESS and Information == 0 -> we don't expect this! - } - - typedef typename QueryPolicy::RawFileInfo RawFileInfo; - const RawFileInfo& dirInfo = *reinterpret_cast<RawFileInfo*>(reinterpret_cast<char*>(buffer) + nextEntryOffset); - - if (dirInfo.NextEntryOffset == 0) - nextEntryOffset = 0; //our offset is relative to the beginning of the buffer - else - nextEntryOffset += dirInfo.NextEntryOffset; - - - auto toFileTime = [](const LARGE_INTEGER& rawTime) -> FILETIME - { - FILETIME tmp = { rawTime.LowPart, rawTime.HighPart }; - return tmp; - }; - - QueryPolicy::extractFileId(dirInfo, output); - - output.creationTime = toFileTime(dirInfo.CreationTime); - output.lastWriteTime = toFileTime(dirInfo.LastWriteTime); //the similar field "ChangeTime" refers to changes to metadata in addition to write accesses - output.fileSize.QuadPart = dirInfo.EndOfFile.QuadPart; - output.fileAttributes = dirInfo.FileAttributes; - output.shortNameLength = dirInfo.FileNameLength / sizeof(TCHAR); //FileNameLength is in bytes! - - if (dirInfo.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) //analog to FindFirstFile(), confirmed for Win XP and Win 7 - output.reparseTag = dirInfo.EaSize; // - else - output.reparseTag = 0; - - if (dirInfo.FileNameLength + sizeof(TCHAR) > sizeof(output.shortName)) //this may actually happen if ::NtQueryDirectoryFile() decides to return a - throw NtFileError(STATUS_BUFFER_OVERFLOW); //short name of length MAX_PATH + 1, 0-termination is not required! - - ::memcpy(output.shortName, dirInfo.FileName, dirInfo.FileNameLength); - output.shortName[output.shortNameLength] = 0; //NOTE: FILE_ID_BOTH_DIR_INFORMATION::FileName in general is NOT 0-terminated! It is on XP/Win7, but NOT on Win8! - - static_assert(sizeof(output.creationTime) == sizeof(dirInfo.CreationTime), "dang!"); - static_assert(sizeof(output.lastWriteTime) == sizeof(dirInfo.LastWriteTime), "dang!"); - static_assert(sizeof(output.fileSize) == sizeof(dirInfo.EndOfFile), "dang!"); - static_assert(sizeof(output.fileAttributes) == sizeof(dirInfo.FileAttributes), "dang!"); - return true; -} - - -FindHandle findplus::openDir(const wchar_t* dirname) -{ - try - { - return new FileSearcher(dirname); //throw NtFileError, std::bad_alloc - } - catch (const NtFileError& e) - { - setWin32Error(rtlNtStatusToDosError(e.ntError)); - return nullptr; - } - catch (const std::bad_alloc&) //not unlikely in file sync context! => handle! - { - setWin32Error(rtlNtStatusToDosError(STATUS_NO_MEMORY)); - return nullptr; - } -} - - -bool findplus::readDir(FindHandle hnd, FileInformation& output) -{ - try - { - if (!hnd->readDir(output)) //throw NtFileError - { - setWin32Error(rtlNtStatusToDosError(STATUS_NO_MORE_FILES)); - return false; - } - return true; - } - catch (const NtFileError& e) - { - setWin32Error(rtlNtStatusToDosError(e.ntError)); - return false; - } -} - - -void findplus::closeDir(FindHandle hnd) -{ - delete hnd; -} diff --git a/zen/FindFilePlus/find_file_plus.h b/zen/FindFilePlus/find_file_plus.h deleted file mode 100644 index a26bdeb3..00000000 --- a/zen/FindFilePlus/find_file_plus.h +++ /dev/null @@ -1,92 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef FIND_FIRST_FILE_PLUS_HEADER_087483434 -#define FIND_FIRST_FILE_PLUS_HEADER_087483434 - -#ifdef FIND_FILE_PLUS_DLL_EXPORTS -#define DLL_FUNCTION_DECLARATION extern "C" __declspec(dllexport) -#else -#define DLL_FUNCTION_DECLARATION extern "C" __declspec(dllimport) -#endif - - -#ifdef FIND_FILE_PLUS_DLL_EXPORTS -#include <Ntifs.h> //driver level headers must be included *before* windows api headers! -#endif -#include <windef.h> // -#undef min -#undef max - -#include <zen/build_info.h> - -namespace findplus -{ -/*-------------- - |declarations| - --------------*/ - -struct FileInformation -{ - FILETIME creationTime; - FILETIME lastWriteTime; - ULARGE_INTEGER fileSize; - ULARGE_INTEGER fileId; //optional: may be 0 if not supported - DWORD fileAttributes; - DWORD reparseTag; //set if "fileAttributes & FILE_ATTRIBUTE_REPARSE_POINT" - DWORD shortNameLength; - WCHAR shortName[MAX_PATH + 1]; //shortName is 0-terminated -}; //no need for #pragma pack -> all members are perfectly 4, 8 byte aligned! - -class FileSearcher; -typedef FileSearcher* FindHandle; - -DLL_FUNCTION_DECLARATION -FindHandle openDir(const wchar_t* dirname); //returns nullptr on error, call ::GetLastError() -//note: do NOT place an asterisk at end, e.g. C:\SomeDir\*, as you would do for ::FindFirstFile() - -DLL_FUNCTION_DECLARATION -bool readDir(FindHandle hnd, FileInformation& output); //returns false on error or if there are no more files; ::GetLastError() returns ERROR_NO_MORE_FILES in this case -/* -warning: may also return with ERROR_NOT_SUPPORTED if "FileIdBothDirectoryInformation" is not supported! We need a fallback: - - sometimes it's *not* sufficient to use fallback for NtQueryDirectoryFile() alone, we need to reset "hDir", since it may be fucked up by some poor file system layer implementation: - - Samba before v3.0.22 (Mar 30, 2006) seems to have a bug which sucessfully returns 128 elements via NtQueryDirectoryFile() and FileIdBothDirectoryInformation, - then fails with STATUS_INVALID_LEVEL. Fallback to FileBothDirectoryInformation will return STATUS_NO_MORE_FILES, even if there *are* more files - - NtQueryDirectoryFile() may *not* respect "restartScan" for some weird Win2000 file system drivers, so we cannot rely on this as a replacement for a "hDir" reset - - Windows 7 Remote Desktop sharing does not work unless "hDir" is reset! - => let's assume worst case in general and do a reset! - perf note: implementing this reset at a folder level is possible, but a huge perf-killer (additional open/close handle), therefore fallback must apply to a complete folder (sub-)tree! - => caller needs to handle this and implement FindFirstFile()/FindNextFile() fallback! -*/ - -DLL_FUNCTION_DECLARATION -void closeDir(FindHandle hnd); - -/*---------- - |typedefs| - ----------*/ -typedef FindHandle (*FunType_openDir )(const wchar_t* dirname); -typedef bool (*FunType_readDir )(FindHandle hnd, FileInformation& dirInfo); -typedef void (*FunType_closeDir)(FindHandle hnd); - -/*-------------- - |symbol names| - --------------*/ -//const pointers ensure internal linkage -const char funName_openDir [] = "openDir"; -const char funName_readDir [] = "readDir"; -const char funName_closeDir[] = "closeDir"; - -/*--------------- - |library names| - ---------------*/ -inline const wchar_t* getDllName() { return zen::is64BitBuild ? L"FindFilePlus_x64.dll" : L"FindFilePlus_Win32.dll"; } -} - -#undef DLL_FUNCTION_DECLARATION - -#endif //FIND_FIRST_FILE_PLUS_HEADER_087483434 diff --git a/zen/FindFilePlus/init_dll_binding.h b/zen/FindFilePlus/init_dll_binding.h deleted file mode 100644 index 44591ab4..00000000 --- a/zen/FindFilePlus/init_dll_binding.h +++ /dev/null @@ -1,16 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef INIT_DLL_BINDING_HEADER_018356031467832145 -#define INIT_DLL_BINDING_HEADER_018356031467832145 - -namespace findplus -{ -//load and check dll binding at startup -bool initDllBinding(); //evaluate in ::DllMain() when attaching process -} - -#endif //INIT_DLL_BINDING_HEADER_018356031467832145 diff --git a/zen/FindFilePlus/load_dll.cpp b/zen/FindFilePlus/load_dll.cpp deleted file mode 100644 index c9396f6d..00000000 --- a/zen/FindFilePlus/load_dll.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "load_dll.h" -#define WIN32_LEAN_AND_MEAN -#include <zen/win.h> - -void* /*FARPROC*/ dll::loadSymbol(const wchar_t* libraryName, const char* functionName) -{ - return ::GetProcAddress(::GetModuleHandle(libraryName), functionName); - //cleanup neither required nor allowed (::FreeLibrary()) - -} -//note: void* and FARPROC function pointer have same binary size on Windows - - -void dll::setWin32Error(unsigned long lastError) -{ - ::SetLastError(lastError); -} diff --git a/zen/FindFilePlus/load_dll.h b/zen/FindFilePlus/load_dll.h deleted file mode 100644 index d661c4b9..00000000 --- a/zen/FindFilePlus/load_dll.h +++ /dev/null @@ -1,45 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef LOAD_DLL_HEADER_0312463214872163832174 -#define LOAD_DLL_HEADER_0312463214872163832174 - -namespace dll -{ -void setWin32Error(unsigned long lastError); - -//NOTE: uses ::GetModuleHandle => call for system DLLs only! -template <class Func> -class SysDllFun -{ -public: - SysDllFun(const wchar_t* systemLibrary, const char* functionName) : - fun(reinterpret_cast<Func>(loadSymbol(systemLibrary, functionName))) {} - - operator Func() const { return fun; } - -private: - Func fun; -}; - - - - - - - - - - - - - - - -void* /*FARPROC*/ loadSymbol(const wchar_t* libraryName, const char* functionName); -} - -#endif //LOAD_DLL_HEADER_0312463214872163832174 diff --git a/zen/IFileOperation/FileOperation.vcxproj b/zen/IFileOperation/FileOperation.vcxproj deleted file mode 100644 index 3f6923f3..00000000 --- a/zen/IFileOperation/FileOperation.vcxproj +++ /dev/null @@ -1,179 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectName>FileOperation</ProjectName> - <ProjectGuid>{F6D3A51C-15EF-4710-BB67-3FCE9C0B5D92}</ProjectGuid> - <RootNamespace>ShadowDll</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120_xp</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\FreeFileSync\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\FreeFileSync\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\FreeFileSync\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\FreeFileSync\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\FreeFileSync\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\FreeFileSync\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\FreeFileSync\Build\Bin\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\FreeFileSync\Obj\$(ProjectName)_VCPP_$(PlatformName)_$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName)_$(Platform)</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName)_$(Platform)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WXINTL_NO_GETTEXT_MACRO;ZEN_WIN;_DEBUG;_WINDOWS;_USRDLL;FILE_OP_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;C:\Data\C++\boost</AdditionalIncludeDirectories> - <SmallerTypeCheck>true</SmallerTypeCheck> - <ForcedIncludeFiles>zen/warn_static.h</ForcedIncludeFiles> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib</AdditionalLibraryDirectories> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WXINTL_NO_GETTEXT_MACRO;ZEN_WIN;_DEBUG;_WINDOWS;_USRDLL;FILE_OP_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;C:\Data\C++\boost</AdditionalIncludeDirectories> - <SmallerTypeCheck>true</SmallerTypeCheck> - <ForcedIncludeFiles>zen/warn_static.h</ForcedIncludeFiles> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib</AdditionalLibraryDirectories> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <PreprocessorDefinitions>WXINTL_NO_GETTEXT_MACRO;ZEN_WIN;NDEBUG;_WINDOWS;_USRDLL;FILE_OP_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;C:\Data\C++\boost</AdditionalIncludeDirectories> - <ForcedIncludeFiles>zen/warn_static.h</ForcedIncludeFiles> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib</AdditionalLibraryDirectories> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <PreprocessorDefinitions>WXINTL_NO_GETTEXT_MACRO;ZEN_WIN;NDEBUG;_WINDOWS;_USRDLL;FILE_OP_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level4</WarningLevel> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <DisableSpecificWarnings>4100;4996;4512</DisableSpecificWarnings> - <AdditionalIncludeDirectories>C:\Data\Projects;C:\Data\C++\boost</AdditionalIncludeDirectories> - <ForcedIncludeFiles>zen/warn_static.h</ForcedIncludeFiles> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib</AdditionalLibraryDirectories> - <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\debug_memory_leaks.cpp" /> - <ClCompile Include="..\dst_hack.cpp" /> - <ClCompile Include="..\file_handling.cpp" /> - <ClCompile Include="..\file_traverser.cpp" /> - <ClCompile Include="..\privilege.cpp" /> - <ClCompile Include="..\zstring.cpp" /> - <ClCompile Include="file_op.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="file_op.h" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> -</Project>
\ No newline at end of file diff --git a/zen/IFileOperation/file_op.cpp b/zen/IFileOperation/file_op.cpp deleted file mode 100644 index 27a2565b..00000000 --- a/zen/IFileOperation/file_op.cpp +++ /dev/null @@ -1,541 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "file_op.h" -#include <algorithm> -#include <string> -#include <vector> - -#define WIN32_LEAN_AND_MEAN -#include <zen/com_ptr.h> -#include <zen/com_error.h> -#include <zen/scope_guard.h> -#include <zen/stl_tools.h> -#include <zen/file_handling.h> - -#include <boost/thread/tss.hpp> - -#include <RestartManager.h> -#pragma comment(lib, "Rstrtmgr.lib") - -#define STRICT_TYPED_ITEMIDS //better type safety for IDLists -#include <Shlobj.h> -#include <shobjidl.h> -#include <shellapi.h> //shell constants such as FO_* values - -using namespace zen; - - -namespace -{ -std::vector<std::wstring> getLockingProcesses(const wchar_t* filename); //throw SysError - - -class RecyclerProgressCallback : public IFileOperationProgressSink -{ - //Sample implementation: %ProgramFiles%\Microsoft SDKs\Windows\v7.1\Samples\winui\shell\appplatform\FileOperationProgressSink - - ~RecyclerProgressCallback() {} //private: do not allow stack usage "thanks" to IUnknown lifetime management! - -public: - RecyclerProgressCallback(fileop::RecyclerCallback callback, void* sink) : - cancellationRequested(false), - callback_(callback), - sink_(sink), - refCount(1) {} - - //IUnknown: reference implementation according to: http://msdn.microsoft.com/en-us/library/office/cc839627.aspx - virtual ULONG STDMETHODCALLTYPE AddRef() - { - return ::InterlockedIncrement(&refCount); - } - - virtual ULONG STDMETHODCALLTYPE Release() - { - ULONG newRefCount = ::InterlockedDecrement(&refCount); - if (newRefCount == 0) //race condition caveat: do NOT check refCount, which might have changed already! - delete this; - return newRefCount; - } - - virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void __RPC_FAR* __RPC_FAR* ppvObject) - { - if (!ppvObject) - return E_INVALIDARG; - - if (riid == IID_IUnknown || riid == IID_IFileOperationProgressSink) - { - *ppvObject = this; - AddRef(); - return S_OK; - } - *ppvObject = NULL; - return E_NOINTERFACE; - } - - //IFileOperationProgressSink - virtual HRESULT STDMETHODCALLTYPE StartOperations() { return S_OK; } - virtual HRESULT STDMETHODCALLTYPE FinishOperations(HRESULT hrResult) { return S_OK; } - virtual HRESULT STDMETHODCALLTYPE PreRenameItem (DWORD dwFlags, __RPC__in_opt IShellItem* psiItem, __RPC__in_opt_string LPCWSTR pszNewName) { return S_OK; } - virtual HRESULT STDMETHODCALLTYPE PostRenameItem (DWORD dwFlags, __RPC__in_opt IShellItem* psiItem, __RPC__in_string LPCWSTR pszNewName, HRESULT hrRename, __RPC__in_opt IShellItem* psiNewlyCreated) { return S_OK; } - virtual HRESULT STDMETHODCALLTYPE PreMoveItem (DWORD dwFlags, __RPC__in_opt IShellItem* psiItem, __RPC__in_opt IShellItem* psiDestinationFolder, __RPC__in_opt_string LPCWSTR pszNewName) { return S_OK; } - virtual HRESULT STDMETHODCALLTYPE PostMoveItem (DWORD dwFlags, __RPC__in_opt IShellItem* psiItem, __RPC__in_opt IShellItem* psiDestinationFolder, __RPC__in_opt_string LPCWSTR pszNewName, HRESULT hrMove, __RPC__in_opt IShellItem* psiNewlyCreated) { return S_OK; } - virtual HRESULT STDMETHODCALLTYPE PreCopyItem (DWORD dwFlags, __RPC__in_opt IShellItem* psiItem, __RPC__in_opt IShellItem* psiDestinationFolder, __RPC__in_opt_string LPCWSTR pszNewName) { return S_OK; } - virtual HRESULT STDMETHODCALLTYPE PostCopyItem (DWORD dwFlags, __RPC__in_opt IShellItem* psiItem, __RPC__in_opt IShellItem* psiDestinationFolder, __RPC__in_opt_string LPCWSTR pszNewName, HRESULT hrCopy, __RPC__in_opt IShellItem* psiNewlyCreated) { return S_OK; } - virtual HRESULT STDMETHODCALLTYPE PreNewItem (DWORD dwFlags, __RPC__in_opt IShellItem* psiDestinationFolder, __RPC__in_opt_string LPCWSTR pszNewName) { return S_OK; } - virtual HRESULT STDMETHODCALLTYPE PostNewItem (DWORD dwFlags, __RPC__in_opt IShellItem* psiDestinationFolder, __RPC__in_opt_string LPCWSTR pszNewName, __RPC__in_opt_string LPCWSTR pszTemplateName, DWORD dwFileAttributes, HRESULT hrNew, __RPC__in_opt IShellItem* psiNewItem) { return S_OK; } - - virtual HRESULT STDMETHODCALLTYPE PreDeleteItem(DWORD dwFlags, __RPC__in_opt IShellItem* psiItem) - { - if (psiItem) - { - LPWSTR itemPath = nullptr; - if (SUCCEEDED(psiItem->GetDisplayName(SIGDN_FILESYSPATH, &itemPath))) //will fail for long file paths > MAX_PATH! - { - ZEN_ON_SCOPE_EXIT(::CoTaskMemFree(itemPath)); - currentItem = itemPath; - } - else if (SUCCEEDED(psiItem->GetDisplayName(SIGDN_NORMALDISPLAY, &itemPath))) //short name only; should work even for long file paths! - { - ZEN_ON_SCOPE_EXIT(::CoTaskMemFree(itemPath)); - currentItem = itemPath; - } - else - currentItem = L"<unknown file>"; //give some indication that file name determination failed (rather than leaving the name empty!) - } - //"Returns S_OK if successful, or an error value otherwise. In the case of an error value, the delete operation - //and all subsequent operations pending from the call to IFileOperation are canceled." - return cancellationRequested ? HRESULT_FROM_WIN32(ERROR_CANCELLED) : S_OK; - } - - virtual HRESULT STDMETHODCALLTYPE PostDeleteItem(DWORD dwFlags, - __RPC__in_opt IShellItem* psiItem, - HRESULT hrDelete, - __RPC__in_opt IShellItem* psiNewlyCreated) - { - if (FAILED(hrDelete)) - lastError = make_unique<std::pair<std::wstring, HRESULT>>(currentItem, hrDelete); - - currentItem.clear(); - //"Returns S_OK if successful, or an error value otherwise. In the case of an error value, - //all subsequent operations pending from the call to IFileOperation are canceled." - return cancellationRequested ? HRESULT_FROM_WIN32(ERROR_CANCELLED) : S_OK; - } - - virtual HRESULT STDMETHODCALLTYPE UpdateProgress(UINT iWorkTotal, UINT iWorkSoFar) - { - if (callback_) - try - { - if (!callback_(currentItem.c_str(), sink_)) //should not throw! - cancellationRequested = true; - } - catch (...) { return E_UNEXPECTED; } - //"If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code." - //-> this probably means, we cannot rely on returning a custom error code here and have IFileOperation::PerformOperations() fail with same - //=> defer cancellation to PreDeleteItem()/PostDeleteItem() - return S_OK; - } - virtual HRESULT STDMETHODCALLTYPE ResetTimer () { return S_OK; } - virtual HRESULT STDMETHODCALLTYPE PauseTimer () { return S_OK; } - virtual HRESULT STDMETHODCALLTYPE ResumeTimer() { return S_OK; } - - //call after IFileOperation::PerformOperations() - const std::pair<std::wstring, HRESULT>* getLastError() const { return lastError.get(); } //(file path, error code) - -private: - std::wstring currentItem; - bool cancellationRequested; - - std::unique_ptr<std::pair<std::wstring, HRESULT>> lastError; - - //file_op user callback - fileop::RecyclerCallback callback_; - void* sink_; - - //support IUnknown - LONG refCount; -}; - - -void moveToRecycleBin(const wchar_t* fileNames[], //throw SysError - size_t fileCount, - fileop::RecyclerCallback callback, - void* sink) -{ - ComPtr<IFileOperation> fileOp; - ZEN_COM_CHECK(::CoCreateInstance(CLSID_FileOperation, //throw SysError - nullptr, - CLSCTX_ALL, - IID_PPV_ARGS(fileOp.init()))); - - // Set the operation flags. Turn off all UI from being shown to the user during the - // operation. This includes error, confirmation and progress dialogs. - ZEN_COM_CHECK(fileOp->SetOperationFlags(FOF_ALLOWUNDO | - FOF_NOCONFIRMATION | - FOF_SILENT | //no progress dialog box - FOF_NOERRORUI | - FOFX_EARLYFAILURE | - //without FOFX_EARLYFAILURE, IFileOperationProgressSink::PostDeleteItem() will always report success, even if deletion failed!!? WTF!? - //PerformOperations() will still succeed but set the uselessly generic GetAnyOperationsAborted() instead :((( - //=> always set FOFX_EARLYFAILURE since we prefer good error messages over "doing as much as possible" - //luckily for FreeFileSync we don't expect failures on individual files anyway: FreeFileSync moves files to be - //deleted to a temporary folder first, so there is no reason why a second move (the recycling itself) should fail - FOF_NO_CONNECTED_ELEMENTS)); - //use FOFX_RECYCLEONDELETE when Windows 8 is available!? - - ComPtr<RecyclerProgressCallback> opProgress; - *opProgress.init() = new (std::nothrow) RecyclerProgressCallback(callback, sink); - if (!opProgress) - throw SysError(formatComError(L"Error creating RecyclerProgressCallback.", E_OUTOFMEMORY)); - - DWORD callbackID = 0; - ZEN_COM_CHECK(fileOp->Advise(opProgress.get(), &callbackID)); - ZEN_ON_SCOPE_EXIT(fileOp->Unadvise(callbackID)); //RecyclerProgressCallback might outlive current scope, so cut access to "callback, sink" - - int operationCount = 0; - - for (size_t i = 0; i < fileCount; ++i) - { - //SHCreateItemFromParsingName() physically checks file existence => callback - if (callback) - { - bool continueExecution = false; - try - { - continueExecution = callback(fileNames[i], sink); //should not throw! - } - catch (...) { throw SysError(formatComError(L"Unexpected exception in callback.", E_UNEXPECTED)); } - - if (!continueExecution) - throw SysError(formatComError(L"Operation cancelled.", HRESULT_FROM_WIN32(ERROR_CANCELLED))); - } - - //create file/folder item object - ComPtr<IShellItem> psiFile; - HRESULT hr = ::SHCreateItemFromParsingName(fileNames[i], - nullptr, - IID_PPV_ARGS(psiFile.init())); - if (FAILED(hr)) - { - if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || //file not existing anymore - hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)) - { - //make sure the file really is not there: Win32 by default strips trailing spaces, so we might end up here in error! - //on the other hand, shell layer does not support \\?\ prefix to prevent this! - if (!somethingExists(fileNames[i])) - continue; - } - throw SysError(formatComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for file:\n") + L"\"" + fileNames[i] + L"\".", hr)); - } - - ZEN_COM_CHECK(fileOp->DeleteItem(psiFile.get(), nullptr)); - - ++operationCount; - } - - if (operationCount == 0) //calling PerformOperations() without anything to do would yield E_UNEXPECTED - return; - - //perform planned operations - try - { - ZEN_COM_CHECK(fileOp->PerformOperations()); - } - catch (const SysError&) - { - //first let's check if we have more detailed error information available - if (const std::pair<std::wstring, HRESULT>* lastError = opProgress->getLastError()) - { - std::vector<std::wstring> processes; //create an even better error message if we detect a locking issue: - try { processes = getLockingProcesses(lastError->first.c_str()); /*throw SysError*/ } - catch (const SysError&) {} - - if (!processes.empty()) - { - std::wstring errorMsg = L"The file \"" + lastError->first + L"\" is locked by another process:"; - std::for_each(processes.begin(), processes.end(), [&](const std::wstring& proc) { errorMsg += L'\n'; errorMsg += proc; }); - throw SysError(errorMsg); //message is descriptive enough, no need to evaluate HRESULT! - } - throw SysError(formatComError(std::wstring(L"Error during \"PerformOperations\" for file:\n") + L"\"" + lastError->first + L"\".", lastError->second)); - } - throw; - } - - //if FOF_NOERRORUI without FOFX_EARLYFAILURE is set, PerformOperations() can return with success despite errors, but sets the following "aborted" flag instead - BOOL pfAnyOperationsAborted = FALSE; - ZEN_COM_CHECK(fileOp->GetAnyOperationsAborted(&pfAnyOperationsAborted)); - - if (pfAnyOperationsAborted == TRUE) - throw SysError(L"Operation did not complete successfully."); -} - - -void copyFile(const wchar_t* sourceFile, //throw SysError - const wchar_t* targetFile) -{ - ComPtr<IFileOperation> fileOp; - ZEN_COM_CHECK(::CoCreateInstance(CLSID_FileOperation, //throw SysError - nullptr, - CLSCTX_ALL, - IID_PPV_ARGS(fileOp.init()))); - - // Set the operation flags. Turn off all UI - // from being shown to the user during the - // operation. This includes error, confirmation - // and progress dialogs. - ZEN_COM_CHECK(fileOp->SetOperationFlags(FOF_NOCONFIRMATION | //throw SysError - FOF_SILENT | - FOFX_EARLYFAILURE | - FOF_NOERRORUI)); - //create source object - ComPtr<IShellItem> psiSourceFile; - { - HRESULT hr = ::SHCreateItemFromParsingName(sourceFile, - nullptr, - IID_PPV_ARGS(psiSourceFile.init())); - if (FAILED(hr)) - throw SysError(formatComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for file:\n") + L"\"" + sourceFile + L"\".", hr)); - } - - const size_t pos = std::wstring(targetFile).find_last_of(L'\\'); - if (pos == std::wstring::npos) - throw SysError(L"Target filename does not contain a path separator."); - - const std::wstring targetFolder(targetFile, pos); - const std::wstring targetFileNameShort = targetFile + pos + 1; - - //create target folder object - ComPtr<IShellItem> psiTargetFolder; - { - HRESULT hr = ::SHCreateItemFromParsingName(targetFolder.c_str(), - nullptr, - IID_PPV_ARGS(psiTargetFolder.init())); - if (FAILED(hr)) - throw SysError(formatComError(std::wstring(L"Error calling \"SHCreateItemFromParsingName\" for folder:\n") + L"\"" + targetFolder + L"\".", hr)); - } - - //schedule file copy operation - ZEN_COM_CHECK(fileOp->CopyItem(psiSourceFile.get(), psiTargetFolder.get(), targetFileNameShort.c_str(), nullptr)); - - //perform actual operations - ZEN_COM_CHECK(fileOp->PerformOperations()); - - //check if errors occured: if FOFX_EARLYFAILURE is not used, PerformOperations() can return with success despite errors! - BOOL pfAnyOperationsAborted = FALSE; - ZEN_COM_CHECK(fileOp->GetAnyOperationsAborted(&pfAnyOperationsAborted)); - - if (pfAnyOperationsAborted == TRUE) - throw SysError(L"Operation did not complete successfully."); -} - - -void getFolderClsid(const wchar_t* dirname, CLSID& pathCLSID) //throw SysError -{ - ComPtr<IShellFolder> desktopFolder; - ZEN_COM_CHECK(::SHGetDesktopFolder(desktopFolder.init())); //throw SysError - - PIDLIST_RELATIVE pidlFolder = nullptr; - ZEN_COM_CHECK(desktopFolder->ParseDisplayName(nullptr, // [in] HWND hwnd, - nullptr, // [in] IBindCtx *pbc, - const_cast<LPWSTR>(dirname), // [in] LPWSTR pszDisplayName, - nullptr, // [out] ULONG *pchEaten, - &pidlFolder, // [out] PIDLIST_RELATIVE* ppidl, - nullptr)); // [in, out] ULONG *pdwAttributes - ZEN_ON_SCOPE_EXIT(::ILFree(pidlFolder)); //older version: ::CoTaskMemFree - - ComPtr<IPersist> persistFolder; - ZEN_COM_CHECK(desktopFolder->BindToObject(pidlFolder, // [in] PCUIDLIST_RELATIVE pidl, - nullptr, // [in] IBindCtx *pbc, - IID_PPV_ARGS(persistFolder.init()))); //throw SysError - - ZEN_COM_CHECK(persistFolder->GetClassID(&pathCLSID)); //throw SysError -} - - -std::vector<std::wstring> getLockingProcesses(const wchar_t* filename) //throw SysError -{ - DWORD sessionHandle = 0; - { - wchar_t sessionKey[CCH_RM_SESSION_KEY + 1] = {}; //fixes two bugs: http://blogs.msdn.com/b/oldnewthing/archive/2012/02/17/10268840.aspx - DWORD rv1 = ::RmStartSession(&sessionHandle, //__out DWORD *pSessionHandle, - 0, //__reserved DWORD dwSessionFlags, - sessionKey); //__out WCHAR strSessionKey[ ] - if (rv1 != ERROR_SUCCESS) - throw SysError(formatSystemError(L"RmStartSession", rv1)); - } - ZEN_ON_SCOPE_EXIT(::RmEndSession(sessionHandle)); - - { - DWORD rv2 = ::RmRegisterResources(sessionHandle, //__in DWORD dwSessionHandle, - 1, //__in UINT nFiles, - &filename, //__in_opt LPCWSTR rgsFilenames[ ], - 0, //__in UINT nApplications, - nullptr, //__in_opt RM_UNIQUE_PROCESS rgApplications[ ], - 0, //__in UINT nServices, - nullptr); //__in_opt LPCWSTR rgsServiceNames[ ] - if (rv2 != ERROR_SUCCESS) - throw SysError(formatSystemError(L"RmRegisterResources", rv2)); - } - - std::vector<RM_PROCESS_INFO> procInfo; - { - UINT procInfoSize = 0; - UINT procInfoSizeNeeded = 0; - DWORD rebootReasons = 0; - DWORD rv3 = ::RmGetList(sessionHandle, &procInfoSizeNeeded, &procInfoSize, nullptr, &rebootReasons); //get procInfoSizeNeeded - if (rv3 == ERROR_SUCCESS) - return std::vector<std::wstring>(); - if (rv3 != ERROR_MORE_DATA) - throw SysError(formatSystemError(L"RmGetList", rv3)); - //C:\pagefile.sys fails with ERROR_SHARING_VIOLATION! - - if (procInfoSizeNeeded == 0) - return std::vector<std::wstring>(); - - procInfoSize = procInfoSizeNeeded; - procInfo.resize(procInfoSizeNeeded); - - rv3 = ::RmGetList(sessionHandle, //__in DWORD dwSessionHandle, - &procInfoSizeNeeded, //__out UINT *pnProcInfoNeeded, - &procInfoSize, //__inout UINT *pnProcInfo, - &procInfo[0], //__inout_opt RM_PROCESS_INFO rgAffectedApps[ ], - &rebootReasons); //__out LPDWORD lpdwRebootReasons - if (rv3 != ERROR_SUCCESS) - throw SysError(formatSystemError(L"RmGetList", rv3)); - procInfo.resize(procInfoSize); - } - - std::vector<std::wstring> output; - for (auto iter = procInfo.begin(); iter != procInfo.end(); ++iter) - { - std::wstring processName = iter->strAppName; - - //try to get process path - HANDLE hProcess = ::OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, //__in DWORD dwDesiredAccess, - false, //__in BOOL bInheritHandle, - iter->Process.dwProcessId); //__in DWORD dwProcessId - if (hProcess) - { - ZEN_ON_SCOPE_EXIT(::CloseHandle(hProcess)); - - FILETIME creationTime = {}; - FILETIME exitTime = {}; - FILETIME kernelTime = {}; - FILETIME userTime = {}; - if (::GetProcessTimes(hProcess, //__in HANDLE hProcess, - &creationTime, //__out LPFILETIME lpCreationTime, - &exitTime, //__out LPFILETIME lpExitTime, - &kernelTime, //__out LPFILETIME lpKernelTime, - &userTime)) //__out LPFILETIME lpUserTime - if (::CompareFileTime(&iter->Process.ProcessStartTime, &creationTime) == 0) - { - DWORD bufferSize = MAX_PATH; - std::vector<wchar_t> buffer(bufferSize); - if (::QueryFullProcessImageName(hProcess, //__in HANDLE hProcess, - 0, //__in DWORD dwFlags, - &buffer[0], //__out LPTSTR lpExeName, - &bufferSize)) //__inout PDWORD lpdwSize - if (bufferSize < buffer.size()) - processName += std::wstring(L", ") + L"\"" + &buffer[0] + L"\""; - } - } - output.push_back(processName); - } - return output; -} - - -boost::thread_specific_ptr<std::wstring> lastErrorMessage; //use "thread_local" in C++11 -} - - -bool fileop::moveToRecycleBin(const wchar_t* fileNames[], - size_t fileCount, - RecyclerCallback callback, - void* sink) -{ - try - { - ::moveToRecycleBin(fileNames, fileCount, callback, sink); //throw SysError - return true; - } - catch (const SysError& e) - { - lastErrorMessage.reset(new std::wstring(e.toString())); - return false; - } -} - - -bool fileop::copyFile(const wchar_t* sourceFile, - const wchar_t* targetFile) -{ - try - { - ::copyFile(sourceFile, targetFile); //throw SysError - return true; - } - catch (const SysError& e) - { - lastErrorMessage.reset(new std::wstring(e.toString())); - return false; - } -} - - -bool fileop::checkRecycler(const wchar_t* dirname, bool& isRecycler) -{ - try - { - CLSID clsid = {}; - getFolderClsid(dirname, clsid); //throw SysError - isRecycler = ::IsEqualCLSID(clsid, CLSID_RecycleBin) == TRUE; //silence perf warning - return true; - } - catch (const SysError& e) - { - lastErrorMessage.reset(new std::wstring(e.toString())); - return false; - } -} - - -const wchar_t* fileop::getLastError() -{ - return !lastErrorMessage.get() ? L"" : lastErrorMessage->c_str(); -} - - -bool fileop::getLockingProcesses(const wchar_t* filename, const wchar_t*& procList) -{ - try - { - std::vector<std::wstring> processes = ::getLockingProcesses(filename); //throw SysError - - std::wstring buffer; - std::for_each(processes.begin(), processes.end(), [&](const std::wstring& proc) { buffer += proc; buffer += L'\n'; }); - if (!processes.empty()) - buffer.resize(buffer.size() - 1); //remove last line break - - auto tmp = new wchar_t [buffer.size() + 1]; //bad_alloc ? - ::wmemcpy(tmp, buffer.c_str(), buffer.size() + 1); //include 0-termination - procList = tmp; //ownership passed - - return true; - } - catch (const SysError& e) - { - lastErrorMessage.reset(new std::wstring(e.toString())); - return false; - } -} - - -void fileop::freeString(const wchar_t* str) -{ - delete [] str; -} diff --git a/zen/IFileOperation/file_op.h b/zen/IFileOperation/file_op.h deleted file mode 100644 index 2f5d6f30..00000000 --- a/zen/IFileOperation/file_op.h +++ /dev/null @@ -1,87 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef RECYCLER_DLL_H -#define RECYCLER_DLL_H - -#ifdef FILE_OP_DLL_EXPORTS -#define DLL_FUNCTION_DECLARATION extern "C" __declspec(dllexport) -#else -#define DLL_FUNCTION_DECLARATION extern "C" __declspec(dllimport) -#endif - -#include <zen/build_info.h> - - -namespace fileop -{ -/*-------------- - |declarations| - --------------*/ - -//COM needs to be initialized before calling any of these functions! CoInitializeEx/CoUninitialize -//minimum OS: Windows Vista or later - -//return false to abort operation -typedef bool (*RecyclerCallback)(const wchar_t* filename, //current item; may be empty string! - void* sink); //virtual function mechanism is not guaranteed to be compatible between different compilers, therefore we go the C-way - -DLL_FUNCTION_DECLARATION -bool moveToRecycleBin(const wchar_t* fileNames[], - size_t fileCount, //size of fileNames array - RecyclerCallback callback, //optional - void* sink); // - -DLL_FUNCTION_DECLARATION -bool copyFile(const wchar_t* sourceFile, - const wchar_t* targetFile); - -DLL_FUNCTION_DECLARATION -bool checkRecycler(const wchar_t* dirname, bool& isRecycler); //returns false on error - -DLL_FUNCTION_DECLARATION -bool getLockingProcesses(const wchar_t* filename, const wchar_t*& procList); //get list of processes as single string, call freeString(procList) after use! - -DLL_FUNCTION_DECLARATION -void freeString(const wchar_t* str); - -//get last error message if any of the functions above fail -DLL_FUNCTION_DECLARATION -const wchar_t* getLastError(); //no nullptr check required! - -/*---------- - |typedefs| - ----------*/ -typedef bool (*FunType_moveToRecycleBin)(const wchar_t* fileNames[], - size_t fileCount, - RecyclerCallback callback, - void* sink); -typedef bool (*FunType_copyFile)(const wchar_t* sourceFile, const wchar_t* targetFile); -typedef bool (*FunType_checkRecycler)(const wchar_t* dirname, bool& isRecycler); -typedef bool (*FunType_getLockingProcesses)(const wchar_t* filename, const wchar_t*& procList); -typedef void (*FunType_freeString)(const wchar_t* str); -typedef const wchar_t* (*FunType_getLastError)(); - -/*-------------- - |symbol names| - --------------*/ -//(use const pointers to ensure internal linkage) -const char funName_moveToRecycleBin [] = "moveToRecycleBin"; -const char funName_copyFile [] = "copyFile"; -const char funName_checkRecycler [] = "checkRecycler"; -const char funName_getLockingProcesses[] = "getLockingProcesses"; -const char funName_freeString [] = "freeString"; -const char funName_getLastError [] = "getLastError"; - -/*--------------- - |library names| - ---------------*/ -inline const wchar_t* getDllName() { return zen::is64BitBuild ? L"FileOperation_x64.dll" : L"FileOperation_Win32.dll"; } -} - -#undef DLL_FUNCTION_DECLARATION - -#endif //RECYCLER_DLL_H diff --git a/zen/base64.h b/zen/base64.h deleted file mode 100644 index ae896e70..00000000 --- a/zen/base64.h +++ /dev/null @@ -1,157 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef BASE64_HEADER_08473021856321840873021487213453214 -#define BASE64_HEADER_08473021856321840873021487213453214 - -#ifndef NDEBUG //no release build dependencies! -#include <iterator> -#include <cassert> -#endif - -namespace zen -{ -//http://en.wikipedia.org/wiki/Base64 -/* -Usage: - const std::string input = "Sample text"; - std::string output; - zen::encodeBase64(input.begin(), input.end(), std::back_inserter(output)); - //output contains "U2FtcGxlIHRleHQ=" -*/ -template <class InputIterator, class OutputIterator> -OutputIterator encodeBase64(InputIterator first, InputIterator last, OutputIterator result); //nothrow! - -template <class InputIterator, class OutputIterator> -OutputIterator decodeBase64(InputIterator first, InputIterator last, OutputIterator result); //nothrow! - - - - - - - - - - - - -//------------------------- implementation ------------------------------- -namespace implementation -{ -//64 chars for base64 encoding + padding char -const char ENCODING_MIME[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; -const signed char DECODING_MIME[] = -{ - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, 64, -1, -1, - -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, - -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 -}; -const unsigned char INDEX_PAD = 64; //"=" -} - - -//http://en.wikipedia.org/wiki/Base64 -template <class InputIterator, class OutputIterator> inline -OutputIterator encodeBase64(InputIterator first, InputIterator last, OutputIterator result) -{ - using namespace implementation; - static_assert(sizeof(typename std::iterator_traits<InputIterator>::value_type) == 1, ""); - static_assert(sizeof(ENCODING_MIME) == 65 + 1, ""); - - while (first != last) - { - const unsigned char a = static_cast<unsigned char>(*first++); - *result++ = ENCODING_MIME[a >> 2]; - - if (first == last) - { - *result++ = ENCODING_MIME[((a & 0x3) << 4)]; - *result++ = ENCODING_MIME[INDEX_PAD]; - *result++ = ENCODING_MIME[INDEX_PAD]; - break; - } - const unsigned char b = static_cast<unsigned char>(*first++); - *result++ = ENCODING_MIME[((a & 0x3) << 4) | (b >> 4)]; - - if (first == last) - { - *result++ = ENCODING_MIME[((b & 0xf) << 2)]; - *result++ = ENCODING_MIME[INDEX_PAD]; - break; - } - const unsigned char c = static_cast<unsigned char>(*first++); - *result++ = ENCODING_MIME[((b & 0xf) << 2) | (c >> 6)]; - *result++ = ENCODING_MIME[c & 0x3f]; - } - - return result; -} - - -template <class InputIterator, class OutputIterator> inline -OutputIterator decodeBase64(InputIterator first, InputIterator last, OutputIterator result) -{ - using namespace implementation; - static_assert(sizeof(typename std::iterator_traits<InputIterator>::value_type) == 1, ""); - static_assert(sizeof(DECODING_MIME) == 128, ""); - - const unsigned char INDEX_END = INDEX_PAD + 1; - - auto readIndex = [&]() -> unsigned char //return index within [0, 64] or INDEX_END if end of input - { - while (true) - { - if (first == last) - return INDEX_END; - - const unsigned char ch = static_cast<unsigned char>(*first++); - if (ch < 128) //we're in lower ASCII table half - { - const int index = implementation::DECODING_MIME[ch]; - if (0 <= index && index <= static_cast<int>(INDEX_PAD)) //skip all unknown characters (including carriage return, line-break, tab) - return index; - } - } - }; - - for (;;) - { - const unsigned char index1 = readIndex(); - const unsigned char index2 = readIndex(); - if (index1 >= INDEX_PAD || index2 >= INDEX_PAD) - { - assert(index1 == INDEX_END && index2 == INDEX_END); - break; - } - *result++ = static_cast<char>((index1 << 2) | (index2 >> 4)); - - const unsigned char index3 = readIndex(); - if (index3 >= INDEX_PAD) //padding - { - assert(index3 == INDEX_PAD); - break; - } - *result++ = static_cast<char>(((index2 & 0xf) << 4) | (index3 >> 2)); - - const unsigned char index4 = readIndex(); - if (index4 >= INDEX_PAD) //padding - { - assert(index4 == INDEX_PAD); - break; - } - *result++ = static_cast<char>(((index3 & 0x3) << 6) | index4); - } - return result; -} -} - -#endif //BASE64_HEADER_08473021856321840873021487213453214 diff --git a/zen/com_error.h b/zen/com_error.h deleted file mode 100644 index 5eb7611d..00000000 --- a/zen/com_error.h +++ /dev/null @@ -1,227 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef COM_ERROR_HEADER_88425703425254 -#define COM_ERROR_HEADER_88425703425254 - -#include <cstdio> -#include "sys_error.h" - -namespace zen -{ -std::wstring formatComError(const std::wstring& msg, HRESULT hr); - -//Convenience Macros checking for COM errors: - -#define ZEN_COM_CHECK(func) ZEN_COM_CHECK_IMPL(func, #func) //throw SysError -/* -Example: ZEN_COM_CHECK(backupComp->InitializeForBackup()); - -Equivalent to: -{ - HRESULT hrInternal = backupComp->InitializeForBackup(); - if (FAILED(hrInternal)) - throw SysError(formatComError(L"Error calling \"backupComp->InitializeForBackup()\".", hrInternal)); -} -*/ - -#define ZEN_COM_ASSERT(obj) ZEN_COM_ASSERT_IMPL(obj, #obj) //throw SysError -/* -Example: ZEN_COM_ASSERT(obj); - -Equivalent to: - if (!obj) - throw SysError(formatComError(L"Assertion failed: \"obj\".", E_FAIL)); -*/ - - - - - - -//################# implementation ##################### -namespace impl -{ -inline -std::wstring formatWin32Message(DWORD dwMessageId) //return empty string on error -{ - LPWSTR buffer = nullptr; - if (::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_MAX_WIDTH_MASK | - FORMAT_MESSAGE_IGNORE_INSERTS | //important: without this flag ::FormatMessage() will fail if message contains placeholders - FORMAT_MESSAGE_ALLOCATE_BUFFER, nullptr, dwMessageId, 0, reinterpret_cast<LPWSTR>(&buffer), 0, nullptr) != 0) - if (buffer) //just to be sure - { - ZEN_ON_SCOPE_EXIT(::LocalFree(buffer)); - return buffer; - } - return std::wstring(); -} - - -inline -std::wstring numberToHexString(long number) -{ - wchar_t buffer[100] = {}; - const int charsWritten = ::swprintf(buffer, 100, L"0x%08x", static_cast<int>(number)); - return charsWritten > 0 ? std::wstring(buffer, charsWritten) : std::wstring(); -} - - -namespace -{ -std::wstring formatFacility(HRESULT hr) -{ - switch (HRESULT_FACILITY(hr)) - { - case FACILITY_XPS: - return L"XPS"; - case FACILITY_WINRM: - return L"Windows Resource Manager"; - case FACILITY_WINDOWSUPDATE: - return L"Windows Update"; - case FACILITY_WINDOWS_DEFENDER: - return L"Windows Defender Component"; - case FACILITY_WINDOWS_CE: - return L"Windows CE"; - case FACILITY_WINDOWS: - return L"Windows Subsystem"; - case FACILITY_USERMODE_VOLMGR: - return L"User Mode Volume Manager"; - case FACILITY_USERMODE_VIRTUALIZATION: - return L"User Mode Virtualization Subsystem"; - case FACILITY_USERMODE_VHD: - return L"User Mode Virtual Hard Disk Support"; - case FACILITY_URT: - return L".NET CLR"; - case FACILITY_UMI: - return L"Ubiquitous Memoryintrospection Service"; - case FACILITY_UI: - return L"UI"; - case FACILITY_TPM_SOFTWARE: - return L"Trusted Platform Module Applications"; - case FACILITY_TPM_SERVICES: - return L"Trusted Platform Module Services"; - case FACILITY_SXS: - return L"Side-by-side Servicing"; - case FACILITY_STORAGE: - return L"OLE Storage"; - case FACILITY_STATE_MANAGEMENT: - return L"State Management Services"; - case FACILITY_SCARD: - return L"Smart-card Subsystem"; - case FACILITY_SHELL: - return L"User Shell"; - case FACILITY_SETUPAPI: - return L"Setup API"; - case FACILITY_SECURITY: - return L"Security API Layer"; - case FACILITY_SDIAG: - return L"System Diagnostics"; - case FACILITY_RPC: - return L"RPC Subsystem"; - case FACILITY_RAS: - return L"RAS"; - case FACILITY_PLA: - return L"Performance Logs and Alerts"; - case FACILITY_OPC: - return L"Open Connectivity Service"; - case FACILITY_WIN32: - return L"Win32"; - case FACILITY_CONTROL: - return L"Control Mechanism"; - case FACILITY_WEBSERVICES: - return L"Web Services"; - case FACILITY_NDIS: - return L"Network Driver Interface"; - case FACILITY_METADIRECTORY: - return L"Microsoft Identity Server"; - case FACILITY_MSMQ: - return L"Microsoft Message Queue"; - case FACILITY_MEDIASERVER: - return L"Windows Media Server"; - case FACILITY_MBN: - return L"MBN"; - case FACILITY_INTERNET: - return L"Wininet"; - case FACILITY_ITF: - return L"COM/OLE Interface Management"; - case FACILITY_USERMODE_HYPERVISOR: - return L"Usermode Hypervisor Components"; - case FACILITY_HTTP: - return L"HTTP Support"; - case FACILITY_GRAPHICS: - return L"Graphics Drivers"; - case FACILITY_FWP: - return L"Firewall Platform"; - case FACILITY_FVE: - return L"Full volume encryption"; - case FACILITY_USERMODE_FILTER_MANAGER: - return L"User Mode Filter Manager"; - case FACILITY_DPLAY: - return L"Direct Play"; - case FACILITY_DISPATCH: - return L"COM Dispatch"; - case FACILITY_DIRECTORYSERVICE: - return L"Active Directory"; - case FACILITY_CONFIGURATION: - return L"Configuration Services"; - case FACILITY_COMPLUS: - return L"COM+"; - case FACILITY_USERMODE_COMMONLOG: - return L"Common Logging Support"; - case FACILITY_CMI: - return L"Configuration Management Infrastructure"; - case FACILITY_CERT: - return L"Certificate"; - case FACILITY_BCD: - return L"Boot Configuration Database"; - case FACILITY_BACKGROUNDCOPY: - return L"Background Copy Control"; - case FACILITY_ACS: - return L"Audit Collection Service"; - case FACILITY_AAF: - return L"Microsoft Agent"; - default: - return L"Unknown"; - } -} -} -} - - -std::wstring formatComError(const std::wstring& msg, long long hr); //not implemented! intentional overload ambiguity to catch usage errors with HRESULT! - - -inline -std::wstring formatComError(const std::wstring& msg, HRESULT hr) -{ - std::wstring output(msg); - output += L"\n"; - - //don't use _com_error(hr).ErrorMessage(): internally this is nothing more than a call to ::FormatMessage() - std::wstring win32Msg = impl::formatWin32Message(hr); - if (!win32Msg.empty()) //empty string on error - output += win32Msg + L"\n" + L"HRESULT: " + impl::numberToHexString(hr); - else - output += L"HRESULT: " + impl::numberToHexString(hr) + L", " + L"Facility: " + impl::formatFacility(hr); - //don't bluntly interpret as Win32 error code HRESULT_CODE(hr), too often misleading! - //http://blogs.msdn.com/b/oldnewthing/archive/2006/11/03/942851.aspx - - return output; -} - - -#define ZEN_COM_CHECK_IMPL(func, txt) \ - { \ - HRESULT hrInternal = func; \ - if (FAILED(hrInternal)) \ - throw zen::SysError(formatComError(std::wstring(L"Error calling \"") + L ## txt + L"\".", hrInternal)); \ - } - -#define ZEN_COM_ASSERT_IMPL(obj, txt) if (!(obj)) throw zen::SysError(formatComError(std::wstring(L"Assertion failed: \"") + L ## txt + L"\".", E_FAIL)); -} -#endif //COM_ERROR_HEADER_88425703425254 diff --git a/zen/com_ptr.h b/zen/com_ptr.h deleted file mode 100644 index 6fb9f2cd..00000000 --- a/zen/com_ptr.h +++ /dev/null @@ -1,120 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef SMART_COM_PTR_H -#define SMART_COM_PTR_H - -#include <algorithm> -#include "win.h" //includes "windows.h" -> always include before other headers that also might include "windows.h"! -#include <Objbase.h> - -namespace zen -{ -/* -ComPtr: RAII class handling COM objects - -Example: --------- - ComPtr<IUPnPDeviceFinder> devFinder; - if (FAILED(::CoCreateInstance(CLSID_UPnPDeviceFinder, - nullptr, - CLSCTX_ALL, - IID_PPV_ARGS(devFinder.init())))) - return -1; - - ComPtr<IEnumUnknown> devEnum = com_dynamic_cast<IEnumUnknown>(devColl); - if (!devEnum) - return -1; -*/ - -template <class T> -class ComPtr -{ -public: - ComPtr() : ptr(nullptr) {} // - ComPtr(const ComPtr& other) : ptr(other.ptr) { if (ptr) ptr->AddRef(); } //noexcept in C++11 - ComPtr( ComPtr&& tmp ) : ptr(tmp.release()) {} // - ~ComPtr() { if (ptr) ptr->Release(); } //has exception spec of compiler-generated destructor by default - - ComPtr& operator=(const ComPtr& other) { ComPtr(other).swap(*this); return *this; } //noexcept in C++11 - ComPtr& operator=(ComPtr&& tmp) { swap(tmp); return *this; } // - //don't use unifying assignment but save one move-construction in the r-value case instead! - - void swap(ComPtr& rhs) { std::swap(ptr, rhs.ptr); } //noexcept in C++11 - - T** init() //get pointer for use with ::CoCreateInstance() - { - ComPtr<T>().swap(*this); - return &ptr; - } - - T* get() const { return ptr; } - - T* operator->() const { return ptr; } - T& operator* () const { return *ptr; } - - T* release() //noexcept in C++11 - { - T* tmp = ptr; - ptr = nullptr; - return tmp; - } - -private: - T* ptr; - - struct ConversionToBool { int dummy; }; -public: - //use member pointer as implicit conversion to bool (C++ Templates - Vandevoorde/Josuttis; chapter 20) - operator int ConversionToBool::* () const { return ptr != nullptr ? &ConversionToBool::dummy : nullptr; } -}; - - -template <class S, class T> -ComPtr<S> com_dynamic_cast(const ComPtr<T>& other); //noexcept in C++11 - - - - - - - - - - - - - - - - - - - - - - -//################# implementation ############################# - -//we cannot partially specialize std::swap() for a class template and are not allowed to overload it => offer swap in own namespace -template <class T> inline -void swap(zen::ComPtr<T>& lhs, zen::ComPtr<T>& rhs) -{ - lhs.swap(rhs); -} - - -template <class S, class T> inline -ComPtr<S> com_dynamic_cast(const ComPtr<T>& other) //noexcept in C++11 -{ - ComPtr<S> outPtr; - if (other) - other->QueryInterface(IID_PPV_ARGS(outPtr.init())); - return outPtr; -} -} - -#endif //SMART_COM_PTR_H
\ No newline at end of file diff --git a/zen/com_util.h b/zen/com_util.h deleted file mode 100644 index 5189b48e..00000000 --- a/zen/com_util.h +++ /dev/null @@ -1,121 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef COM_UTILITY_HEADER -#define COM_UTILITY_HEADER - -#include "com_ptr.h" -#include <string> -#include <cassert> - -namespace zen -{ -//get an enumeration interface as a std::vector of bound(!) ComPtr(s) -template <class T, class U> -std::vector<ComPtr<T>> convertEnum(const ComPtr<U>& enumObj); //enumObj: must have the "_NewEnum" property that supports the IEnumUnknown interface - -/* -extract text from com object member function returning a single BSTR: HRESULT ComInterface::MemFun([out] BSTR *pbstr); - Example: ComPtr<...> comObj =...; - std::wstring description = getText(comObj, &IUPnPDevice::get_Description); -*/ -template <class T, class MemFun> -std::wstring getText(ComPtr<T> comObj, MemFun memFun); - - -//RAII class handling BSTR -class Bstring -{ -public: - Bstring(const std::wstring& str) { str_ = ::SysAllocStringLen(str.data(), str.length()); } //string::data() returns unmodified string potentially containing 0-values - ~Bstring() { if (str_) ::SysFreeString(str_); } - - const BSTR get() const { return str_; } - -private: - Bstring(const Bstring&); //not implemented - Bstring& operator=(const Bstring&); // - - BSTR str_; -}; - - - - - - - - - - - - - - - - - - - - - - - - - -//############################ inline implemenatation ################################## -template <class T, class U> inline -std::vector<ComPtr<T>> convertEnum(const ComPtr<U>& enumObj) -{ - std::vector<ComPtr<T>> output; - - if (enumObj) - { - ComPtr<IUnknown> unknown; - enumObj->get__NewEnum(unknown.init()); - ComPtr<IEnumUnknown> enumUnknown = com_dynamic_cast<IEnumUnknown>(unknown); - - assert(enumUnknown); //IEnumUnknown must be supported! - if (enumUnknown) - { - ComPtr<IUnknown> itemTmp; - while (enumUnknown->Next(1, itemTmp.init(), nullptr) == S_OK) //returns S_FALSE == 1 when finished! Don't use SUCCEEDED()!!! - { - ComPtr<T> itemNew = com_dynamic_cast<T>(itemTmp); - if (itemNew) - output.push_back(itemNew); - } - } - } - - return output; -} - - -template <class T, class MemFun> inline -std::wstring getText(ComPtr<T> comObj, MemFun memFun) -{ - std::wstring text; - { - if (!comObj) - return std::wstring(); - - BSTR bstr = nullptr; - if (FAILED((comObj.get()->*memFun)(&bstr))) - return std::wstring(); - - if (bstr) //nullptr means "no text" - { - text = std::wstring(bstr, ::SysStringLen(bstr)); //correctly copy 0-characters - ::SysFreeString(bstr); - } - } - return text; -} -} - - -#endif //COM_UTILITY_HEADER diff --git a/zen/debug_log.h b/zen/debug_log.h deleted file mode 100644 index ad27b66e..00000000 --- a/zen/debug_log.h +++ /dev/null @@ -1,94 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef DEBUG_LOG_HEADER_017324601673246392184621895740256342 -#define DEBUG_LOG_HEADER_017324601673246392184621895740256342 - -#include <string> -#include <cstdio> -#include <memory> -#include "deprecate.h" -#include "string_tools.h" -#include "time.h" - - -//small macro for writing debug information into a logfile -#define WRITE_LOG(x) globalLogFile().write(__FILE__, __LINE__, x); - -//speed alternative: wxLogDebug(wxT("text")) + DebugView - - -namespace zen -{ -#ifdef ZEN_WIN -const char ZEN_FILE_NAME_SEPARATOR = '\\'; -#elif defined ZEN_LINUX || defined ZEN_MAC -const char ZEN_FILE_NAME_SEPARATOR = '/'; -#endif - -class DebugLog -{ -public: - class LogError {}; - - ZEN_DEPRECATE - DebugLog(const std::string& filePrefix = std::string()) : - filename(filePrefix + "DEBUG_" + formatTime<std::string>("%Y-%m-%d %H%M%S") + ".log"), - rowCount(0), - handle(std::fopen(filename.c_str(), "w")) //Windows: non binary mode: automatically convert "\n" to "\r\n"; Linux: binary is default! - { - if (!handle) - throw LogError(); - } - - ~DebugLog() { std::fclose(handle); } - - void write(const std::string& sourceFile, - int sourceRow, - const std::string& message) - { - const std::string logEntry = "[" + formatTime<std::string>(FORMAT_TIME) + "] " + afterLast(sourceFile, ZEN_FILE_NAME_SEPARATOR) + - " (" + numberTo<std::string>(sourceRow) + "): " + message + "\n"; - - const size_t bytesWritten = ::fwrite(logEntry.c_str(), 1, logEntry.size(), handle); - if (std::ferror(handle) != 0 || bytesWritten != logEntry.size()) - throw LogError(); - - if (std::fflush(handle) != 0) - throw LogError(); - - ++rowCount; - } - - size_t getRows() const { return rowCount; } - - std::string getFileName() const { return filename; } - -private: - std::string filename; - size_t rowCount; - FILE* handle; -}; - - -inline -DebugLog& globalLogFile() -{ - static std::unique_ptr<DebugLog> inst(new DebugLog); //external linkage despite header definition! - - if (inst->getRows() > 50000) //prevent logfile from becoming too big - { - const std::string oldName = inst->getFileName(); - inst.reset(); - std::remove(oldName.c_str()); //unchecked deletion! - inst.reset(new DebugLog); - } - - return *inst; -} -} - -#endif //DEBUG_LOG_HEADER_017324601673246392184621895740256342 diff --git a/zen/debug_memory_leaks.cpp b/zen/debug_memory_leaks.cpp deleted file mode 100644 index 2359b6ef..00000000 --- a/zen/debug_memory_leaks.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -//-----------Memory Leak Detection-------------------------- -//Usage: just include this file into a Visual Studio project - - -#ifdef _DEBUG //When _DEBUG is not defined, calls to _CrtSetDbgFlag are removed during preprocessing. -#define _CRTDBG_MAP_ALLOC // -#include <stdlib.h> //keep this order: "The #include statements must be in the order shown here. If you change the order, the functions you use may not work properly." -#include <crtdbg.h> //overwrites "operator new" ect; no need to include this in every compilation unit! -//http://msdn.microsoft.com/en-us/library/e5ewb1h3(v=vs.80).aspx - -namespace -{ -struct OnStartup -{ - OnStartup() - { - //note: wxWidgets also activates leak detection in "src/common/init.cpp" using a macro that is equivalent to: - int flags = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); - _CrtSetDbgFlag(flags | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); - } - -} dummy; -} -#endif //_DEBUG
\ No newline at end of file diff --git a/zen/debug_minidump.cpp b/zen/debug_minidump.cpp deleted file mode 100644 index 29500ae4..00000000 --- a/zen/debug_minidump.cpp +++ /dev/null @@ -1,143 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "debug_minidump.h" -#include <string> -#include <sstream> -#include <cassert> -#include <cstdlib> //malloc(), free() -#include <zen/file_error.h> -#include <zen/scope_guard.h> -#include <zen/time.h> -#include "win.h" //includes "windows.h" -#include "DbgHelp.h" //available for MSC only -#pragma comment(lib, "Dbghelp.lib") - -using namespace zen; - - -namespace -{ -LONG WINAPI writeDumpOnException(EXCEPTION_POINTERS* pExceptionInfo) //blocks showing message boxes on success and error! -{ - assert(false); - - const Zstring filename = L"CrashDump " + formatTime<Zstring>(L"%Y-%m-%d %H%M%S") + L".dmp"; - - { - HANDLE hFile = ::CreateFile(filename.c_str(), GENERIC_READ | GENERIC_WRITE, 0, nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); - if (hFile == INVALID_HANDLE_VALUE) - { - ::MessageBox(nullptr, (replaceCpy<std::wstring>(L"Cannot write file %x.", L"%x", fmtFileName(filename)) + L"\n\n" + formatSystemError(L"CreateFile", ::GetLastError())).c_str(), L"Application Crash", MB_SERVICE_NOTIFICATION | MB_ICONERROR); - std::terminate(); - } - ZEN_ON_SCOPE_EXIT(::CloseHandle(hFile)); - - MINIDUMP_EXCEPTION_INFORMATION exInfo = {}; - exInfo.ThreadId = ::GetCurrentThreadId(); - exInfo.ExceptionPointers = pExceptionInfo; - exInfo.ClientPointers = FALSE; - - MINIDUMP_EXCEPTION_INFORMATION* exceptParam = pExceptionInfo ? &exInfo : nullptr; - - if (!::MiniDumpWriteDump(::GetCurrentProcess (), //__in HANDLE hProcess, - ::GetCurrentProcessId(), //__in DWORD ProcessId, - hFile, //__in HANDLE hFile, - MiniDumpWithDataSegs, //__in MINIDUMP_TYPE DumpType, ->Standard: MiniDumpNormal, Medium: MiniDumpWithDataSegs, Full: MiniDumpWithFullMemory - exceptParam, //__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, - nullptr, //__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, - nullptr)) //__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam - { - ::MessageBox(nullptr, (replaceCpy<std::wstring>(L"Cannot write file %x.", L"%x", fmtFileName(filename)) + L"\n\n" + formatSystemError(L"MiniDumpWriteDump", ::GetLastError())).c_str(), L"Application Crash", MB_SERVICE_NOTIFICATION | MB_ICONERROR); - std::terminate(); - } - } //close file before showing success message - - //attention: the app has not yet officially crashed! => use MB_SERVICE_NOTIFICATION to avoid Win32 GUI callbacks while message box is shown! - ::MessageBox(nullptr, replaceCpy<std::wstring>(L"Crash dump file %x written!", L"%x", fmtFileName(filename)).c_str(), L"Application Crash", MB_SERVICE_NOTIFICATION | MB_ICONERROR); - std::terminate(); - - return EXCEPTION_EXECUTE_HANDLER; -} - -//ensure that a dump-file is written for uncaught exceptions -struct OnStartup { - OnStartup() - { - /*LPTOP_LEVEL_EXCEPTION_FILTER oldFilter = */ ::SetUnhandledExceptionFilter(writeDumpOnException); - //oldFilter == &__CxxUnhandledExceptionFilter() by default! - }} dummy; -} - - -void debug_tools::writeMinidump() -{ - //force exception to catch the state of this thread and hopefully get a valid call stack - __try - { - ::RaiseException(EXCEPTION_BREAKPOINT, 0, 0, nullptr); - } - __except (writeDumpOnException(GetExceptionInformation()), EXCEPTION_EXECUTE_HANDLER) {} - //don't use EXCEPTION_CONTINUE_EXECUTION: although used in most minidump examples this resulted in an infinite loop in tests - //although it really should not: http://msdn.microsoft.com/en-us/library/c34eyfac.aspx -} - - -/* -No need to include the "operator new" declarations into every compilation unit: - -[basic.stc.dynamic] -"A C++ program shall provide at most one definition of a replaceable allocation or deallocation function. -Any such function definition replaces the default version provided in the library (17.6.4.6). -The following allocation and deallocation functions (18.6) are implicitly declared in global scope in each translation unit of a program. -void* operator new(std::size_t); -void* operator new[](std::size_t); -void operator delete(void*); -void operator delete[](void*);" -*/ - -namespace -{ -class BadAllocDetailed : public std::bad_alloc -{ -public: - explicit BadAllocDetailed(size_t allocSize) - { - errorMsg = "Memory allocation failed: "; - errorMsg += numberToString(allocSize); - } - - virtual const char* what() const throw() - { - return errorMsg.c_str(); - } - -private: - template <class T> - static std::string numberToString(const T& number) //convert number to string the (slow) C++ way - { - std::ostringstream ss; - ss << number; - return ss.str(); - } - - std::string errorMsg; -}; -} - -void* operator new(size_t size) -{ - if (void* ptr = ::malloc(size)) - return ptr; - - debug_tools::writeMinidump(); - throw ::BadAllocDetailed(size); -} - -void operator delete(void* ptr) { ::free(ptr); } - -void* operator new[](size_t size) { return operator new(size); } -void operator delete[](void* ptr) { operator delete(ptr); } diff --git a/zen/debug_minidump.h b/zen/debug_minidump.h deleted file mode 100644 index 2ef43039..00000000 --- a/zen/debug_minidump.h +++ /dev/null @@ -1,38 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef DEBUGNEW_H_INCLUDED -#define DEBUGNEW_H_INCLUDED - -#ifndef _MSC_VER -#error currently for use with MSC only -#endif - -/* -Better std::bad_alloc ---------------------- -overwrite "operator new" to automatically write mini dump and get info about bytes requested: -1. Compile "debug_minidump.cpp" - -Minidumps http://msdn.microsoft.com/en-us/library/windows/desktop/ee416349(v=vs.85).aspx ----------------------------------------------------------------------------------------- -1. Compile "debug_minidump.cpp" -2. Compile "release" build with: - - C/C++ -> General: Debug Information Format: "Program Database" (/Zi). - - C/C++ -> Optimization: Omit Frame Pointers: No (/Oy-) - avoid call stack mess up! - - Linker -> Debugging: Generate Debug Info: Yes (/DEBUG) - - Linker -> Optimization: References: Yes (/OPT:REF). - - Linker -> Optimization: Enable COMDAT Folding: Yes (/OPT:ICF). -Optional: - - C/C++ -> Optimization: Disabled (/Od) -*/ - -namespace debug_tools -{ -void writeMinidump(); -} - -#endif // DEBUGNEW_H_INCLUDED diff --git a/zen/file_handling.cpp b/zen/file_handling.cpp index 563a07ce..e7503dad 100644 --- a/zen/file_handling.cpp +++ b/zen/file_handling.cpp @@ -106,8 +106,23 @@ bool zen::somethingExists(const Zstring& objname) const DWORD attr = ::GetFileAttributes(applyLongPathPrefix(objname).c_str()); if (attr != INVALID_FILE_ATTRIBUTES) return true; - if (::GetLastError() == ERROR_SHARING_VIOLATION) //"C:\pagefile.sys" - return true; + const ErrorCode lastError = getLastError(); + + //handle obscure file permission problem where ::GetFileAttributes() fails with ERROR_ACCESS_DENIED or ERROR_SHARING_VIOLATION + //while parent directory traversal is successful: e.g. "C:\pagefile.sys" + if (lastError != ERROR_PATH_NOT_FOUND && //perf: short circuit for common "not existing" error codes + lastError != ERROR_FILE_NOT_FOUND && // + lastError != ERROR_BAD_NETPATH && // + lastError != ERROR_BAD_NET_NAME) // + { + WIN32_FIND_DATA fileInfo = {}; + const HANDLE searchHandle = ::FindFirstFile(applyLongPathPrefix(objname).c_str(), &fileInfo); + if (searchHandle != INVALID_HANDLE_VALUE) + { + ::FindClose(searchHandle); + return true; + } + } #elif defined ZEN_LINUX || defined ZEN_MAC struct ::stat fileInfo = {}; @@ -238,7 +253,7 @@ bool zen::removeFile(const Zstring& filename) //throw FileError } #endif if (!somethingExists(filename)) //warning: changes global error code!! - return false; //neither file nor any other object (e.g. broken symlink) with that name existing + return false; //neither file nor any other object (e.g. broken symlink) with that name existing - caveat: what if "access is denied"!?!??!?!? //begin of "regular" error reporting const std::wstring errorMsg = replaceCpy(_("Cannot delete file %x."), L"%x", fmtFileName(filename)); @@ -2006,7 +2021,7 @@ void copyFileWindowsDefault(const Zstring& sourceFile, if (lastError == ERROR_PATH_NOT_FOUND) { guardTarget.dismiss(); //not relevant - throw ErrorTargetPathMissing(errorMsg, errorDescr); + throw ErrorTargetPathMissing(errorMsg, errorDescr); //could this also be source path missing!? } try //add more meaningful message diff --git a/zen/file_traverser.cpp b/zen/file_traverser.cpp index 70593d1d..389833f2 100644 --- a/zen/file_traverser.cpp +++ b/zen/file_traverser.cpp @@ -353,8 +353,8 @@ private: typename Trav::DirHandle searchHandle; - if (!tryReportingDirError([&] { Trav::create(dirname, searchHandle); /*throw FileError*/ }, sink)) - return; //ignored error + if (!tryReportingDirError([&] { Trav::create(dirname, searchHandle); /*throw FileError*/ }, sink)) + return; //ignored error ZEN_ON_SCOPE_EXIT(Trav::destroy(searchHandle)); typename Trav::FindData findData = {}; @@ -14,9 +14,11 @@ //minimal layer enabling text translation - without platform/library dependencies! +#ifdef __WXMSW__ //we have wxWidgets #ifndef WXINTL_NO_GETTEXT_MACRO #error WXINTL_NO_GETTEXT_MACRO must be defined to deactivate wxWidgets underscore macro #endif +#endif #define ZEN_TRANS_CONCAT_SUB(X, Y) X ## Y #define _(s) zen::implementation::translate(ZEN_TRANS_CONCAT_SUB(L, s)) diff --git a/zen/read_txt.cpp b/zen/read_txt.cpp deleted file mode 100644 index 23649846..00000000 --- a/zen/read_txt.cpp +++ /dev/null @@ -1,99 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include "read_txt.h" - -using namespace zen; - - -namespace -{ -warn_static("superfluous method") -std::string detectLineBreak(const Zstring& filename) //throw FileError -{ - //read a (hopefully) significant portion of data - zen::FileInput input(filename); - - std::vector<char> buffer(64 * 1024); - size_t bytesRead = input.read(&buffer[0], buffer.size()); //throw FileError - buffer.resize(bytesRead); - - //detect line break - std::string linebreakChars = "\r\n"; - std::vector<char>::iterator iter = std::find_first_of(buffer.begin(), buffer.end(), - linebreakChars.begin(), linebreakChars.end()); - if (iter != buffer.end()) - { - if (*iter == '\r') - { - ++iter; - if (iter != buffer.end()) - { - - if (*iter == '\n') - return "\r\n"; //Windows - else - return "\r"; //Mac - } - } - else if (*iter == '\n') - return "\n"; //Linux - } - //fallback - return "\n"; -} -} - - -LineExtractor::LineExtractor(const Zstring& filename, const std::string& lineBreak) : //throw FileError - inputStream(filename), bufferLogBegin(buffer.begin()), lineBreak_(lineBreak) -{ - if (lineBreak.empty()) - lineBreak_ = detectLineBreak(filename); //throw FileError -} - - -bool LineExtractor::getLine(std::string& output) //throw FileError -{ - warn_static("don't use lineBreak, but support any of r, n, rn!!!") - for (;;) - { - //check if full line is in buffer - std::vector<char>::iterator iter = std::search(bufferLogBegin, buffer.end(), lineBreak_.begin(), lineBreak_.end()); - if (iter != buffer.end()) - { - output.assign(bufferLogBegin, iter); - bufferLogBegin = iter + lineBreak_.size(); - return true; - } - - buffer.erase(buffer.begin(), bufferLogBegin); - bufferLogBegin = buffer.begin(); - - //if done: cleanup - if (inputStream.eof()) - { - if (buffer.empty()) - return false; - - output.assign(buffer.begin(), buffer.end()); - buffer.clear(); - return true; - } - - //read next block - const size_t BLOCK_SIZE = 512 * 1024; - buffer.resize(buffer.size() + BLOCK_SIZE); - - size_t bytesRead = inputStream.read(&buffer[0] + buffer.size() - BLOCK_SIZE, BLOCK_SIZE); //throw FileError - assert(bytesRead <= BLOCK_SIZE); //promised by FileInput() - - if (bytesRead < BLOCK_SIZE) - buffer.resize(buffer.size() - (BLOCK_SIZE - bytesRead)); - - bufferLogBegin = buffer.begin(); - } -} diff --git a/zen/read_txt.h b/zen/read_txt.h deleted file mode 100644 index 92892716..00000000 --- a/zen/read_txt.h +++ /dev/null @@ -1,32 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef PARSE_TXT_H_INCLUDED -#define PARSE_TXT_H_INCLUDED - -#include "file_io.h" -#include <vector> -#include <string> - -namespace zen -{ -class LineExtractor -{ -public: - LineExtractor(const Zstring& filename, const std::string& lineBreak = std::string()); //throw FileError - bool getLine(std::string& output); //throw FileError - -private: - zen::FileInput inputStream; - std::vector<char> buffer; - std::vector<char>::iterator bufferLogBegin; - std::string lineBreak_; -}; - -} - - -#endif // PARSE_TXT_H_INCLUDED diff --git a/zen/recycler.cpp b/zen/recycler.cpp index 16c2ac11..11b599d4 100644 --- a/zen/recycler.cpp +++ b/zen/recycler.cpp @@ -103,13 +103,13 @@ void zen::recycleOrDelete(const std::vector<Zstring>& filenames, const std::func if (!moveToRecycler(&cNames[0], cNames.size(), recyclerCallback, &cbd)) { if (cbd.exceptionInUserCallback) - try - { - assert(notifyDeletionStatus); - notifyDeletionStatus(Zstring()); //should throw again!!! - assert(false); - } - catch (...) { throw; } + try + { + assert(notifyDeletionStatus); + notifyDeletionStatus(Zstring()); //should throw again!!! + assert(false); + } + catch (...) { throw; } std::wstring filenameFmt = fmtFileName(filenames[0]); //probably not the correct file name for file lists larger than 1! if (filenames.size() > 1) diff --git a/zen/recycler.h b/zen/recycler.h index 80b31160..8068c4ec 100644 --- a/zen/recycler.h +++ b/zen/recycler.h @@ -46,8 +46,8 @@ StatusRecycler recycleBinStatus(const Zstring& pathName); //test existence of Re //Win: blocks heavily if recycle bin is really full and drive is slow!!! void recycleOrDelete(const std::vector<Zstring>& filenames, //throw FileError, return "true" if file/dir was actually deleted - //may throw: first exception is swallowed, updateStatus() is then called again where it should throw again and the exception will propagate as expected - const std::function<void (const Zstring& currentItem)>& notifyDeletionStatus); //optional; currentItem may be empty + //may throw: first exception is swallowed, updateStatus() is then called again where it should throw again and the exception will propagate as expected + const std::function<void (const Zstring& currentItem)>& notifyDeletionStatus); //optional; currentItem may be empty #endif } diff --git a/zen/scroll_window_under_cursor.cpp b/zen/scroll_window_under_cursor.cpp deleted file mode 100644 index 76a5ab4a..00000000 --- a/zen/scroll_window_under_cursor.cpp +++ /dev/null @@ -1,72 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -//redirect mouse wheel events directly to window under cursor rather than window having input focus -//implementing new Windows Vista UI guidelines: http://msdn.microsoft.com/en-us/library/bb545459.aspx#wheel -//this is confirmed to be required for at least Windows 2000 to Windows 8 -//on Ubuntu Linux, this is already the default behavior - -//Usage: just include this file into a Windows project - -#include <cassert> -#include "win.h" //includes "windows.h" -#include <Windowsx.h> //WM_MOUSEWHEEL - - -namespace -{ -LRESULT CALLBACK mouseInputHook(int nCode, WPARAM wParam, LPARAM lParam) -{ - //"if nCode is less than zero, the hook procedure must pass the message to the CallNextHookEx function - //without further processing and should return the value returned by CallNextHookEx" - if (nCode == HC_ACTION) //the only valid value for this hook type - { - MSG& msgInfo = *reinterpret_cast<MSG*>(lParam); - - if (msgInfo.message == WM_MOUSEWHEEL || - msgInfo.message == WM_MOUSEHWHEEL) - { - POINT pt = {}; - pt.x = GET_X_LPARAM(msgInfo.lParam); //yes, there's also msgInfo.pt, but let's not take chances - pt.y = GET_Y_LPARAM(msgInfo.lParam); // - - //visible child window directly under cursor; attention: not necessarily from our process! - if (HWND hWin = ::WindowFromPoint(pt)) //http://blogs.msdn.com/b/oldnewthing/archive/2010/12/30/10110077.aspx - if (msgInfo.hwnd != hWin && ::GetCapture() == nullptr) - { - DWORD winProcessId = 0; - ::GetWindowThreadProcessId( //no-fail! - hWin, //_In_ HWND hWnd, - &winProcessId); //_Out_opt_ LPDWORD lpdwProcessId - if (winProcessId == ::GetCurrentProcessId()) //no-fail! - msgInfo.hwnd = hWin; //it would be a bug to set handle from another process here - } - } - } - return ::CallNextHookEx(nullptr, nCode, wParam, lParam); -} - -struct InstallMouseHook -{ - InstallMouseHook() - { - hHook = ::SetWindowsHookEx(WH_GETMESSAGE, //__in int idHook, - mouseInputHook, //__in HOOKPROC lpfn, - nullptr, //__in HINSTANCE hMod, - ::GetCurrentThreadId()); //__in DWORD dwThreadId - assert(hHook); - } - - ~InstallMouseHook() - { - if (hHook) - ::UnhookWindowsHookEx(hHook); - } - -private: - HHOOK hHook; -} dummy; -} diff --git a/zen/stl_tools.h b/zen/stl_tools.h index 92cd86ad..38752e67 100644 --- a/zen/stl_tools.h +++ b/zen/stl_tools.h @@ -94,7 +94,7 @@ void vector_remove_if(V& vec, Predicate p) template <class V, class W> inline void vector_append(V& vec, W& vec2) { -vec.insert(vec.end(), vec2.begin(), vec2.end()); + vec.insert(vec.end(), vec2.begin(), vec2.end()); } diff --git a/zen/string_base.h b/zen/string_base.h index 0e3bbdd3..c134a6fc 100644 --- a/zen/string_base.h +++ b/zen/string_base.h @@ -171,7 +171,7 @@ private: Descriptor(int rc, size_t len, size_t cap) : length (static_cast<std::uint32_t>(len)), capacity(static_cast<std::uint32_t>(cap)), - refCount(rc) { assert_static(ATOMIC_INT_LOCK_FREE == 2); } //2: "the types are always lock-free" + refCount(rc) { assert_static(ATOMIC_INT_LOCK_FREE == 2); } //2: "the types are always lock-free" std::uint32_t length; std::uint32_t capacity; //allocated size without null-termination diff --git a/zen/xml_io.cpp b/zen/xml_io.cpp new file mode 100644 index 00000000..4b9abc29 --- /dev/null +++ b/zen/xml_io.cpp @@ -0,0 +1,88 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * +// ************************************************************************** + +#include "xml_io.h" +#include <zen/file_handling.h> +#include <zen/file_io.h> +#include <zen/serialize.h> + +using namespace zen; + + +XmlDoc zen::loadXmlDocument(const Zstring& filename) //throw FileError +{ + //can't simply use zen::loadBinStream() due to the short-circuit xml-validation below! + + std::string stream; + + FileInput inputFile(filename); //throw FileError + { + //quick test whether input is an XML: avoid loading large binary files up front! + const std::string xmlBegin = "<?xml version="; + stream.resize(strLength(BYTE_ORDER_MARK_UTF8) + xmlBegin.size()); + + const size_t bytesRead = inputFile.read(&stream[0], stream.size()); //throw FileError + stream.resize(bytesRead); + + if (!startsWith(stream, xmlBegin) && + !startsWith(stream, BYTE_ORDER_MARK_UTF8 + xmlBegin)) //respect BOM! + throw FileError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); + } + + const size_t blockSize = 128 * 1024; + do + { + stream.resize(stream.size() + blockSize); + + const size_t bytesRead = inputFile.read(&*stream.begin() + stream.size() - blockSize, blockSize); //throw FileError + if (bytesRead < blockSize) + stream.resize(stream.size() - (blockSize - bytesRead)); //caveat: unsigned arithmetics + } + while (!inputFile.eof()); + + try + { + return parse(stream); //throw XmlParsingError + } + catch (const XmlParsingError& e) + { + throw FileError( + replaceCpy(replaceCpy(replaceCpy(_("Error parsing file %x, row %y, column %z."), + L"%x", fmtFileName(filename)), + L"%y", numberTo<std::wstring>(e.row + 1)), + L"%z", numberTo<std::wstring>(e.col + 1))); + } +} + + +void zen::saveXmlDocument(const XmlDoc& doc, const Zstring& filename) //throw FileError +{ + std::string stream = serialize(doc); //noexcept + + try + { + if (getFilesize(filename) == stream.size()) //throw FileError + if (loadBinStream<std::string>(filename) == stream) //throw FileError + return; + } + catch (FileError&) {} + + FileOutput outputFile(filename, FileOutput::ACC_OVERWRITE); //throw FileError + outputFile.write(stream.c_str(), stream.length()); // +} + + +void zen::checkForMappingErrors(const XmlIn& xmlInput, const Zstring& filename) //throw FileError +{ + if (xmlInput.errorsOccured()) + { + std::wstring msg = _("Cannot read the following XML elements:") + L"\n"; + for (const std::wstring& elem : xmlInput.getErrorsAs<std::wstring>()) + msg += L"\n" + elem; + + throw FileError(replaceCpy(_("Configuration file %x loaded partially only."), L"%x", fmtFileName(filename)) + L"\n\n" + msg); + } +} diff --git a/zen/xml_io.h b/zen/xml_io.h new file mode 100644 index 00000000..b53a5ef4 --- /dev/null +++ b/zen/xml_io.h @@ -0,0 +1,27 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * +// ************************************************************************** + +#ifndef XMLBASE_H_INCLUDED +#define XMLBASE_H_INCLUDED + +#include <zenxml/xml.h> +#include <zen/zstring.h> +#include <zen/file_error.h> + +//combine zen::Xml and zen file i/o +//-> loadXmlDocument vs loadStream: +//1. better error reporting +//2. quick exit if (potentially large) input file is not an XML + +namespace zen +{ +XmlDoc loadXmlDocument(const Zstring& filename); //throw FileError +void checkForMappingErrors(const XmlIn& xmlInput, const Zstring& filename); //throw FileError + +void saveXmlDocument(const XmlDoc& doc, const Zstring& filename); //throw FileError +} + +#endif // XMLBASE_H_INCLUDED diff --git a/zenXml/Changelog.txt b/zenXml/Changelog.txt deleted file mode 100644 index 5f54e062..00000000 --- a/zenXml/Changelog.txt +++ /dev/null @@ -1,81 +0,0 @@ -=========== -|Changelog| -=========== - -zen::Xml 2.0 ------------- -zen library update -Skip XML comments while parsing -Added move constructor for XmlDoc -zen::parse and zen::load directly return XmlDoc -New macros to specify platform: ZEN_WIN, ZEN_LINUX, ZEN_MAC -Support serializing all integer limits (INT_MIN, INT_MAX, ect.) -Moved license from Boost Software License 1.0 to GPL v3 - - -zen::Xml 1.9 ------------- -Mark failed UTF conversions with replacement character -zen library update -revised documentation - - -zen::Xml 1.8 ------------- -Allow element values to contain non-escaped quotation marks -Respect Linux/Mac/Window line endings when calculating parsing error location -Map all end-of-line characters (Win/Linux/Mac) to \n - - -zen::Xml 1.7 ------------- -zen library update -revised documentation - - -zen::Xml 1.6 ------------- -Fixed header file circular dependency -Improved performance of FILE* based I/O -Updated zen libraries - - -zen::Xml 1.5 ------------- -Replaced sscanf/sprintf hex conversions: speedup of factors 3000 and 3 for large inputs -MinGW: Improved char-based string to floating point conversion by factor 10 -Fixed crash in UTF8 conversion when processing corrupted data -Fixed MSVC security warnings - - -zen::Xml 1.4 ------------- -Added missing include - - -zen::Xml 1.3 ------------- -Improved template metaprogramming implementation -Support unusual string classes: Glib::ustring, wxString (wxWidgets >= 2.9) -A number of documentation fixes - - -zen::Xml 1.2 ------------- -Design improvements and minor refactoring -Removed Loki dependency - - -zen::Xml 1.1 ------------- -A few minor fixes - - -zen::Xml 1.0 ------------- -Initial release: -- straightforward XML serialization -- automatic UTF-8 conversion -- convert all string-like types -- convert all built-in numbers -- support STL containers diff --git a/zenXml/License.txt b/zenXml/License.txt deleted file mode 100644 index 94a04532..00000000 --- a/zenXml/License.txt +++ /dev/null @@ -1,621 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS diff --git a/zenXml/doc/dir_5fe60cdff4f93e8435d81ae38a3e2e18.html b/zenXml/doc/dir_5fe60cdff4f93e8435d81ae38a3e2e18.html deleted file mode 100644 index ce3e299d..00000000 --- a/zenXml/doc/dir_5fe60cdff4f93e8435d81ae38a3e2e18.html +++ /dev/null @@ -1,121 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: zenxml Directory Reference</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">zenxml Directory Reference</div> </div> -</div><!--header--> -<div class="contents"> -<table class="memberdecls"> -<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a> -Files</h2></td></tr> -<tr class="memitem:bind_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>bind.h</b> <a href="bind_8h_source.html">[code]</a></td></tr> -<tr class="memdesc:bind_8h"><td class="mdescLeft"> </td><td class="mdescRight">Map user data types to XML. <br/></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:cvrt__struc_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>cvrt_struc.h</b> <a href="cvrt__struc_8h_source.html">[code]</a></td></tr> -<tr class="memdesc:cvrt__struc_8h"><td class="mdescLeft"> </td><td class="mdescRight">Handle conversion of arbitrary types to and from XML elements. See comments in <a class="el" href="cvrt__text_8h_source.html" title="Handle conversion of string-convertible types to and from std::string. ">cvrt_text.h</a>. <br/></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:cvrt__text_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>cvrt_text.h</b> <a href="cvrt__text_8h_source.html">[code]</a></td></tr> -<tr class="memdesc:cvrt__text_8h"><td class="mdescLeft"> </td><td class="mdescRight">Handle conversion of string-convertible types to and from std::string. <br/></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:dom_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>dom.h</b> <a href="dom_8h_source.html">[code]</a></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:error_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>error.h</b> <a href="error_8h_source.html">[code]</a></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:io_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>io.h</b> <a href="io_8h_source.html">[code]</a></td></tr> -<tr class="memdesc:io_8h"><td class="mdescLeft"> </td><td class="mdescRight">Save and load byte streams from files. <br/></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:parser_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parser.h</b> <a href="parser_8h_source.html">[code]</a></td></tr> -<tr class="memdesc:parser_8h"><td class="mdescLeft"> </td><td class="mdescRight">Convert an XML document object model (class XmlDoc) to and from a byte stream representation. <br/></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:unit__test_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>unit_test.cpp</b></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:xml_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>xml.h</b> <a href="xml_8h_source.html">[code]</a></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -</table> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenXml/doc/dynsections.js b/zenXml/doc/dynsections.js deleted file mode 100644 index ed092c7f..00000000 --- a/zenXml/doc/dynsections.js +++ /dev/null @@ -1,97 +0,0 @@ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} -function toggleLevel(level) -{ - $('table.directory tr').each(function(){ - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l<level+1) { - i.attr('src','ftv2folderopen.png'); - a.attr('src','ftv2mnode.png'); - $(this).show(); - } else if (l==level+1) { - i.attr('src','ftv2folderclosed.png'); - a.attr('src','ftv2pnode.png'); - $(this).show(); - } else { - $(this).hide(); - } - }); - updateStripes(); -} - -function toggleFolder(id) -{ - //The clicked row - var currentRow = $('#row_'+id); - var currentRowImages = currentRow.find("img"); - - //All rows after the clicked row - var rows = currentRow.nextAll("tr"); - - //Only match elements AFTER this one (can't hide elements before) - var childRows = rows.filter(function() { - var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub - return this.id.match(re); - }); - - //First row is visible we are HIDING - if (childRows.filter(':first').is(':visible')===true) { - currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png'); - currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png'); - rows.filter("[id^=row_"+id+"]").hide(); - } else { //We are SHOWING - //All sub images - var childImages = childRows.find("img"); - var childImg = childImages.filter("[id^=img]"); - var childArr = childImages.filter("[id^=arr]"); - - currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row - currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row - childImg.attr('src','ftv2folderclosed.png'); //children closed - childArr.attr('src','ftv2pnode.png'); //children closed - childRows.show(); //show all children - } - updateStripes(); -} - - -function toggleInherit(id) -{ - var rows = $('tr.inherit.'+id); - var img = $('tr.inherit_header.'+id+' img'); - var src = $(img).attr('src'); - if (rows.filter(':first').is(':visible')===true) { - rows.css('display','none'); - $(img).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - rows.css('display','table-row'); // using show() causes jump in firefox - $(img).attr('src',src.substring(0,src.length-10)+'open.png'); - } -} - diff --git a/zenXml/doc/ftv2blank.png b/zenXml/doc/ftv2blank.png Binary files differdeleted file mode 100644 index 63c605bb..00000000 --- a/zenXml/doc/ftv2blank.png +++ /dev/null diff --git a/zenXml/doc/ftv2cl.png b/zenXml/doc/ftv2cl.png Binary files differdeleted file mode 100644 index 132f6577..00000000 --- a/zenXml/doc/ftv2cl.png +++ /dev/null diff --git a/zenXml/doc/ftv2doc.png b/zenXml/doc/ftv2doc.png Binary files differdeleted file mode 100644 index 17edabff..00000000 --- a/zenXml/doc/ftv2doc.png +++ /dev/null diff --git a/zenXml/doc/ftv2folderclosed.png b/zenXml/doc/ftv2folderclosed.png Binary files differdeleted file mode 100644 index bb8ab35e..00000000 --- a/zenXml/doc/ftv2folderclosed.png +++ /dev/null diff --git a/zenXml/doc/ftv2folderopen.png b/zenXml/doc/ftv2folderopen.png Binary files differdeleted file mode 100644 index d6c7f676..00000000 --- a/zenXml/doc/ftv2folderopen.png +++ /dev/null diff --git a/zenXml/doc/ftv2lastnode.png b/zenXml/doc/ftv2lastnode.png Binary files differdeleted file mode 100644 index 63c605bb..00000000 --- a/zenXml/doc/ftv2lastnode.png +++ /dev/null diff --git a/zenXml/doc/ftv2link.png b/zenXml/doc/ftv2link.png Binary files differdeleted file mode 100644 index 17edabff..00000000 --- a/zenXml/doc/ftv2link.png +++ /dev/null diff --git a/zenXml/doc/ftv2mlastnode.png b/zenXml/doc/ftv2mlastnode.png Binary files differdeleted file mode 100644 index 0b63f6d3..00000000 --- a/zenXml/doc/ftv2mlastnode.png +++ /dev/null diff --git a/zenXml/doc/ftv2mnode.png b/zenXml/doc/ftv2mnode.png Binary files differdeleted file mode 100644 index 0b63f6d3..00000000 --- a/zenXml/doc/ftv2mnode.png +++ /dev/null diff --git a/zenXml/doc/ftv2mo.png b/zenXml/doc/ftv2mo.png Binary files differdeleted file mode 100644 index 4bfb80f7..00000000 --- a/zenXml/doc/ftv2mo.png +++ /dev/null diff --git a/zenXml/doc/ftv2node.png b/zenXml/doc/ftv2node.png Binary files differdeleted file mode 100644 index 63c605bb..00000000 --- a/zenXml/doc/ftv2node.png +++ /dev/null diff --git a/zenXml/doc/ftv2ns.png b/zenXml/doc/ftv2ns.png Binary files differdeleted file mode 100644 index 72e3d71c..00000000 --- a/zenXml/doc/ftv2ns.png +++ /dev/null diff --git a/zenXml/doc/ftv2plastnode.png b/zenXml/doc/ftv2plastnode.png Binary files differdeleted file mode 100644 index c6ee22f9..00000000 --- a/zenXml/doc/ftv2plastnode.png +++ /dev/null diff --git a/zenXml/doc/ftv2pnode.png b/zenXml/doc/ftv2pnode.png Binary files differdeleted file mode 100644 index c6ee22f9..00000000 --- a/zenXml/doc/ftv2pnode.png +++ /dev/null diff --git a/zenXml/doc/ftv2splitbar.png b/zenXml/doc/ftv2splitbar.png Binary files differdeleted file mode 100644 index fe895f2c..00000000 --- a/zenXml/doc/ftv2splitbar.png +++ /dev/null diff --git a/zenXml/doc/ftv2vertline.png b/zenXml/doc/ftv2vertline.png Binary files differdeleted file mode 100644 index 63c605bb..00000000 --- a/zenXml/doc/ftv2vertline.png +++ /dev/null diff --git a/zenXml/doc/nav_g.png b/zenXml/doc/nav_g.png Binary files differdeleted file mode 100644 index 2093a237..00000000 --- a/zenXml/doc/nav_g.png +++ /dev/null diff --git a/zenXml/doc/search/all_0.html b/zenXml/doc/search/all_0.html deleted file mode 100644 index 17b6da85..00000000 --- a/zenXml/doc/search/all_0.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_0.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_0.js b/zenXml/doc/search/all_0.js deleted file mode 100644 index 2b7cd296..00000000 --- a/zenXml/doc/search/all_0.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['addchild',['addChild',['../classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9',1,'zen::XmlElement']]], - ['attribute',['attribute',['../classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805',1,'zen::XmlOut::attribute()'],['../classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01',1,'zen::XmlIn::attribute()']]] -]; diff --git a/zenXml/doc/search/all_1.html b/zenXml/doc/search/all_1.html deleted file mode 100644 index e2906449..00000000 --- a/zenXml/doc/search/all_1.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_1.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_1.js b/zenXml/doc/search/all_1.js deleted file mode 100644 index 3c8f3573..00000000 --- a/zenXml/doc/search/all_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['col',['col',['../structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd',1,'zen::XmlParsingError']]] -]; diff --git a/zenXml/doc/search/all_2.html b/zenXml/doc/search/all_2.html deleted file mode 100644 index 95ded122..00000000 --- a/zenXml/doc/search/all_2.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_2.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_2.js b/zenXml/doc/search/all_2.js deleted file mode 100644 index 46ba186a..00000000 --- a/zenXml/doc/search/all_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['errorsoccured',['errorsOccured',['../classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a',1,'zen::XmlIn']]] -]; diff --git a/zenXml/doc/search/all_3.html b/zenXml/doc/search/all_3.html deleted file mode 100644 index 4d312d03..00000000 --- a/zenXml/doc/search/all_3.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_3.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_3.js b/zenXml/doc/search/all_3.js deleted file mode 100644 index 029444b8..00000000 --- a/zenXml/doc/search/all_3.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['get',['get',['../classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f',1,'zen::XmlIn']]], - ['getattribute',['getAttribute',['../classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887',1,'zen::XmlElement']]], - ['getchild',['getChild',['../classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e',1,'zen::XmlElement::getChild(const String &name) const '],['../classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658',1,'zen::XmlElement::getChild(const String &name)']]], - ['getchildren',['getChildren',['../classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8',1,'zen::XmlElement::getChildren(const String &name) const '],['../classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d',1,'zen::XmlElement::getChildren(const String &name)'],['../classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2',1,'zen::XmlElement::getChildren() const '],['../classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96',1,'zen::XmlElement::getChildren()']]], - ['getencodingas',['getEncodingAs',['../classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da',1,'zen::XmlDoc']]], - ['geterrorsas',['getErrorsAs',['../classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e',1,'zen::XmlIn']]], - ['getnameas',['getNameAs',['../classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50',1,'zen::XmlElement']]], - ['getstandaloneas',['getStandaloneAs',['../classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4',1,'zen::XmlDoc']]], - ['getvalue',['getValue',['../classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070',1,'zen::XmlElement']]], - ['getversionas',['getVersionAs',['../classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665',1,'zen::XmlDoc']]] -]; diff --git a/zenXml/doc/search/all_4.html b/zenXml/doc/search/all_4.html deleted file mode 100644 index d72a9104..00000000 --- a/zenXml/doc/search/all_4.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_4.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_4.js b/zenXml/doc/search/all_4.js deleted file mode 100644 index a4b529ae..00000000 --- a/zenXml/doc/search/all_4.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['lasterror',['lastError',['../structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f',1,'zen::XmlFileError']]], - ['load',['load',['../namespacezen.html#a872a48c0616e7f12ae8caca464835e00',1,'zen']]], - ['loadstream',['loadStream',['../namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607',1,'zen']]] -]; diff --git a/zenXml/doc/search/all_5.html b/zenXml/doc/search/all_5.html deleted file mode 100644 index 99ef7267..00000000 --- a/zenXml/doc/search/all_5.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_5.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_5.js b/zenXml/doc/search/all_5.js deleted file mode 100644 index 250e97da..00000000 --- a/zenXml/doc/search/all_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['next',['next',['../classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4',1,'zen::XmlIn']]] -]; diff --git a/zenXml/doc/search/all_6.html b/zenXml/doc/search/all_6.html deleted file mode 100644 index 6133ab3a..00000000 --- a/zenXml/doc/search/all_6.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_6.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_6.js b/zenXml/doc/search/all_6.js deleted file mode 100644 index c1c7d7a1..00000000 --- a/zenXml/doc/search/all_6.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['_2a',['*',['../classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72',1,'zen::XmlIn']]], - ['overview',['Overview',['../index.html',1,'']]], - ['operator_28_29',['operator()',['../classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb',1,'zen::XmlOut::operator()()'],['../classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506',1,'zen::XmlIn::operator()()']]], - ['operator_5b_5d',['operator[]',['../classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831',1,'zen::XmlOut::operator[]()'],['../classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d',1,'zen::XmlIn::operator[]()']]] -]; diff --git a/zenXml/doc/search/all_7.html b/zenXml/doc/search/all_7.html deleted file mode 100644 index 57481259..00000000 --- a/zenXml/doc/search/all_7.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_7.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_7.js b/zenXml/doc/search/all_7.js deleted file mode 100644 index 3175e452..00000000 --- a/zenXml/doc/search/all_7.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['parent',['parent',['../classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1',1,'zen::XmlElement::parent()'],['../classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c',1,'zen::XmlElement::parent() const ']]], - ['parse',['parse',['../namespacezen.html#a1ae1a4688d724b554fe3bf4638700477',1,'zen']]] -]; diff --git a/zenXml/doc/search/all_8.html b/zenXml/doc/search/all_8.html deleted file mode 100644 index 0179bdd4..00000000 --- a/zenXml/doc/search/all_8.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_8.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_8.js b/zenXml/doc/search/all_8.js deleted file mode 100644 index 86fadf65..00000000 --- a/zenXml/doc/search/all_8.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['readstruc',['readStruc',['../namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1',1,'zen']]], - ['readtext',['readText',['../namespacezen.html#acaf85ab94b61882f957afcd355386bff',1,'zen']]], - ['ref',['ref',['../classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2',1,'zen::XmlOut']]], - ['removeattribute',['removeAttribute',['../classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934',1,'zen::XmlElement']]], - ['root',['root',['../classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d',1,'zen::XmlDoc::root() const '],['../classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e',1,'zen::XmlDoc::root()']]], - ['row',['row',['../structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e',1,'zen::XmlParsingError']]] -]; diff --git a/zenXml/doc/search/all_9.html b/zenXml/doc/search/all_9.html deleted file mode 100644 index cd46d440..00000000 --- a/zenXml/doc/search/all_9.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_9.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_9.js b/zenXml/doc/search/all_9.js deleted file mode 100644 index a062befe..00000000 --- a/zenXml/doc/search/all_9.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['save',['save',['../namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d',1,'zen']]], - ['savestream',['saveStream',['../namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2',1,'zen']]], - ['serialize',['serialize',['../namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee',1,'zen']]], - ['setattribute',['setAttribute',['../classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421',1,'zen::XmlElement']]], - ['setencoding',['setEncoding',['../classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62',1,'zen::XmlDoc']]], - ['setstandalone',['setStandalone',['../classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4',1,'zen::XmlDoc']]], - ['setvalue',['setValue',['../classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01',1,'zen::XmlElement']]], - ['setversion',['setVersion',['../classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64',1,'zen::XmlDoc']]] -]; diff --git a/zenXml/doc/search/all_a.html b/zenXml/doc/search/all_a.html deleted file mode 100644 index eab65530..00000000 --- a/zenXml/doc/search/all_a.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_a.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_a.js b/zenXml/doc/search/all_a.js deleted file mode 100644 index 5e349623..00000000 --- a/zenXml/doc/search/all_a.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['writestruc',['writeStruc',['../namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6',1,'zen']]], - ['writetext',['writeText',['../namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f',1,'zen']]] -]; diff --git a/zenXml/doc/search/all_b.html b/zenXml/doc/search/all_b.html deleted file mode 100644 index a2c161e0..00000000 --- a/zenXml/doc/search/all_b.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_b.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_b.js b/zenXml/doc/search/all_b.js deleted file mode 100644 index 371f5dde..00000000 --- a/zenXml/doc/search/all_b.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['xmldoc',['XmlDoc',['../classzen_1_1_xml_doc.html',1,'zen']]], - ['xmldoc',['XmlDoc',['../classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed',1,'zen::XmlDoc::XmlDoc()'],['../classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df',1,'zen::XmlDoc::XmlDoc(String rootName)']]], - ['xmlelement',['XmlElement',['../classzen_1_1_xml_element.html',1,'zen']]], - ['xmlerror',['XmlError',['../structzen_1_1_xml_error.html',1,'zen']]], - ['xmlfileerror',['XmlFileError',['../structzen_1_1_xml_file_error.html',1,'zen']]], - ['xmlin',['XmlIn',['../classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f',1,'zen::XmlIn::XmlIn(const XmlDoc &doc)'],['../classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430',1,'zen::XmlIn::XmlIn(const XmlElement *element)'],['../classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8',1,'zen::XmlIn::XmlIn(const XmlElement &element)']]], - ['xmlin',['XmlIn',['../classzen_1_1_xml_in.html',1,'zen']]], - ['xmlout',['XmlOut',['../classzen_1_1_xml_out.html',1,'zen']]], - ['xmlout',['XmlOut',['../classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc',1,'zen::XmlOut::XmlOut(XmlDoc &doc)'],['../classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0',1,'zen::XmlOut::XmlOut(XmlElement &element)']]], - ['xmlparsingerror',['XmlParsingError',['../structzen_1_1_xml_parsing_error.html',1,'zen']]] -]; diff --git a/zenXml/doc/search/all_c.html b/zenXml/doc/search/all_c.html deleted file mode 100644 index bdd3ee2c..00000000 --- a/zenXml/doc/search/all_c.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_c.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/all_c.js b/zenXml/doc/search/all_c.js deleted file mode 100644 index 14074229..00000000 --- a/zenXml/doc/search/all_c.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['zen',['zen',['../namespacezen.html',1,'']]] -]; diff --git a/zenXml/doc/search/classes_0.html b/zenXml/doc/search/classes_0.html deleted file mode 100644 index fabdc036..00000000 --- a/zenXml/doc/search/classes_0.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="classes_0.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/classes_0.js b/zenXml/doc/search/classes_0.js deleted file mode 100644 index fa78dcd3..00000000 --- a/zenXml/doc/search/classes_0.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['xmldoc',['XmlDoc',['../classzen_1_1_xml_doc.html',1,'zen']]], - ['xmlelement',['XmlElement',['../classzen_1_1_xml_element.html',1,'zen']]], - ['xmlerror',['XmlError',['../structzen_1_1_xml_error.html',1,'zen']]], - ['xmlfileerror',['XmlFileError',['../structzen_1_1_xml_file_error.html',1,'zen']]], - ['xmlin',['XmlIn',['../classzen_1_1_xml_in.html',1,'zen']]], - ['xmlout',['XmlOut',['../classzen_1_1_xml_out.html',1,'zen']]], - ['xmlparsingerror',['XmlParsingError',['../structzen_1_1_xml_parsing_error.html',1,'zen']]] -]; diff --git a/zenXml/doc/search/functions_0.html b/zenXml/doc/search/functions_0.html deleted file mode 100644 index 16a5a527..00000000 --- a/zenXml/doc/search/functions_0.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_0.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/functions_0.js b/zenXml/doc/search/functions_0.js deleted file mode 100644 index 2b7cd296..00000000 --- a/zenXml/doc/search/functions_0.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['addchild',['addChild',['../classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9',1,'zen::XmlElement']]], - ['attribute',['attribute',['../classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805',1,'zen::XmlOut::attribute()'],['../classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01',1,'zen::XmlIn::attribute()']]] -]; diff --git a/zenXml/doc/search/functions_1.html b/zenXml/doc/search/functions_1.html deleted file mode 100644 index 3b4eacfe..00000000 --- a/zenXml/doc/search/functions_1.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_1.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/functions_1.js b/zenXml/doc/search/functions_1.js deleted file mode 100644 index 46ba186a..00000000 --- a/zenXml/doc/search/functions_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['errorsoccured',['errorsOccured',['../classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a',1,'zen::XmlIn']]] -]; diff --git a/zenXml/doc/search/functions_2.html b/zenXml/doc/search/functions_2.html deleted file mode 100644 index 78be8b41..00000000 --- a/zenXml/doc/search/functions_2.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_2.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/functions_2.js b/zenXml/doc/search/functions_2.js deleted file mode 100644 index 029444b8..00000000 --- a/zenXml/doc/search/functions_2.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['get',['get',['../classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f',1,'zen::XmlIn']]], - ['getattribute',['getAttribute',['../classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887',1,'zen::XmlElement']]], - ['getchild',['getChild',['../classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e',1,'zen::XmlElement::getChild(const String &name) const '],['../classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658',1,'zen::XmlElement::getChild(const String &name)']]], - ['getchildren',['getChildren',['../classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8',1,'zen::XmlElement::getChildren(const String &name) const '],['../classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d',1,'zen::XmlElement::getChildren(const String &name)'],['../classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2',1,'zen::XmlElement::getChildren() const '],['../classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96',1,'zen::XmlElement::getChildren()']]], - ['getencodingas',['getEncodingAs',['../classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da',1,'zen::XmlDoc']]], - ['geterrorsas',['getErrorsAs',['../classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e',1,'zen::XmlIn']]], - ['getnameas',['getNameAs',['../classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50',1,'zen::XmlElement']]], - ['getstandaloneas',['getStandaloneAs',['../classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4',1,'zen::XmlDoc']]], - ['getvalue',['getValue',['../classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070',1,'zen::XmlElement']]], - ['getversionas',['getVersionAs',['../classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665',1,'zen::XmlDoc']]] -]; diff --git a/zenXml/doc/search/functions_3.html b/zenXml/doc/search/functions_3.html deleted file mode 100644 index ebf2eebd..00000000 --- a/zenXml/doc/search/functions_3.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_3.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/functions_3.js b/zenXml/doc/search/functions_3.js deleted file mode 100644 index e0022972..00000000 --- a/zenXml/doc/search/functions_3.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['load',['load',['../namespacezen.html#a872a48c0616e7f12ae8caca464835e00',1,'zen']]], - ['loadstream',['loadStream',['../namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607',1,'zen']]] -]; diff --git a/zenXml/doc/search/functions_4.html b/zenXml/doc/search/functions_4.html deleted file mode 100644 index 7317ea91..00000000 --- a/zenXml/doc/search/functions_4.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_4.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/functions_4.js b/zenXml/doc/search/functions_4.js deleted file mode 100644 index 250e97da..00000000 --- a/zenXml/doc/search/functions_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['next',['next',['../classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4',1,'zen::XmlIn']]] -]; diff --git a/zenXml/doc/search/functions_5.html b/zenXml/doc/search/functions_5.html deleted file mode 100644 index 1f1d9ce1..00000000 --- a/zenXml/doc/search/functions_5.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_5.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/functions_5.js b/zenXml/doc/search/functions_5.js deleted file mode 100644 index 4152ba50..00000000 --- a/zenXml/doc/search/functions_5.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['_2a',['*',['../classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72',1,'zen::XmlIn']]], - ['operator_28_29',['operator()',['../classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb',1,'zen::XmlOut::operator()()'],['../classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506',1,'zen::XmlIn::operator()()']]], - ['operator_5b_5d',['operator[]',['../classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831',1,'zen::XmlOut::operator[]()'],['../classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d',1,'zen::XmlIn::operator[]()']]] -]; diff --git a/zenXml/doc/search/functions_6.html b/zenXml/doc/search/functions_6.html deleted file mode 100644 index c9faaa6a..00000000 --- a/zenXml/doc/search/functions_6.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_6.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/functions_6.js b/zenXml/doc/search/functions_6.js deleted file mode 100644 index 3175e452..00000000 --- a/zenXml/doc/search/functions_6.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['parent',['parent',['../classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1',1,'zen::XmlElement::parent()'],['../classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c',1,'zen::XmlElement::parent() const ']]], - ['parse',['parse',['../namespacezen.html#a1ae1a4688d724b554fe3bf4638700477',1,'zen']]] -]; diff --git a/zenXml/doc/search/functions_7.html b/zenXml/doc/search/functions_7.html deleted file mode 100644 index ec330da8..00000000 --- a/zenXml/doc/search/functions_7.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_7.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/functions_7.js b/zenXml/doc/search/functions_7.js deleted file mode 100644 index 86b2b142..00000000 --- a/zenXml/doc/search/functions_7.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['readstruc',['readStruc',['../namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1',1,'zen']]], - ['readtext',['readText',['../namespacezen.html#acaf85ab94b61882f957afcd355386bff',1,'zen']]], - ['ref',['ref',['../classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2',1,'zen::XmlOut']]], - ['removeattribute',['removeAttribute',['../classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934',1,'zen::XmlElement']]], - ['root',['root',['../classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d',1,'zen::XmlDoc::root() const '],['../classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e',1,'zen::XmlDoc::root()']]] -]; diff --git a/zenXml/doc/search/functions_8.html b/zenXml/doc/search/functions_8.html deleted file mode 100644 index afd4facf..00000000 --- a/zenXml/doc/search/functions_8.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_8.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/functions_8.js b/zenXml/doc/search/functions_8.js deleted file mode 100644 index a062befe..00000000 --- a/zenXml/doc/search/functions_8.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['save',['save',['../namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d',1,'zen']]], - ['savestream',['saveStream',['../namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2',1,'zen']]], - ['serialize',['serialize',['../namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee',1,'zen']]], - ['setattribute',['setAttribute',['../classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421',1,'zen::XmlElement']]], - ['setencoding',['setEncoding',['../classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62',1,'zen::XmlDoc']]], - ['setstandalone',['setStandalone',['../classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4',1,'zen::XmlDoc']]], - ['setvalue',['setValue',['../classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01',1,'zen::XmlElement']]], - ['setversion',['setVersion',['../classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64',1,'zen::XmlDoc']]] -]; diff --git a/zenXml/doc/search/functions_9.html b/zenXml/doc/search/functions_9.html deleted file mode 100644 index 542b9e0a..00000000 --- a/zenXml/doc/search/functions_9.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_9.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/functions_9.js b/zenXml/doc/search/functions_9.js deleted file mode 100644 index 5e349623..00000000 --- a/zenXml/doc/search/functions_9.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['writestruc',['writeStruc',['../namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6',1,'zen']]], - ['writetext',['writeText',['../namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f',1,'zen']]] -]; diff --git a/zenXml/doc/search/functions_a.html b/zenXml/doc/search/functions_a.html deleted file mode 100644 index 94fd395d..00000000 --- a/zenXml/doc/search/functions_a.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_a.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/functions_a.js b/zenXml/doc/search/functions_a.js deleted file mode 100644 index b9817184..00000000 --- a/zenXml/doc/search/functions_a.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['xmldoc',['XmlDoc',['../classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed',1,'zen::XmlDoc::XmlDoc()'],['../classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df',1,'zen::XmlDoc::XmlDoc(String rootName)']]], - ['xmlin',['XmlIn',['../classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f',1,'zen::XmlIn::XmlIn(const XmlDoc &doc)'],['../classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430',1,'zen::XmlIn::XmlIn(const XmlElement *element)'],['../classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8',1,'zen::XmlIn::XmlIn(const XmlElement &element)']]], - ['xmlout',['XmlOut',['../classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc',1,'zen::XmlOut::XmlOut(XmlDoc &doc)'],['../classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0',1,'zen::XmlOut::XmlOut(XmlElement &element)']]] -]; diff --git a/zenXml/doc/search/namespaces_0.html b/zenXml/doc/search/namespaces_0.html deleted file mode 100644 index dc606861..00000000 --- a/zenXml/doc/search/namespaces_0.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="namespaces_0.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/namespaces_0.js b/zenXml/doc/search/namespaces_0.js deleted file mode 100644 index 14074229..00000000 --- a/zenXml/doc/search/namespaces_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['zen',['zen',['../namespacezen.html',1,'']]] -]; diff --git a/zenXml/doc/search/pages_0.html b/zenXml/doc/search/pages_0.html deleted file mode 100644 index c51c8345..00000000 --- a/zenXml/doc/search/pages_0.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="pages_0.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/pages_0.js b/zenXml/doc/search/pages_0.js deleted file mode 100644 index 277cca08..00000000 --- a/zenXml/doc/search/pages_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['overview',['Overview',['../index.html',1,'']]] -]; diff --git a/zenXml/doc/search/variables_0.html b/zenXml/doc/search/variables_0.html deleted file mode 100644 index 1b8adc9b..00000000 --- a/zenXml/doc/search/variables_0.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="variables_0.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/variables_0.js b/zenXml/doc/search/variables_0.js deleted file mode 100644 index 3c8f3573..00000000 --- a/zenXml/doc/search/variables_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['col',['col',['../structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd',1,'zen::XmlParsingError']]] -]; diff --git a/zenXml/doc/search/variables_1.html b/zenXml/doc/search/variables_1.html deleted file mode 100644 index 78f63cd1..00000000 --- a/zenXml/doc/search/variables_1.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="variables_1.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/variables_1.js b/zenXml/doc/search/variables_1.js deleted file mode 100644 index e2e327ad..00000000 --- a/zenXml/doc/search/variables_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['lasterror',['lastError',['../structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f',1,'zen::XmlFileError']]] -]; diff --git a/zenXml/doc/search/variables_2.html b/zenXml/doc/search/variables_2.html deleted file mode 100644 index ea80d201..00000000 --- a/zenXml/doc/search/variables_2.html +++ /dev/null @@ -1,26 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta name="generator" content="Doxygen 1.8.6"> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="variables_2.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenXml/doc/search/variables_2.js b/zenXml/doc/search/variables_2.js deleted file mode 100644 index f37305dd..00000000 --- a/zenXml/doc/search/variables_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['row',['row',['../structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e',1,'zen::XmlParsingError']]] -]; diff --git a/zenXml/doc/sync_off.png b/zenXml/doc/sync_off.png Binary files differdeleted file mode 100644 index 3b443fc6..00000000 --- a/zenXml/doc/sync_off.png +++ /dev/null diff --git a/zenXml/doc/sync_on.png b/zenXml/doc/sync_on.png Binary files differdeleted file mode 100644 index e08320fb..00000000 --- a/zenXml/doc/sync_on.png +++ /dev/null diff --git a/zenxml/doc/annotated.html b/zenxml/doc/annotated.html deleted file mode 100644 index c11dd07e..00000000 --- a/zenxml/doc/annotated.html +++ /dev/null @@ -1,110 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Class List</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li class="current"><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -</div><!-- top --> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div class="header"> - <div class="headertitle"> -<div class="title">Class List</div> </div> -</div><!--header--> -<div class="contents"> -<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory"> -<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory"> -<tr id="row_0_" class="even"><td class="entry"><img id="arr_0_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('0_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="namespacezen.html" target="_self">zen</a></td><td class="desc">The zen::Xml namespace </td></tr> -<tr id="row_0_0_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_out.html" target="_self">XmlOut</a></td><td class="desc">Proxy class to conveniently convert user data into XML structure </td></tr> -<tr id="row_0_1_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_in.html" target="_self">XmlIn</a></td><td class="desc">Proxy class to conveniently convert XML structure to user data </td></tr> -<tr id="row_0_2_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_element.html" target="_self">XmlElement</a></td><td class="desc">An XML element </td></tr> -<tr id="row_0_3_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_doc.html" target="_self">XmlDoc</a></td><td class="desc">The complete XML document </td></tr> -<tr id="row_0_4_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structzen_1_1_xml_error.html" target="_self">XmlError</a></td><td class="desc">Exception base class for zen::Xml </td></tr> -<tr id="row_0_5_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structzen_1_1_xml_file_error.html" target="_self">XmlFileError</a></td><td class="desc">Exception thrown due to failed file I/O </td></tr> -<tr id="row_0_6_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structzen_1_1_xml_parsing_error.html" target="_self">XmlParsingError</a></td><td class="desc">Exception thrown due to an XML parsing error </td></tr> -</table> -</div><!-- directory --> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/bc_s.png b/zenxml/doc/bc_s.png Binary files differdeleted file mode 100644 index 224b29aa..00000000 --- a/zenxml/doc/bc_s.png +++ /dev/null diff --git a/zenxml/doc/bdwn.png b/zenxml/doc/bdwn.png Binary files differdeleted file mode 100644 index 940a0b95..00000000 --- a/zenxml/doc/bdwn.png +++ /dev/null diff --git a/zenxml/doc/bind_8h_source.html b/zenxml/doc/bind_8h_source.html deleted file mode 100644 index e8e9e831..00000000 --- a/zenxml/doc/bind_8h_source.html +++ /dev/null @@ -1,335 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: bind.h Source File</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">bind.h</div> </div> -</div><!--header--> -<div class="contents"> -<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> -<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> -<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> -<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> -<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_BIND_HEADER_9081740816593478258435</span></div> -<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_BIND_HEADER_9081740816593478258435</span></div> -<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> -<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <set></span></div> -<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include "cvrt_struc.h"</span></div> -<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include "parser.h"</span></div> -<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "io.h"</span></div> -<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div> -<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="namespacezen.html"> 15</a></span> <span class="keyword">namespace </span>zen</div> -<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> {</div> -<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div> -<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">template</span> <<span class="keyword">class</span> String> <span class="keyword">inline</span></div> -<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00"> 33</a></span> <a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a> <a class="code" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">load</a>(<span class="keyword">const</span> String& filename) <span class="comment">//throw XmlFileError, XmlParsingError</span></div> -<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div> -<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  std::string stream = <a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">loadStream</a>(filename); <span class="comment">//throw XmlFileError</span></div> -<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">return</span> <a class="code" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">parse</a>(stream); <span class="comment">//throw XmlParsingError</span></div> -<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</div> -<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div> -<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div> -<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div> -<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">template</span> <<span class="keyword">class</span> String> <span class="keyword">inline</span></div> -<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d"> 52</a></span> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a>& doc,</div> -<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">const</span> String& filename,</div> -<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">const</span> std::string& lineBreak = <span class="stringliteral">"\r\n"</span>,</div> -<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">const</span> std::string& indent = <span class="stringliteral">" "</span>) <span class="comment">//throw XmlFileError</span></div> -<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div> -<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  std::string stream = <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(doc, lineBreak, indent); <span class="comment">//throw ()</span></div> -<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">saveStream</a>(stream, filename); <span class="comment">//throw XmlFileError</span></div> -<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div> -<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div> -<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div> -<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html"> 63</a></span> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_out.html">XmlOut</a></div> -<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> {</div> -<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">public</span>:</div> -<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div> -<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc"> 88</a></span>  <a class="code" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">XmlOut</a>(<a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a>& doc) : ref_(&doc.root()) {}</div> -<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div> -<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0"> 93</a></span>  <a class="code" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">XmlOut</a>(<a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& element) : ref_(&element) {}</div> -<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div> -<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div> -<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831"> 102</a></span>  <a class="code" href="classzen_1_1_xml_out.html">XmlOut</a> <a class="code" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">operator[]</a>(<span class="keyword">const</span> String& name)<span class="keyword"> const</span></div> -<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">const</span> std::string utf8name = utfCvrtTo<std::string>(name);</div> -<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* child = ref_-><a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a>(utf8name);</div> -<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">return</span> child ? *child : ref_-><a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a>(utf8name);</div> -<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div> -<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div> -<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div> -<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb"> 115</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">operator()</a>(<span class="keyword">const</span> T& value) { <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(value, *ref_); }</div> -<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div> -<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div> -<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String, <span class="keyword">class</span> T></div> -<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805"> 143</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">attribute</a>(<span class="keyword">const</span> String& name, <span class="keyword">const</span> T& value) { ref_-><a class="code" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">setAttribute</a>(name, value); }</div> -<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div> -<div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2"> 146</a></span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& <a class="code" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">ref</a>() { <span class="keywordflow">return</span> *ref_; }</div> -<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div> -<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">private</span>:</div> -<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* ref_; <span class="comment">//always bound!</span></div> -<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> };</div> -<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div> -<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div> -<div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html"> 154</a></span> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_in.html">XmlIn</a></div> -<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> {</div> -<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">class </span>ErrorLog;</div> -<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">struct </span>ConversionToBool { <span class="keywordtype">int</span> dummy; };</div> -<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div> -<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keyword">public</span>:</div> -<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div> -<div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f"> 171</a></span>  <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a>& doc) : refIndex(0), log(std::make_shared<ErrorLog>()) { refList.push_back(&doc.<a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a>()); }</div> -<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div> -<div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430"> 176</a></span>  <a class="code" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">XmlIn</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* element) : refIndex(0), log(std::make_shared<ErrorLog>()) { refList.push_back(element); }</div> -<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div> -<div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8"> 181</a></span>  <a class="code" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">XmlIn</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& element) : refIndex(0), log(std::make_shared<ErrorLog>()) { refList.push_back(&element); }</div> -<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div> -<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div> -<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d"> 190</a></span>  <a class="code" href="classzen_1_1_xml_in.html">XmlIn</a> <a class="code" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">operator[]</a>(<span class="keyword">const</span> String& name)<span class="keyword"> const</span></div> -<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  std::vector<const XmlElement*> childList;</div> -<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div> -<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">if</span> (refIndex < refList.size())</div> -<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  {</div> -<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keyword">auto</span> iterPair = refList[refIndex]->getChildren(name);</div> -<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  std::for_each(iterPair.first, iterPair.second,</div> -<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  [&](<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& child) { childList.push_back(&child); });</div> -<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  }</div> -<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div> -<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">return</span> <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a>(childList, childList.empty() ? getChildNameFormatted(name) : std::string(), log);</div> -<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div> -<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div> -<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div> -<div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4"> 225</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">next</a>() { ++refIndex; }</div> -<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div> -<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div> -<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506"> 234</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">operator()</a>(T& value)<span class="keyword"> const</span></div> -<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">if</span> (refIndex < refList.size())</div> -<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  {</div> -<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordtype">bool</span> success = <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(*refList[refIndex], value);</div> -<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">if</span> (!success)</div> -<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  log->notifyConversionError(getNameFormatted());</div> -<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span> success;</div> -<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div> -<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">else</span></div> -<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  {</div> -<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  log->notifyMissingElement(getNameFormatted());</div> -<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> -<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div> -<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  }</div> -<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div> -<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div> -<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String, <span class="keyword">class</span> T></div> -<div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01"> 269</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">attribute</a>(<span class="keyword">const</span> String& name, T& value)<span class="keyword"> const</span></div> -<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">if</span> (refIndex < refList.size())</div> -<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  {</div> -<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordtype">bool</span> success = refList[refIndex]->getAttribute(name, value);</div> -<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span> (!success)</div> -<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  log->notifyMissingAttribute(getNameFormatted(), utfCvrtTo<std::string>(name));</div> -<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">return</span> success;</div> -<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div> -<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">else</span></div> -<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  {</div> -<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  log->notifyMissingElement(getNameFormatted());</div> -<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> -<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div> -<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div> -<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div> -<div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f"> 286</a></span>  <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* <span class="keyword">get</span>() <span class="keyword">const</span> { <span class="keywordflow">return</span> refIndex < refList.size() ? refList[refIndex] : <span class="keyword">nullptr</span>; }</div> -<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div> -<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div> -<div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72"> 298</a></span>  <span class="keyword">operator</span> <span class="keywordtype">int</span> ConversionToBool::* () <span class="keyword">const</span> { <span class="keywordflow">return</span> <span class="keyword">get</span>() ? &ConversionToBool::dummy : <span class="keyword">nullptr</span>; }</div> -<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div> -<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div> -<div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a"> 320</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">errorsOccured</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !log->elementList().empty(); }</div> -<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div> -<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div> -<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e"> 328</a></span>  std::vector<String> <a class="code" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">getErrorsAs</a>()<span class="keyword"> const</span></div> -<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  std::vector<String> output;</div> -<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& elements = log->elementList();</div> -<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  std::transform(elements.begin(), elements.end(), std::back_inserter(output), [](<span class="keyword">const</span> std::string& str) { <span class="keywordflow">return</span> utfCvrtTo<String>(str); });</div> -<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">return</span> output;</div> -<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  }</div> -<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div> -<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">private</span>:</div> -<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <a class="code" href="classzen_1_1_xml_in.html">XmlIn</a>(<span class="keyword">const</span> std::vector<const XmlElement*>& siblingList, <span class="keyword">const</span> std::string& elementNameFmt, <span class="keyword">const</span> std::shared_ptr<ErrorLog>& sharedlog) :</div> -<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  refList(siblingList), refIndex(0), formattedName(elementNameFmt), log(sharedlog)</div> -<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  { assert((!siblingList.empty() && elementNameFmt.empty()) || (siblingList.empty() && !elementNameFmt.empty())); }</div> -<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div> -<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keyword">static</span> std::string getNameFormatted(<span class="keyword">const</span> XmlElement& elem) <span class="comment">//"<Root> <Level1> <Level2>"</span></div> -<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  {</div> -<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">return</span> (elem.parent() ? getNameFormatted(*elem.parent()) + <span class="stringliteral">" "</span> : std::string()) + <span class="stringliteral">"<"</span> + elem.getNameAs<std::string>() + <span class="stringliteral">">"</span>;</div> -<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  }</div> -<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div> -<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  std::string getNameFormatted()<span class="keyword"> const</span></div> -<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordflow">if</span> (refIndex < refList.size())</div> -<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  {</div> -<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  assert(formattedName.empty());</div> -<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">return</span> getNameFormatted(*refList[refIndex]);</div> -<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div> -<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keywordflow">else</span></div> -<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">return</span> formattedName;</div> -<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  }</div> -<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div> -<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  std::string getChildNameFormatted(<span class="keyword">const</span> std::string& childName)<span class="keyword"> const</span></div> -<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  std::string parentName = getNameFormatted();</div> -<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">return</span> (parentName.empty() ? std::string() : (parentName + <span class="stringliteral">" "</span>)) + <span class="stringliteral">"<"</span> + childName + <span class="stringliteral">">"</span>;</div> -<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div> -<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div> -<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keyword">class </span>ErrorLog</div> -<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div> -<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keyword">public</span>:</div> -<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordtype">void</span> notifyConversionError (<span class="keyword">const</span> std::string& formattedName) { insert(formattedName); }</div> -<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordtype">void</span> notifyMissingElement (<span class="keyword">const</span> std::string& formattedName) { insert(formattedName); }</div> -<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordtype">void</span> notifyMissingAttribute(<span class="keyword">const</span> std::string& formattedName, <span class="keyword">const</span> std::string& attribName) { insert(formattedName + <span class="stringliteral">" @"</span> + attribName); }</div> -<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div> -<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keyword">const</span> std::vector<std::string>& elementList()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> failedElements; }</div> -<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div> -<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keyword">private</span>:</div> -<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordtype">void</span> insert(<span class="keyword">const</span> std::string& newVal)</div> -<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  {</div> -<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">if</span> (usedElements.insert(newVal).second)</div> -<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  failedElements.push_back(newVal);</div> -<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div> -<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div> -<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  std::vector<std::string> failedElements; <span class="comment">//unique list of failed elements</span></div> -<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  std::set<std::string> usedElements;</div> -<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  };</div> -<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div> -<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  std::vector<const XmlElement*> refList; <span class="comment">//all sibling elements with same name (all pointers bound!)</span></div> -<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordtype">size_t</span> refIndex; <span class="comment">//this sibling's index in refList</span></div> -<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  std::string formattedName; <span class="comment">//contains full and formatted element name if (and only if) refList is empty</span></div> -<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  std::shared_ptr<ErrorLog> log; <span class="comment">//always bound</span></div> -<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> };</div> -<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> }</div> -<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div> -<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor">#endif //ZEN_XML_BIND_HEADER_9081740816593478258435</span></div> -<div class="ttc" id="classzen_1_1_xml_in_html_a33b5dd504d3165aa3f923f6b33e9991a"><div class="ttname"><a href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">zen::XmlIn::errorsOccured</a></div><div class="ttdeci">bool errorsOccured() const </div><div class="ttdoc">Notifies errors while mapping the XML to user data. </div><div class="ttdef"><b>Definition:</b> bind.h:320</div></div> -<div class="ttc" id="namespacezen_html_adeeb6b2318097382ae47aa939fc15d4d"><div class="ttname"><a href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">zen::save</a></div><div class="ttdeci">void save(const XmlDoc &doc, const String &filename, const std::string &lineBreak="\r\n", const std::string &indent=" ")</div><div class="ttdoc">Save XML document to a file. </div><div class="ttdef"><b>Definition:</b> bind.h:52</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html_ad4a9594d93885fc1a12db28e8246648d"><div class="ttname"><a href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">zen::XmlDoc::root</a></div><div class="ttdeci">const XmlElement & root() const </div><div class="ttdoc">Get a const reference to the document's root element. </div><div class="ttdef"><b>Definition:</b> dom.h:267</div></div> -<div class="ttc" id="namespacezen_html_a1ae1a4688d724b554fe3bf4638700477"><div class="ttname"><a href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">zen::parse</a></div><div class="ttdeci">XmlDoc parse(const std::string &stream)</div><div class="ttdoc">Load XML document from a byte stream. </div><div class="ttdef"><b>Definition:</b> parser.h:612</div></div> -<div class="ttc" id="namespacezen_html_afaa4920e275078e6c8009fbdf58b57ee"><div class="ttname"><a href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">zen::serialize</a></div><div class="ttdeci">std::string serialize(const XmlDoc &doc, const std::string &lineBreak="\r\n", const std::string &indent=" ")</div><div class="ttdoc">Save XML document as a byte stream. </div><div class="ttdef"><b>Definition:</b> parser.h:287</div></div> -<div class="ttc" id="classzen_1_1_xml_out_html_ad8b1ccb8f3d4e7b0ab2598597ea50bcc"><div class="ttname"><a href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">zen::XmlOut::XmlOut</a></div><div class="ttdeci">XmlOut(XmlDoc &doc)</div><div class="ttdoc">Construct an output proxy for an XML document. </div><div class="ttdef"><b>Definition:</b> bind.h:88</div></div> -<div class="ttc" id="classzen_1_1_xml_out_html_aec117344e8a534382e8d5e76711f97b2"><div class="ttname"><a href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">zen::XmlOut::ref</a></div><div class="ttdeci">XmlElement & ref()</div><div class="ttdoc">Return a reference to the underlying Xml element. </div><div class="ttdef"><b>Definition:</b> bind.h:146</div></div> -<div class="ttc" id="namespacezen_html_a4ba7bbaa14a787b07fc13da9145aabe2"><div class="ttname"><a href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">zen::saveStream</a></div><div class="ttdeci">void saveStream(const std::string &stream, const String &filename)</div><div class="ttdoc">Save byte stream to a file. </div><div class="ttdef"><b>Definition:</b> io.h:66</div></div> -<div class="ttc" id="classzen_1_1_xml_in_html"><div class="ttname"><a href="classzen_1_1_xml_in.html">zen::XmlIn</a></div><div class="ttdoc">Proxy class to conveniently convert XML structure to user data. </div><div class="ttdef"><b>Definition:</b> bind.h:154</div></div> -<div class="ttc" id="classzen_1_1_xml_out_html_a09ca9144515e3c109b36062b0475c8eb"><div class="ttname"><a href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">zen::XmlOut::operator()</a></div><div class="ttdeci">void operator()(const T &value)</div><div class="ttdoc">Write user data to the underlying XML element. </div><div class="ttdef"><b>Definition:</b> bind.h:115</div></div> -<div class="ttc" id="namespacezen_html_a04fe23c3bd9b7d03309620b5ea763607"><div class="ttname"><a href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">zen::loadStream</a></div><div class="ttdeci">std::string loadStream(const String &filename)</div><div class="ttdoc">Load byte stream from a file. </div><div class="ttdef"><b>Definition:</b> io.h:94</div></div> -<div class="ttc" id="classzen_1_1_xml_in_html_a5b48c9848e6c631a04cec2477ff85c0f"><div class="ttname"><a href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">zen::XmlIn::XmlIn</a></div><div class="ttdeci">XmlIn(const XmlDoc &doc)</div><div class="ttdoc">Construct an input proxy for an XML document. </div><div class="ttdef"><b>Definition:</b> bind.h:171</div></div> -<div class="ttc" id="classzen_1_1_xml_in_html_a33de75412df69cb25e0fd8b3bc70c9f8"><div class="ttname"><a href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">zen::XmlIn::XmlIn</a></div><div class="ttdeci">XmlIn(const XmlElement &element)</div><div class="ttdoc">Construct an input proxy for a single XML element. </div><div class="ttdef"><b>Definition:</b> bind.h:181</div></div> -<div class="ttc" id="classzen_1_1_xml_in_html_a60cf2678c989621545d27745dcafa4a4"><div class="ttname"><a href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">zen::XmlIn::next</a></div><div class="ttdeci">void next()</div><div class="ttdoc">Refer to next sibling element with the same name. </div><div class="ttdef"><b>Definition:</b> bind.h:225</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html"><div class="ttname"><a href="classzen_1_1_xml_element.html">zen::XmlElement</a></div><div class="ttdoc">An XML element. </div><div class="ttdef"><b>Definition:</b> dom.h:21</div></div> -<div class="ttc" id="classzen_1_1_xml_out_html_acaf9b71fe1d907dd63dd4b91e2e03805"><div class="ttname"><a href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">zen::XmlOut::attribute</a></div><div class="ttdeci">void attribute(const String &name, const T &value)</div><div class="ttdoc">Write user data to an XML attribute. </div><div class="ttdef"><b>Definition:</b> bind.h:143</div></div> -<div class="ttc" id="classzen_1_1_xml_in_html_a9b38167835a28eac9a2297f35f51e53d"><div class="ttname"><a href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">zen::XmlIn::operator[]</a></div><div class="ttdeci">XmlIn operator[](const String &name) const </div><div class="ttdoc">Retrieve a handle to an XML child element for reading. </div><div class="ttdef"><b>Definition:</b> bind.h:190</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html"><div class="ttname"><a href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></div><div class="ttdoc">The complete XML document. </div><div class="ttdef"><b>Definition:</b> dom.h:249</div></div> -<div class="ttc" id="classzen_1_1_xml_in_html_a971cd7054c551c4460d5220f6ec5cf01"><div class="ttname"><a href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">zen::XmlIn::attribute</a></div><div class="ttdeci">bool attribute(const String &name, T &value) const </div><div class="ttdoc">Read user data from an XML attribute. </div><div class="ttdef"><b>Definition:</b> bind.h:269</div></div> -<div class="ttc" id="classzen_1_1_xml_in_html_a84bb497d3b3fc753d054e52c4823c05e"><div class="ttname"><a href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">zen::XmlIn::getErrorsAs</a></div><div class="ttdeci">std::vector< String > getErrorsAs() const </div><div class="ttdoc">Get a list of XML element and attribute names which failed to convert to user data. </div><div class="ttdef"><b>Definition:</b> bind.h:328</div></div> -<div class="ttc" id="classzen_1_1_xml_out_html"><div class="ttname"><a href="classzen_1_1_xml_out.html">zen::XmlOut</a></div><div class="ttdoc">Proxy class to conveniently convert user data into XML structure. </div><div class="ttdef"><b>Definition:</b> bind.h:63</div></div> -<div class="ttc" id="classzen_1_1_xml_in_html_a98cc59f687c89549381e76105f8fb506"><div class="ttname"><a href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">zen::XmlIn::operator()</a></div><div class="ttdeci">bool operator()(T &value) const </div><div class="ttdoc">Read user data from the underlying XML element. </div><div class="ttdef"><b>Definition:</b> bind.h:234</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a653caffa6fad89db7d14f67f987ad0f9"><div class="ttname"><a href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">zen::XmlElement::addChild</a></div><div class="ttdeci">XmlElement & addChild(const String &name)</div><div class="ttdoc">Create a new child element and return a reference to it. </div><div class="ttdef"><b>Definition:</b> dom.h:97</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a3ab82b1720460487f4afabcd115d0c7e"><div class="ttname"><a href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">zen::XmlElement::getChild</a></div><div class="ttdeci">const XmlElement * getChild(const String &name) const </div><div class="ttdoc">Retrieve a child element with the given name. </div><div class="ttdef"><b>Definition:</b> dom.h:113</div></div> -<div class="ttc" id="namespacezen_html_a2bdcecfe7435ef11cedbce47d4e72ee1"><div class="ttname"><a href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a></div><div class="ttdeci">bool readStruc(const XmlElement &input, T &value)</div><div class="ttdoc">Convert XML element to structured user data. </div><div class="ttdef"><b>Definition:</b> cvrt_struc.h:205</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a211a6f037c22a54d3facb7a8347a8421"><div class="ttname"><a href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">zen::XmlElement::setAttribute</a></div><div class="ttdeci">void setAttribute(const String &name, const T &value)</div><div class="ttdoc">Create or update an XML attribute. </div><div class="ttdef"><b>Definition:</b> dom.h:77</div></div> -<div class="ttc" id="namespacezen_html_a29ddb823fe0a195f19a64448881b8bf6"><div class="ttname"><a href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a></div><div class="ttdeci">void writeStruc(const T &value, XmlElement &output)</div><div class="ttdoc">Convert structured user data into an XML element. </div><div class="ttdef"><b>Definition:</b> cvrt_struc.h:198</div></div> -<div class="ttc" id="classzen_1_1_xml_out_html_a00f883d3f9d60535b06b5ae609dc8831"><div class="ttname"><a href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">zen::XmlOut::operator[]</a></div><div class="ttdeci">XmlOut operator[](const String &name) const </div><div class="ttdoc">Retrieve a handle to an XML child element for writing. </div><div class="ttdef"><b>Definition:</b> bind.h:102</div></div> -<div class="ttc" id="classzen_1_1_xml_in_html_ae072660cde71fd4695c04d074098b430"><div class="ttname"><a href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">zen::XmlIn::XmlIn</a></div><div class="ttdeci">XmlIn(const XmlElement *element)</div><div class="ttdoc">Construct an input proxy for a single XML element, may be nullptr. </div><div class="ttdef"><b>Definition:</b> bind.h:176</div></div> -<div class="ttc" id="classzen_1_1_xml_out_html_aa80be3a56f70a58d2730a763166088c0"><div class="ttname"><a href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">zen::XmlOut::XmlOut</a></div><div class="ttdeci">XmlOut(XmlElement &element)</div><div class="ttdoc">Construct an output proxy for a single XML element. </div><div class="ttdef"><b>Definition:</b> bind.h:93</div></div> -<div class="ttc" id="namespacezen_html_a872a48c0616e7f12ae8caca464835e00"><div class="ttname"><a href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">zen::load</a></div><div class="ttdeci">XmlDoc load(const String &filename)</div><div class="ttdoc">Load XML document from a file. </div><div class="ttdef"><b>Definition:</b> bind.h:33</div></div> -</div><!-- fragment --></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/classes.html b/zenxml/doc/classes.html deleted file mode 100644 index d14feac0..00000000 --- a/zenxml/doc/classes.html +++ /dev/null @@ -1,107 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Class Index</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li class="current"><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -</div><!-- top --> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div class="header"> - <div class="headertitle"> -<div class="title">Class Index</div> </div> -</div><!--header--> -<div class="contents"> -<div class="qindex"><a class="qindex" href="#letter_X">X</a></div> -<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0"> -<tr><td rowspan="2" valign="bottom"><a name="letter_X"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  X  </div></td></tr></table> -</td><td valign="top"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> (<a class="el" href="namespacezen.html">zen</a>)   </td><td valign="top"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a> (<a class="el" href="namespacezen.html">zen</a>)   </td><td valign="top"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a> (<a class="el" href="namespacezen.html">zen</a>)   </td><td></td></tr> -<tr><td valign="top"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a> (<a class="el" href="namespacezen.html">zen</a>)   </td><td valign="top"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a> (<a class="el" href="namespacezen.html">zen</a>)   </td><td valign="top"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a> (<a class="el" href="namespacezen.html">zen</a>)   </td><td></td></tr> -<tr><td valign="top"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> (<a class="el" href="namespacezen.html">zen</a>)   </td><td></td><td></td><td></td><td></td></tr> -<tr><td></td><td></td><td></td><td></td><td></td></tr> -</table> -<div class="qindex"><a class="qindex" href="#letter_X">X</a></div> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/classzen_1_1_xml_doc-members.html b/zenxml/doc/classzen_1_1_xml_doc-members.html deleted file mode 100644 index b635379d..00000000 --- a/zenxml/doc/classzen_1_1_xml_doc-members.html +++ /dev/null @@ -1,115 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Member List</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">zen::XmlDoc Member List</div> </div> -</div><!--header--> -<div class="contents"> - -<p>This is the complete list of members for <a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a>, including all inherited members.</p> -<table class="directory"> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">getEncodingAs</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">getStandaloneAs</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">getVersionAs</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">root</a>()</td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">setEncoding</a>(const String &encoding)</td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">setStandalone</a>(const String &standalone)</td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">setVersion</a>(const String &version)</td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>()</td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">XmlDoc</a>(String rootName)</td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> -</table></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/classzen_1_1_xml_doc.html b/zenxml/doc/classzen_1_1_xml_doc.html deleted file mode 100644 index 174e84fc..00000000 --- a/zenxml/doc/classzen_1_1_xml_doc.html +++ /dev/null @@ -1,340 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: zen::XmlDoc Class Reference</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="summary"> -<a href="#pub-methods">Public Member Functions</a> | -<a href="classzen_1_1_xml_doc-members.html">List of all members</a> </div> - <div class="headertitle"> -<div class="title">zen::XmlDoc Class Reference</div> </div> -</div><!--header--> -<div class="contents"> - -<p>The complete XML document. - <a href="classzen_1_1_xml_doc.html#details">More...</a></p> - -<p><code>#include <<a class="el" href="dom_8h_source.html">dom.h</a>></code></p> -<table class="memberdecls"> -<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> -Public Member Functions</h2></td></tr> -<tr class="memitem:adbed9c31066d456a9cc8c610f15670ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbed9c31066d456a9cc8c610f15670ed"></a> - </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a> ()</td></tr> -<tr class="memdesc:adbed9c31066d456a9cc8c610f15670ed"><td class="mdescLeft"> </td><td class="mdescRight">Default constructor setting up an empty XML document with a standard declaration: <?xml version="1.0" encoding="UTF-8" ?> <br/></td></tr> -<tr class="separator:adbed9c31066d456a9cc8c610f15670ed"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a74ff8434848672fe6483845d04c082df"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a74ff8434848672fe6483845d04c082df"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">XmlDoc</a> (String rootName)</td></tr> -<tr class="separator:a74ff8434848672fe6483845d04c082df"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ad4a9594d93885fc1a12db28e8246648d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4a9594d93885fc1a12db28e8246648d"></a> -const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a> () const </td></tr> -<tr class="memdesc:ad4a9594d93885fc1a12db28e8246648d"><td class="mdescLeft"> </td><td class="mdescRight">Get a const reference to the document's root element. <br/></td></tr> -<tr class="separator:ad4a9594d93885fc1a12db28e8246648d"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a094e156f9d265443e52a527638e88a1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a094e156f9d265443e52a527638e88a1e"></a> -<a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">root</a> ()</td></tr> -<tr class="memdesc:a094e156f9d265443e52a527638e88a1e"><td class="mdescLeft"> </td><td class="mdescRight">Get a reference to the document's root element. <br/></td></tr> -<tr class="separator:a094e156f9d265443e52a527638e88a1e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7f93dcdc00cdc8d98926cf8e47161665"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a7f93dcdc00cdc8d98926cf8e47161665"><td class="memTemplItemLeft" align="right" valign="top">String </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">getVersionAs</a> () const </td></tr> -<tr class="memdesc:a7f93dcdc00cdc8d98926cf8e47161665"><td class="mdescLeft"> </td><td class="mdescRight">Get the version used in the XML declaration. <a href="#a7f93dcdc00cdc8d98926cf8e47161665">More...</a><br/></td></tr> -<tr class="separator:a7f93dcdc00cdc8d98926cf8e47161665"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ab45914339c476e1da35746f5e00dbc64"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:ab45914339c476e1da35746f5e00dbc64"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">setVersion</a> (const String &version)</td></tr> -<tr class="memdesc:ab45914339c476e1da35746f5e00dbc64"><td class="mdescLeft"> </td><td class="mdescRight">Set the version used in the XML declaration. <a href="#ab45914339c476e1da35746f5e00dbc64">More...</a><br/></td></tr> -<tr class="separator:ab45914339c476e1da35746f5e00dbc64"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a64ece4a1f3f8c802192b8f31506535da"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a64ece4a1f3f8c802192b8f31506535da"><td class="memTemplItemLeft" align="right" valign="top">String </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">getEncodingAs</a> () const </td></tr> -<tr class="memdesc:a64ece4a1f3f8c802192b8f31506535da"><td class="mdescLeft"> </td><td class="mdescRight">Get the encoding used in the XML declaration. <a href="#a64ece4a1f3f8c802192b8f31506535da">More...</a><br/></td></tr> -<tr class="separator:a64ece4a1f3f8c802192b8f31506535da"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2ae30bca2f490479f58c272148935a62"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a2ae30bca2f490479f58c272148935a62"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">setEncoding</a> (const String &encoding)</td></tr> -<tr class="memdesc:a2ae30bca2f490479f58c272148935a62"><td class="mdescLeft"> </td><td class="mdescRight">Set the encoding used in the XML declaration. <a href="#a2ae30bca2f490479f58c272148935a62">More...</a><br/></td></tr> -<tr class="separator:a2ae30bca2f490479f58c272148935a62"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ac1bfb9776852dc8195b9ffb4f65452e4"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:ac1bfb9776852dc8195b9ffb4f65452e4"><td class="memTemplItemLeft" align="right" valign="top">String </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">getStandaloneAs</a> () const </td></tr> -<tr class="memdesc:ac1bfb9776852dc8195b9ffb4f65452e4"><td class="mdescLeft"> </td><td class="mdescRight">Get the standalone string used in the XML declaration. <a href="#ac1bfb9776852dc8195b9ffb4f65452e4">More...</a><br/></td></tr> -<tr class="separator:ac1bfb9776852dc8195b9ffb4f65452e4"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a4c92f9b8c1bb47247b827d89794590d4"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a4c92f9b8c1bb47247b827d89794590d4"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">setStandalone</a> (const String &standalone)</td></tr> -<tr class="memdesc:a4c92f9b8c1bb47247b827d89794590d4"><td class="mdescLeft"> </td><td class="mdescRight">Set the standalone string used in the XML declaration. <a href="#a4c92f9b8c1bb47247b827d89794590d4">More...</a><br/></td></tr> -<tr class="separator:a4c92f9b8c1bb47247b827d89794590d4"><td class="memSeparator" colspan="2"> </td></tr> -</table> -<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> -<div class="textblock"><p>The complete XML document. </p> -</div><h2 class="groupheader">Constructor & Destructor Documentation</h2> -<a class="anchor" id="a74ff8434848672fe6483845d04c082df"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">zen::XmlDoc::XmlDoc </td> - <td>(</td> - <td class="paramtype">String </td> - <td class="paramname"><em>rootName</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">rootName</td><td>The name of the XML document's root element. </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<h2 class="groupheader">Member Function Documentation</h2> -<a class="anchor" id="a64ece4a1f3f8c802192b8f31506535da"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">String zen::XmlDoc::getEncodingAs </td> - <td>(</td> - <td class="paramname"></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Get the encoding used in the XML declaration. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="ac1bfb9776852dc8195b9ffb4f65452e4"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">String zen::XmlDoc::getStandaloneAs </td> - <td>(</td> - <td class="paramname"></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Get the standalone string used in the XML declaration. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="a7f93dcdc00cdc8d98926cf8e47161665"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">String zen::XmlDoc::getVersionAs </td> - <td>(</td> - <td class="paramname"></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Get the version used in the XML declaration. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="a2ae30bca2f490479f58c272148935a62"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">void zen::XmlDoc::setEncoding </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>encoding</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Set the encoding used in the XML declaration. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="a4c92f9b8c1bb47247b827d89794590d4"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">void zen::XmlDoc::setStandalone </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>standalone</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Set the standalone string used in the XML declaration. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="ab45914339c476e1da35746f5e00dbc64"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">void zen::XmlDoc::setVersion </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>version</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Set the version used in the XML declaration. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/classzen_1_1_xml_element-members.html b/zenxml/doc/classzen_1_1_xml_element-members.html deleted file mode 100644 index 90f795dd..00000000 --- a/zenxml/doc/classzen_1_1_xml_element-members.html +++ /dev/null @@ -1,120 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Member List</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">zen::XmlElement Member List</div> </div> -</div><!--header--> -<div class="contents"> - -<p>This is the complete list of members for <a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a>, including all inherited members.</p> -<table class="directory"> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a>(const String &name)</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">getAttribute</a>(const String &name, T &value) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a>(const String &name) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">getChild</a>(const String &name)</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">getChildren</a>(const String &name) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">getChildren</a>(const String &name)</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">getChildren</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">getChildren</a>()</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">getNameAs</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">getValue</a>(T &value) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">parent</a>()</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">parent</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">removeAttribute</a>(const String &name)</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">setAttribute</a>(const String &name, const T &value)</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">setValue</a>(const T &value)</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> -</table></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/classzen_1_1_xml_element.html b/zenxml/doc/classzen_1_1_xml_element.html deleted file mode 100644 index 17eef773..00000000 --- a/zenxml/doc/classzen_1_1_xml_element.html +++ /dev/null @@ -1,538 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: zen::XmlElement Class Reference</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="summary"> -<a href="#pub-methods">Public Member Functions</a> | -<a href="classzen_1_1_xml_element-members.html">List of all members</a> </div> - <div class="headertitle"> -<div class="title">zen::XmlElement Class Reference</div> </div> -</div><!--header--> -<div class="contents"> - -<p>An XML element. - <a href="classzen_1_1_xml_element.html#details">More...</a></p> - -<p><code>#include <<a class="el" href="dom_8h_source.html">dom.h</a>></code></p> -<table class="memberdecls"> -<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> -Public Member Functions</h2></td></tr> -<tr class="memitem:a7c911eb06a59c864197b1a4098728e50"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a7c911eb06a59c864197b1a4098728e50"><td class="memTemplItemLeft" align="right" valign="top">String </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">getNameAs</a> () const </td></tr> -<tr class="memdesc:a7c911eb06a59c864197b1a4098728e50"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve the name of this XML element. <a href="#a7c911eb06a59c864197b1a4098728e50">More...</a><br/></td></tr> -<tr class="separator:a7c911eb06a59c864197b1a4098728e50"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a5ac9d586a5668c2c64e3c06c6203b070"><td class="memTemplParams" colspan="2">template<class T > </td></tr> -<tr class="memitem:a5ac9d586a5668c2c64e3c06c6203b070"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">getValue</a> (T &value) const </td></tr> -<tr class="memdesc:a5ac9d586a5668c2c64e3c06c6203b070"><td class="mdescLeft"> </td><td class="mdescRight">Get the value of this element as a user type. <a href="#a5ac9d586a5668c2c64e3c06c6203b070">More...</a><br/></td></tr> -<tr class="separator:a5ac9d586a5668c2c64e3c06c6203b070"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aaf3a26f6199fc88cce7d9d911ba21b01"><td class="memTemplParams" colspan="2">template<class T > </td></tr> -<tr class="memitem:aaf3a26f6199fc88cce7d9d911ba21b01"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">setValue</a> (const T &value)</td></tr> -<tr class="memdesc:aaf3a26f6199fc88cce7d9d911ba21b01"><td class="mdescLeft"> </td><td class="mdescRight">Set the value of this element. <a href="#aaf3a26f6199fc88cce7d9d911ba21b01">More...</a><br/></td></tr> -<tr class="separator:aaf3a26f6199fc88cce7d9d911ba21b01"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:af90ac6f435b03ba37cf47ee188c58887"><td class="memTemplParams" colspan="2">template<class String , class T > </td></tr> -<tr class="memitem:af90ac6f435b03ba37cf47ee188c58887"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">getAttribute</a> (const String &name, T &value) const </td></tr> -<tr class="memdesc:af90ac6f435b03ba37cf47ee188c58887"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve an attribute by name. <a href="#af90ac6f435b03ba37cf47ee188c58887">More...</a><br/></td></tr> -<tr class="separator:af90ac6f435b03ba37cf47ee188c58887"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a211a6f037c22a54d3facb7a8347a8421"><td class="memTemplParams" colspan="2">template<class String , class T > </td></tr> -<tr class="memitem:a211a6f037c22a54d3facb7a8347a8421"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">setAttribute</a> (const String &name, const T &value)</td></tr> -<tr class="memdesc:a211a6f037c22a54d3facb7a8347a8421"><td class="mdescLeft"> </td><td class="mdescRight">Create or update an XML attribute. <a href="#a211a6f037c22a54d3facb7a8347a8421">More...</a><br/></td></tr> -<tr class="separator:a211a6f037c22a54d3facb7a8347a8421"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ad9c2ce2e55294c8110825988595e3934"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:ad9c2ce2e55294c8110825988595e3934"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">removeAttribute</a> (const String &name)</td></tr> -<tr class="memdesc:ad9c2ce2e55294c8110825988595e3934"><td class="mdescLeft"> </td><td class="mdescRight">Remove the attribute with the given name. <a href="#ad9c2ce2e55294c8110825988595e3934">More...</a><br/></td></tr> -<tr class="separator:ad9c2ce2e55294c8110825988595e3934"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a653caffa6fad89db7d14f67f987ad0f9"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a653caffa6fad89db7d14f67f987ad0f9"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a> (const String &name)</td></tr> -<tr class="memdesc:a653caffa6fad89db7d14f67f987ad0f9"><td class="mdescLeft"> </td><td class="mdescRight">Create a new child element and return a reference to it. <a href="#a653caffa6fad89db7d14f67f987ad0f9">More...</a><br/></td></tr> -<tr class="separator:a653caffa6fad89db7d14f67f987ad0f9"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a3ab82b1720460487f4afabcd115d0c7e"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a3ab82b1720460487f4afabcd115d0c7e"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a> (const String &name) const </td></tr> -<tr class="memdesc:a3ab82b1720460487f4afabcd115d0c7e"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a child element with the given name. <a href="#a3ab82b1720460487f4afabcd115d0c7e">More...</a><br/></td></tr> -<tr class="separator:a3ab82b1720460487f4afabcd115d0c7e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a5d672e8ccc7592442ab927bb267af658"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a5d672e8ccc7592442ab927bb267af658"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">getChild</a> (const String &name)</td></tr> -<tr class="separator:a5d672e8ccc7592442ab927bb267af658"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2640b438c4984f5eeb8760d82d73c5b8"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a2640b438c4984f5eeb8760d82d73c5b8"><td class="memTemplItemLeft" align="right" valign="top">std::pair< ChildIterConst2, <br class="typebreak"/> -ChildIterConst2 > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">getChildren</a> (const String &name) const </td></tr> -<tr class="memdesc:a2640b438c4984f5eeb8760d82d73c5b8"><td class="mdescLeft"> </td><td class="mdescRight">Access all child elements with the given name via STL iterators. <a href="#a2640b438c4984f5eeb8760d82d73c5b8">More...</a><br/></td></tr> -<tr class="separator:a2640b438c4984f5eeb8760d82d73c5b8"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae209dac9655bc36121abb87688ece41d"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:ae209dac9655bc36121abb87688ece41d"><td class="memTemplItemLeft" align="right" valign="top">std::pair< ChildIter2, ChildIter2 > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">getChildren</a> (const String &name)</td></tr> -<tr class="separator:ae209dac9655bc36121abb87688ece41d"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a55a6d1849490d82ae900cd9b923908f2"><td class="memItemLeft" align="right" valign="top">std::pair< ChildIterConst, <br class="typebreak"/> -ChildIterConst > </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">getChildren</a> () const </td></tr> -<tr class="memdesc:a55a6d1849490d82ae900cd9b923908f2"><td class="mdescLeft"> </td><td class="mdescRight">Access all child elements sequentially via STL iterators. <a href="#a55a6d1849490d82ae900cd9b923908f2">More...</a><br/></td></tr> -<tr class="separator:a55a6d1849490d82ae900cd9b923908f2"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ac59268177d162931f937b6a7f235ad96"><td class="memItemLeft" align="right" valign="top">std::pair< ChildIter, ChildIter > </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">getChildren</a> ()</td></tr> -<tr class="separator:ac59268177d162931f937b6a7f235ad96"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a4af309f59ef09f46a559f1f0e1eac6c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4af309f59ef09f46a559f1f0e1eac6c1"></a> -<a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">parent</a> ()</td></tr> -<tr class="memdesc:a4af309f59ef09f46a559f1f0e1eac6c1"><td class="mdescLeft"> </td><td class="mdescRight">Get parent XML element, may be nullptr for root element. <br/></td></tr> -<tr class="separator:a4af309f59ef09f46a559f1f0e1eac6c1"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7ba1f26be5629f89ba7648d658f7058c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ba1f26be5629f89ba7648d658f7058c"></a> -const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">parent</a> () const </td></tr> -<tr class="memdesc:a7ba1f26be5629f89ba7648d658f7058c"><td class="mdescLeft"> </td><td class="mdescRight">Get parent XML element, may be nullptr for root element. <br/></td></tr> -<tr class="separator:a7ba1f26be5629f89ba7648d658f7058c"><td class="memSeparator" colspan="2"> </td></tr> -</table> -<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> -<div class="textblock"><p>An XML element. </p> -</div><h2 class="groupheader">Member Function Documentation</h2> -<a class="anchor" id="a653caffa6fad89db7d14f67f987ad0f9"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a>& zen::XmlElement::addChild </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>name</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Create a new child element and return a reference to it. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">name</td><td>The name of the child element to be created. </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="af90ac6f435b03ba37cf47ee188c58887"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String , class T > </div> - <table class="memname"> - <tr> - <td class="memname">bool zen::XmlElement::getAttribute </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>name</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">T & </td> - <td class="paramname"><em>value</em> </td> - </tr> - <tr> - <td></td> - <td>)</td> - <td></td><td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Retrieve an attribute by name. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - <tr><td class="paramname">T</td><td>String-convertible user data type: e.g. any string class, all built-in arithmetic numbers </td></tr> - </table> - </dd> -</dl> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">name</td><td>The name of the attribute to retrieve. </td></tr> - <tr><td class="paramname">value</td><td>The value of the attribute converted to T. </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>"true" if value was retrieved successfully. </dd></dl> - -</div> -</div> -<a class="anchor" id="a3ab82b1720460487f4afabcd115d0c7e"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a>* zen::XmlElement::getChild </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>name</em></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Retrieve a child element with the given name. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">name</td><td>The name of the child element to be retrieved. </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>A pointer to the child element or nullptr if none was found. </dd></dl> - -</div> -</div> -<a class="anchor" id="a5d672e8ccc7592442ab927bb267af658"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a>* zen::XmlElement::getChild </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>name</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> -<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name. ">getChild</a> </dd></dl> - -</div> -</div> -<a class="anchor" id="a2640b438c4984f5eeb8760d82d73c5b8"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">std::pair<ChildIterConst2, ChildIterConst2> zen::XmlElement::getChildren </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>name</em></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Access all child elements with the given name via STL iterators. </p> -<div class="fragment"><div class="line"><span class="keyword">auto</span> iterPair = elem.getChildren(<span class="stringliteral">"Item"</span>);</div> -<div class="line">std::for_each(iterPair.first, iterPair.second,</div> -<div class="line"> [](<span class="keyword">const</span> XmlElement& child) { ... });</div> -</div><!-- fragment --> <dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">name</td><td>The name of the child elements to be retrieved. </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>A pair of STL begin/end iterators to access the child elements sequentially. </dd></dl> - -</div> -</div> -<a class="anchor" id="ae209dac9655bc36121abb87688ece41d"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">std::pair<ChildIter2, ChildIter2> zen::XmlElement::getChildren </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>name</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> -<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8" title="Access all child elements with the given name via STL iterators. ">getChildren</a> </dd></dl> - -</div> -</div> -<a class="anchor" id="a55a6d1849490d82ae900cd9b923908f2"></a> -<div class="memitem"> -<div class="memproto"> - <table class="memname"> - <tr> - <td class="memname">std::pair<ChildIterConst, ChildIterConst> zen::XmlElement::getChildren </td> - <td>(</td> - <td class="paramname"></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Access all child elements sequentially via STL iterators. </p> -<div class="fragment"><div class="line"><span class="keyword">auto</span> iterPair = elem.getChildren();</div> -<div class="line">std::for_each(iterPair.first, iterPair.second,</div> -<div class="line"> [](<span class="keyword">const</span> XmlElement& child) { ... });</div> -</div><!-- fragment --> <dl class="section return"><dt>Returns</dt><dd>A pair of STL begin/end iterators to access all child elements sequentially. </dd></dl> - -</div> -</div> -<a class="anchor" id="ac59268177d162931f937b6a7f235ad96"></a> -<div class="memitem"> -<div class="memproto"> - <table class="memname"> - <tr> - <td class="memname">std::pair<ChildIter, ChildIter> zen::XmlElement::getChildren </td> - <td>(</td> - <td class="paramname"></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> -<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8" title="Access all child elements with the given name via STL iterators. ">getChildren</a> </dd></dl> - -</div> -</div> -<a class="anchor" id="a7c911eb06a59c864197b1a4098728e50"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">String zen::XmlElement::getNameAs </td> - <td>(</td> - <td class="paramname"></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Retrieve the name of this XML element. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>Name of the XML element. </dd></dl> - -</div> -</div> -<a class="anchor" id="a5ac9d586a5668c2c64e3c06c6203b070"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class T > </div> - <table class="memname"> - <tr> - <td class="memname">bool zen::XmlElement::getValue </td> - <td>(</td> - <td class="paramtype">T & </td> - <td class="paramname"><em>value</em></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Get the value of this element as a user type. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">T</td><td>Arbitrary user data type: e.g. any string class, all built-in arithmetic numbers, STL container, ... </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>"true" if Xml element was successfully converted to value, cannot fail for string-like types </dd></dl> - -</div> -</div> -<a class="anchor" id="ad9c2ce2e55294c8110825988595e3934"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">void zen::XmlElement::removeAttribute </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>name</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Remove the attribute with the given name. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="a211a6f037c22a54d3facb7a8347a8421"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String , class T > </div> - <table class="memname"> - <tr> - <td class="memname">void zen::XmlElement::setAttribute </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>name</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">const T & </td> - <td class="paramname"><em>value</em> </td> - </tr> - <tr> - <td></td> - <td>)</td> - <td></td><td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Create or update an XML attribute. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - <tr><td class="paramname">T</td><td>String-convertible user data type: e.g. any string-like type, all built-in arithmetic numbers </td></tr> - </table> - </dd> -</dl> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">name</td><td>The name of the attribute to create or update. </td></tr> - <tr><td class="paramname">value</td><td>The value to set. </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="aaf3a26f6199fc88cce7d9d911ba21b01"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class T > </div> - <table class="memname"> - <tr> - <td class="memname">void zen::XmlElement::setValue </td> - <td>(</td> - <td class="paramtype">const T & </td> - <td class="paramname"><em>value</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Set the value of this element. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">T</td><td>Arbitrary user data type: e.g. any string-like type, all built-in arithmetic numbers, STL container, ... </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/classzen_1_1_xml_in-members.html b/zenxml/doc/classzen_1_1_xml_in-members.html deleted file mode 100644 index 56de270c..00000000 --- a/zenxml/doc/classzen_1_1_xml_in-members.html +++ /dev/null @@ -1,116 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Member List</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">zen::XmlIn Member List</div> </div> -</div><!--header--> -<div class="contents"> - -<p>This is the complete list of members for <a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a>, including all inherited members.</p> -<table class="directory"> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">attribute</a>(const String &name, T &value) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">errorsOccured</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">get</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">getErrorsAs</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">next</a>()</td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">operator int ConversionToBool::*</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">operator()</a>(T &value) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">operator[]</a>(const String &name) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a>(const XmlDoc &doc)</td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">XmlIn</a>(const XmlElement *element)</td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">XmlIn</a>(const XmlElement &element)</td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> -</table></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/classzen_1_1_xml_in.html b/zenxml/doc/classzen_1_1_xml_in.html deleted file mode 100644 index 15153347..00000000 --- a/zenxml/doc/classzen_1_1_xml_in.html +++ /dev/null @@ -1,432 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: zen::XmlIn Class Reference</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="summary"> -<a href="#pub-methods">Public Member Functions</a> | -<a href="classzen_1_1_xml_in-members.html">List of all members</a> </div> - <div class="headertitle"> -<div class="title">zen::XmlIn Class Reference</div> </div> -</div><!--header--> -<div class="contents"> - -<p>Proxy class to conveniently convert XML structure to user data. - <a href="classzen_1_1_xml_in.html#details">More...</a></p> - -<p><code>#include <<a class="el" href="bind_8h_source.html">bind.h</a>></code></p> -<table class="memberdecls"> -<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> -Public Member Functions</h2></td></tr> -<tr class="memitem:a5b48c9848e6c631a04cec2477ff85c0f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a> (const <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &doc)</td></tr> -<tr class="memdesc:a5b48c9848e6c631a04cec2477ff85c0f"><td class="mdescLeft"> </td><td class="mdescRight">Construct an input proxy for an XML document. <a href="#a5b48c9848e6c631a04cec2477ff85c0f">More...</a><br/></td></tr> -<tr class="separator:a5b48c9848e6c631a04cec2477ff85c0f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:ae072660cde71fd4695c04d074098b430"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">XmlIn</a> (const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> *element)</td></tr> -<tr class="memdesc:ae072660cde71fd4695c04d074098b430"><td class="mdescLeft"> </td><td class="mdescRight">Construct an input proxy for a single XML element, may be nullptr. <a href="#ae072660cde71fd4695c04d074098b430">More...</a><br/></td></tr> -<tr class="separator:ae072660cde71fd4695c04d074098b430"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a33de75412df69cb25e0fd8b3bc70c9f8"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">XmlIn</a> (const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &element)</td></tr> -<tr class="memdesc:a33de75412df69cb25e0fd8b3bc70c9f8"><td class="mdescLeft"> </td><td class="mdescRight">Construct an input proxy for a single XML element. <a href="#a33de75412df69cb25e0fd8b3bc70c9f8">More...</a><br/></td></tr> -<tr class="separator:a33de75412df69cb25e0fd8b3bc70c9f8"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a9b38167835a28eac9a2297f35f51e53d"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a9b38167835a28eac9a2297f35f51e53d"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">operator[]</a> (const String &name) const </td></tr> -<tr class="memdesc:a9b38167835a28eac9a2297f35f51e53d"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a handle to an XML child element for reading. <a href="#a9b38167835a28eac9a2297f35f51e53d">More...</a><br/></td></tr> -<tr class="separator:a9b38167835a28eac9a2297f35f51e53d"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a60cf2678c989621545d27745dcafa4a4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">next</a> ()</td></tr> -<tr class="memdesc:a60cf2678c989621545d27745dcafa4a4"><td class="mdescLeft"> </td><td class="mdescRight">Refer to next sibling element with the same name. <a href="#a60cf2678c989621545d27745dcafa4a4">More...</a><br/></td></tr> -<tr class="separator:a60cf2678c989621545d27745dcafa4a4"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a98cc59f687c89549381e76105f8fb506"><td class="memTemplParams" colspan="2">template<class T > </td></tr> -<tr class="memitem:a98cc59f687c89549381e76105f8fb506"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">operator()</a> (T &value) const </td></tr> -<tr class="memdesc:a98cc59f687c89549381e76105f8fb506"><td class="mdescLeft"> </td><td class="mdescRight">Read user data from the underlying XML element. <a href="#a98cc59f687c89549381e76105f8fb506">More...</a><br/></td></tr> -<tr class="separator:a98cc59f687c89549381e76105f8fb506"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a971cd7054c551c4460d5220f6ec5cf01"><td class="memTemplParams" colspan="2">template<class String , class T > </td></tr> -<tr class="memitem:a971cd7054c551c4460d5220f6ec5cf01"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">attribute</a> (const String &name, T &value) const </td></tr> -<tr class="memdesc:a971cd7054c551c4460d5220f6ec5cf01"><td class="mdescLeft"> </td><td class="mdescRight">Read user data from an XML attribute. <a href="#a971cd7054c551c4460d5220f6ec5cf01">More...</a><br/></td></tr> -<tr class="separator:a971cd7054c551c4460d5220f6ec5cf01"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a647b468b7c6c95b25f2e43627184177f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a647b468b7c6c95b25f2e43627184177f"></a> -const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">get</a> () const </td></tr> -<tr class="memdesc:a647b468b7c6c95b25f2e43627184177f"><td class="mdescLeft"> </td><td class="mdescRight">Return a pointer to the underlying Xml element, may be nullptr. <br/></td></tr> -<tr class="separator:a647b468b7c6c95b25f2e43627184177f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a954950849b52557369932ab2a8b4ad72"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">operator int ConversionToBool::*</a> () const </td></tr> -<tr class="memdesc:a954950849b52557369932ab2a8b4ad72"><td class="mdescLeft"> </td><td class="mdescRight">Test whether the underlying XML element exists. <a href="#a954950849b52557369932ab2a8b4ad72">More...</a><br/></td></tr> -<tr class="separator:a954950849b52557369932ab2a8b4ad72"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a33b5dd504d3165aa3f923f6b33e9991a"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">errorsOccured</a> () const </td></tr> -<tr class="memdesc:a33b5dd504d3165aa3f923f6b33e9991a"><td class="mdescLeft"> </td><td class="mdescRight">Notifies errors while mapping the XML to user data. <a href="#a33b5dd504d3165aa3f923f6b33e9991a">More...</a><br/></td></tr> -<tr class="separator:a33b5dd504d3165aa3f923f6b33e9991a"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a84bb497d3b3fc753d054e52c4823c05e"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a84bb497d3b3fc753d054e52c4823c05e"><td class="memTemplItemLeft" align="right" valign="top">std::vector< String > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">getErrorsAs</a> () const </td></tr> -<tr class="memdesc:a84bb497d3b3fc753d054e52c4823c05e"><td class="mdescLeft"> </td><td class="mdescRight">Get a list of XML element and attribute names which failed to convert to user data. <a href="#a84bb497d3b3fc753d054e52c4823c05e">More...</a><br/></td></tr> -<tr class="separator:a84bb497d3b3fc753d054e52c4823c05e"><td class="memSeparator" colspan="2"> </td></tr> -</table> -<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> -<div class="textblock"><p>Proxy class to conveniently convert XML structure to user data. </p> -</div><h2 class="groupheader">Constructor & Destructor Documentation</h2> -<a class="anchor" id="a5b48c9848e6c631a04cec2477ff85c0f"></a> -<div class="memitem"> -<div class="memproto"> - <table class="memname"> - <tr> - <td class="memname">zen::XmlIn::XmlIn </td> - <td>(</td> - <td class="paramtype">const <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> & </td> - <td class="paramname"><em>doc</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Construct an input proxy for an XML document. </p> -<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> -<div class="line"> ... <span class="comment">//load document</span></div> -<div class="line"><a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> in(doc);</div> -<div class="line">in[<span class="stringliteral">"elem1"</span>](value1); <span class="comment">//</span></div> -<div class="line">in[<span class="stringliteral">"elem2"</span>](value2); <span class="comment">//read data from XML elements into variables "value1", "value2", "value3"</span></div> -<div class="line">in[<span class="stringliteral">"elem3"</span>](value3); <span class="comment">//</span></div> -</div><!-- fragment --> -</div> -</div> -<a class="anchor" id="ae072660cde71fd4695c04d074098b430"></a> -<div class="memitem"> -<div class="memproto"> - <table class="memname"> - <tr> - <td class="memname">zen::XmlIn::XmlIn </td> - <td>(</td> - <td class="paramtype">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * </td> - <td class="paramname"><em>element</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Construct an input proxy for a single XML element, may be nullptr. </p> -<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document. ">XmlIn(const XmlDoc& doc)</a> </dd></dl> - -</div> -</div> -<a class="anchor" id="a33de75412df69cb25e0fd8b3bc70c9f8"></a> -<div class="memitem"> -<div class="memproto"> - <table class="memname"> - <tr> - <td class="memname">zen::XmlIn::XmlIn </td> - <td>(</td> - <td class="paramtype">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & </td> - <td class="paramname"><em>element</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Construct an input proxy for a single XML element. </p> -<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document. ">XmlIn(const XmlDoc& doc)</a> </dd></dl> - -</div> -</div> -<h2 class="groupheader">Member Function Documentation</h2> -<a class="anchor" id="a971cd7054c551c4460d5220f6ec5cf01"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String , class T > </div> - <table class="memname"> - <tr> - <td class="memname">bool zen::XmlIn::attribute </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>name</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">T & </td> - <td class="paramname"><em>value</em> </td> - </tr> - <tr> - <td></td> - <td>)</td> - <td></td><td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Read user data from an XML attribute. </p> -<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes. ">zen::readText()</a> for type T.</p> -<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> -<div class="line"> ... <span class="comment">//load document</span></div> -<div class="line"><a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> in(doc);</div> -<div class="line">in[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr1"</span>, value1); <span class="comment">//</span></div> -<div class="line">in[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr2"</span>, value2); <span class="comment">//read data from XML attributes into variables "value1", "value2", "value3"</span></div> -<div class="line">in[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr3"</span>, value3); <span class="comment">//</span></div> -</div><!-- fragment --><dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - <tr><td class="paramname">T</td><td>String-convertible user data type: e.g. any string-like type, all built-in arithmetic numbers </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>"true" if the attribute was found and the conversion to the output value was successful. </dd></dl> -<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887" title="Retrieve an attribute by name. ">XmlElement::getAttribute()</a> </dd></dl> - -</div> -</div> -<a class="anchor" id="a33b5dd504d3165aa3f923f6b33e9991a"></a> -<div class="memitem"> -<div class="memproto"> - <table class="memname"> - <tr> - <td class="memname">bool zen::XmlIn::errorsOccured </td> - <td>(</td> - <td class="paramname"></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Notifies errors while mapping the XML to user data. </p> -<p>Error logging is shared by each hiearchy of <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data. ">XmlIn</a> proxy instances that are created from each other. Consequently it doesn't matter which instance you query for errors: </p> -<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a> in(doc);</div> -<div class="line"><a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a> inItem = in[<span class="stringliteral">"item1"</span>];</div> -<div class="line"></div> -<div class="line"><span class="keywordtype">int</span> value = 0;</div> -<div class="line">inItem(value); <span class="comment">//let's assume this conversion failed</span></div> -<div class="line"></div> -<div class="line">assert(in.errorsOccured() == inItem.errorsOccured());</div> -<div class="line">assert(in.getErrorsAs<std::string>() == inItem.getErrorsAs<std::string>());</div> -</div><!-- fragment --><p>Note that error logging is <b>NOT</b> global, but owned by all instances of a hierarchy of <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data. ">XmlIn</a> proxies. Therefore it's safe to use unrelated <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data. ">XmlIn</a> proxies in multiple threads. <br/> -<br/> - However be aware that the chain of connected proxy instances will be broken once you call <a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f" title="Return a pointer to the underlying Xml element, may be nullptr. ">XmlIn::get()</a> to retrieve the underlying pointer. Errors that occur when working with this pointer are not logged by the original set of related instances. </p> - -</div> -</div> -<a class="anchor" id="a84bb497d3b3fc753d054e52c4823c05e"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">std::vector<String> zen::XmlIn::getErrorsAs </td> - <td>(</td> - <td class="paramname"></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Get a list of XML element and attribute names which failed to convert to user data. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>A list of XML element and attribute names, empty list if no errors occured. </dd></dl> - -</div> -</div> -<a class="anchor" id="a60cf2678c989621545d27745dcafa4a4"></a> -<div class="memitem"> -<div class="memproto"> - <table class="memname"> - <tr> - <td class="memname">void zen::XmlIn::next </td> - <td>(</td> - <td class="paramname"></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Refer to next sibling element with the same name. </p> -<p><b>Example:</b> Loop over all XML child elements named "Item" </p> -<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> -<Root> - <Item>1</Item> - <Item>3</Item> - <Item>5</Item> -</Root> -</pre><div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> in(doc);</div> -<div class="line">...</div> -<div class="line">for (<a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> child = in[<span class="stringliteral">"Item"</span>]; child; child.<a class="code" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">next</a>())</div> -<div class="line">{</div> -<div class="line"> ...</div> -<div class="line">}</div> -</div><!-- fragment --> -</div> -</div> -<a class="anchor" id="a954950849b52557369932ab2a8b4ad72"></a> -<div class="memitem"> -<div class="memproto"> - <table class="memname"> - <tr> - <td class="memname">zen::XmlIn::operator int ConversionToBool::* </td> - <td>(</td> - <td class="paramname"></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Test whether the underlying XML element exists. </p> -<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a> in(doc);</div> -<div class="line"><a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a> child = in[<span class="stringliteral">"elem1"</span>];</div> -<div class="line"><span class="keywordflow">if</span> (child)</div> -<div class="line"> ...</div> -</div><!-- fragment --><p> Use member pointer as implicit conversion to bool (C++ Templates - Vandevoorde/Josuttis; chapter 20) </p> - -</div> -</div> -<a class="anchor" id="a98cc59f687c89549381e76105f8fb506"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class T > </div> - <table class="memname"> - <tr> - <td class="memname">bool zen::XmlIn::operator() </td> - <td>(</td> - <td class="paramtype">T & </td> - <td class="paramname"><em>value</em></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Read user data from the underlying XML element. </p> -<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes. ">zen::readText()</a> or <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data. ">zen::readStruc()</a> for type T. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">T</td><td>User type that receives the data </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>"true" if data was read successfully </dd></dl> - -</div> -</div> -<a class="anchor" id="a9b38167835a28eac9a2297f35f51e53d"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a> zen::XmlIn::operator[] </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>name</em></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Retrieve a handle to an XML child element for reading. </p> -<p>It is <b>not</b> an error if the child element does not exist, but only later if a conversion to user data is attempted. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">name</td><td>The name of the child element </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/classzen_1_1_xml_out-members.html b/zenxml/doc/classzen_1_1_xml_out-members.html deleted file mode 100644 index 0bcc8777..00000000 --- a/zenxml/doc/classzen_1_1_xml_out-members.html +++ /dev/null @@ -1,111 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Member List</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">zen::XmlOut Member List</div> </div> -</div><!--header--> -<div class="contents"> - -<p>This is the complete list of members for <a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a>, including all inherited members.</p> -<table class="directory"> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">attribute</a>(const String &name, const T &value)</td><td class="entry"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">operator()</a>(const T &value)</td><td class="entry"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">operator[]</a>(const String &name) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">ref</a>()</td><td class="entry"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="entry"></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">XmlOut</a>(XmlDoc &doc)</td><td class="entry"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">XmlOut</a>(XmlElement &element)</td><td class="entry"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="entry"></td></tr> -</table></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/classzen_1_1_xml_out.html b/zenxml/doc/classzen_1_1_xml_out.html deleted file mode 100644 index 33434c67..00000000 --- a/zenxml/doc/classzen_1_1_xml_out.html +++ /dev/null @@ -1,303 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: zen::XmlOut Class Reference</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="summary"> -<a href="#pub-methods">Public Member Functions</a> | -<a href="classzen_1_1_xml_out-members.html">List of all members</a> </div> - <div class="headertitle"> -<div class="title">zen::XmlOut Class Reference</div> </div> -</div><!--header--> -<div class="contents"> - -<p>Proxy class to conveniently convert user data into XML structure. - <a href="classzen_1_1_xml_out.html#details">More...</a></p> - -<p><code>#include <<a class="el" href="bind_8h_source.html">bind.h</a>></code></p> -<table class="memberdecls"> -<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> -Public Member Functions</h2></td></tr> -<tr class="memitem:ad8b1ccb8f3d4e7b0ab2598597ea50bcc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">XmlOut</a> (<a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &doc)</td></tr> -<tr class="memdesc:ad8b1ccb8f3d4e7b0ab2598597ea50bcc"><td class="mdescLeft"> </td><td class="mdescRight">Construct an output proxy for an XML document. <a href="#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">More...</a><br/></td></tr> -<tr class="separator:ad8b1ccb8f3d4e7b0ab2598597ea50bcc"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aa80be3a56f70a58d2730a763166088c0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">XmlOut</a> (<a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &element)</td></tr> -<tr class="memdesc:aa80be3a56f70a58d2730a763166088c0"><td class="mdescLeft"> </td><td class="mdescRight">Construct an output proxy for a single XML element. <a href="#aa80be3a56f70a58d2730a763166088c0">More...</a><br/></td></tr> -<tr class="separator:aa80be3a56f70a58d2730a763166088c0"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a00f883d3f9d60535b06b5ae609dc8831"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a00f883d3f9d60535b06b5ae609dc8831"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">operator[]</a> (const String &name) const </td></tr> -<tr class="memdesc:a00f883d3f9d60535b06b5ae609dc8831"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a handle to an XML child element for writing. <a href="#a00f883d3f9d60535b06b5ae609dc8831">More...</a><br/></td></tr> -<tr class="separator:a00f883d3f9d60535b06b5ae609dc8831"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a09ca9144515e3c109b36062b0475c8eb"><td class="memTemplParams" colspan="2">template<class T > </td></tr> -<tr class="memitem:a09ca9144515e3c109b36062b0475c8eb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">operator()</a> (const T &value)</td></tr> -<tr class="memdesc:a09ca9144515e3c109b36062b0475c8eb"><td class="mdescLeft"> </td><td class="mdescRight">Write user data to the underlying XML element. <a href="#a09ca9144515e3c109b36062b0475c8eb">More...</a><br/></td></tr> -<tr class="separator:a09ca9144515e3c109b36062b0475c8eb"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:acaf9b71fe1d907dd63dd4b91e2e03805"><td class="memTemplParams" colspan="2">template<class String , class T > </td></tr> -<tr class="memitem:acaf9b71fe1d907dd63dd4b91e2e03805"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">attribute</a> (const String &name, const T &value)</td></tr> -<tr class="memdesc:acaf9b71fe1d907dd63dd4b91e2e03805"><td class="mdescLeft"> </td><td class="mdescRight">Write user data to an XML attribute. <a href="#acaf9b71fe1d907dd63dd4b91e2e03805">More...</a><br/></td></tr> -<tr class="separator:acaf9b71fe1d907dd63dd4b91e2e03805"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aec117344e8a534382e8d5e76711f97b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec117344e8a534382e8d5e76711f97b2"></a> -<a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">ref</a> ()</td></tr> -<tr class="memdesc:aec117344e8a534382e8d5e76711f97b2"><td class="mdescLeft"> </td><td class="mdescRight">Return a reference to the underlying Xml element. <br/></td></tr> -<tr class="separator:aec117344e8a534382e8d5e76711f97b2"><td class="memSeparator" colspan="2"> </td></tr> -</table> -<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> -<div class="textblock"><p>Proxy class to conveniently convert user data into XML structure. </p> -</div><h2 class="groupheader">Constructor & Destructor Documentation</h2> -<a class="anchor" id="ad8b1ccb8f3d4e7b0ab2598597ea50bcc"></a> -<div class="memitem"> -<div class="memproto"> - <table class="memname"> - <tr> - <td class="memname">zen::XmlOut::XmlOut </td> - <td>(</td> - <td class="paramtype"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> & </td> - <td class="paramname"><em>doc</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Construct an output proxy for an XML document. </p> -<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> -<div class="line">out[<span class="stringliteral">"elem1"</span>]( 1); <span class="comment">//</span></div> -<div class="line">out[<span class="stringliteral">"elem2"</span>]( 2); <span class="comment">//write data into XML elements</span></div> -<div class="line">out[<span class="stringliteral">"elem3"</span>](-3); <span class="comment">//</span></div> -<div class="line"></div> -<div class="line"><a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(doc, <span class="stringliteral">"out.xml"</span>); <span class="comment">//throw XmlFileError</span></div> -</div><!-- fragment --><p> Output: </p> -<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> -<Root> - <elem1>1</elem1> - <elem2>2</elem2> - <elem3>-3</elem3> -</Root> -</pre> -</div> -</div> -<a class="anchor" id="aa80be3a56f70a58d2730a763166088c0"></a> -<div class="memitem"> -<div class="memproto"> - <table class="memname"> - <tr> - <td class="memname">zen::XmlOut::XmlOut </td> - <td>(</td> - <td class="paramtype"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & </td> - <td class="paramname"><em>element</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Construct an output proxy for a single XML element. </p> -<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc" title="Construct an output proxy for an XML document. ">XmlOut(XmlDoc& doc)</a> </dd></dl> - -</div> -</div> -<h2 class="groupheader">Member Function Documentation</h2> -<a class="anchor" id="acaf9b71fe1d907dd63dd4b91e2e03805"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String , class T > </div> - <table class="memname"> - <tr> - <td class="memname">void zen::XmlOut::attribute </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>name</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">const T & </td> - <td class="paramname"><em>value</em> </td> - </tr> - <tr> - <td></td> - <td>)</td> - <td></td><td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Write user data to an XML attribute. </p> -<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes. ">zen::writeText()</a> for type T. </p> -<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> -<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr1"</span>, 1); <span class="comment">//</span></div> -<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr2"</span>, 2); <span class="comment">//write data into XML attributes</span></div> -<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr3"</span>, -3); <span class="comment">//</span></div> -<div class="line"></div> -<div class="line"><a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(doc, <span class="stringliteral">"out.xml"</span>); <span class="comment">//throw XmlFileError</span></div> -</div><!-- fragment --><p> Output: </p> -<pre class="fragment"> <?xml version="1.0" encoding="UTF-8"?> - <Root> - <elem attr1="1" attr2="2" attr3="-3"/> - </Root></pre><dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - <tr><td class="paramname">T</td><td>String-convertible user data type: e.g. any string-like type, all built-in arithmetic numbers </td></tr> - </table> - </dd> -</dl> -<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421" title="Create or update an XML attribute. ">XmlElement::setAttribute()</a> </dd></dl> - -</div> -</div> -<a class="anchor" id="a09ca9144515e3c109b36062b0475c8eb"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class T > </div> - <table class="memname"> - <tr> - <td class="memname">void zen::XmlOut::operator() </td> - <td>(</td> - <td class="paramtype">const T & </td> - <td class="paramname"><em>value</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Write user data to the underlying XML element. </p> -<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes. ">zen::writeText()</a> or <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element. ">zen::writeStruc()</a> for type T. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">T</td><td>User type that is converted into an XML element value. </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="a00f883d3f9d60535b06b5ae609dc8831"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a> zen::XmlOut::operator[] </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>name</em></td><td>)</td> - <td> const</td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Retrieve a handle to an XML child element for writing. </p> -<p>The child element will be created if it is not yet existing. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">name</td><td>The name of the child element </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/closed.png b/zenxml/doc/closed.png Binary files differdeleted file mode 100644 index 98cc2c90..00000000 --- a/zenxml/doc/closed.png +++ /dev/null diff --git a/zenxml/doc/cvrt__struc_8h_source.html b/zenxml/doc/cvrt__struc_8h_source.html deleted file mode 100644 index 2a229c26..00000000 --- a/zenxml/doc/cvrt__struc_8h_source.html +++ /dev/null @@ -1,295 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: cvrt_struc.h Source File</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">cvrt_struc.h</div> </div> -</div><!--header--> -<div class="contents"> -<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> -<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> -<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> -<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> -<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743</span></div> -<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743</span></div> -<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> -<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include "dom.h"</span></div> -<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div> -<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">namespace </span>zen</div> -<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> {</div> -<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div> -<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(<span class="keyword">const</span> XmlElement& input, T& value);</div> -<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div> -<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(<span class="keyword">const</span> T& value, XmlElement& output);</div> -<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div> -<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div> -<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div> -<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div> -<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div> -<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div> -<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div> -<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div> -<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div> -<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div> -<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div> -<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div> -<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div> -<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div> -<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div> -<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div> -<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div> -<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">//------------------------------ implementation -------------------------------------</span></div> -<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">namespace </span>impl_2384343</div> -<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> {</div> -<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> ZEN_INIT_DETECT_MEMBER_TYPE(value_type);</div> -<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> ZEN_INIT_DETECT_MEMBER_TYPE(iterator);</div> -<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> ZEN_INIT_DETECT_MEMBER_TYPE(const_iterator);</div> -<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div> -<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> ZEN_INIT_DETECT_MEMBER(begin) <span class="comment">//</span></div> -<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> ZEN_INIT_DETECT_MEMBER(end) <span class="comment">//we don't know the exact declaration of the member attribute: may be in a base class!</span></div> -<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> ZEN_INIT_DETECT_MEMBER(insert) <span class="comment">//</span></div> -<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> }</div> -<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div> -<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> template <typename T></div> -<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> struct IsStlContainer :</div> -<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  StaticBool<</div> -<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  impl_2384343::HasMemberType_value_type <T>::value&&</div> -<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  impl_2384343::HasMemberType_iterator <T>::value&&</div> -<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  impl_2384343::HasMemberType_const_iterator<T>::value&&</div> -<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  impl_2384343::HasMember_begin <T>::value&&</div> -<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  impl_2384343::HasMember_end <T>::value&&</div> -<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  impl_2384343::HasMember_insert <T>::value> {};</div> -<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div> -<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div> -<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">namespace </span>impl_2384343</div> -<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div> -<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> ZEN_INIT_DETECT_MEMBER_TYPE(first_type);</div> -<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> ZEN_INIT_DETECT_MEMBER_TYPE(second_type);</div> -<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div> -<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> ZEN_INIT_DETECT_MEMBER(first) <span class="comment">//we don't know the exact declaration of the member attribute: may be in a base class!</span></div> -<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> ZEN_INIT_DETECT_MEMBER(second) <span class="comment">//</span></div> -<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div> -<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div> -<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> template <typename T></div> -<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> struct IsStlPair :</div> -<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  StaticBool<</div> -<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  impl_2384343::HasMemberType_first_type <T>::value&&</div> -<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  impl_2384343::HasMemberType_second_type<T>::value&&</div> -<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  impl_2384343::HasMember_first <T>::value&&</div> -<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  impl_2384343::HasMember_second <T>::value> {};</div> -<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div> -<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">//######################################################################################</span></div> -<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div> -<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">//Conversion from arbitrary types to an XML element</span></div> -<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">enum</span> ValueType</div> -<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> {</div> -<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  VALUE_TYPE_STL_CONTAINER,</div> -<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  VALUE_TYPE_STL_PAIR,</div> -<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  VALUE_TYPE_OTHER,</div> -<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> };</div> -<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div> -<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">struct </span>GetValueType : StaticEnum<ValueType,</div> -<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  GetTextType<T>::value != TEXT_TYPE_OTHER ? VALUE_TYPE_OTHER : <span class="comment">//some string classes are also STL containers, so check this first</span></div> -<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  IsStlContainer<T>::value ? VALUE_TYPE_STL_CONTAINER :</div> -<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  IsStlPair<T>::value ? VALUE_TYPE_STL_PAIR :</div> -<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  VALUE_TYPE_OTHER> {};</div> -<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div> -<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div> -<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">template</span> <<span class="keyword">class</span> T, ValueType type></div> -<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">struct </span>ConvertElement;</div> -<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">/* -> expected interface</span></div> -<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">{</span></div> -<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment"> void writeStruc(const T& value, XmlElement& output) const;</span></div> -<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment"> bool readStruc(const XmlElement& input, T& value) const;</span></div> -<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment">};</span></div> -<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">*/</span></div> -<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div> -<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div> -<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">//partial specialization: handle conversion for all STL-container types!</span></div> -<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">struct </span>ConvertElement<T, VALUE_TYPE_STL_CONTAINER></div> -<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> {</div> -<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(<span class="keyword">const</span> T& value, XmlElement& output)<span class="keyword"> const</span></div> -<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  std::for_each(value.begin(), value.end(),</div> -<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  [&](<span class="keyword">const</span> <span class="keyword">typename</span> T::value_type & childVal)</div> -<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  {</div> -<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  XmlElement& newChild = output.addChild(<span class="stringliteral">"Item"</span>);</div> -<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a>(childVal, newChild);</div> -<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  });</div> -<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div> -<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(<span class="keyword">const</span> XmlElement& input, T& value)<span class="keyword"> const</span></div> -<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordtype">bool</span> success = <span class="keyword">true</span>;</div> -<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  value.clear();</div> -<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div> -<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">auto</span> iterPair = input.getChildren(<span class="stringliteral">"Item"</span>);</div> -<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter = iterPair.first; iter != iterPair.second; ++iter)</div> -<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div> -<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">typename</span> T::value_type childVal; <span class="comment">//MSVC 2010 bug: cannot put this into a lambda body</span></div> -<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">if</span> (<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a>(*iter, childVal))</div> -<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  value.insert(value.end(), childVal);</div> -<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">else</span></div> -<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  success = <span class="keyword">false</span>;</div> -<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div> -<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">return</span> success;</div> -<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div> -<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> };</div> -<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div> -<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div> -<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment">//partial specialization: handle conversion for std::pair</span></div> -<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">struct </span>ConvertElement<T, VALUE_TYPE_STL_PAIR></div> -<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> {</div> -<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(<span class="keyword">const</span> T& value, XmlElement& output)<span class="keyword"> const</span></div> -<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  XmlElement& child1 = output.addChild(<span class="stringliteral">"one"</span>); <span class="comment">//don't use "1st/2nd", this will confuse a few pedantic XML parsers</span></div> -<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a>(value.first, child1);</div> -<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div> -<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  XmlElement& child2 = output.addChild(<span class="stringliteral">"two"</span>);</div> -<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a>(value.second, child2);</div> -<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div> -<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(<span class="keyword">const</span> XmlElement& input, T& value)<span class="keyword"> const</span></div> -<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordtype">bool</span> success = <span class="keyword">true</span>;</div> -<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">const</span> XmlElement* child1 = input.getChild(<span class="stringliteral">"one"</span>);</div> -<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (!child1 || !<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a>(*child1, value.first))</div> -<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  success = <span class="keyword">false</span>;</div> -<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div> -<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">const</span> XmlElement* child2 = input.getChild(<span class="stringliteral">"two"</span>);</div> -<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">if</span> (!child2 || !<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a>(*child2, value.second))</div> -<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  success = <span class="keyword">false</span>;</div> -<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div> -<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> success;</div> -<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div> -<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> };</div> -<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div> -<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div> -<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment">//partial specialization: not a pure structured type, try text conversion (thereby respect user specializations of writeText()/readText())</span></div> -<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">struct </span>ConvertElement<T, VALUE_TYPE_OTHER></div> -<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> {</div> -<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(<span class="keyword">const</span> T& value, XmlElement& output)<span class="keyword"> const</span></div> -<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  std::string tmp;</div> -<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(value, tmp);</div> -<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  output.setValue(tmp);</div> -<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div> -<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(<span class="keyword">const</span> XmlElement& input, T& value)<span class="keyword"> const</span></div> -<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  std::string rawStr;</div> -<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  input.getValue(rawStr);</div> -<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">return</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(rawStr, value);</div> -<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  }</div> -<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> };</div> -<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div> -<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div> -<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">inline</span></div> -<div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6"> 198</a></span> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(<span class="keyword">const</span> T& value, <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& output)</div> -<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> {</div> -<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  ConvertElement<T, GetValueType<T>::value>().<a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(value, output);</div> -<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }</div> -<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div> -<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div> -<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">inline</span></div> -<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1"> 205</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& input, T& value)</div> -<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div> -<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">return</span> ConvertElement<T, GetValueType<T>::value>().<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(input, value);</div> -<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> }</div> -<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</div> -<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div> -<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor">#endif //ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743</span></div> -<div class="ttc" id="namespacezen_html_acaf85ab94b61882f957afcd355386bff"><div class="ttname"><a href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">zen::readText</a></div><div class="ttdeci">bool readText(const std::string &input, T &value)</div><div class="ttdoc">Convert text to user data - used by XML elements and attributes. </div><div class="ttdef"><b>Definition:</b> cvrt_text.h:216</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html"><div class="ttname"><a href="classzen_1_1_xml_element.html">zen::XmlElement</a></div><div class="ttdoc">An XML element. </div><div class="ttdef"><b>Definition:</b> dom.h:21</div></div> -<div class="ttc" id="namespacezen_html_a2bdcecfe7435ef11cedbce47d4e72ee1"><div class="ttname"><a href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a></div><div class="ttdeci">bool readStruc(const XmlElement &input, T &value)</div><div class="ttdoc">Convert XML element to structured user data. </div><div class="ttdef"><b>Definition:</b> cvrt_struc.h:205</div></div> -<div class="ttc" id="namespacezen_html_a29ddb823fe0a195f19a64448881b8bf6"><div class="ttname"><a href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a></div><div class="ttdeci">void writeStruc(const T &value, XmlElement &output)</div><div class="ttdoc">Convert structured user data into an XML element. </div><div class="ttdef"><b>Definition:</b> cvrt_struc.h:198</div></div> -<div class="ttc" id="namespacezen_html_a2ce2998296871fc2f4718ceceb22a23f"><div class="ttname"><a href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">zen::writeText</a></div><div class="ttdeci">void writeText(const T &value, std::string &output)</div><div class="ttdoc">Convert user data into text - used by XML elements and attributes. </div><div class="ttdef"><b>Definition:</b> cvrt_text.h:209</div></div> -</div><!-- fragment --></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/cvrt__text_8h_source.html b/zenxml/doc/cvrt__text_8h_source.html deleted file mode 100644 index 707264ae..00000000 --- a/zenxml/doc/cvrt__text_8h_source.html +++ /dev/null @@ -1,263 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: cvrt_text.h Source File</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">cvrt_text.h</div> </div> -</div><!--header--> -<div class="contents"> -<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> -<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> -<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> -<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> -<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434</span></div> -<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434</span></div> -<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> -<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <zen/utf.h></span></div> -<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <zen/string_tools.h></span></div> -<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div> -<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span>zen</div> -<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div> -<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div> -<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, T& value);</div> -<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div> -<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keyword">const</span> T& value, std::string& output);</div> -<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div> -<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div> -<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">/* Different classes of data types:</span></div> -<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"></span></div> -<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">-----------------------------</span></div> -<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">| structured | readStruc/writeStruc - e.g. string-convertible types, STL containers, std::pair, structured user types</span></div> -<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">| ------------------------- |</span></div> -<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">| | to-string-convertible | | readText/writeText - e.g. string-like types, all built-in arithmetic numbers, bool</span></div> -<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">| | --------------- | |</span></div> -<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">| | | string-like | | | utfCvrtTo - e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ...</span></div> -<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment">| | --------------- | |</span></div> -<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment">| ------------------------- |</span></div> -<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">-----------------------------</span></div> -<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">*/</span></div> -<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div> -<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div> -<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div> -<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div> -<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div> -<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div> -<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div> -<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div> -<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div> -<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div> -<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div> -<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div> -<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div> -<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div> -<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div> -<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment">//------------------------------ implementation -------------------------------------</span></div> -<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div> -<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment">//Conversion from arbitrary types to text (for use with XML elements and attributes)</span></div> -<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keyword">enum</span> TextType</div> -<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> {</div> -<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  TEXT_TYPE_BOOL,</div> -<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  TEXT_TYPE_NUMBER,</div> -<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  TEXT_TYPE_STRING,</div> -<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  TEXT_TYPE_OTHER,</div> -<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> };</div> -<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div> -<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">struct </span>GetTextType : StaticEnum<TextType,</div> -<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  IsSameType<T, bool>::value ? TEXT_TYPE_BOOL :</div> -<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  IsStringLike<T>::value ? TEXT_TYPE_STRING : <span class="comment">//string before number to correctly handle char/wchar_t -> this was an issue with Loki only!</span></div> -<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  IsArithmetic<T>::value ? TEXT_TYPE_NUMBER : <span class="comment">//</span></div> -<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  TEXT_TYPE_OTHER> {};</div> -<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div> -<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment">//######################################################################################</span></div> -<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div> -<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">template</span> <<span class="keyword">class</span> T, TextType type></div> -<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">struct </span>ConvertText;</div> -<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">/* -> expected interface</span></div> -<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">{</span></div> -<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment"> void writeText(const T& value, std::string& output) const;</span></div> -<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment"> bool readText(const std::string& input, T& value) const;</span></div> -<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">};</span></div> -<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">*/</span></div> -<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div> -<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">//partial specialization: type bool</span></div> -<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">struct </span>ConvertText<T, TEXT_TYPE_BOOL></div> -<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> {</div> -<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keywordtype">bool</span> value, std::string& output)<span class="keyword"> const</span></div> -<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  output = value ? <span class="stringliteral">"true"</span> : <span class="stringliteral">"false"</span>;</div> -<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  }</div> -<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, <span class="keywordtype">bool</span>& value)<span class="keyword"> const</span></div> -<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  std::string tmp = input;</div> -<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  zen::trim(tmp);</div> -<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"true"</span>)</div> -<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  value = <span class="keyword">true</span>;</div> -<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"false"</span>)</div> -<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  value = <span class="keyword">false</span>;</div> -<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">else</span></div> -<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> -<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> -<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  }</div> -<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> };</div> -<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div> -<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment">//partial specialization: handle conversion for all built-in arithmetic types!</span></div> -<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">struct </span>ConvertText<T, TEXT_TYPE_NUMBER></div> -<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> {</div> -<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keyword">const</span> T& value, std::string& output)<span class="keyword"> const</span></div> -<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  output = numberTo<std::string>(value);</div> -<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div> -<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, T& value)<span class="keyword"> const</span></div> -<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  value = stringTo<T>(input);</div> -<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> -<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div> -<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> };</div> -<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div> -<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">//partial specialization: handle conversion for all string-like types!</span></div> -<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">struct </span>ConvertText<T, TEXT_TYPE_STRING></div> -<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> {</div> -<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keyword">const</span> T& value, std::string& output)<span class="keyword"> const</span></div> -<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  output = utfCvrtTo<std::string>(value);</div> -<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div> -<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, T& value)<span class="keyword"> const</span></div> -<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  value = utfCvrtTo<T>(input);</div> -<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> -<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  }</div> -<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> };</div> -<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div> -<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div> -<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment">//partial specialization: unknown type</span></div> -<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">struct </span>ConvertText<T, TEXT_TYPE_OTHER></div> -<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> {</div> -<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="comment">//###########################################################################################################################################</span></div> -<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  assert_static(<span class="keyword">sizeof</span>(T) == -1);</div> -<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">/*</span></div> -<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment"> ATTENTION: The data type T is yet unknown to the zen::Xml framework!</span></div> -<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment"></span></div> -<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment"> Please provide a specialization for T of the following two functions in order to handle conversions to XML elements and attributes</span></div> -<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment"></span></div> -<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment"> template <> void zen::writeText(const T& value, std::string& output)</span></div> -<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment"> template <> bool zen::readText(const std::string& input, T& value)</span></div> -<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment"></span></div> -<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment"> If T is structured and cannot be converted to a text representation specialize these two functions to allow at least for conversions to XML elements:</span></div> -<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment"></span></div> -<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment"> template <> void zen::writeStruc(const T& value, XmlElement& output)</span></div> -<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"> template <> bool zen::readStruc(const XmlElement& input, T& value)</span></div> -<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> */</span></div> -<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="comment">//###########################################################################################################################################</span></div> -<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> };</div> -<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div> -<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div> -<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">inline</span></div> -<div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f"> 209</a></span> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keyword">const</span> T& value, std::string& output)</div> -<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> {</div> -<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  ConvertText<T, GetTextType<T>::value>().<a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(value, output);</div> -<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div> -<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div> -<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div> -<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">inline</span></div> -<div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff"> 216</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, T& value)</div> -<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> {</div> -<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">return</span> ConvertText<T, GetTextType<T>::value>().<a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(input, value);</div> -<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> }</div> -<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div> -<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div> -<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="preprocessor">#endif //ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434</span></div> -<div class="ttc" id="namespacezen_html_acaf85ab94b61882f957afcd355386bff"><div class="ttname"><a href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">zen::readText</a></div><div class="ttdeci">bool readText(const std::string &input, T &value)</div><div class="ttdoc">Convert text to user data - used by XML elements and attributes. </div><div class="ttdef"><b>Definition:</b> cvrt_text.h:216</div></div> -<div class="ttc" id="namespacezen_html_a2ce2998296871fc2f4718ceceb22a23f"><div class="ttname"><a href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">zen::writeText</a></div><div class="ttdeci">void writeText(const T &value, std::string &output)</div><div class="ttdoc">Convert user data into text - used by XML elements and attributes. </div><div class="ttdef"><b>Definition:</b> cvrt_text.h:209</div></div> -</div><!-- fragment --></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/dom_8h_source.html b/zenxml/doc/dom_8h_source.html deleted file mode 100644 index 1b1e1e32..00000000 --- a/zenxml/doc/dom_8h_source.html +++ /dev/null @@ -1,375 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: dom.h Source File</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">dom.h</div> </div> -</div><!--header--> -<div class="contents"> -<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> -<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> -<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> -<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> -<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_DOM_HEADER_82085720723894567204564256</span></div> -<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_DOM_HEADER_82085720723894567204564256</span></div> -<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> -<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <string></span></div> -<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <vector></span></div> -<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <memory></span></div> -<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <map></span></div> -<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "cvrt_text.h"</span> <span class="comment">//"readText/writeText"</span></div> -<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div> -<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">namespace </span>zen</div> -<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div> -<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="keyword">class </span>XmlDoc;</div> -<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div> -<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html"> 21</a></span> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_element.html">XmlElement</a></div> -<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> {</div> -<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">struct </span>PrivateConstruction {};</div> -<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">public</span>:</div> -<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="comment">//Construct an empty XML element</span></div> -<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="comment">//This constructor should be private, however std::make_shared() requires public access</span></div> -<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="comment">//Therefore at least prevent users from calling it via private dummy type PrivateConstruction</span></div> -<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>(<span class="keyword">const</span> String& name, <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* parentElement, PrivateConstruction) : name_(utfCvrtTo<std::string>(name)), parent_(parentElement) {}</div> -<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div> -<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div> -<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50"> 37</a></span>  String <a class="code" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">getNameAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo<String>(name_); }</div> -<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div> -<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div> -<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070"> 45</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">getValue</a>(T& value)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(*<span class="keyword">this</span>, value); }</div> -<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div> -<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div> -<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div> -<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01"> 52</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">setValue</a>(<span class="keyword">const</span> T& value) { <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(value, *<span class="keyword">this</span>); }</div> -<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div> -<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div> -<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String, <span class="keyword">class</span> T></div> -<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887"> 63</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">getAttribute</a>(<span class="keyword">const</span> String& name, T& value)<span class="keyword"> const</span></div> -<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">auto</span> it = attributes.find(utfCvrtTo<std::string>(name));</div> -<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> it == attributes.end() ? <span class="keyword">false</span> : <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(it->second, value);</div> -<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div> -<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div> -<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div> -<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String, <span class="keyword">class</span> T></div> -<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421"> 77</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">setAttribute</a>(<span class="keyword">const</span> String& name, <span class="keyword">const</span> T& value)</div> -<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div> -<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  std::string attrValue;</div> -<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(value, attrValue);</div> -<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  attributes[utfCvrtTo<std::string>(name)] = attrValue;</div> -<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div> -<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div> -<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div> -<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934"> 89</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">removeAttribute</a>(<span class="keyword">const</span> String& name) { attributes.erase(utfCvrtTo<std::string>(name)); }</div> -<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div> -<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div> -<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9"> 97</a></span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& <a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a>(<span class="keyword">const</span> String& name)</div> -<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  {</div> -<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  std::string utf8Name = utfCvrtTo<std::string>(name);</div> -<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">auto</span> newElement = std::make_shared<XmlElement>(utf8Name, <span class="keyword">this</span>, PrivateConstruction());</div> -<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  childElements.push_back(newElement);</div> -<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  childElementsSorted.insert(std::make_pair(utf8Name, newElement));</div> -<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">return</span> *newElement;</div> -<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  }</div> -<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div> -<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div> -<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e"> 113</a></span>  <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a>(<span class="keyword">const</span> String& name)<span class="keyword"> const</span></div> -<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">auto</span> it = childElementsSorted.find(utfCvrtTo<std::string>(name));</div> -<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">return</span> it == childElementsSorted.end() ? <span class="keyword">nullptr</span> : &*(it->second);</div> -<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div> -<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div> -<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658"> 121</a></span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">getChild</a>(<span class="keyword">const</span> String& name)</div> -<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div> -<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">return</span> <span class="keyword">const_cast<</span><a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>*<span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keyword">const </span><a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>*<span class="keyword">></span>(<span class="keyword">this</span>)-><a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a>(name));</div> -<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div> -<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div> -<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">template</span> < <span class="keyword">class </span>IterTy, <span class="comment">//underlying iterator type</span></div> -<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">class </span>T, <span class="comment">//target object type</span></div> -<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">class </span>AccessPolicy > <span class="comment">//access policy: see AccessPtrMap</span></div> -<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keyword">class </span>PtrIter : <span class="keyword">public</span> std::iterator<std::input_iterator_tag, T>, <span class="keyword">private</span> AccessPolicy <span class="comment">//get rid of shared_ptr indirection</span></div> -<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {</div> -<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keyword">public</span>:</div> -<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  PtrIter(IterTy it) : it_(it) {}</div> -<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  PtrIter(<span class="keyword">const</span> PtrIter& other) : it_(other.it_) {}</div> -<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  PtrIter& operator++() { ++it_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div> -<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  PtrIter operator++(<span class="keywordtype">int</span>) { PtrIter tmp(*<span class="keyword">this</span>); operator++(); <span class="keywordflow">return</span> tmp; }</div> -<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> PtrIter& lhs, <span class="keyword">const</span> PtrIter& rhs) { <span class="keywordflow">return</span> lhs.it_ == rhs.it_; }</div> -<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> PtrIter& lhs, <span class="keyword">const</span> PtrIter& rhs) { <span class="keywordflow">return</span> !(lhs == rhs); }</div> -<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  T& operator* () { <span class="keywordflow">return</span> AccessPolicy::template objectRef<T>(it_); }</div> -<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  T* operator->() { <span class="keywordflow">return</span> &AccessPolicy::template objectRef<T>(it_); }</div> -<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keyword">private</span>:</div> -<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  IterTy it_;</div> -<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  };</div> -<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div> -<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">struct </span>AccessPtrMap</div> -<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  {</div> -<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> IterTy></div> -<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  T& objectRef(<span class="keyword">const</span> IterTy& it) { <span class="keywordflow">return</span> *(it->second); }</div> -<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  };</div> -<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div> -<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">typedef</span> PtrIter<std::multimap<std::string, std::shared_ptr<XmlElement>>::iterator, XmlElement, AccessPtrMap> ChildIter2;</div> -<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">typedef</span> PtrIter<std::multimap<std::string, std::shared_ptr<XmlElement>>::const_iterator, <span class="keyword">const</span> XmlElement, AccessPtrMap> ChildIterConst2;</div> -<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div> -<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div> -<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8"> 164</a></span>  std::pair<ChildIterConst2, ChildIterConst2> <a class="code" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">getChildren</a>(<span class="keyword">const</span> String& name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> childElementsSorted.equal_range(utfCvrtTo<std::string>(name)); }</div> -<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div> -<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d"> 168</a></span>  std::pair<ChildIter2, ChildIter2> <a class="code" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">getChildren</a>(<span class="keyword">const</span> String& name) { <span class="keywordflow">return</span> childElementsSorted.equal_range(utfCvrtTo<std::string>(name)); }</div> -<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div> -<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">struct </span>AccessPtrVec</div> -<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  {</div> -<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> IterTy></div> -<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  T& objectRef(<span class="keyword">const</span> IterTy& it) { <span class="keywordflow">return</span> **it; }</div> -<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  };</div> -<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div> -<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keyword">typedef</span> PtrIter<std::vector<std::shared_ptr<XmlElement>>::iterator, XmlElement, AccessPtrVec> ChildIter;</div> -<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keyword">typedef</span> PtrIter<std::vector<std::shared_ptr<XmlElement>>::const_iterator, <span class="keyword">const</span> XmlElement, AccessPtrVec> ChildIterConst;</div> -<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div> -<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div> -<div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2"> 188</a></span>  std::pair<ChildIterConst, ChildIterConst> <a class="code" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">getChildren</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::make_pair(childElements.begin(), childElements.end()); }</div> -<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div> -<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96"> 191</a></span>  std::pair<ChildIter, ChildIter> <a class="code" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">getChildren</a>() { <span class="keywordflow">return</span> std::make_pair(childElements.begin(), childElements.end()); }</div> -<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div> -<div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1"> 194</a></span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">parent</a>() { <span class="keywordflow">return</span> parent_; };</div> -<div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c"> 196</a></span>  <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">parent</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parent_; };</div> -<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div> -<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div> -<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keyword">typedef</span> std::map<std::string, std::string>::const_iterator AttrIter;</div> -<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div> -<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="comment">/* -> disabled documentation extraction</span></div> -<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"> \brief Get all attributes associated with the element.</span></div> -<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> \code</span></div> -<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment"> auto iterPair = elem.getAttributes();</span></div> -<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment"> for (auto it = iterPair.first; it != iterPair.second; ++it)</span></div> -<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment"> std::cout << "name: " << it->first << " value: " << it->second << "\n";</span></div> -<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment"> \endcode</span></div> -<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment"> \return A pair of STL begin/end iterators to access all attributes sequentially as a list of name/value pairs of std::string.</span></div> -<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment"> */</span></div> -<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  std::pair<AttrIter, AttrIter> getAttributes()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::make_pair(attributes.begin(), attributes.end()); }</div> -<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div> -<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="comment">//Transactionally swap two elements. -> disabled documentation extraction</span></div> -<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordtype">void</span> swap(XmlElement& other)</div> -<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  {</div> -<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  name_ .swap(other.name_);</div> -<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  value_ .swap(other.value_);</div> -<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  attributes.swap(other.attributes);</div> -<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  childElements.swap(other.childElements);</div> -<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  childElementsSorted.swap(other.childElementsSorted);</div> -<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="comment">//std::swap(parent_, other.parent_); -> parent is physical location; update children's parent reference instead:</span></div> -<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  std::for_each( childElements.begin(), childElements.end(), [&](<span class="keyword">const</span> std::shared_ptr<XmlElement>& child) { child->parent_ = <span class="keyword">this</span>; });</div> -<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  std::for_each(other.childElements.begin(), other.childElements.end(), [&](<span class="keyword">const</span> std::shared_ptr<XmlElement>& child) { child->parent_ = &other; });</div> -<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div> -<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div> -<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">private</span>:</div> -<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keyword">friend</span> <span class="keyword">class </span>XmlDoc;</div> -<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div> -<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  XmlElement(<span class="keyword">const</span> XmlElement&); <span class="comment">//not implemented</span></div> -<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  XmlElement& operator=(<span class="keyword">const</span> XmlElement&); <span class="comment">//</span></div> -<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div> -<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  std::string name_;</div> -<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  std::string value_;</div> -<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  std::map<std::string, std::string> attributes;</div> -<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  std::vector<std::shared_ptr<XmlElement>> childElements; <span class="comment">//all child elements in order of creation</span></div> -<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  std::multimap<std::string, std::shared_ptr<XmlElement>> childElementsSorted; <span class="comment">//alternate key: sorted by element name</span></div> -<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  XmlElement* parent_;</div> -<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> };</div> -<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div> -<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div> -<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment">//XmlElement::setValue<T>() calls zen::writeStruc() which calls XmlElement::setValue() ... => these two specializations end the circle</span></div> -<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keyword">template</span> <> <span class="keyword">inline</span></div> -<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">XmlElement::setValue</a>(<span class="keyword">const</span> std::string& value) { value_ = value; }</div> -<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div> -<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keyword">template</span> <> <span class="keyword">inline</span></div> -<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">XmlElement::getValue</a>(std::string& value)<span class="keyword"> const </span>{ value = value_; <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div> -<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div> -<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div> -<div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html"> 249</a></span> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a></div> -<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> {</div> -<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">public</span>:</div> -<div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed"> 253</a></span>  <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>() : version_(<span class="stringliteral">"1.0"</span>), encoding_(<span class="stringliteral">"UTF-8"</span>), rootElement(<span class="stringliteral">"Root"</span>, nullptr, <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>::PrivateConstruction()) {}</div> -<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div> -<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>(<a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a>&& tmp) : rootElement(<span class="stringliteral">"Root"</span>, nullptr, <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>::PrivateConstruction()) { swap(tmp); }</div> -<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>& operator=(<a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>&& tmp) { swap(tmp); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div> -<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div> -<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="comment">//Setup an empty XML document</span></div> -<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment"></span> <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df"> 264</a></span>  <a class="code" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">XmlDoc</a>(String rootName) : version_(<span class="stringliteral">"1.0"</span>), encoding_(<span class="stringliteral">"UTF-8"</span>), rootElement(rootName, nullptr, <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>::PrivateConstruction()) {}</div> -<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div> -<div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d"> 267</a></span>  <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& <a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rootElement; }</div> -<div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e"> 269</a></span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& <a class="code" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">root</a>() { <span class="keywordflow">return</span> rootElement; }</div> -<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div> -<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div> -<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665"> 276</a></span>  String <a class="code" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">getVersionAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo<String>(version_); }</div> -<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div> -<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div> -<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64"> 283</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">setVersion</a>(<span class="keyword">const</span> String& version) { version_ = utfCvrtTo<std::string>(version); }</div> -<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div> -<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div> -<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da"> 290</a></span>  String <a class="code" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">getEncodingAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo<String>(encoding_); }</div> -<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div> -<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div> -<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62"> 297</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">setEncoding</a>(<span class="keyword">const</span> String& encoding) { encoding_ = utfCvrtTo<std::string>(encoding); }</div> -<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div> -<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div> -<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4"> 304</a></span>  String <a class="code" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">getStandaloneAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo<String>(standalone_); }</div> -<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div> -<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div> -<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4"> 311</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">setStandalone</a>(<span class="keyword">const</span> String& standalone) { standalone_ = utfCvrtTo<std::string>(standalone); }</div> -<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div> -<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="comment">//Transactionally swap two elements. -> disabled documentation extraction</span></div> -<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordtype">void</span> swap(<a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a>& other)</div> -<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  {</div> -<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  version_ .swap(other.version_);</div> -<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  encoding_ .swap(other.encoding_);</div> -<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  standalone_.swap(other.standalone_);</div> -<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  rootElement.swap(other.rootElement);</div> -<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  }</div> -<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div> -<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keyword">private</span>:</div> -<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>&); <span class="comment">//not implemented, thanks to XmlElement::parent_</span></div> -<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>& operator=(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>&); <span class="comment">//</span></div> -<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div> -<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  std::string version_;</div> -<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  std::string encoding_;</div> -<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  std::string standalone_;</div> -<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div> -<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  XmlElement rootElement;</div> -<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> };</div> -<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div> -<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div> -<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div> -<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor">#endif //ZEN_XML_DOM_HEADER_82085720723894567204564256</span></div> -<div class="ttc" id="classzen_1_1_xml_doc_html_ad4a9594d93885fc1a12db28e8246648d"><div class="ttname"><a href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">zen::XmlDoc::root</a></div><div class="ttdeci">const XmlElement & root() const </div><div class="ttdoc">Get a const reference to the document's root element. </div><div class="ttdef"><b>Definition:</b> dom.h:267</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a7ba1f26be5629f89ba7648d658f7058c"><div class="ttname"><a href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">zen::XmlElement::parent</a></div><div class="ttdeci">const XmlElement * parent() const </div><div class="ttdoc">Get parent XML element, may be nullptr for root element. </div><div class="ttdef"><b>Definition:</b> dom.h:196</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a5ac9d586a5668c2c64e3c06c6203b070"><div class="ttname"><a href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">zen::XmlElement::getValue</a></div><div class="ttdeci">bool getValue(T &value) const </div><div class="ttdoc">Get the value of this element as a user type. </div><div class="ttdef"><b>Definition:</b> dom.h:45</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_ad9c2ce2e55294c8110825988595e3934"><div class="ttname"><a href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">zen::XmlElement::removeAttribute</a></div><div class="ttdeci">void removeAttribute(const String &name)</div><div class="ttdoc">Remove the attribute with the given name. </div><div class="ttdef"><b>Definition:</b> dom.h:89</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a2640b438c4984f5eeb8760d82d73c5b8"><div class="ttname"><a href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">zen::XmlElement::getChildren</a></div><div class="ttdeci">std::pair< ChildIterConst2, ChildIterConst2 > getChildren(const String &name) const </div><div class="ttdoc">Access all child elements with the given name via STL iterators. </div><div class="ttdef"><b>Definition:</b> dom.h:164</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html_a2ae30bca2f490479f58c272148935a62"><div class="ttname"><a href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">zen::XmlDoc::setEncoding</a></div><div class="ttdeci">void setEncoding(const String &encoding)</div><div class="ttdoc">Set the encoding used in the XML declaration. </div><div class="ttdef"><b>Definition:</b> dom.h:297</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a55a6d1849490d82ae900cd9b923908f2"><div class="ttname"><a href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">zen::XmlElement::getChildren</a></div><div class="ttdeci">std::pair< ChildIterConst, ChildIterConst > getChildren() const </div><div class="ttdoc">Access all child elements sequentially via STL iterators. </div><div class="ttdef"><b>Definition:</b> dom.h:188</div></div> -<div class="ttc" id="namespacezen_html_acaf85ab94b61882f957afcd355386bff"><div class="ttname"><a href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">zen::readText</a></div><div class="ttdeci">bool readText(const std::string &input, T &value)</div><div class="ttdoc">Convert text to user data - used by XML elements and attributes. </div><div class="ttdef"><b>Definition:</b> cvrt_text.h:216</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html"><div class="ttname"><a href="classzen_1_1_xml_element.html">zen::XmlElement</a></div><div class="ttdoc">An XML element. </div><div class="ttdef"><b>Definition:</b> dom.h:21</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html_a74ff8434848672fe6483845d04c082df"><div class="ttname"><a href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">zen::XmlDoc::XmlDoc</a></div><div class="ttdeci">XmlDoc(String rootName)</div><div class="ttdef"><b>Definition:</b> dom.h:264</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_ac59268177d162931f937b6a7f235ad96"><div class="ttname"><a href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">zen::XmlElement::getChildren</a></div><div class="ttdeci">std::pair< ChildIter, ChildIter > getChildren()</div><div class="ttdef"><b>Definition:</b> dom.h:191</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a5d672e8ccc7592442ab927bb267af658"><div class="ttname"><a href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">zen::XmlElement::getChild</a></div><div class="ttdeci">XmlElement * getChild(const String &name)</div><div class="ttdef"><b>Definition:</b> dom.h:121</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_af90ac6f435b03ba37cf47ee188c58887"><div class="ttname"><a href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">zen::XmlElement::getAttribute</a></div><div class="ttdeci">bool getAttribute(const String &name, T &value) const </div><div class="ttdoc">Retrieve an attribute by name. </div><div class="ttdef"><b>Definition:</b> dom.h:63</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html_ab45914339c476e1da35746f5e00dbc64"><div class="ttname"><a href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">zen::XmlDoc::setVersion</a></div><div class="ttdeci">void setVersion(const String &version)</div><div class="ttdoc">Set the version used in the XML declaration. </div><div class="ttdef"><b>Definition:</b> dom.h:283</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html_a4c92f9b8c1bb47247b827d89794590d4"><div class="ttname"><a href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">zen::XmlDoc::setStandalone</a></div><div class="ttdeci">void setStandalone(const String &standalone)</div><div class="ttdoc">Set the standalone string used in the XML declaration. </div><div class="ttdef"><b>Definition:</b> dom.h:311</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html"><div class="ttname"><a href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></div><div class="ttdoc">The complete XML document. </div><div class="ttdef"><b>Definition:</b> dom.h:249</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html_adbed9c31066d456a9cc8c610f15670ed"><div class="ttname"><a href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">zen::XmlDoc::XmlDoc</a></div><div class="ttdeci">XmlDoc()</div><div class="ttdoc">Default constructor setting up an empty XML document with a standard declaration: <...</div><div class="ttdef"><b>Definition:</b> dom.h:253</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html_a64ece4a1f3f8c802192b8f31506535da"><div class="ttname"><a href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">zen::XmlDoc::getEncodingAs</a></div><div class="ttdeci">String getEncodingAs() const </div><div class="ttdoc">Get the encoding used in the XML declaration. </div><div class="ttdef"><b>Definition:</b> dom.h:290</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a653caffa6fad89db7d14f67f987ad0f9"><div class="ttname"><a href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">zen::XmlElement::addChild</a></div><div class="ttdeci">XmlElement & addChild(const String &name)</div><div class="ttdoc">Create a new child element and return a reference to it. </div><div class="ttdef"><b>Definition:</b> dom.h:97</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html_a094e156f9d265443e52a527638e88a1e"><div class="ttname"><a href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">zen::XmlDoc::root</a></div><div class="ttdeci">XmlElement & root()</div><div class="ttdoc">Get a reference to the document's root element. </div><div class="ttdef"><b>Definition:</b> dom.h:269</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a3ab82b1720460487f4afabcd115d0c7e"><div class="ttname"><a href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">zen::XmlElement::getChild</a></div><div class="ttdeci">const XmlElement * getChild(const String &name) const </div><div class="ttdoc">Retrieve a child element with the given name. </div><div class="ttdef"><b>Definition:</b> dom.h:113</div></div> -<div class="ttc" id="namespacezen_html_a2bdcecfe7435ef11cedbce47d4e72ee1"><div class="ttname"><a href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a></div><div class="ttdeci">bool readStruc(const XmlElement &input, T &value)</div><div class="ttdoc">Convert XML element to structured user data. </div><div class="ttdef"><b>Definition:</b> cvrt_struc.h:205</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a4af309f59ef09f46a559f1f0e1eac6c1"><div class="ttname"><a href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">zen::XmlElement::parent</a></div><div class="ttdeci">XmlElement * parent()</div><div class="ttdoc">Get parent XML element, may be nullptr for root element. </div><div class="ttdef"><b>Definition:</b> dom.h:194</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_aaf3a26f6199fc88cce7d9d911ba21b01"><div class="ttname"><a href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">zen::XmlElement::setValue</a></div><div class="ttdeci">void setValue(const T &value)</div><div class="ttdoc">Set the value of this element. </div><div class="ttdef"><b>Definition:</b> dom.h:52</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html_a7f93dcdc00cdc8d98926cf8e47161665"><div class="ttname"><a href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">zen::XmlDoc::getVersionAs</a></div><div class="ttdeci">String getVersionAs() const </div><div class="ttdoc">Get the version used in the XML declaration. </div><div class="ttdef"><b>Definition:</b> dom.h:276</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a211a6f037c22a54d3facb7a8347a8421"><div class="ttname"><a href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">zen::XmlElement::setAttribute</a></div><div class="ttdeci">void setAttribute(const String &name, const T &value)</div><div class="ttdoc">Create or update an XML attribute. </div><div class="ttdef"><b>Definition:</b> dom.h:77</div></div> -<div class="ttc" id="namespacezen_html_a29ddb823fe0a195f19a64448881b8bf6"><div class="ttname"><a href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a></div><div class="ttdeci">void writeStruc(const T &value, XmlElement &output)</div><div class="ttdoc">Convert structured user data into an XML element. </div><div class="ttdef"><b>Definition:</b> cvrt_struc.h:198</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_ae209dac9655bc36121abb87688ece41d"><div class="ttname"><a href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">zen::XmlElement::getChildren</a></div><div class="ttdeci">std::pair< ChildIter2, ChildIter2 > getChildren(const String &name)</div><div class="ttdef"><b>Definition:</b> dom.h:168</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html_ac1bfb9776852dc8195b9ffb4f65452e4"><div class="ttname"><a href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">zen::XmlDoc::getStandaloneAs</a></div><div class="ttdeci">String getStandaloneAs() const </div><div class="ttdoc">Get the standalone string used in the XML declaration. </div><div class="ttdef"><b>Definition:</b> dom.h:304</div></div> -<div class="ttc" id="classzen_1_1_xml_element_html_a7c911eb06a59c864197b1a4098728e50"><div class="ttname"><a href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">zen::XmlElement::getNameAs</a></div><div class="ttdeci">String getNameAs() const </div><div class="ttdoc">Retrieve the name of this XML element. </div><div class="ttdef"><b>Definition:</b> dom.h:37</div></div> -<div class="ttc" id="namespacezen_html_a2ce2998296871fc2f4718ceceb22a23f"><div class="ttname"><a href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">zen::writeText</a></div><div class="ttdeci">void writeText(const T &value, std::string &output)</div><div class="ttdoc">Convert user data into text - used by XML elements and attributes. </div><div class="ttdef"><b>Definition:</b> cvrt_text.h:209</div></div> -</div><!-- fragment --></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/doxygen.css b/zenxml/doc/doxygen.css deleted file mode 100644 index f0f36f89..00000000 --- a/zenxml/doc/doxygen.css +++ /dev/null @@ -1,1366 +0,0 @@ -/* The standard CSS for doxygen 1.8.6 */ - -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; -} - -/* @group Heading Levels */ - -h1.groupheader { - font-size: 150%; -} - -.title { - font: 400 14px/28px Roboto,sans-serif; - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2.groupheader { - border-bottom: 1px solid #879ECB; - color: #354C7B; - font-size: 150%; - font-weight: normal; - margin-top: 1.75em; - padding-top: 8px; - padding-bottom: 4px; - width: 100%; -} - -h3.groupheader { - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; -} - -h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; -} - -dt { - font-weight: bold; -} - -div.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; -} - -p.startli, p.startdd { - margin-top: 2px; -} - -p.starttd { - margin-top: 0px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #3D578C; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #4665A2; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #ffffff; - border: 1px double #869DCA; -} - -.contents a.qindexHL:visited { - color: #ffffff; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited, a.line, a.line:visited { - color: #4665A2; -} - -a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #4665A2; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: monospace, fixed; - font-size: 105%; -} - -div.fragment { - padding: 4px 6px; - margin: 4px 8px 4px 2px; - background-color: #FBFCFD; - border: 1px solid #C4CFE5; -} - -div.line { - font-family: monospace, fixed; - font-size: 13px; - min-height: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; -} - - -span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; - white-space: pre; -} -span.lineno a { - background-color: #D8D8D8; -} - -span.lineno a:hover { - background-color: #C8C8C8; -} - -div.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 12px; - margin-right: 8px; -} - -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -blockquote { - background-color: #F7F8FB; - border-left: 2px solid #9CAFD4; - margin: 0 24px 0 4px; - padding: 0 12px 0 16px; -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A3B4D7; -} - -th.dirtab { - background: #EBEFF6; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #4A6AAA; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.memberdecls td, .fieldtable tr { - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -.memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memSeparator { - border-bottom: 1px solid #DEE4F0; - line-height: 1px; - margin: 0px; - padding: 0px; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight { - width: 100%; -} - -.memTemplParams { - color: #4665A2; - white-space: nowrap; - font-size: 80%; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtemplate { - font-size: 80%; - color: #4665A2; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; - -webkit-transition: box-shadow 0.5s linear; - -moz-transition: box-shadow 0.5s linear; - -ms-transition: box-shadow 0.5s linear; - -o-transition: box-shadow 0.5s linear; - transition: box-shadow 0.5s linear; - display: table !important; - width: 100%; -} - -.memitem.glow { - box-shadow: 0 0 15px cyan; -} - -.memname { - font-weight: bold; - margin-left: 6px; -} - -.memname td { - vertical-align: bottom; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 0px 6px 0px; - color: #253555; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 4px; - border-top-left-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 10px 2px 10px; - background-color: #FBFCFD; - border-top-width: 0; - background-image:url('nav_g.png'); - background-repeat:repeat-x; - background-color: #FFFFFF; - /* opera specific markup */ - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-bottomright: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} -.paramname code { - line-height: 14px; -} - -.params, .retval, .exception, .tparams { - margin-left: 0px; - padding-left: 0px; -} - -.params .paramname, .retval .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - -table.mlabels { - border-spacing: 0px; -} - -td.mlabels-left { - width: 100%; - padding: 0px; -} - -td.mlabels-right { - vertical-align: bottom; - padding: 0px; - white-space: nowrap; -} - -span.mlabels { - margin-left: 8px; -} - -span.mlabel { - background-color: #728DC1; - border-top:1px solid #5373B4; - border-left:1px solid #5373B4; - border-right:1px solid #C4CFE5; - border-bottom:1px solid #C4CFE5; - text-shadow: none; - color: white; - margin-right: 4px; - padding: 2px 3px; - border-radius: 3px; - font-size: 7pt; - white-space: nowrap; - vertical-align: middle; -} - - - -/* @end */ - -/* these are for tree view when not used as main index */ - -div.directory { - margin: 10px 0px; - border-top: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - width: 100%; -} - -.directory table { - border-collapse:collapse; -} - -.directory td { - margin: 0px; - padding: 0px; - vertical-align: top; -} - -.directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; -} - -.directory td.entry a { - outline:none; -} - -.directory td.entry a img { - border: none; -} - -.directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); -} - -.directory tr.even { - padding-left: 6px; - background-color: #F7F8FB; -} - -.directory img { - vertical-align: -30%; -} - -.directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; -} - -.directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #3D578C; -} - -div.dynheader { - margin-top: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -address { - font-style: normal; - color: #2A3D61; -} - -table.doxtable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -table.fieldtable { - /*width: 100%;*/ - margin-bottom: 10px; - border: 1px solid #A8B8D9; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - vertical-align: top; -} - -.fieldtable td.fieldname { - padding-top: 3px; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - /*width: 100%;*/ -} - -.fieldtable td.fielddoc p:first-child { - margin-top: 0px; -} - -.fieldtable td.fielddoc p:last-child { - margin-bottom: 2px; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - font-size: 90%; - color: #253555; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - background-position: 0 -5px; - height:30px; - line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#364D7C; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; - color: #283A5D; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; -} - -.navpath li.navelem a:hover -{ - color:#6884BD; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#364D7C; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -div.ingroups -{ - font-size: 8pt; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C4CFE5; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -dl -{ - padding: 0 0 0 10px; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ -dl.section -{ - margin-left: 0px; - padding-left: 0px; -} - -dl.note -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #D0C000; -} - -dl.warning, dl.attention -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00D000; -} - -dl.deprecated -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #505050; -} - -dl.todo -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00C0E0; -} - -dl.test -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #3030E0; -} - -dl.bug -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #C08050; -} - -dl.section dd { - margin-bottom: 6px; -} - - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.diagraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #90A5CE; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#334975; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; -} - -dl.citelist dd { - margin:2px 0; - padding:5px 0; -} - -div.toc { - padding: 14px 25px; - background-color: #F4F6FA; - border: 1px solid #D8DFEE; - border-radius: 7px 7px 7px 7px; - float: right; - height: auto; - margin: 0 20px 10px 10px; - width: 200px; -} - -div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; - margin-top: 5px; - padding-left: 10px; - padding-top: 2px; -} - -div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #4665A2; - border-bottom: 0 none; - margin: 0; -} - -div.toc ul { - list-style: none outside none; - border: medium none; - padding: 0px; -} - -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { - margin-left: 15px; -} - -div.toc li.level3 { - margin-left: 30px; -} - -div.toc li.level4 { - margin-left: 45px; -} - -.inherit_header { - font-weight: bold; - color: gray; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.inherit_header td { - padding: 6px 0px 2px 5px; -} - -.inherit { - display: none; -} - -tr.heading h2 { - margin-top: 12px; - margin-bottom: 4px; -} - -/* tooltip related style info */ - -.ttc { - position: absolute; - display: none; -} - -#powerTip { - cursor: default; - white-space: nowrap; - background-color: white; - border: 1px solid gray; - border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; - display: none; - font-size: smaller; - max-width: 80%; - opacity: 0.9; - padding: 1ex 1em 1em; - position: absolute; - z-index: 2147483647; -} - -#powerTip div.ttdoc { - color: grey; - font-style: italic; -} - -#powerTip div.ttname a { - font-weight: bold; -} - -#powerTip div.ttname { - font-weight: bold; -} - -#powerTip div.ttdeci { - color: #006318; -} - -#powerTip div { - margin: 0px; - padding: 0px; - font: 12px/16px Roboto,sans-serif; -} - -#powerTip:before, #powerTip:after { - content: ""; - position: absolute; - margin: 0px; -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.s:after, #powerTip.s:before, -#powerTip.w:after, #powerTip.w:before, -#powerTip.e:after, #powerTip.e:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.nw:after, #powerTip.nw:before, -#powerTip.sw:after, #powerTip.sw:before { - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -#powerTip.n:after, #powerTip.s:after, -#powerTip.w:after, #powerTip.e:after, -#powerTip.nw:after, #powerTip.ne:after, -#powerTip.sw:after, #powerTip.se:after { - border-color: rgba(255, 255, 255, 0); -} - -#powerTip.n:before, #powerTip.s:before, -#powerTip.w:before, #powerTip.e:before, -#powerTip.nw:before, #powerTip.ne:before, -#powerTip.sw:before, #powerTip.se:before { - border-color: rgba(128, 128, 128, 0); -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.nw:after, #powerTip.nw:before { - top: 100%; -} - -#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #ffffff; - border-width: 10px; - margin: 0px -10px; -} -#powerTip.n:before { - border-top-color: #808080; - border-width: 11px; - margin: 0px -11px; -} -#powerTip.n:after, #powerTip.n:before { - left: 50%; -} - -#powerTip.nw:after, #powerTip.nw:before { - right: 14px; -} - -#powerTip.ne:after, #powerTip.ne:before { - left: 14px; -} - -#powerTip.s:after, #powerTip.s:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.sw:after, #powerTip.sw:before { - bottom: 100%; -} - -#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #ffffff; - border-width: 10px; - margin: 0px -10px; -} - -#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; - border-width: 11px; - margin: 0px -11px; -} - -#powerTip.s:after, #powerTip.s:before { - left: 50%; -} - -#powerTip.sw:after, #powerTip.sw:before { - right: 14px; -} - -#powerTip.se:after, #powerTip.se:before { - left: 14px; -} - -#powerTip.e:after, #powerTip.e:before { - left: 100%; -} -#powerTip.e:after { - border-left-color: #ffffff; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.e:before { - border-left-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -#powerTip.w:after, #powerTip.w:before { - right: 100%; -} -#powerTip.w:after { - border-right-color: #ffffff; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.w:before { - border-right-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } -} - diff --git a/zenxml/doc/doxygen.png b/zenxml/doc/doxygen.png Binary files differdeleted file mode 100644 index 3ff17d80..00000000 --- a/zenxml/doc/doxygen.png +++ /dev/null diff --git a/zenxml/doc/error_8h_source.html b/zenxml/doc/error_8h_source.html deleted file mode 100644 index 91e0421e..00000000 --- a/zenxml/doc/error_8h_source.html +++ /dev/null @@ -1,113 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: error.h Source File</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">error.h</div> </div> -</div><!--header--> -<div class="contents"> -<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> -<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> -<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> -<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> -<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_ERROR_HEADER_018734618433021489473214873214</span></div> -<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_ERROR_HEADER_018734618433021489473214873214</span></div> -<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> -<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="keyword">namespace </span>zen</div> -<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> {</div> -<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="structzen_1_1_xml_error.html"> 13</a></span> <span class="keyword">struct </span><a class="code" href="structzen_1_1_xml_error.html">XmlError</a></div> -<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div> -<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">virtual</span> ~<a class="code" href="structzen_1_1_xml_error.html">XmlError</a>() {}</div> -<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> };</div> -<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> }</div> -<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div> -<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#endif //ZEN_XML_ERROR_HEADER_018734618433021489473214873214</span></div> -<div class="ttc" id="structzen_1_1_xml_error_html"><div class="ttname"><a href="structzen_1_1_xml_error.html">zen::XmlError</a></div><div class="ttdoc">Exception base class for zen::Xml. </div><div class="ttdef"><b>Definition:</b> error.h:13</div></div> -</div><!-- fragment --></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/functions.html b/zenxml/doc/functions.html deleted file mode 100644 index 79dbc774..00000000 --- a/zenxml/doc/functions.html +++ /dev/null @@ -1,259 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Class Members</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li class="current"><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> - <div id="navrow3" class="tabs2"> - <ul class="tablist"> - <li class="current"><a href="functions.html"><span>All</span></a></li> - <li><a href="functions_func.html"><span>Functions</span></a></li> - <li><a href="functions_vars.html"><span>Variables</span></a></li> - </ul> - </div> - <div id="navrow4" class="tabs3"> - <ul class="tablist"> - <li><a href="#index_a"><span>a</span></a></li> - <li><a href="#index_c"><span>c</span></a></li> - <li><a href="#index_e"><span>e</span></a></li> - <li><a href="#index_g"><span>g</span></a></li> - <li><a href="#index_l"><span>l</span></a></li> - <li><a href="#index_n"><span>n</span></a></li> - <li><a href="#index_o"><span>o</span></a></li> - <li><a href="#index_p"><span>p</span></a></li> - <li><a href="#index_r"><span>r</span></a></li> - <li><a href="#index_s"><span>s</span></a></li> - <li class="current"><a href="#index_x"><span>x</span></a></li> - </ul> - </div> -</div><!-- top --> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div class="contents"> -<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div> - -<h3><a class="anchor" id="index_a"></a>- a -</h3><ul> -<li>addChild() -: <a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">zen::XmlElement</a> -</li> -<li>attribute() -: <a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">zen::XmlIn</a> -, <a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">zen::XmlOut</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_c"></a>- c -</h3><ul> -<li>col -: <a class="el" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">zen::XmlParsingError</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_e"></a>- e -</h3><ul> -<li>errorsOccured() -: <a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">zen::XmlIn</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_g"></a>- g -</h3><ul> -<li>get() -: <a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">zen::XmlIn</a> -</li> -<li>getAttribute() -: <a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">zen::XmlElement</a> -</li> -<li>getChild() -: <a class="el" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">zen::XmlElement</a> -</li> -<li>getChildren() -: <a class="el" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">zen::XmlElement</a> -</li> -<li>getEncodingAs() -: <a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">zen::XmlDoc</a> -</li> -<li>getErrorsAs() -: <a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">zen::XmlIn</a> -</li> -<li>getNameAs() -: <a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">zen::XmlElement</a> -</li> -<li>getStandaloneAs() -: <a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">zen::XmlDoc</a> -</li> -<li>getValue() -: <a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">zen::XmlElement</a> -</li> -<li>getVersionAs() -: <a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">zen::XmlDoc</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_l"></a>- l -</h3><ul> -<li>lastError -: <a class="el" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">zen::XmlFileError</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_n"></a>- n -</h3><ul> -<li>next() -: <a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">zen::XmlIn</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_o"></a>- o -</h3><ul> -<li>operator int ConversionToBool::*() -: <a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">zen::XmlIn</a> -</li> -<li>operator()() -: <a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">zen::XmlIn</a> -, <a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">zen::XmlOut</a> -</li> -<li>operator[]() -: <a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">zen::XmlIn</a> -, <a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">zen::XmlOut</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_p"></a>- p -</h3><ul> -<li>parent() -: <a class="el" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">zen::XmlElement</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_r"></a>- r -</h3><ul> -<li>ref() -: <a class="el" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">zen::XmlOut</a> -</li> -<li>removeAttribute() -: <a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">zen::XmlElement</a> -</li> -<li>root() -: <a class="el" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">zen::XmlDoc</a> -</li> -<li>row -: <a class="el" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">zen::XmlParsingError</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_s"></a>- s -</h3><ul> -<li>setAttribute() -: <a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">zen::XmlElement</a> -</li> -<li>setEncoding() -: <a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">zen::XmlDoc</a> -</li> -<li>setStandalone() -: <a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">zen::XmlDoc</a> -</li> -<li>setValue() -: <a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">zen::XmlElement</a> -</li> -<li>setVersion() -: <a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">zen::XmlDoc</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_x"></a>- x -</h3><ul> -<li>XmlDoc() -: <a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">zen::XmlDoc</a> -</li> -<li>XmlIn() -: <a class="el" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">zen::XmlIn</a> -</li> -<li>XmlOut() -: <a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">zen::XmlOut</a> -</li> -</ul> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/functions_func.html b/zenxml/doc/functions_func.html deleted file mode 100644 index 07af5877..00000000 --- a/zenxml/doc/functions_func.html +++ /dev/null @@ -1,240 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Class Members - Functions</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li class="current"><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> - <div id="navrow3" class="tabs2"> - <ul class="tablist"> - <li><a href="functions.html"><span>All</span></a></li> - <li class="current"><a href="functions_func.html"><span>Functions</span></a></li> - <li><a href="functions_vars.html"><span>Variables</span></a></li> - </ul> - </div> - <div id="navrow4" class="tabs3"> - <ul class="tablist"> - <li><a href="#index_a"><span>a</span></a></li> - <li><a href="#index_e"><span>e</span></a></li> - <li><a href="#index_g"><span>g</span></a></li> - <li><a href="#index_n"><span>n</span></a></li> - <li><a href="#index_o"><span>o</span></a></li> - <li><a href="#index_p"><span>p</span></a></li> - <li><a href="#index_r"><span>r</span></a></li> - <li><a href="#index_s"><span>s</span></a></li> - <li class="current"><a href="#index_x"><span>x</span></a></li> - </ul> - </div> -</div><!-- top --> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div class="contents"> -  - -<h3><a class="anchor" id="index_a"></a>- a -</h3><ul> -<li>addChild() -: <a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">zen::XmlElement</a> -</li> -<li>attribute() -: <a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">zen::XmlIn</a> -, <a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">zen::XmlOut</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_e"></a>- e -</h3><ul> -<li>errorsOccured() -: <a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">zen::XmlIn</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_g"></a>- g -</h3><ul> -<li>get() -: <a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">zen::XmlIn</a> -</li> -<li>getAttribute() -: <a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">zen::XmlElement</a> -</li> -<li>getChild() -: <a class="el" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">zen::XmlElement</a> -</li> -<li>getChildren() -: <a class="el" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">zen::XmlElement</a> -</li> -<li>getEncodingAs() -: <a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">zen::XmlDoc</a> -</li> -<li>getErrorsAs() -: <a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">zen::XmlIn</a> -</li> -<li>getNameAs() -: <a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">zen::XmlElement</a> -</li> -<li>getStandaloneAs() -: <a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">zen::XmlDoc</a> -</li> -<li>getValue() -: <a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">zen::XmlElement</a> -</li> -<li>getVersionAs() -: <a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">zen::XmlDoc</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_n"></a>- n -</h3><ul> -<li>next() -: <a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">zen::XmlIn</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_o"></a>- o -</h3><ul> -<li>operator int ConversionToBool::*() -: <a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">zen::XmlIn</a> -</li> -<li>operator()() -: <a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">zen::XmlIn</a> -, <a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">zen::XmlOut</a> -</li> -<li>operator[]() -: <a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">zen::XmlIn</a> -, <a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">zen::XmlOut</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_p"></a>- p -</h3><ul> -<li>parent() -: <a class="el" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">zen::XmlElement</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_r"></a>- r -</h3><ul> -<li>ref() -: <a class="el" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">zen::XmlOut</a> -</li> -<li>removeAttribute() -: <a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">zen::XmlElement</a> -</li> -<li>root() -: <a class="el" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">zen::XmlDoc</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_s"></a>- s -</h3><ul> -<li>setAttribute() -: <a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">zen::XmlElement</a> -</li> -<li>setEncoding() -: <a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">zen::XmlDoc</a> -</li> -<li>setStandalone() -: <a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">zen::XmlDoc</a> -</li> -<li>setValue() -: <a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">zen::XmlElement</a> -</li> -<li>setVersion() -: <a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">zen::XmlDoc</a> -</li> -</ul> - - -<h3><a class="anchor" id="index_x"></a>- x -</h3><ul> -<li>XmlDoc() -: <a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">zen::XmlDoc</a> -</li> -<li>XmlIn() -: <a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">zen::XmlIn</a> -</li> -<li>XmlOut() -: <a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">zen::XmlOut</a> -</li> -</ul> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/functions_vars.html b/zenxml/doc/functions_vars.html deleted file mode 100644 index 60a4de36..00000000 --- a/zenxml/doc/functions_vars.html +++ /dev/null @@ -1,112 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Class Members - Variables</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li class="current"><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> - <div id="navrow3" class="tabs2"> - <ul class="tablist"> - <li><a href="functions.html"><span>All</span></a></li> - <li><a href="functions_func.html"><span>Functions</span></a></li> - <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li> - </ul> - </div> -</div><!-- top --> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div class="contents"> - <ul> -<li>col -: <a class="el" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">zen::XmlParsingError</a> -</li> -<li>lastError -: <a class="el" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">zen::XmlFileError</a> -</li> -<li>row -: <a class="el" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">zen::XmlParsingError</a> -</li> -</ul> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/hierarchy.html b/zenxml/doc/hierarchy.html deleted file mode 100644 index 4e1b2175..00000000 --- a/zenxml/doc/hierarchy.html +++ /dev/null @@ -1,109 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Class Hierarchy</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li class="current"><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -</div><!-- top --> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div class="header"> - <div class="headertitle"> -<div class="title">Class Hierarchy</div> </div> -</div><!--header--> -<div class="contents"> -<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory"> -<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory"> -<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_doc.html" target="_self">zen::XmlDoc</a></td><td class="desc">The complete XML document </td></tr> -<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_element.html" target="_self">zen::XmlElement</a></td><td class="desc">An XML element </td></tr> -<tr id="row_2_" class="even"><td class="entry"><img id="arr_2_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structzen_1_1_xml_error.html" target="_self">zen::XmlError</a></td><td class="desc">Exception base class for zen::Xml </td></tr> -<tr id="row_2_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structzen_1_1_xml_file_error.html" target="_self">zen::XmlFileError</a></td><td class="desc">Exception thrown due to failed file I/O </td></tr> -<tr id="row_2_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structzen_1_1_xml_parsing_error.html" target="_self">zen::XmlParsingError</a></td><td class="desc">Exception thrown due to an XML parsing error </td></tr> -<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_in.html" target="_self">zen::XmlIn</a></td><td class="desc">Proxy class to conveniently convert XML structure to user data </td></tr> -<tr id="row_4_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_out.html" target="_self">zen::XmlOut</a></td><td class="desc">Proxy class to conveniently convert user data into XML structure </td></tr> -</table> -</div><!-- directory --> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/index.html b/zenxml/doc/index.html deleted file mode 100644 index 1549b9f2..00000000 --- a/zenxml/doc/index.html +++ /dev/null @@ -1,654 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Overview</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li class="current"><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> -</div><!-- top --> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div class="header"> - <div class="headertitle"> -<div class="title">Overview </div> </div> -</div><!--header--> -<div class="contents"> -<div class="textblock"><ul> -<li><a class="el" href="index.html#sec_Rationale">Rationale</a> </li> -<li><a class="el" href="index.html#sec_Quick_Start">Quick Start</a> </li> -<li><a class="el" href="index.html#sec_Supported_Platforms">Supported Platforms</a> </li> -<li><a class="el" href="index.html#sec_Flexible_Programming_Model">Flexible Programming Model</a> </li> -<li><a class="el" href="index.html#sec_Structured_XML_element_access">Structured XML element access</a> </li> -<li><a class="el" href="index.html#sec_Access_XML_attributes">Access XML attributes</a> </li> -<li><a class="el" href="index.html#sec_Automatic_conversion_built_in">Automatic conversion for built-in arithmetic types</a> </li> -<li><a class="el" href="index.html#sec_Automatic_conversion_string">Automatic conversion for string-like types</a> </li> -<li><a class="el" href="index.html#sec_Automatic_conversion_STL">Automatic conversion for STL container types</a> </li> -<li><a class="el" href="index.html#sec_Support_user_defined">Support for user-defined types</a> </li> -<li><a class="el" href="index.html#sec_Structured_user_types">Structured user types</a> </li> -<li><a class="el" href="index.html#sec_Type_Safety">Type Safety</a></li> -</ul> -<h1><a class="anchor" id="sec_Rationale"></a> -Rationale</h1> -<p>zen::Xml is an XML library serializing structured user data in a convenient way. Using compile-time information gathered by techniques of template metaprogramming it minimizes the manual overhead required and frees the user from implementing fundamental type conversions by himself. Basic data types such as</p> -<ul> -<li><b>all</b> built-in arithmetic numbers,</li> -<li><b>all</b> kinds of string classes and "string-like" types,</li> -<li><b>all</b> types defined as STL containers</li> -</ul> -<p>are handled automatically. Thereby a large number of recurring problems is solved by the library:</p> -<ul> -<li>generic number to string conversions</li> -<li>generic char to wchar_t conversions (UTF) for custom string classes in a platform independent manner</li> -<li>serialization of arbitrary STL container types</li> -<li>simple integration: header-only, no extra dependencies, fully portable</li> -<li>support arbitrary string classes everywhere: for file names, XML element names, attribute names, values, ...</li> -<li>XML library built on C++11 with focus on elegance, minimal code size, flexibility and performance</li> -<li>easily extensible API: allow for internationalization, fine-granular error handling, and custom file I/O</li> -</ul> -<p>The design follows the philosophy of the Loki library: <br/> -<a href="http://loki-lib.sourceforge.net/index.php?n=Main.Philosophy">http://loki-lib.sourceforge.net/index.php?n=Main.Philosophy</a></p> -<h1><a class="anchor" id="sec_Quick_Start"></a> -Quick Start</h1> -<p>1. Download zen::Xml: <a href="http://sourceforge.net/projects/zenxml">http://sourceforge.net/projects/zenxml</a></p> -<p>2. Setup one of the following preprocessor macros for your project to identify the platform (this is only required if you use C-stream-based file IO) </p> -<div class="fragment"><div class="line">ZEN_WIN</div> -<div class="line">ZEN_LINUX </div> -<div class="line">ZEN_MAC</div> -</div><!-- fragment --><p>3. For optimal performance define this global macro in release build: (following convention of the <code>assert</code> macro) </p> -<div class="fragment"><div class="line">NDEBUG</div> -</div><!-- fragment --><p>4. Include the main header: </p> -<div class="fragment"><div class="line"><span class="preprocessor">#include <zenxml/xml.h></span></div> -</div><!-- fragment --><p>5. Start serializing user data:</p> -<div class="fragment"><div class="line"><span class="keywordtype">size_t</span> a = 10;</div> -<div class="line"><span class="keywordtype">double</span> b = 2.0;</div> -<div class="line"><span class="keywordtype">int</span> c = -1;</div> -</div><!-- fragment --><div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc; <span class="comment">//empty XML document</span></div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc); <span class="comment">//the simplest way to fill the document is to use a data output proxy</span></div> -<div class="line">out[<span class="stringliteral">"elem1"</span>](a); <span class="comment">//</span></div> -<div class="line">out[<span class="stringliteral">"elem2"</span>](b); <span class="comment">//map data types to XML elements</span></div> -<div class="line">out[<span class="stringliteral">"elem3"</span>](c); <span class="comment">//</span></div> -<div class="line"></div> -<div class="line"><span class="keywordflow">try</span></div> -<div class="line">{</div> -<div class="line"> <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(doc, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw zen::XmlFileError</span></div> -<div class="line">}</div> -<div class="line"><span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a>& e) { <span class="comment">/* handle error */</span> }</div> -</div><!-- fragment --><p>The following XML file will be created: </p> -<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> -<Root> - <elem1>10</elem1> - <elem2>2.000000</elem2> - <elem3>-1</elem3> -</Root> -</pre><p>Load an XML file and map its content to user data: </p> -<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc; <span class="comment">//empty XML document</span></div> -<div class="line"></div> -<div class="line"><span class="keywordflow">try</span></div> -<div class="line">{</div> -<div class="line"> <a class="code" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">load</a>(<span class="stringliteral">"file.xml"</span>, doc); <span class="comment">//throw XmlFileError, XmlParsingError</span></div> -<div class="line">}</div> -<div class="line"><span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structzen_1_1_xml_error.html">zen::XmlError</a>& e) { <span class="comment">/* handle error */</span> }</div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> in(doc); <span class="comment">//the simplest way to read the document is to use a data input proxy</span></div> -<div class="line">in[<span class="stringliteral">"elem1"</span>](a); <span class="comment">//</span></div> -<div class="line">in[<span class="stringliteral">"elem2"</span>](b); <span class="comment">//map XML elements into user data</span></div> -<div class="line">in[<span class="stringliteral">"elem3"</span>](c); <span class="comment">//</span></div> -<div class="line"></div> -<div class="line"><span class="comment">//check for mapping errors, i.e. missing elements or conversion errors: you may consider these as warnings only</span></div> -<div class="line"><span class="keywordflow">if</span> (in.errorsOccured())</div> -<div class="line">{</div> -<div class="line"> std::vector<std::wstring> failedElements = in.getErrorsAs<std::wstring>();</div> -<div class="line"> <span class="comment">/* generate error message showing the XML element names that failed to convert */</span></div> -<div class="line">}</div> -</div><!-- fragment --><h1><a class="anchor" id="sec_Supported_Platforms"></a> -Supported Platforms</h1> -<p>zen::Xml is written in a platform independent manner and runs on any rudimentary C++11 compliant compiler. It has been tested successfully under:</p> -<ul> -<li>Windows:<ol type="1"> -<li>Visual C++ 2010 - 32 bit</li> -<li>Visual C++ 2010 - 64 bit</li> -<li>MinGW: GCC 4.5.2 - 32 bit</li> -</ol> -</li> -<li>Linux:<ol type="1"> -<li>GCC 4.5.2 - 32 bit</li> -<li>GCC 4.5.2 - 64 bit</li> -</ol> -</li> -<li>Mac OS X:<ol type="1"> -<li>Clang 3.2 - 64 bit</li> -</ol> -</li> -</ul> -<p><b>Note:</b> In order to enable C++11 features in GCC it is required to specify either of the following compiler options: </p> -<pre class="fragment">-std=c++11 --std=c++0x --std=gnu++0x -</pre><h1><a class="anchor" id="sec_Flexible_Programming_Model"></a> -Flexible Programming Model</h1> -<p>Depending on what granularity of control is required in a particular application, zen::Xml allows the user to choose between full control or simplicity. <br/> -<br/> -The library is structured into the following parts, each of which can be used in isolation: <br/> -<br/> -<b><File></b> <br/> -|<br/> -| <a class="el" href="io_8h_source.html" title="Save and load byte streams from files. ">io.h</a><br/> -|<br/> -<b><Byte Stream></b><br/> -|<br/> -| <a class="el" href="parser_8h_source.html" title="Convert an XML document object model (class XmlDoc) to and from a byte stream representation. ">parser.h</a><br/> -|<br/> -<b><Document Object Model></b><br/> -|<br/> -| <a class="el" href="bind_8h_source.html" title="Map user data types to XML. ">bind.h</a><br/> -|<br/> -<b><C++ user data></b> <br/> -<br/> -</p> -<ul> -<li>Save an XML document to memory <div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> -<div class="line"> ... <span class="comment">//fill it</span></div> -<div class="line">std::string stream = <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(doc); <span class="comment">//throw ()</span></div> -<div class="line"><span class="comment">/* you now have a binary XML stream */</span></div> -<div class="line"></div> -<div class="line"><a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">saveStream</a>(stream, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span></div> -<div class="line"><span class="comment">//if all you need is to store XmlDoc in a file direcly you can use zen::save() instead</span></div> -</div><!-- fragment --></li> -<li>Load XML document from memory <div class="fragment"><div class="line"><span class="comment">//get XML byte stream:</span></div> -<div class="line">std::string stream = <a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">loadStream</a>(<span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span></div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> -<div class="line"><span class="comment">//parse byte stream into an XML document:</span></div> -<div class="line"><a class="code" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">parse</a>(stream, doc); <span class="comment">//throw XmlParsingError</span></div> -<div class="line"><span class="comment">//if all you need is to load an XmlDoc from a file you can use zen::load() directly</span></div> -</div><!-- fragment --></li> -<li>Fine-granular error checking with the data input proxy <div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> in(doc);</div> -<div class="line"><span class="comment">//map XML elements into user data</span></div> -<div class="line"><span class="keywordflow">if</span> (!in[<span class="stringliteral">"elem1"</span>](a))</div> -<div class="line"> <span class="keywordflow">throw</span> MyCustomException();</div> -<div class="line"><span class="keywordflow">if</span> (!in[<span class="stringliteral">"elem2"</span>](b))</div> -<div class="line"> <span class="keywordflow">throw</span> MyCustomException();</div> -<div class="line"><span class="keywordflow">if</span> (!in[<span class="stringliteral">"elem3"</span>](c))</div> -<div class="line"> <span class="keywordflow">throw</span> MyCustomException();</div> -<div class="line"></div> -<div class="line"><span class="comment">//if (in.errorsOccured()) ... <- not required here: contains the same conversion errors checked manually before</span></div> -</div><!-- fragment --></li> -<li>Access the Document Object Model directly (without input/output proxy) <br/> -<br/> -The full power of type conversions which is available via the input/output proxy classes <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data. ">zen::XmlIn</a> and <a class="el" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure. ">zen::XmlOut</a> is also available for the document object model! <div class="fragment"><div class="line"><span class="keyword">using namespace </span>zen;</div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a> doc;</div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& child = doc.<a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a>().<a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a>(<span class="stringliteral">"elem1"</span>);</div> -<div class="line">child.<a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">setValue</a>(1234);</div> -<div class="line"></div> -<div class="line"><a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(doc, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span></div> -</div><!-- fragment --> <br/> -<div class="fragment"><div class="line"><span class="keyword">using namespace </span>zen;</div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a> doc;</div> -<div class="line"><a class="code" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">load</a>(<span class="stringliteral">"file.xml"</span>, doc); <span class="comment">//throw XmlFileError, XmlParsingError</span></div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* child = doc.<a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a>().<a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a>(<span class="stringliteral">"elem1"</span>);</div> -<div class="line"><span class="keywordflow">if</span> (child)</div> -<div class="line">{</div> -<div class="line"> <span class="keywordtype">int</span> value = -1;</div> -<div class="line"> <span class="keywordflow">if</span> (!child->getValue(value))</div> -<div class="line"> ... <span class="comment">//handle conversion error</span></div> -<div class="line">}</div> -<div class="line"><span class="keywordflow">else</span></div> -<div class="line"> ... <span class="comment">//XML element not found</span></div> -</div><!-- fragment --></li> -</ul> -<h1><a class="anchor" id="sec_Structured_XML_element_access"></a> -Structured XML element access</h1> -<div class="fragment"><div class="line"><span class="comment">//write a value into one deeply nested XML element - note the different types used seamlessly: char[], wchar_t[], char, wchar_t, int</span></div> -<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> -<div class="line">out[<span class="stringliteral">"elemento1"</span>][L<span class="stringliteral">"элемент2"</span>][L<span class="stringliteral">"要素3"</span>][L<span class="stringliteral">"στοιχείο4"</span>][<span class="stringliteral">"elem5"</span>][L<span class="stringliteral">"元素6"</span>][L<span class="stringliteral">'元'</span>][<span class="charliteral">'z'</span>](-1234);</div> -</div><!-- fragment --><p>The resulting XML: </p> -<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> -<Root> - <elemento1> - <элемент2> - <要素3> - <στοιχείο4> - <elem5> - <元素6> - <元> - <z>-1234</z> - </元> - </元素6> - </elem5> - </στοιχείο4> - </要素3> - </элемент2> - </elemento1> -</Root> -</pre><h1><a class="anchor" id="sec_Access_XML_attributes"></a> -Access XML attributes</h1> -<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> -<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr1"</span>, -1); <span class="comment">//</span></div> -<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr2"</span>, 2.1); <span class="comment">//write data into XML attributes</span></div> -<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr3"</span>, <span class="keyword">true</span>); <span class="comment">//</span></div> -<div class="line"></div> -<div class="line"><a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(doc, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span></div> -</div><!-- fragment --><p>The resulting XML: </p> -<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> -<Root> - <elem attr1="-1" attr2="2.1" attr3="true"/> -</Root> -</pre><h1><a class="anchor" id="sec_Automatic_conversion_built_in"></a> -Automatic conversion for built-in arithmetic types</h1> -<p>All built-in arithmetic types and <code>bool</code> are detected at compile time and a proper conversion is applied. Common conversions for integer-like types such as <code>int</code>, <code>long</code>, <code>long long</code>, ect. as well as floating point types are optimized for maximum performance.</p> -<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> -<div class="line"></div> -<div class="line">out[<span class="stringliteral">"int"</span>] (-1234);</div> -<div class="line">out[<span class="stringliteral">"double"</span>](1.23);</div> -<div class="line">out[<span class="stringliteral">"float"</span>] (4.56f);</div> -<div class="line">out[<span class="stringliteral">"ulong"</span>] (1234UL);</div> -<div class="line">out[<span class="stringliteral">"bool"</span>] (<span class="keyword">false</span>);</div> -</div><!-- fragment --><p>The resulting XML: </p> -<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> -<Root> - <int>-1234</int> - <double>1.23</double> - <float>4.56</float> - <ulong>1234</ulong> - <bool>false</bool> -</Root> -</pre><h1><a class="anchor" id="sec_Automatic_conversion_string"></a> -Automatic conversion for string-like types</h1> -<p>The document object model of zen::Xml internally stores all names and values as a std::string. Consequently everything that is not a std::string but is "string-like" is UTF-converted into a std::string representation. By default zen::Xml accepts all character arrays like <code>char[]</code>, <code>wchar_t[]</code>, <code>char*</code>, <code>wchar_t*</code>, single characters like <code>char</code>, <code>wchar_t</code>, standard string classes like <code>std::string</code>, <code>std::wstring</code> and user-defined string classes. If the input string is based on <code>char</code>, it will simply be copied and thereby preserves any local encodings. If the input string is based on <code>wchar_t</code> it will be converted to an UTF-8 encoded <code>std::string</code>. The correct <code>wchar_t</code> encoding of the system will be detected at compile time, for example UTF-16 on Windows, UTF-32 on most Linux distributions.</p> -<p><b>Note:</b> User-defined string classes are automatically supported if they fulfill the following <b>string concept</b> by defining:</p> -<ol type="1"> -<li>A typedef named <code>value_type</code> for the underlying character type: must be <code>char</code> or <code>wchar_t</code> </li> -<li>A member function <code>c_str()</code> returning something that can be converted into a <code>const value_type*</code></li> -<li>A member function <code>length()</code> returning the number of characters returned by <code>c_str()</code></li> -</ol> -<div class="fragment"><div class="line">std::string elem1 = <span class="stringliteral">"elemento1"</span>;</div> -<div class="line">std::wstring elem2 = L<span class="stringliteral">"элемент2"</span>;</div> -<div class="line">wxString elem3 = L<span class="stringliteral">"要素3"</span>;</div> -<div class="line">MyString elem4 = L<span class="stringliteral">"στοιχείο4"</span>;</div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> -<div class="line"></div> -<div class="line">out[<span class="stringliteral">"string"</span>] (elem1);</div> -<div class="line">out[<span class="stringliteral">"wstring"</span>] (elem2);</div> -<div class="line">out[<span class="stringliteral">"wxString"</span>] (elem3);</div> -<div class="line">out[<span class="stringliteral">"MyString"</span>] (elem4);</div> -<div class="line">out[<span class="stringliteral">"char[6]"</span>] (<span class="stringliteral">"elem5"</span>);</div> -<div class="line">out[<span class="stringliteral">"wchar_t[4]"</span>](L<span class="stringliteral">"元素6"</span>);</div> -<div class="line">out[<span class="stringliteral">"wchar_t"</span>] (L<span class="stringliteral">'元'</span>);</div> -<div class="line">out[<span class="stringliteral">"char"</span>] (<span class="charliteral">'z'</span>);</div> -</div><!-- fragment --><p>The resulting XML: </p> -<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> -<Root> - <string>elemento1</string> - <wstring>элемент2</wstring> - <wxString>要素3</wxString> - <MyString>στοιχείο4</MyString> - <char[6]>elem5</char[6]> - <wchar_t[4]>元素6</wchar_t[4]> - <wchar_t>元</wchar_t> - <char>z</char> -</Root> -</pre><h1><a class="anchor" id="sec_Automatic_conversion_STL"></a> -Automatic conversion for STL container types</h1> -<ul> -<li>User-defined STL compatible types are automatically supported if they fulfill the following <b>container concept</b> by defining:<ol type="1"> -<li>A typedef named <code>value_type</code> for the underlying element type of the container</li> -<li>A typedef named <code>iterator</code> for a non-const iterator into the container</li> -<li>A typedef named <code>const_iterator</code> for a const iterator into the container <br/> -<br/> -</li> -<li>A member function <code>begin()</code> returning an iterator pointing to the first element in the container</li> -<li>A member function <code>end()</code> returning an iterator pointing just after the last element in the container</li> -<li>A member function <code>insert()</code> with the signature <code>iterator insert(iterator position, const value_type& x)</code></li> -<li>A member function <code>clear()</code> removing all elements from the container</li> -</ol> -</li> -<li>In order to support combinations of user types and STL containers such as <code>std::vector<MyType></code> or <code>std::vector<std::list<MyType>></code> it is sufficient to only integrate <code>MyType</code> into zen::Xml. <br/> -See <a class="el" href="index.html#sec_Support_user_defined">Support for user-defined types</a></li> -</ul> -<div class="fragment"><div class="line">std::deque <float> testDeque;</div> -<div class="line">std::list <size_t> testList;</div> -<div class="line">std::map <double, char> testMap;</div> -<div class="line">std::multimap<short, double> testMultiMap;</div> -<div class="line">std::set <int> testSet;</div> -<div class="line">std::multiset<std::string> testMultiSet;</div> -<div class="line">std::vector <wchar_t> testVector;</div> -<div class="line">std::vector <std::list<wchar_t>> testVectorList;</div> -<div class="line">std::pair <char, wchar_t> testPair;</div> -<div class="line"></div> -<div class="line"><span class="comment">/* fill container */</span></div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> -<div class="line"></div> -<div class="line">out[<span class="stringliteral">"deque"</span>] (testDeque);</div> -<div class="line">out[<span class="stringliteral">"list"</span>] (testList);</div> -<div class="line">out[<span class="stringliteral">"map"</span>] (testMap);</div> -<div class="line">out[<span class="stringliteral">"multimap"</span>] (testMultiMap);</div> -<div class="line">out[<span class="stringliteral">"set"</span>] (testSet);</div> -<div class="line">out[<span class="stringliteral">"multiset"</span>] (testMultiSet);</div> -<div class="line">out[<span class="stringliteral">"vector"</span>] (testVector);</div> -<div class="line">out[<span class="stringliteral">"vect_list"</span>](testVectorList);</div> -<div class="line">out[<span class="stringliteral">"pair"</span> ] (testPair);</div> -</div><!-- fragment --><p>The resulting XML: </p> -<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> -<Root> - <deque> - <Item>1.234</Item> - <Item>5.678</Item> - </deque> - <list> - <Item>1</Item> - <Item>2</Item> - </list> - <map> - <Item> - <one>1.1</one> - <two>a</two> - </Item> - <Item> - <one>2.2</one> - <two>b</two> - </Item> - </map> - <multimap> - <Item> - <one>3</one> - <two>99</two> - </Item> - <Item> - <one>3</one> - <two>100</two> - </Item> - <Item> - <one>4</one> - <two>101</two> - </Item> - </multimap> - <set> - <Item>1</Item> - <Item>2</Item> - </set> - <multiset> - <Item>1</Item> - <Item>1</Item> - <Item>2</Item> - </multiset> - <vector> - <Item>Ä</Item> - <Item>Ö</Item> - </vector> - <vect_list> - <Item> - <Item>ä</Item> - <Item>ö</Item> - <Item>ü</Item> - </Item> - <Item> - <Item>ä</Item> - <Item>ö</Item> - <Item>ü</Item> - </Item> - </vect_list> - <pair> - <one>a</one> - <two>â</two> - </pair> -</Root> -</pre><h1><a class="anchor" id="sec_Support_user_defined"></a> -Support for user-defined types</h1> -<p>User types can be integrated into zen::Xml by providing specializations of <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes. ">zen::readText()</a> and <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes. ">zen::writeText()</a> or <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data. ">zen::readStruc()</a> and <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element. ">zen::writeStruc()</a>. The first pair should be used for all non-structured types that can be represented as a simple text string. This specialization is then used to convert the type to XML elements and XML attributes. The second pair should be specialized for structured types that require an XML representation as a hierarchy of elements. This specialization is used when converting the type to XML elements only. <br/> -<br/> -See section <a class="el" href="index.html#sec_Type_Safety">Type Safety</a> for a discussion of type categories. <br/> -<br/> -<b>Example: Specialization for an enum type</b> </p> -<div class="fragment"><div class="line"><span class="keyword">enum</span> UnitTime</div> -<div class="line">{</div> -<div class="line"> UNIT_SECOND,</div> -<div class="line"> UNIT_MINUTE,</div> -<div class="line"> UNIT_HOUR</div> -<div class="line">};</div> -<div class="line"></div> -<div class="line"><span class="keyword">namespace </span>zen</div> -<div class="line">{</div> -<div class="line"><span class="keyword">template</span> <> <span class="keyword">inline</span></div> -<div class="line"><span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keyword">const</span> UnitTime& value, std::string& output)</div> -<div class="line">{</div> -<div class="line"> <span class="keywordflow">switch</span> (value)</div> -<div class="line"> {</div> -<div class="line"> <span class="keywordflow">case</span> UNIT_SECOND: output = <span class="stringliteral">"second"</span>; <span class="keywordflow">break</span>;</div> -<div class="line"> <span class="keywordflow">case</span> UNIT_MINUTE: output = <span class="stringliteral">"minute"</span>; <span class="keywordflow">break</span>;</div> -<div class="line"> <span class="keywordflow">case</span> UNIT_HOUR: output = <span class="stringliteral">"hour"</span> ; <span class="keywordflow">break</span>;</div> -<div class="line"> }</div> -<div class="line">}</div> -<div class="line"></div> -<div class="line"><span class="keyword">template</span> <> <span class="keyword">inline</span></div> -<div class="line"><span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, UnitTime& value)</div> -<div class="line">{</div> -<div class="line"> std::string tmp = input;</div> -<div class="line"> zen::trim(tmp);</div> -<div class="line"> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"second"</span>)</div> -<div class="line"> value = UNIT_SECOND;</div> -<div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"minute"</span>)</div> -<div class="line"> value = UNIT_MINUTE;</div> -<div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"hour"</span>)</div> -<div class="line"> value = UNIT_HOUR;</div> -<div class="line"> <span class="keywordflow">else</span></div> -<div class="line"> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> -<div class="line"> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> -<div class="line">}</div> -<div class="line">}</div> -</div><!-- fragment --><p><b>Example: Brute-force specialization for an enum type</b> </p> -<div class="fragment"><div class="line"><span class="keyword">namespace </span>zen</div> -<div class="line">{</div> -<div class="line"><span class="keyword">template</span> <> <span class="keyword">inline</span></div> -<div class="line"><span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keyword">const</span> EnumType& value, std::string& output)</div> -<div class="line">{</div> -<div class="line"> output = zen::numberTo<std::string>(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(value)); <span class="comment">//treat enum like an integer</span></div> -<div class="line">}</div> -<div class="line"></div> -<div class="line"><span class="keyword">template</span> <> <span class="keyword">inline</span></div> -<div class="line"><span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, EnumType& value)</div> -<div class="line">{</div> -<div class="line"> value = <span class="keyword">static_cast<</span>EnumType<span class="keyword">></span>(zen::stringTo<int>(input)); <span class="comment">//treat enum like an integer</span></div> -<div class="line"> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> -<div class="line">}</div> -<div class="line">}</div> -</div><!-- fragment --><p><b>Example: Specialization for a structured user type</b> </p> -<div class="fragment"><div class="line"><span class="keyword">struct </span>Config</div> -<div class="line">{</div> -<div class="line"> <span class="keywordtype">int</span> a;</div> -<div class="line"> std::wstring b;</div> -<div class="line">};</div> -<div class="line"></div> -<div class="line"><span class="keyword">namespace </span>zen</div> -<div class="line">{</div> -<div class="line"><span class="keyword">template</span> <> <span class="keyword">inline</span></div> -<div class="line"><span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(<span class="keyword">const</span> Config& value, XmlElement& output)</div> -<div class="line">{</div> -<div class="line"> XmlOut out(output);</div> -<div class="line"> out[<span class="stringliteral">"number"</span> ](value.a);</div> -<div class="line"> out[<span class="stringliteral">"address"</span>](value.b);</div> -<div class="line">}</div> -<div class="line"></div> -<div class="line"><span class="keyword">template</span> <> <span class="keyword">inline</span></div> -<div class="line"><span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(<span class="keyword">const</span> XmlElement& input, Config& value)</div> -<div class="line">{</div> -<div class="line"> XmlIn in(input);</div> -<div class="line"> <span class="keywordtype">bool</span> rv1 = in[<span class="stringliteral">"number"</span> ](value.a);</div> -<div class="line"> <span class="keywordtype">bool</span> rv2 = in[<span class="stringliteral">"address"</span>](value.b);</div> -<div class="line"> <span class="keywordflow">return</span> rv1 && rv2;</div> -<div class="line">}</div> -<div class="line">}</div> -<div class="line"></div> -<div class="line"><span class="keywordtype">int</span> main()</div> -<div class="line">{</div> -<div class="line"> Config cfg = { 2, L<span class="stringliteral">"Abc 3"</span> };</div> -<div class="line"></div> -<div class="line"> std::vector<Config> cfgList;</div> -<div class="line"> cfgList.push_back(cfg);</div> -<div class="line"></div> -<div class="line"> <a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> -<div class="line"> <a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc); <span class="comment">//write to Xml via output proxy</span></div> -<div class="line"> out[<span class="stringliteral">"config"</span>](cfgList);</div> -<div class="line"> <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(doc, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span></div> -<div class="line">}</div> -</div><!-- fragment --><p>The resulting XML: </p> -<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> -<Root> - <config> - <Item> - <number>2</number> - <address>Abc 3</address> - </Item> - </config> -</Root> -</pre><h1><a class="anchor" id="sec_Structured_user_types"></a> -Structured user types</h1> -<p>Although it is possible to enable conversion of structured user types by specializing <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data. ">zen::readStruc()</a> and <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element. ">zen::writeStruc()</a> (see <a class="el" href="index.html#sec_Support_user_defined">Support for user-defined types</a>), this approach has one drawback: If a mapping error occurs when converting an XML element to structured user data, for example a child-element is missing, the input proxy class <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data. ">zen::XmlIn</a> is only able to detect that the whole conversion failed. It cannot say which child-elements in particular failed to convert. <br/> -<br/> -Therefore it may be appropriate to convert structured types by calling subroutines in order to enable fine-granular logging:</p> -<div class="fragment"><div class="line"><span class="keywordtype">void</span> readConfig(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a>& in, Config& cfg)</div> -<div class="line">{</div> -<div class="line"> in[<span class="stringliteral">"number"</span> ](value.a); <span class="comment">//failed conversions will now be logged for each single item by XmlIn</span></div> -<div class="line"> in[<span class="stringliteral">"address"</span>](value.b); <span class="comment">//instead of only once for the complete Config type!</span></div> -<div class="line">}</div> -<div class="line"></div> -<div class="line"></div> -<div class="line"><span class="keywordtype">void</span> loadConfig(<span class="keyword">const</span> wxString& filename, Config& cfg)</div> -<div class="line">{</div> -<div class="line"> <a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc; <span class="comment">//empty XML document</span></div> -<div class="line"></div> -<div class="line"> <span class="keywordflow">try</span></div> -<div class="line"> {</div> -<div class="line"> <a class="code" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">load</a>(filename, doc); <span class="comment">//throw XmlFileError, XmlParsingError</span></div> -<div class="line"> }</div> -<div class="line"> <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structzen_1_1_xml_error.html">zen::XmlError</a>& e) { <span class="comment">/* handle error */</span> }</div> -<div class="line"></div> -<div class="line"> <a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> in(doc); </div> -<div class="line"> </div> -<div class="line"> <a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> inConfig = in[<span class="stringliteral">"config"</span>]; <span class="comment">//get input proxy for child element "config"</span></div> -<div class="line"> </div> -<div class="line"> readConfig(inConfig, cfg); <span class="comment">//map child element to user data by calling subroutine</span></div> -<div class="line"></div> -<div class="line"> <span class="comment">//check for mapping errors: errors occuring in subroutines are considered, too!</span></div> -<div class="line"> <span class="keywordflow">if</span> (in.errorsOccured())</div> -<div class="line"> <span class="comment">/* show mapping errors */</span></div> -<div class="line">}</div> -</div><!-- fragment --><h1><a class="anchor" id="sec_Type_Safety"></a> -Type Safety</h1> -<p>zen::Xml heavily uses methods of compile-time introspection in order to free the user from managing basic type conversions by himself. Thereby it is important to find the right balance between automatic conversions and type safety so that program correctness is not compromised. In the context of XML processing three fundamental type categories can be recognized:</p> -<ul> -<li><b>string-like types</b>: <code>std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ...</code></li> -<li><b>to-string-convertible types</b>: any string-like type, all built-in arithmetic numbers, <code>bool</code></li> -<li><b>structured types</b>: any to-string-convertible type, STL containers, <code>std::pair</code>, structured user types</li> -</ul> -<p>These categories can be seen as a sequence of inclusive sets: </p> -<pre class="fragment">----------------------------- -| structured | Used as: XML element value -| ------------------------- | Conversion via: readStruc(), writeStruc() - may be specialized for user-defined types! -| | to-string-convertible | | Used as: XML element/attribute value -| | --------------- | | Conversion via: readText(), writeText() - may be specialized for user-defined types! -| | | string-like | | | Used as: XML element/attribute value or element name -| | --------------- | | Conversion via: utfCvrtTo<>() -| ------------------------- | ------------------------------ -</pre><p>A practical implication of this design is that conversions that do not make sense in a particular context simply lead to compile-time errors: </p> -<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> -<div class="line">out[L<span class="charliteral">'Z'</span>](someValue); <span class="comment">//fine: a wchar_t is acceptable as an element name</span></div> -<div class="line">out[1234](someValue); <span class="comment">//compiler error: an integer is NOT "string-like"!</span></div> -</div><!-- fragment --><p> <br/> -</p> -<div class="fragment"><div class="line"><span class="keywordtype">int</span> i = 0;</div> -<div class="line">std::vector<int> v;</div> -<div class="line"></div> -<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> -<div class="line">out[<span class="stringliteral">"elem1"</span>](i); <span class="comment">//fine: both i and v can be converted to an XML element</span></div> -<div class="line">out[<span class="stringliteral">"elem2"</span>](v); <span class="comment">//</span></div> -<div class="line"></div> -<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr1"</span>, i); <span class="comment">//fine: an integer can be converted to an XML attribute</span></div> -<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr2"</span>, v); <span class="comment">//compiler error: a std::vector<int> is NOT "to-string-convertible"!</span></div> -</div><!-- fragment --><dl class="section author"><dt>Author</dt><dd><b>Zenju</b> <br/> -<br/> - <b>Email:</b> zenju AT gmx DOT de </dd></dl> -</div></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/io_8h_source.html b/zenxml/doc/io_8h_source.html deleted file mode 100644 index 825df7ca..00000000 --- a/zenxml/doc/io_8h_source.html +++ /dev/null @@ -1,205 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: io.h Source File</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">io.h</div> </div> -</div><!--header--> -<div class="contents"> -<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> -<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> -<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> -<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> -<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_IO_HEADER_8917640501480763248343343</span></div> -<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_IO_HEADER_8917640501480763248343343</span></div> -<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> -<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <cstdio></span></div> -<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <cerrno></span></div> -<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <zen/scope_guard.h></span></div> -<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <zen/utf.h></span></div> -<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "error.h"</span></div> -<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div> -<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">namespace </span>zen</div> -<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div> -<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#if !defined(ZEN_WIN) && !defined(ZEN_LINUX) && !defined(ZEN_MAC)</span></div> -<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"></span><span class="preprocessor">#error Please specify your platform: #define ZEN_WIN, ZEN_LINUX or ZEN_MAC</span></div> -<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div> -<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span></div> -<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div> -<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="structzen_1_1_xml_file_error.html"> 29</a></span> <span class="keyword">struct </span><a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a> : <span class="keyword">public</span> <a class="code" href="structzen_1_1_xml_error.html">XmlError</a></div> -<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div> -<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">typedef</span> <span class="keywordtype">int</span> ErrorCode;</div> -<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div> -<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">explicit</span> <a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a>(ErrorCode ec) : <a class="code" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">lastError</a>(ec) {}</div> -<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f"> 35</a></span>  ErrorCode <a class="code" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">lastError</a>;</div> -<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> };</div> -<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div> -<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div> -<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#ifdef ZEN_WIN</span></div> -<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"></span><span class="keyword">namespace </span>implemenation <span class="comment">//sad but true</span></div> -<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div> -<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">template</span> <<span class="keyword">class</span> String> <span class="keyword">inline</span></div> -<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> FILE* fopen(<span class="keyword">const</span> String& filename, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* mode)</div> -<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div> -<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#ifdef _MSC_VER</span></div> -<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"></span> FILE* handle = <span class="keyword">nullptr</span>;</div> -<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  errno_t rv = ::_wfopen_s(&handle, utfCvrtTo<std::wstring>(filename).c_str(), mode); <span class="comment">//more secure?</span></div> -<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  (void)rv;</div> -<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> handle;</div> -<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#else</span></div> -<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"></span> return ::_wfopen(utfCvrtTo<std::wstring>(filename).c_str(), mode);</div> -<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#endif</span></div> -<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor"></span>}</div> -<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</div> -<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#endif</span></div> -<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"></span></div> -<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div> -<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div> -<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2"> 66</a></span> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">saveStream</a>(<span class="keyword">const</span> std::string& stream, <span class="keyword">const</span> String& filename) <span class="comment">//throw XmlFileError</span></div> -<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div> -<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#ifdef ZEN_WIN</span></div> -<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor"></span> FILE* handle = implemenation::fopen(utfCvrtTo<std::wstring>(filename).c_str(), L<span class="stringliteral">"wb"</span>);</div> -<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#else</span></div> -<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"></span> FILE* handle = ::fopen(utfCvrtTo<std::string>(filename).c_str(), <span class="stringliteral">"w"</span>);</div> -<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#endif</span></div> -<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"></span> <span class="keywordflow">if</span> (handle == <span class="keyword">nullptr</span>)</div> -<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a>(errno);</div> -<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  ZEN_ON_SCOPE_EXIT(::fclose(handle));</div> -<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div> -<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> bytesWritten = ::fwrite(stream.c_str(), 1, stream.size(), handle);</div> -<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">if</span> (::ferror(handle) != 0)</div> -<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a>(errno);</div> -<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div> -<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  (void)bytesWritten;</div> -<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  assert(bytesWritten == stream.size());</div> -<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div> -<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div> -<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div> -<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div> -<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">template</span> <<span class="keyword">class</span> String></div> -<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607"> 94</a></span> std::string <a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">loadStream</a>(<span class="keyword">const</span> String& filename) <span class="comment">//throw XmlFileError</span></div> -<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> {</div> -<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor">#ifdef ZEN_WIN</span></div> -<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor"></span> FILE* handle = implemenation::fopen(utfCvrtTo<std::wstring>(filename).c_str(), L<span class="stringliteral">"rb"</span>);</div> -<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">#else</span></div> -<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor"></span> FILE* handle = ::fopen(utfCvrtTo<std::string>(filename).c_str(), <span class="stringliteral">"r"</span>);</div> -<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor">#endif</span></div> -<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"></span> <span class="keywordflow">if</span> (handle == <span class="keyword">nullptr</span>)</div> -<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a>(errno);</div> -<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  ZEN_ON_SCOPE_EXIT(::fclose(handle));</div> -<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div> -<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  std::string stream;</div> -<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockSize = 64 * 1024;</div> -<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">do</span></div> -<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  {</div> -<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  stream.resize(stream.size() + blockSize); <span class="comment">//let's pray std::string implements exponential growth!</span></div> -<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div> -<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> bytesRead = ::fread(&*(stream.begin() + stream.size() - blockSize), 1, blockSize, handle);</div> -<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">if</span> (::ferror(handle))</div> -<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a>(errno);</div> -<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (bytesRead > blockSize)</div> -<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a>(0);</div> -<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (bytesRead < blockSize)</div> -<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  stream.resize(stream.size() - (blockSize - bytesRead)); <span class="comment">//caveat: unsigned arithmetics</span></div> -<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div> -<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">while</span> (!::feof(handle));</div> -<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div> -<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">return</span> stream;</div> -<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div> -<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div> -<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div> -<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="preprocessor">#endif //ZEN_XML_IO_HEADER_8917640501480763248343343</span></div> -<div class="ttc" id="namespacezen_html_a4ba7bbaa14a787b07fc13da9145aabe2"><div class="ttname"><a href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">zen::saveStream</a></div><div class="ttdeci">void saveStream(const std::string &stream, const String &filename)</div><div class="ttdoc">Save byte stream to a file. </div><div class="ttdef"><b>Definition:</b> io.h:66</div></div> -<div class="ttc" id="namespacezen_html_a04fe23c3bd9b7d03309620b5ea763607"><div class="ttname"><a href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">zen::loadStream</a></div><div class="ttdeci">std::string loadStream(const String &filename)</div><div class="ttdoc">Load byte stream from a file. </div><div class="ttdef"><b>Definition:</b> io.h:94</div></div> -<div class="ttc" id="structzen_1_1_xml_file_error_html_a4a109e749675a3887af8cfc140303b8f"><div class="ttname"><a href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">zen::XmlFileError::lastError</a></div><div class="ttdeci">ErrorCode lastError</div><div class="ttdoc">Native error code: errno. </div><div class="ttdef"><b>Definition:</b> io.h:35</div></div> -<div class="ttc" id="structzen_1_1_xml_file_error_html"><div class="ttname"><a href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a></div><div class="ttdoc">Exception thrown due to failed file I/O. </div><div class="ttdef"><b>Definition:</b> io.h:29</div></div> -<div class="ttc" id="structzen_1_1_xml_error_html"><div class="ttname"><a href="structzen_1_1_xml_error.html">zen::XmlError</a></div><div class="ttdoc">Exception base class for zen::Xml. </div><div class="ttdef"><b>Definition:</b> error.h:13</div></div> -</div><!-- fragment --></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/jquery.js b/zenxml/doc/jquery.js deleted file mode 100644 index c197801c..00000000 --- a/zenxml/doc/jquery.js +++ /dev/null @@ -1,31 +0,0 @@ -/*! - * jQuery JavaScript Library v1.7.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon Nov 21 21:11:03 2011 -0500 - */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv)) -}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; -if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false -}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 -},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av); -ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; -if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1) -}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b -})}})(window); diff --git a/zenxml/doc/namespacemembers.html b/zenxml/doc/namespacemembers.html deleted file mode 100644 index 9703003f..00000000 --- a/zenxml/doc/namespacemembers.html +++ /dev/null @@ -1,130 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Namespace Members</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="namespaces.html"><span>Namespace List</span></a></li> - <li class="current"><a href="namespacemembers.html"><span>Namespace Members</span></a></li> - </ul> - </div> - <div id="navrow3" class="tabs2"> - <ul class="tablist"> - <li class="current"><a href="namespacemembers.html"><span>All</span></a></li> - <li><a href="namespacemembers_func.html"><span>Functions</span></a></li> - </ul> - </div> -</div><!-- top --> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div class="contents"> -<div class="textblock">Here is a list of all documented namespace members with links to the namespaces they belong to:</div><ul> -<li>load() -: <a class="el" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">zen</a> -</li> -<li>loadStream() -: <a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">zen</a> -</li> -<li>parse() -: <a class="el" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">zen</a> -</li> -<li>readStruc() -: <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen</a> -</li> -<li>readText() -: <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">zen</a> -</li> -<li>save() -: <a class="el" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">zen</a> -</li> -<li>saveStream() -: <a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">zen</a> -</li> -<li>serialize() -: <a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">zen</a> -</li> -<li>writeStruc() -: <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen</a> -</li> -<li>writeText() -: <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">zen</a> -</li> -</ul> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/namespacemembers_func.html b/zenxml/doc/namespacemembers_func.html deleted file mode 100644 index 30987dd8..00000000 --- a/zenxml/doc/namespacemembers_func.html +++ /dev/null @@ -1,130 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Namespace Members</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="namespaces.html"><span>Namespace List</span></a></li> - <li class="current"><a href="namespacemembers.html"><span>Namespace Members</span></a></li> - </ul> - </div> - <div id="navrow3" class="tabs2"> - <ul class="tablist"> - <li><a href="namespacemembers.html"><span>All</span></a></li> - <li class="current"><a href="namespacemembers_func.html"><span>Functions</span></a></li> - </ul> - </div> -</div><!-- top --> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div class="contents"> - <ul> -<li>load() -: <a class="el" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">zen</a> -</li> -<li>loadStream() -: <a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">zen</a> -</li> -<li>parse() -: <a class="el" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">zen</a> -</li> -<li>readStruc() -: <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen</a> -</li> -<li>readText() -: <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">zen</a> -</li> -<li>save() -: <a class="el" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">zen</a> -</li> -<li>saveStream() -: <a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">zen</a> -</li> -<li>serialize() -: <a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">zen</a> -</li> -<li>writeStruc() -: <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen</a> -</li> -<li>writeText() -: <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">zen</a> -</li> -</ul> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/namespaces.html b/zenxml/doc/namespaces.html deleted file mode 100644 index 6a23f6a0..00000000 --- a/zenxml/doc/namespaces.html +++ /dev/null @@ -1,101 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Namespace List</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li class="current"><a href="namespaces.html"><span>Namespace List</span></a></li> - <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li> - </ul> - </div> -</div><!-- top --> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div class="header"> - <div class="headertitle"> -<div class="title">Namespace List</div> </div> -</div><!--header--> -<div class="contents"> -<div class="textblock">Here is a list of all documented namespaces with brief descriptions:</div><div class="directory"> -<table class="directory"> -<tr id="row_0_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="namespacezen.html" target="_self">zen</a></td><td class="desc">The zen::Xml namespace </td></tr> -</table> -</div><!-- directory --> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/namespacezen.html b/zenxml/doc/namespacezen.html deleted file mode 100644 index 1d961e87..00000000 --- a/zenxml/doc/namespacezen.html +++ /dev/null @@ -1,588 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: zen Namespace Reference</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="namespaces.html"><span>Namespace List</span></a></li> - <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -</div><!-- top --> -<div class="header"> - <div class="summary"> -<a href="#nested-classes">Classes</a> | -<a href="#func-members">Functions</a> </div> - <div class="headertitle"> -<div class="title">zen Namespace Reference</div> </div> -</div><!--header--> -<div class="contents"> - -<p>The zen::Xml namespace. -<a href="#details">More...</a></p> -<table class="memberdecls"> -<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> -Classes</h2></td></tr> -<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a></td></tr> -<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Proxy class to conveniently convert user data into XML structure. <a href="classzen_1_1_xml_out.html#details">More...</a><br/></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a></td></tr> -<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Proxy class to conveniently convert XML structure to user data. <a href="classzen_1_1_xml_in.html#details">More...</a><br/></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a></td></tr> -<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">An XML element. <a href="classzen_1_1_xml_element.html#details">More...</a><br/></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a></td></tr> -<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The complete XML document. <a href="classzen_1_1_xml_doc.html#details">More...</a><br/></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a></td></tr> -<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception base class for zen::Xml. <a href="structzen_1_1_xml_error.html#details">More...</a><br/></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a></td></tr> -<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception thrown due to failed file I/O. <a href="structzen_1_1_xml_file_error.html#details">More...</a><br/></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a></td></tr> -<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception thrown due to an XML parsing error. <a href="structzen_1_1_xml_parsing_error.html#details">More...</a><br/></td></tr> -<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -</table><table class="memberdecls"> -<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> -Functions</h2></td></tr> -<tr class="memitem:a872a48c0616e7f12ae8caca464835e00"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a872a48c0616e7f12ae8caca464835e00"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">load</a> (const String &filename)</td></tr> -<tr class="memdesc:a872a48c0616e7f12ae8caca464835e00"><td class="mdescLeft"> </td><td class="mdescRight">Load XML document from a file. <a href="#a872a48c0616e7f12ae8caca464835e00">More...</a><br/></td></tr> -<tr class="separator:a872a48c0616e7f12ae8caca464835e00"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:adeeb6b2318097382ae47aa939fc15d4d"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:adeeb6b2318097382ae47aa939fc15d4d"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a> (const <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &doc, const String &filename, const std::string &lineBreak="\r\n", const std::string &indent=" ")</td></tr> -<tr class="memdesc:adeeb6b2318097382ae47aa939fc15d4d"><td class="mdescLeft"> </td><td class="mdescRight">Save XML document to a file. <a href="#adeeb6b2318097382ae47aa939fc15d4d">More...</a><br/></td></tr> -<tr class="separator:adeeb6b2318097382ae47aa939fc15d4d"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2bdcecfe7435ef11cedbce47d4e72ee1"><td class="memTemplParams" colspan="2">template<class T > </td></tr> -<tr class="memitem:a2bdcecfe7435ef11cedbce47d4e72ee1"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a> (const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &input, T &value)</td></tr> -<tr class="memdesc:a2bdcecfe7435ef11cedbce47d4e72ee1"><td class="mdescLeft"> </td><td class="mdescRight">Convert XML element to structured user data. <a href="#a2bdcecfe7435ef11cedbce47d4e72ee1">More...</a><br/></td></tr> -<tr class="separator:a2bdcecfe7435ef11cedbce47d4e72ee1"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a29ddb823fe0a195f19a64448881b8bf6"><td class="memTemplParams" colspan="2">template<class T > </td></tr> -<tr class="memitem:a29ddb823fe0a195f19a64448881b8bf6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a> (const T &value, <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &output)</td></tr> -<tr class="memdesc:a29ddb823fe0a195f19a64448881b8bf6"><td class="mdescLeft"> </td><td class="mdescRight">Convert structured user data into an XML element. <a href="#a29ddb823fe0a195f19a64448881b8bf6">More...</a><br/></td></tr> -<tr class="separator:a29ddb823fe0a195f19a64448881b8bf6"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:acaf85ab94b61882f957afcd355386bff"><td class="memTemplParams" colspan="2">template<class T > </td></tr> -<tr class="memitem:acaf85ab94b61882f957afcd355386bff"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a> (const std::string &input, T &value)</td></tr> -<tr class="memdesc:acaf85ab94b61882f957afcd355386bff"><td class="mdescLeft"> </td><td class="mdescRight">Convert text to user data - used by XML elements and attributes. <a href="#acaf85ab94b61882f957afcd355386bff">More...</a><br/></td></tr> -<tr class="separator:acaf85ab94b61882f957afcd355386bff"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a2ce2998296871fc2f4718ceceb22a23f"><td class="memTemplParams" colspan="2">template<class T > </td></tr> -<tr class="memitem:a2ce2998296871fc2f4718ceceb22a23f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a> (const T &value, std::string &output)</td></tr> -<tr class="memdesc:a2ce2998296871fc2f4718ceceb22a23f"><td class="mdescLeft"> </td><td class="mdescRight">Convert user data into text - used by XML elements and attributes. <a href="#a2ce2998296871fc2f4718ceceb22a23f">More...</a><br/></td></tr> -<tr class="separator:a2ce2998296871fc2f4718ceceb22a23f"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a4ba7bbaa14a787b07fc13da9145aabe2"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a4ba7bbaa14a787b07fc13da9145aabe2"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">saveStream</a> (const std::string &stream, const String &filename)</td></tr> -<tr class="memdesc:a4ba7bbaa14a787b07fc13da9145aabe2"><td class="mdescLeft"> </td><td class="mdescRight">Save byte stream to a file. <a href="#a4ba7bbaa14a787b07fc13da9145aabe2">More...</a><br/></td></tr> -<tr class="separator:a4ba7bbaa14a787b07fc13da9145aabe2"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a04fe23c3bd9b7d03309620b5ea763607"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a04fe23c3bd9b7d03309620b5ea763607"><td class="memTemplItemLeft" align="right" valign="top">std::string </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">loadStream</a> (const String &filename)</td></tr> -<tr class="memdesc:a04fe23c3bd9b7d03309620b5ea763607"><td class="mdescLeft"> </td><td class="mdescRight">Load byte stream from a file. <a href="#a04fe23c3bd9b7d03309620b5ea763607">More...</a><br/></td></tr> -<tr class="separator:a04fe23c3bd9b7d03309620b5ea763607"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:afaa4920e275078e6c8009fbdf58b57ee"><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a> (const <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &doc, const std::string &lineBreak="\r\n", const std::string &indent=" ")</td></tr> -<tr class="memdesc:afaa4920e275078e6c8009fbdf58b57ee"><td class="mdescLeft"> </td><td class="mdescRight">Save XML document as a byte stream. <a href="#afaa4920e275078e6c8009fbdf58b57ee">More...</a><br/></td></tr> -<tr class="separator:afaa4920e275078e6c8009fbdf58b57ee"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a1ae1a4688d724b554fe3bf4638700477"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">parse</a> (const std::string &stream)</td></tr> -<tr class="memdesc:a1ae1a4688d724b554fe3bf4638700477"><td class="mdescLeft"> </td><td class="mdescRight">Load XML document from a byte stream. <a href="#a1ae1a4688d724b554fe3bf4638700477">More...</a><br/></td></tr> -<tr class="separator:a1ae1a4688d724b554fe3bf4638700477"><td class="memSeparator" colspan="2"> </td></tr> -</table> -<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> -<div class="textblock"><p>The zen::Xml namespace. </p> -</div><h2 class="groupheader">Function Documentation</h2> -<a class="anchor" id="a872a48c0616e7f12ae8caca464835e00"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> zen::load </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>filename</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Load XML document from a file. </p> -<p>Convenience function that does nothing more than calling <a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607" title="Load byte stream from a file. ">loadStream()</a> and <a class="el" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477" title="Load XML document from a byte stream. ">parse()</a>.</p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">filename</td><td>Input file name </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>The loaded XML document </dd></dl> -<dl class="exception"><dt>Exceptions</dt><dd> - <table class="exception"> - <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O. ">XmlFileError</a></td><td></td></tr> - <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error. ">XmlParsingError</a></td><td></td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="a04fe23c3bd9b7d03309620b5ea763607"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">std::string zen::loadStream </td> - <td>(</td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>filename</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Load byte stream from a file. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">filename</td><td>Input file name </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>Output byte stream </dd></dl> -<dl class="exception"><dt>Exceptions</dt><dd> - <table class="exception"> - <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O. ">XmlFileError</a></td><td></td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="a1ae1a4688d724b554fe3bf4638700477"></a> -<div class="memitem"> -<div class="memproto"> - <table class="memname"> - <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> zen::parse </td> - <td>(</td> - <td class="paramtype">const std::string & </td> - <td class="paramname"><em>stream</em></td><td>)</td> - <td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Load XML document from a byte stream. </p> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">stream</td><td>Input byte stream </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>Output XML document </dd></dl> -<dl class="exception"><dt>Exceptions</dt><dd> - <table class="exception"> - <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error. ">XmlParsingError</a></td><td></td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="a2bdcecfe7435ef11cedbce47d4e72ee1"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class T > </div> - <table class="memname"> - <tr> - <td class="memname">bool zen::readStruc </td> - <td>(</td> - <td class="paramtype">const XmlElement & </td> - <td class="paramname"><em>input</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">T & </td> - <td class="paramname"><em>value</em> </td> - </tr> - <tr> - <td></td> - <td>)</td> - <td></td><td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Convert XML element to structured user data. </p> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">input</td><td>The input XML element. </td></tr> - <tr><td class="paramname">value</td><td>Conversion target value. </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>"true" if value was read successfully. </dd></dl> - -</div> -</div> -<a class="anchor" id="acaf85ab94b61882f957afcd355386bff"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class T > </div> - <table class="memname"> - <tr> - <td class="memname">bool zen::readText </td> - <td>(</td> - <td class="paramtype">const std::string & </td> - <td class="paramname"><em>input</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">T & </td> - <td class="paramname"><em>value</em> </td> - </tr> - <tr> - <td></td> - <td>)</td> - <td></td><td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Convert text to user data - used by XML elements and attributes. </p> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">input</td><td>Input text. </td></tr> - <tr><td class="paramname">value</td><td>Conversion target value. </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>"true" if value was read successfully. </dd></dl> - -</div> -</div> -<a class="anchor" id="adeeb6b2318097382ae47aa939fc15d4d"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">void zen::save </td> - <td>(</td> - <td class="paramtype">const XmlDoc & </td> - <td class="paramname"><em>doc</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>filename</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">const std::string & </td> - <td class="paramname"><em>lineBreak</em> = <code>"\r\n"</code>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">const std::string & </td> - <td class="paramname"><em>indent</em> = <code>"    "</code> </td> - </tr> - <tr> - <td></td> - <td>)</td> - <td></td><td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Save XML document to a file. </p> -<p>Convenience function that does nothing more than calling <a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream. ">serialize()</a> and <a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2" title="Save byte stream to a file. ">saveStream()</a>.</p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">doc</td><td>The XML document to save </td></tr> - <tr><td class="paramname">filename</td><td>Output file name </td></tr> - <tr><td class="paramname">lineBreak</td><td>Line break, default: carriage return + new line </td></tr> - <tr><td class="paramname">indent</td><td>Indentation, default: four space characters </td></tr> - </table> - </dd> -</dl> -<dl class="exception"><dt>Exceptions</dt><dd> - <table class="exception"> - <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O. ">XmlFileError</a></td><td></td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="a4ba7bbaa14a787b07fc13da9145aabe2"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class String > </div> - <table class="memname"> - <tr> - <td class="memname">void zen::saveStream </td> - <td>(</td> - <td class="paramtype">const std::string & </td> - <td class="paramname"><em>stream</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">const String & </td> - <td class="paramname"><em>filename</em> </td> - </tr> - <tr> - <td></td> - <td>)</td> - <td></td><td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Save byte stream to a file. </p> -<dl class="tparams"><dt>Template Parameters</dt><dd> - <table class="tparams"> - <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> - </table> - </dd> -</dl> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">stream</td><td>Input byte stream </td></tr> - <tr><td class="paramname">filename</td><td>Output file name </td></tr> - </table> - </dd> -</dl> -<dl class="exception"><dt>Exceptions</dt><dd> - <table class="exception"> - <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O. ">XmlFileError</a></td><td></td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="afaa4920e275078e6c8009fbdf58b57ee"></a> -<div class="memitem"> -<div class="memproto"> - <table class="memname"> - <tr> - <td class="memname">std::string zen::serialize </td> - <td>(</td> - <td class="paramtype">const XmlDoc & </td> - <td class="paramname"><em>doc</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">const std::string & </td> - <td class="paramname"><em>lineBreak</em> = <code>"\r\n"</code>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">const std::string & </td> - <td class="paramname"><em>indent</em> = <code>"    "</code> </td> - </tr> - <tr> - <td></td> - <td>)</td> - <td></td><td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Save XML document as a byte stream. </p> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">doc</td><td>Input XML document </td></tr> - <tr><td class="paramname">lineBreak</td><td>Line break, default: carriage return + new line </td></tr> - <tr><td class="paramname">indent</td><td>Indentation, default: four space characters </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>Output byte stream </dd></dl> - -</div> -</div> -<a class="anchor" id="a29ddb823fe0a195f19a64448881b8bf6"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class T > </div> - <table class="memname"> - <tr> - <td class="memname">void zen::writeStruc </td> - <td>(</td> - <td class="paramtype">const T & </td> - <td class="paramname"><em>value</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">XmlElement & </td> - <td class="paramname"><em>output</em> </td> - </tr> - <tr> - <td></td> - <td>)</td> - <td></td><td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Convert structured user data into an XML element. </p> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">value</td><td>The value to be converted. </td></tr> - <tr><td class="paramname">output</td><td>The output XML element. </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -<a class="anchor" id="a2ce2998296871fc2f4718ceceb22a23f"></a> -<div class="memitem"> -<div class="memproto"> -<div class="memtemplate"> -template<class T > </div> - <table class="memname"> - <tr> - <td class="memname">void zen::writeText </td> - <td>(</td> - <td class="paramtype">const T & </td> - <td class="paramname"><em>value</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">std::string & </td> - <td class="paramname"><em>output</em> </td> - </tr> - <tr> - <td></td> - <td>)</td> - <td></td><td></td> - </tr> - </table> -</div><div class="memdoc"> - -<p>Convert user data into text - used by XML elements and attributes. </p> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">value</td><td>The value to be converted. </td></tr> - <tr><td class="paramname">output</td><td>Output text. </td></tr> - </table> - </dd> -</dl> - -</div> -</div> -</div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/nav_f.png b/zenxml/doc/nav_f.png Binary files differdeleted file mode 100644 index 72a58a52..00000000 --- a/zenxml/doc/nav_f.png +++ /dev/null diff --git a/zenxml/doc/nav_h.png b/zenxml/doc/nav_h.png Binary files differdeleted file mode 100644 index 33389b10..00000000 --- a/zenxml/doc/nav_h.png +++ /dev/null diff --git a/zenxml/doc/open.png b/zenxml/doc/open.png Binary files differdeleted file mode 100644 index 30f75c7e..00000000 --- a/zenxml/doc/open.png +++ /dev/null diff --git a/zenxml/doc/parser_8h_source.html b/zenxml/doc/parser_8h_source.html deleted file mode 100644 index d049c188..00000000 --- a/zenxml/doc/parser_8h_source.html +++ /dev/null @@ -1,700 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: parser.h Source File</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">parser.h</div> </div> -</div><!--header--> -<div class="contents"> -<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> -<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> -<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> -<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> -<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_PARSER_HEADER_81248670213764583021432</span></div> -<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_PARSER_HEADER_81248670213764583021432</span></div> -<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> -<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <cstdio></span></div> -<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <cstddef></span> <span class="comment">//ptrdiff_t; req. on Linux</span></div> -<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <zen/string_traits.h></span></div> -<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "dom.h"</span></div> -<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "error.h"</span></div> -<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div> -<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">namespace </span>zen</div> -<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div> -<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div> -<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> std::string <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(<span class="keyword">const</span> XmlDoc& doc,</div> -<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">const</span> std::string& lineBreak = <span class="stringliteral">"\r\n"</span>,</div> -<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">const</span> std::string& indent = <span class="stringliteral">" "</span>); <span class="comment">//throw ()</span></div> -<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div> -<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="structzen_1_1_xml_parsing_error.html"> 35</a></span> <span class="keyword">struct </span><a class="code" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a> : <span class="keyword">public</span> <a class="code" href="structzen_1_1_xml_error.html">XmlError</a></div> -<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div> -<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <a class="code" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a>(<span class="keywordtype">size_t</span> rowNo, <span class="keywordtype">size_t</span> colNo) : <a class="code" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">row</a>(rowNo), <a class="code" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">col</a>(colNo) {}</div> -<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e"> 39</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">row</a>; <span class="comment">//beginning with 0</span></div> -<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd"> 41</a></span> <span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">col</a>; <span class="comment">//</span></div> -<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> };</div> -<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div> -<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div> -<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div> -<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a> <a class="code" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">parse</a>(<span class="keyword">const</span> std::string& stream); <span class="comment">//throw XmlParsingError</span></div> -<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div> -<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div> -<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div> -<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div> -<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div> -<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div> -<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div> -<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div> -<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div> -<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div> -<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div> -<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div> -<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div> -<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div> -<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div> -<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div> -<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div> -<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div> -<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div> -<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div> -<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">//---------------------------- implementation ----------------------------</span></div> -<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">//see: http://www.w3.org/TR/xml/</span></div> -<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div> -<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">namespace </span>implementation</div> -<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {</div> -<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">inline</span></div> -<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> std::pair<char, char> hexify(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c)</div> -<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> {</div> -<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">auto</span> hexifyDigit = [](<span class="keywordtype">int</span> num) -> <span class="keywordtype">char</span> <span class="comment">//input [0, 15], output 0-9, A-F</span></div> -<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  {</div> -<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  assert(0 <= num&& num <= 15); <span class="comment">//guaranteed by design below!</span></div> -<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(num <= 9 ? <span class="comment">//no signed/unsigned char problem here!</span></div> -<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="charliteral">'0'</span> + num :</div> -<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="charliteral">'A'</span> + (num - 10));</div> -<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  };</div> -<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">return</span> std::make_pair(hexifyDigit(c / 16), hexifyDigit(c % 16));</div> -<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> }</div> -<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div> -<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div> -<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">inline</span></div> -<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">char</span> unhexify(<span class="keywordtype">char</span> high, <span class="keywordtype">char</span> low)</div> -<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> {</div> -<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keyword">auto</span> unhexifyDigit = [](<span class="keywordtype">char</span> hex) -> <span class="keywordtype">int</span> <span class="comment">//input 0-9, a-f, A-F; output range: [0, 15]</span></div> -<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div> -<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">if</span> (<span class="charliteral">'0'</span> <= hex && hex <= <span class="charliteral">'9'</span>) <span class="comment">//no signed/unsigned char problem here!</span></div> -<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> hex - <span class="charliteral">'0'</span>;</div> -<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="charliteral">'A'</span> <= hex && hex <= <span class="charliteral">'F'</span>)</div> -<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> (hex - <span class="charliteral">'A'</span>) + 10;</div> -<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="charliteral">'a'</span> <= hex && hex <= <span class="charliteral">'f'</span>)</div> -<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> (hex - <span class="charliteral">'a'</span>) + 10;</div> -<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  assert(<span class="keyword">false</span>);</div> -<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">return</span> 0;</div> -<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  };</div> -<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">></span>(16 * unhexifyDigit(high) + unhexifyDigit(low)); <span class="comment">//[!] convert to unsigned char first, then to char (which may be signed)</span></div> -<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> };</div> -<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div> -<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div> -<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">template</span> <<span class="keyword">class</span> Predicate> <span class="keyword">inline</span></div> -<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> std::string normalize(<span class="keyword">const</span> std::string& str, Predicate pred) <span class="comment">//pred: unary function taking a char, return true if value shall be encoded as hex</span></div> -<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> {</div> -<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  std::string output;</div> -<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  std::for_each(str.begin(), str.end(),</div> -<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  [&](<span class="keywordtype">char</span> c)</div> -<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div> -<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (c == <span class="charliteral">'&'</span>) <span class="comment">//</span></div> -<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  output += <span class="stringliteral">"&amp;"</span>;</div> -<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">'<'</span>) <span class="comment">//normalization mandatory: http://www.w3.org/TR/xml/#syntax</span></div> -<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  output += <span class="stringliteral">"&lt;"</span>;</div> -<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">'>'</span>) <span class="comment">//</span></div> -<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  output += <span class="stringliteral">"&gt;"</span>;</div> -<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pred(c))</div> -<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div> -<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span> (c == <span class="charliteral">'\''</span>)</div> -<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  output += <span class="stringliteral">"&apos;"</span>;</div> -<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">'\"'</span>)</div> -<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  output += <span class="stringliteral">"&quot;"</span>;</div> -<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">else</span></div> -<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div> -<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  output += <span class="stringliteral">"&#x"</span>;</div> -<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keyword">const</span> <span class="keyword">auto</span> hexDigits = hexify(c); <span class="comment">//hexify beats "printNumber<std::string>("&#x%02X;", c)" by a nice factor of 3!</span></div> -<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  output += hexDigits.first;</div> -<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  output += hexDigits.second;</div> -<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  output += <span class="charliteral">';'</span>;</div> -<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div> -<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div> -<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">else</span></div> -<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  output += c;</div> -<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  });</div> -<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">return</span> output;</div> -<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div> -<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div> -<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keyword">inline</span></div> -<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> std::string normalizeName(<span class="keyword">const</span> std::string& str)</div> -<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> {</div> -<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> normalize(str, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> isWhiteSpace(c) || c == <span class="charliteral">'='</span> || c == <span class="charliteral">'/'</span> || c == <span class="charliteral">'\''</span> || c == <span class="charliteral">'\"'</span>; });</div> -<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div> -<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div> -<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">inline</span></div> -<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> std::string normalizeElementValue(<span class="keyword">const</span> std::string& str)</div> -<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> {</div> -<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">return</span> normalize(str, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">></span>(c) < 32; });</div> -<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div> -<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div> -<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">inline</span></div> -<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> std::string normalizeAttribValue(<span class="keyword">const</span> std::string& str)</div> -<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> {</div> -<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">return</span> normalize(str, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">></span>(c) < 32 || c == <span class="charliteral">'\''</span> || c == <span class="charliteral">'\"'</span>; });</div> -<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div> -<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div> -<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div> -<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">template</span> <<span class="keyword">class</span> CharIterator, <span class="keywordtype">size_t</span> N> <span class="keyword">inline</span></div> -<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">bool</span> checkEntity(CharIterator& first, CharIterator last, <span class="keyword">const</span> <span class="keywordtype">char</span> (&placeholder)[N])</div> -<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> {</div> -<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  assert(placeholder[N - 1] == 0);</div> -<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">const</span> ptrdiff_t strLen = N - 1; <span class="comment">//don't count null-terminator</span></div> -<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">if</span> (last - first >= strLen && std::equal(first, first + strLen, placeholder))</div> -<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  {</div> -<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  first += strLen - 1;</div> -<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> -<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div> -<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> -<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> }</div> -<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div> -<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div> -<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keyword">namespace</span></div> -<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> {</div> -<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> std::string denormalize(<span class="keyword">const</span> std::string& str)</div> -<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> {</div> -<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  std::string output;</div> -<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = str.begin(); it != str.end(); ++it)</div> -<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  {</div> -<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> c = *it;</div> -<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div> -<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">if</span> (c == <span class="charliteral">'&'</span>)</div> -<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div> -<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&amp;"</span>))</div> -<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  output += <span class="charliteral">'&'</span>;</div> -<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&lt;"</span>))</div> -<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  output += <span class="charliteral">'<'</span>;</div> -<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&gt;"</span>))</div> -<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  output += <span class="charliteral">'>'</span>;</div> -<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&apos;"</span>))</div> -<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  output += <span class="charliteral">'\''</span>;</div> -<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&quot;"</span>))</div> -<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  output += <span class="charliteral">'\"'</span>;</div> -<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (str.end() - it >= 6 &&</div> -<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  it[1] == <span class="charliteral">'#'</span> &&</div> -<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  it[2] == <span class="charliteral">'x'</span> &&</div> -<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  it[5] == <span class="charliteral">';'</span>)</div> -<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  {</div> -<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  output += unhexify(it[3], it[4]); <span class="comment">//unhexify beats "::sscanf(&it[3], "%02X", &tmp)" by a factor of 3000 for ~250000 calls!!!</span></div> -<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  it += 5;</div> -<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div> -<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">else</span></div> -<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  output += c; <span class="comment">//unexpected char!</span></div> -<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div> -<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">'\r'</span>) <span class="comment">//map all end-of-line characters to \n http://www.w3.org/TR/xml/#sec-line-ends</span></div> -<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  {</div> -<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keyword">auto</span> itNext = it + 1;</div> -<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">if</span> (itNext != str.end() && *itNext == <span class="charliteral">'\n'</span>)</div> -<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  ++it;</div> -<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  output += <span class="charliteral">'\n'</span>;</div> -<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  }</div> -<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">else</span></div> -<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  output += c;</div> -<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  };</div> -<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">return</span> output;</div> -<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> }</div> -<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div> -<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div> -<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(<span class="keyword">const</span> XmlElement& element, std::string& stream,</div> -<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keyword">const</span> std::string& lineBreak,</div> -<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keyword">const</span> std::string& indent,</div> -<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordtype">size_t</span> indentLevel)</div> -<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> {</div> -<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keyword">const</span> std::string& nameFmt = normalizeName(element.getNameAs<std::string>());</div> -<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div> -<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < indentLevel; ++i)</div> -<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  stream += indent;</div> -<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div> -<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  stream += <span class="charliteral">'<'</span> + nameFmt;</div> -<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div> -<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keyword">auto</span> attr = element.getAttributes();</div> -<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = attr.first; it != attr.second; ++it)</div> -<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  stream += <span class="charliteral">' '</span> + normalizeName(it->first) + <span class="stringliteral">"=\""</span> + normalizeAttribValue(it->second) + <span class="charliteral">'\"'</span>;</div> -<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div> -<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="comment">//no support for mixed-mode content</span></div> -<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">auto</span> iterPair = element.getChildren();</div> -<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">if</span> (iterPair.first != iterPair.second) <span class="comment">//structured element</span></div> -<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  {</div> -<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  stream += <span class="charliteral">'>'</span> + lineBreak;</div> -<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div> -<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  std::for_each(iterPair.first, iterPair.second,</div> -<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  [&](<span class="keyword">const</span> XmlElement & el) { <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(el, stream, lineBreak, indent, indentLevel + 1); });</div> -<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div> -<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < indentLevel; ++i)</div> -<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  stream += indent;</div> -<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  stream += <span class="stringliteral">"</"</span> + nameFmt + <span class="charliteral">'>'</span> + lineBreak;</div> -<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div> -<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">else</span></div> -<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  {</div> -<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  std::string value;</div> -<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  element.getValue(value);</div> -<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div> -<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">if</span> (!value.empty()) <span class="comment">//value element</span></div> -<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  stream += <span class="charliteral">'>'</span> + normalizeElementValue(value) + <span class="stringliteral">"</"</span> + nameFmt + <span class="charliteral">'>'</span> + lineBreak;</div> -<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">else</span> <span class="comment">//empty element</span></div> -<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  stream += <span class="stringliteral">"/>"</span> + lineBreak;</div> -<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  }</div> -<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div> -<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div> -<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> std::string <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(<span class="keyword">const</span> XmlDoc& doc,</div> -<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">const</span> std::string& lineBreak,</div> -<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keyword">const</span> std::string& indent)</div> -<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> {</div> -<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  std::string version = doc.getVersionAs<std::string>();</div> -<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span> (!version.empty())</div> -<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  version = <span class="stringliteral">" version=\""</span> + normalizeAttribValue(version) + <span class="charliteral">'\"'</span>;</div> -<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div> -<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  std::string encoding = doc.getEncodingAs<std::string>();</div> -<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">if</span> (!encoding.empty())</div> -<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  encoding = <span class="stringliteral">" encoding=\""</span> + normalizeAttribValue(encoding) + <span class="charliteral">'\"'</span>;</div> -<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div> -<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  std::string standalone = doc.getStandaloneAs<std::string>();</div> -<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">if</span> (!standalone.empty())</div> -<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  standalone = <span class="stringliteral">" standalone=\""</span> + normalizeAttribValue(standalone) + <span class="charliteral">'\"'</span>;</div> -<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div> -<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  std::string output = <span class="stringliteral">"<?xml"</span> + version + encoding + standalone + <span class="stringliteral">"?>"</span> + lineBreak;</div> -<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(doc.root(), output, lineBreak, indent, 0);</div> -<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">return</span> output;</div> -<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> }</div> -<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> }</div> -<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</div> -<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div> -<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keyword">inline</span></div> -<div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee"> 287</a></span> std::string <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a>& doc,</div> -<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keyword">const</span> std::string& lineBreak,</div> -<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keyword">const</span> std::string& indent) { <span class="keywordflow">return</span> implementation::serialize(doc, lineBreak, indent); }</div> -<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div> -<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment">/*</span></div> -<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment">Grammar for XML parser</span></div> -<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment">-------------------------------</span></div> -<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">document-expression:</span></div> -<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment"> <?xml version="1.0" encoding="UTF-8" standalone="yes"?></span></div> -<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment"> element-expression:</span></div> -<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment"></span></div> -<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="comment">element-expression:</span></div> -<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="comment"> <string attributes-expression/></span></div> -<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="comment"> <string attributes-expression> pm-expression </string></span></div> -<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="comment"></span></div> -<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="comment">element-list-expression:</span></div> -<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="comment"> <empty></span></div> -<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment"> element-expression element-list-expression</span></div> -<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment"></span></div> -<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment">attributes-expression:</span></div> -<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment"> <empty></span></div> -<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment"> string="string" attributes-expression</span></div> -<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment"></span></div> -<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">pm-expression:</span></div> -<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment"> string</span></div> -<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment"> element-list-expression</span></div> -<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">*/</span></div> -<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div> -<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keyword">namespace </span>implementation</div> -<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> {</div> -<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keyword">struct </span>Token</div> -<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> {</div> -<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keyword">enum</span> Type</div> -<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  {</div> -<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  TK_LESS,</div> -<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  TK_GREATER,</div> -<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  TK_LESS_SLASH,</div> -<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  TK_SLASH_GREATER,</div> -<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  TK_EQUAL,</div> -<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  TK_QUOTE,</div> -<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  TK_DECL_BEGIN,</div> -<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  TK_DECL_END,</div> -<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  TK_NAME,</div> -<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  TK_END</div> -<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  };</div> -<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div> -<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  Token(Type t) : type(t) {}</div> -<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  Token(<span class="keyword">const</span> std::string& txt) : type(TK_NAME), name(txt) {}</div> -<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div> -<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  Type type;</div> -<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  std::string name; <span class="comment">//filled if type == TK_NAME</span></div> -<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> };</div> -<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div> -<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">class </span>Scanner</div> -<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> {</div> -<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keyword">public</span>:</div> -<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  Scanner(<span class="keyword">const</span> std::string& stream) :</div> -<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  xmlCommentBegin(<span class="stringliteral">"<!--"</span>),</div> -<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  xmlCommentEnd (<span class="stringliteral">"-->"</span>),</div> -<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  stream_(stream),</div> -<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  pos(stream_.begin())</div> -<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  {</div> -<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">if</span> (zen::startsWith(stream_, BYTE_ORDER_MARK_UTF8))</div> -<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  pos += strLength(BYTE_ORDER_MARK_UTF8);</div> -<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div> -<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"<?xml"</span>, Token::TK_DECL_BEGIN));</div> -<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"?>"</span>, Token::TK_DECL_END));</div> -<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"</"</span>, Token::TK_LESS_SLASH));</div> -<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"/>"</span>, Token::TK_SLASH_GREATER));</div> -<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"<"</span> , Token::TK_LESS)); <span class="comment">//evaluate after TK_DECL_BEGIN!</span></div> -<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  tokens.push_back(std::make_pair(<span class="stringliteral">">"</span> , Token::TK_GREATER));</div> -<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"="</span> , Token::TK_EQUAL));</div> -<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"\""</span>, Token::TK_QUOTE));</div> -<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"\'"</span>, Token::TK_QUOTE));</div> -<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div> -<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div> -<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  Token nextToken() <span class="comment">//throw XmlParsingError</span></div> -<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div> -<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="comment">//skip whitespace</span></div> -<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  pos = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> !zen::isWhiteSpace(c); });</div> -<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div> -<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">if</span> (pos == stream_.end())</div> -<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">return</span> Token::TK_END;</div> -<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div> -<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="comment">//skip XML comments</span></div> -<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">if</span> (startsWith(xmlCommentBegin))</div> -<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  {</div> -<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keyword">auto</span> it = std::search(pos + xmlCommentBegin.size(), stream_.end(), xmlCommentEnd.begin(), xmlCommentEnd.end());</div> -<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">if</span> (it != stream_.end())</div> -<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  {</div> -<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  pos = it + xmlCommentEnd.size();</div> -<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="keywordflow">return</span> nextToken();</div> -<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  }</div> -<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  }</div> -<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div> -<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = tokens.begin(); it != tokens.end(); ++it)</div> -<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">if</span> (startsWith(it->first))</div> -<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  {</div> -<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  pos += it->first.size();</div> -<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">return</span> it->second;</div> -<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div> -<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div> -<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keyword">auto</span> nameEnd = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c)</div> -<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  {</div> -<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">return</span> c == <span class="charliteral">'<'</span> ||</div> -<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  c == <span class="charliteral">'>'</span> ||</div> -<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  c == <span class="charliteral">'='</span> ||</div> -<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  c == <span class="charliteral">'/'</span> ||</div> -<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  c == <span class="charliteral">'\''</span> ||</div> -<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  c == <span class="charliteral">'\"'</span> ||</div> -<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  zen::isWhiteSpace(c);</div> -<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  });</div> -<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div> -<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">if</span> (nameEnd != pos)</div> -<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  {</div> -<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  std::string name(&*pos, nameEnd - pos);</div> -<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  pos = nameEnd;</div> -<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordflow">return</span> implementation::denormalize(name);</div> -<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div> -<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div> -<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="comment">//unknown token</span></div> -<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordflow">throw</span> XmlParsingError(posRow(), posCol());</div> -<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  }</div> -<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div> -<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  std::string extractElementValue()</div> -<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  {</div> -<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keyword">auto</span> it = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c)</div> -<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  {</div> -<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">return</span> c == <span class="charliteral">'<'</span> ||</div> -<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  c == <span class="charliteral">'>'</span>;</div> -<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  });</div> -<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  std::string output(pos, it);</div> -<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  pos = it;</div> -<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">return</span> implementation::denormalize(output);</div> -<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  }</div> -<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div> -<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  std::string extractAttributeValue()</div> -<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  {</div> -<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keyword">auto</span> it = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c)</div> -<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  {</div> -<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> c == <span class="charliteral">'<'</span> ||</div> -<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  c == <span class="charliteral">'>'</span> ||</div> -<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  c == <span class="charliteral">'\''</span> ||</div> -<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  c == <span class="charliteral">'\"'</span>;</div> -<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  });</div> -<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  std::string output(pos, it);</div> -<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  pos = it;</div> -<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">return</span> implementation::denormalize(output);</div> -<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  }</div> -<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div> -<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordtype">size_t</span> posRow() const <span class="comment">//current row beginning with 0</span></div> -<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  {</div> -<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> crSum = std::count(stream_.begin(), pos, <span class="charliteral">'\r'</span>); <span class="comment">//carriage returns</span></div> -<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> nlSum = std::count(stream_.begin(), pos, <span class="charliteral">'\n'</span>); <span class="comment">//new lines</span></div> -<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  assert(crSum == 0 || nlSum == 0 || crSum == nlSum);</div> -<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keywordflow">return</span> std::max(crSum, nlSum); <span class="comment">//be compatible with Linux/Mac/Win</span></div> -<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  }</div> -<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div> -<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordtype">size_t</span> posCol() const <span class="comment">//current col beginning with 0</span></div> -<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  {</div> -<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="comment">//seek beginning of line</span></div> -<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = pos; it != stream_.begin(); )</div> -<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  {</div> -<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  --it;</div> -<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">if</span> (*it == <span class="charliteral">'\r'</span> || *it == <span class="charliteral">'\n'</span>)</div> -<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">return</span> pos - it - 1;</div> -<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  }</div> -<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">return</span> pos - stream_.begin();</div> -<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div> -<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div> -<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keyword">private</span>:</div> -<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  Scanner(<span class="keyword">const</span> Scanner&);</div> -<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  Scanner& operator=(<span class="keyword">const</span> Scanner&);</div> -<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div> -<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordtype">bool</span> startsWith(<span class="keyword">const</span> std::string& prefix)<span class="keyword"> const</span></div> -<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keyword"> </span>{</div> -<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">if</span> (stream_.end() - pos < static_cast<ptrdiff_t>(prefix.size()))</div> -<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> -<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">return</span> std::equal(prefix.begin(), prefix.end(), pos);</div> -<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  }</div> -<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div> -<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keyword">typedef</span> std::vector<std::pair<std::string, Token::Type> > TokenList;</div> -<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  TokenList tokens;</div> -<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div> -<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keyword">const</span> std::string xmlCommentBegin;</div> -<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keyword">const</span> std::string xmlCommentEnd;</div> -<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </div> -<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keyword">const</span> std::string stream_;</div> -<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  std::string::const_iterator pos;</div> -<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> };</div> -<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div> -<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div> -<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keyword">class </span>XmlParser</div> -<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> {</div> -<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keyword">public</span>:</div> -<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  XmlParser(<span class="keyword">const</span> std::string& stream) :</div> -<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  scn(stream),</div> -<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  tk(scn.nextToken()) {}</div> -<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> </div> -<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  XmlDoc <a class="code" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">parse</a>() <span class="comment">//throw XmlParsingError</span></div> -<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  {</div> -<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  XmlDoc doc;</div> -<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div> -<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="comment">//declaration (optional)</span></div> -<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">if</span> (token().type == Token::TK_DECL_BEGIN)</div> -<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  {</div> -<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  nextToken();</div> -<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div> -<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordflow">while</span> (token().type == Token::TK_NAME)</div> -<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  {</div> -<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  std::string attribName = token().name;</div> -<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  nextToken();</div> -<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div> -<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  consumeToken(Token::TK_EQUAL);</div> -<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  expectToken(Token::TK_QUOTE);</div> -<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  std::string attribValue = scn.extractAttributeValue();</div> -<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  nextToken();</div> -<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div> -<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  consumeToken(Token::TK_QUOTE);</div> -<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div> -<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">if</span> (attribName == <span class="stringliteral">"version"</span>)</div> -<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  doc.setVersion(attribValue);</div> -<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (attribName == <span class="stringliteral">"encoding"</span>)</div> -<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  doc.setEncoding(attribValue);</div> -<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (attribName == <span class="stringliteral">"standalone"</span>)</div> -<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  doc.setStandalone(attribValue);</div> -<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  }</div> -<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  consumeToken(Token::TK_DECL_END);</div> -<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  }</div> -<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div> -<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  XmlDoc dummy;</div> -<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  XmlElement& elemTmp = dummy.root();</div> -<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  parseChildElements(elemTmp);</div> -<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div> -<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keyword">auto</span> iterPair = elemTmp.getChildren();</div> -<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordflow">if</span> (iterPair.first != iterPair.second)</div> -<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  doc.root().swap(*iterPair.first);</div> -<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div> -<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  expectToken(Token::TK_END);</div> -<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">return</span> doc;</div> -<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  };</div> -<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div> -<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keyword">private</span>:</div> -<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  XmlParser(<span class="keyword">const</span> XmlParser&);</div> -<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  XmlParser& operator=(<span class="keyword">const</span> XmlParser&);</div> -<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> </div> -<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordtype">void</span> parseChildElements(XmlElement& parent)</div> -<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  {</div> -<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">while</span> (token().type == Token::TK_LESS)</div> -<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  {</div> -<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  nextToken();</div> -<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div> -<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  expectToken(Token::TK_NAME);</div> -<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  std::string elementName = token().name;</div> -<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  nextToken();</div> -<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> </div> -<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  XmlElement& newElement = parent.addChild(elementName);</div> -<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div> -<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  parseAttributes(newElement);</div> -<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div> -<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">if</span> (token().type == Token::TK_SLASH_GREATER) <span class="comment">//empty element</span></div> -<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  {</div> -<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  nextToken();</div> -<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">continue</span>;</div> -<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  }</div> -<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div> -<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  expectToken(Token::TK_GREATER);</div> -<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  std::string elementValue = scn.extractElementValue();</div> -<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  nextToken();</div> -<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div> -<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="comment">//no support for mixed-mode content</span></div> -<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">if</span> (token().type == Token::TK_LESS) <span class="comment">//structured element</span></div> -<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  parseChildElements(newElement);</div> -<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">else</span> <span class="comment">//value element</span></div> -<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  newElement.setValue(elementValue);</div> -<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div> -<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  consumeToken(Token::TK_LESS_SLASH);</div> -<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> </div> -<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keywordflow">if</span> (token().type != Token::TK_NAME ||</div> -<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  elementName != token().name)</div> -<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">throw</span> XmlParsingError(scn.posRow(), scn.posCol());</div> -<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  nextToken();</div> -<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div> -<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  consumeToken(Token::TK_GREATER);</div> -<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  }</div> -<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  };</div> -<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div> -<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordtype">void</span> parseAttributes(XmlElement& element)</div> -<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  {</div> -<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">while</span> (token().type == Token::TK_NAME)</div> -<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  {</div> -<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  std::string attribName = token().name;</div> -<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  nextToken();</div> -<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> </div> -<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  consumeToken(Token::TK_EQUAL);</div> -<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  expectToken(Token::TK_QUOTE);</div> -<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  std::string attribValue = scn.extractAttributeValue();</div> -<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  nextToken();</div> -<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> </div> -<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  consumeToken(Token::TK_QUOTE);</div> -<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  element.setAttribute(attribName, attribValue);</div> -<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  }</div> -<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  }</div> -<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> </div> -<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keyword">const</span> Token& token()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> tk; }</div> -<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordtype">void</span> nextToken() { tk = scn.nextToken(); }</div> -<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div> -<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordtype">void</span> consumeToken(Token::Type t) <span class="comment">//throw XmlParsingError</span></div> -<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  {</div> -<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  expectToken(t); <span class="comment">//throw XmlParsingError</span></div> -<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  nextToken();</div> -<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  }</div> -<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div> -<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keywordtype">void</span> expectToken(Token::Type t) <span class="comment">//throw XmlParsingError</span></div> -<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  {</div> -<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keywordflow">if</span> (token().type != t)</div> -<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keywordflow">throw</span> XmlParsingError(scn.posRow(), scn.posCol());</div> -<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  }</div> -<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> </div> -<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  Scanner scn;</div> -<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  Token tk;</div> -<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> };</div> -<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> }</div> -<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div> -<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="keyword">inline</span></div> -<div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477"> 612</a></span> <a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a> <a class="code" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">parse</a>(<span class="keyword">const</span> std::string& stream) <span class="comment">//throw XmlParsingError</span></div> -<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> {</div> -<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keywordflow">return</span> implementation::XmlParser(stream).parse(); <span class="comment">//throw XmlParsingError</span></div> -<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> }</div> -<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> }</div> -<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div> -<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor">#endif //ZEN_XML_PARSER_HEADER_81248670213764583021432</span></div> -<div class="ttc" id="namespacezen_html_a1ae1a4688d724b554fe3bf4638700477"><div class="ttname"><a href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">zen::parse</a></div><div class="ttdeci">XmlDoc parse(const std::string &stream)</div><div class="ttdoc">Load XML document from a byte stream. </div><div class="ttdef"><b>Definition:</b> parser.h:612</div></div> -<div class="ttc" id="namespacezen_html_afaa4920e275078e6c8009fbdf58b57ee"><div class="ttname"><a href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">zen::serialize</a></div><div class="ttdeci">std::string serialize(const XmlDoc &doc, const std::string &lineBreak="\r\n", const std::string &indent=" ")</div><div class="ttdoc">Save XML document as a byte stream. </div><div class="ttdef"><b>Definition:</b> parser.h:287</div></div> -<div class="ttc" id="structzen_1_1_xml_parsing_error_html_a3ed4cd1b5599df9b52500f620421496e"><div class="ttname"><a href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">zen::XmlParsingError::row</a></div><div class="ttdeci">size_t row</div><div class="ttdoc">Input file row where the parsing error occured (zero-based) </div><div class="ttdef"><b>Definition:</b> parser.h:39</div></div> -<div class="ttc" id="classzen_1_1_xml_doc_html"><div class="ttname"><a href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></div><div class="ttdoc">The complete XML document. </div><div class="ttdef"><b>Definition:</b> dom.h:249</div></div> -<div class="ttc" id="structzen_1_1_xml_parsing_error_html_a4a37dc48883337499804a9dc791669fd"><div class="ttname"><a href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">zen::XmlParsingError::col</a></div><div class="ttdeci">size_t col</div><div class="ttdoc">Input file column where the parsing error occured (zero-based) </div><div class="ttdef"><b>Definition:</b> parser.h:41</div></div> -<div class="ttc" id="structzen_1_1_xml_parsing_error_html"><div class="ttname"><a href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></div><div class="ttdoc">Exception thrown due to an XML parsing error. </div><div class="ttdef"><b>Definition:</b> parser.h:35</div></div> -<div class="ttc" id="structzen_1_1_xml_error_html"><div class="ttname"><a href="structzen_1_1_xml_error.html">zen::XmlError</a></div><div class="ttdoc">Exception base class for zen::Xml. </div><div class="ttdef"><b>Definition:</b> error.h:13</div></div> -</div><!-- fragment --></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/search/close.png b/zenxml/doc/search/close.png Binary files differdeleted file mode 100644 index 9342d3df..00000000 --- a/zenxml/doc/search/close.png +++ /dev/null diff --git a/zenxml/doc/search/mag_sel.png b/zenxml/doc/search/mag_sel.png Binary files differdeleted file mode 100644 index 81f6040a..00000000 --- a/zenxml/doc/search/mag_sel.png +++ /dev/null diff --git a/zenxml/doc/search/nomatches.html b/zenxml/doc/search/nomatches.html deleted file mode 100644 index b1ded27e..00000000 --- a/zenxml/doc/search/nomatches.html +++ /dev/null @@ -1,12 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="NoMatches">No Matches</div> -</div> -</body> -</html> diff --git a/zenxml/doc/search/search.css b/zenxml/doc/search/search.css deleted file mode 100644 index 4d7612ff..00000000 --- a/zenxml/doc/search/search.css +++ /dev/null @@ -1,271 +0,0 @@ -/*---------------- Search Box */ - -#FSearchBox { - float: left; -} - -#MSearchBox { - white-space : nowrap; - position: absolute; - float: none; - display: inline; - margin-top: 8px; - right: 0px; - width: 170px; - z-index: 102; - background-color: white; -} - -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; -} - -#MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; -} - -#MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; - border:none; - width:111px; - margin-left:20px; - padding-left:4px; - color: #909090; - outline: none; - font: 9pt Arial, Verdana, sans-serif; -} - -#FSearchBox #MSearchField { - margin-left:15px; -} - -#MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:0px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; -} - -#MSearchClose { - display: none; - position: absolute; - top: 4px; - background : none; - border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; - outline: none; -} - -.left #MSearchClose { - left: 6px; -} - -.right #MSearchClose { - right: 2px; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #90A5CE; - background-color: #F9FAFC; - z-index: 1; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #3D578C; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #EEF1F7; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; -} - -.SRResult { - display: none; -} - -DIV.searchresults { - margin-left: 10px; - margin-right: 10px; -} - -/*---------------- External search page results */ - -.searchresult { - background-color: #F0F3F8; -} - -.pages b { - color: white; - padding: 5px 5px 3px 5px; - background-image: url("../tab_a.png"); - background-repeat: repeat-x; - text-shadow: 0 1px 1px #000000; -} - -.pages { - line-height: 17px; - margin-left: 4px; - text-decoration: none; -} - -.hl { - font-weight: bold; -} - -#searchresults { - margin-bottom: 20px; -} - -.searchpages { - margin-top: 10px; -} - diff --git a/zenxml/doc/search/search.js b/zenxml/doc/search/search.js deleted file mode 100644 index 281d08b7..00000000 --- a/zenxml/doc/search/search.js +++ /dev/null @@ -1,803 +0,0 @@ -// Search script generated by doxygen -// Copyright (C) 2009 by Dimitri van Heesch. - -// The code in this file is loosly based on main.js, part of Natural Docs, -// which is Copyright (C) 2003-2008 Greg Valure -// Natural Docs is licensed under the GPL. - -var indexSectionsWithContent = -{ - 0: "aceglnoprswxz", - 1: "x", - 2: "z", - 3: "aeglnoprswx", - 4: "clr", - 5: "o" -}; - -var indexSectionNames = -{ - 0: "all", - 1: "classes", - 2: "namespaces", - 3: "functions", - 4: "variables", - 5: "pages" -}; - -function convertToId(search) -{ - var result = ''; - for (i=0;i<search.length;i++) - { - var c = search.charAt(i); - var cn = c.charCodeAt(0); - if (c.match(/[a-z0-9\u0080-\uFFFF]/)) - { - result+=c; - } - else if (cn<16) - { - result+="_0"+cn.toString(16); - } - else - { - result+="_"+cn.toString(16); - } - } - return result; -} - -function getXPos(item) -{ - var x = 0; - if (item.offsetWidth) - { - while (item && item!=document.body) - { - x += item.offsetLeft; - item = item.offsetParent; - } - } - return x; -} - -function getYPos(item) -{ - var y = 0; - if (item.offsetWidth) - { - while (item && item!=document.body) - { - y += item.offsetTop; - item = item.offsetParent; - } - } - return y; -} - -/* A class handling everything associated with the search panel. - - Parameters: - name - The name of the global variable that will be - storing this instance. Is needed to be able to set timeouts. - resultPath - path to use for external files -*/ -function SearchBox(name, resultsPath, inFrame, label) -{ - if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } - - // ---------- Instance variables - this.name = name; - this.resultsPath = resultsPath; - this.keyTimeout = 0; - this.keyTimeoutLength = 500; - this.closeSelectionTimeout = 300; - this.lastSearchValue = ""; - this.lastResultsPage = ""; - this.hideTimeout = 0; - this.searchIndex = 0; - this.searchActive = false; - this.insideFrame = inFrame; - this.searchLabel = label; - - // ----------- DOM Elements - - this.DOMSearchField = function() - { return document.getElementById("MSearchField"); } - - this.DOMSearchSelect = function() - { return document.getElementById("MSearchSelect"); } - - this.DOMSearchSelectWindow = function() - { return document.getElementById("MSearchSelectWindow"); } - - this.DOMPopupSearchResults = function() - { return document.getElementById("MSearchResults"); } - - this.DOMPopupSearchResultsWindow = function() - { return document.getElementById("MSearchResultsWindow"); } - - this.DOMSearchClose = function() - { return document.getElementById("MSearchClose"); } - - this.DOMSearchBox = function() - { return document.getElementById("MSearchBox"); } - - // ------------ Event Handlers - - // Called when focus is added or removed from the search field. - this.OnSearchFieldFocus = function(isActive) - { - this.Activate(isActive); - } - - this.OnSearchSelectShow = function() - { - var searchSelectWindow = this.DOMSearchSelectWindow(); - var searchField = this.DOMSearchSelect(); - - if (this.insideFrame) - { - var left = getXPos(searchField); - var top = getYPos(searchField); - left += searchField.offsetWidth + 6; - top += searchField.offsetHeight; - - // show search selection popup - searchSelectWindow.style.display='block'; - left -= searchSelectWindow.offsetWidth; - searchSelectWindow.style.left = left + 'px'; - searchSelectWindow.style.top = top + 'px'; - } - else - { - var left = getXPos(searchField); - var top = getYPos(searchField); - top += searchField.offsetHeight; - - // show search selection popup - searchSelectWindow.style.display='block'; - searchSelectWindow.style.left = left + 'px'; - searchSelectWindow.style.top = top + 'px'; - } - - // stop selection hide timer - if (this.hideTimeout) - { - clearTimeout(this.hideTimeout); - this.hideTimeout=0; - } - return false; // to avoid "image drag" default event - } - - this.OnSearchSelectHide = function() - { - this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()", - this.closeSelectionTimeout); - } - - // Called when the content of the search field is changed. - this.OnSearchFieldChange = function(evt) - { - if (this.keyTimeout) // kill running timer - { - clearTimeout(this.keyTimeout); - this.keyTimeout = 0; - } - - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 || e.keyCode==13) - { - if (e.shiftKey==1) - { - this.OnSearchSelectShow(); - var win=this.DOMSearchSelectWindow(); - for (i=0;i<win.childNodes.length;i++) - { - var child = win.childNodes[i]; // get span within a - if (child.className=='SelectItem') - { - child.focus(); - return; - } - } - return; - } - else if (window.frames.MSearchResults.searchResults) - { - var elem = window.frames.MSearchResults.searchResults.NavNext(0); - if (elem) elem.focus(); - } - } - else if (e.keyCode==27) // Escape out of the search field - { - this.DOMSearchField().blur(); - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.lastSearchValue = ''; - this.Activate(false); - return; - } - - // strip whitespaces - var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); - - if (searchValue != this.lastSearchValue) // search value has changed - { - if (searchValue != "") // non-empty search - { - // set timer for search update - this.keyTimeout = setTimeout(this.name + '.Search()', - this.keyTimeoutLength); - } - else // empty search field - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.lastSearchValue = ''; - } - } - } - - this.SelectItemCount = function(id) - { - var count=0; - var win=this.DOMSearchSelectWindow(); - for (i=0;i<win.childNodes.length;i++) - { - var child = win.childNodes[i]; // get span within a - if (child.className=='SelectItem') - { - count++; - } - } - return count; - } - - this.SelectItemSet = function(id) - { - var i,j=0; - var win=this.DOMSearchSelectWindow(); - for (i=0;i<win.childNodes.length;i++) - { - var child = win.childNodes[i]; // get span within a - if (child.className=='SelectItem') - { - var node = child.firstChild; - if (j==id) - { - node.innerHTML='•'; - } - else - { - node.innerHTML=' '; - } - j++; - } - } - } - - // Called when an search filter selection is made. - // set item with index id as the active item - this.OnSelectItem = function(id) - { - this.searchIndex = id; - this.SelectItemSet(id); - var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); - if (searchValue!="" && this.searchActive) // something was found -> do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down - { - this.searchIndex++; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==38 && this.searchIndex>0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { - idxChar = searchValue.substr(0, 2); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of <Search()>. - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} - -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} - -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} - -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; e<searchData.length; e++) - { - var id = searchData[e][0]; - var srResult = document.createElement('div'); - srResult.setAttribute('id','SR_'+id); - setClassAttr(srResult,'SRResult'); - var srEntry = document.createElement('div'); - setClassAttr(srEntry,'SREntry'); - var srLink = document.createElement('a'); - srLink.setAttribute('id','Item'+e); - setKeyActions(srLink,'return searchResults.Nav(event,'+e+')'); - setClassAttr(srLink,'SRSymbol'); - srLink.innerHTML = searchData[e][1][0]; - srEntry.appendChild(srLink); - if (searchData[e][1].length==2) // single result - { - srLink.setAttribute('href',searchData[e][1][1][0]); - if (searchData[e][1][1][1]) - { - srLink.setAttribute('target','_parent'); - } - var srScope = document.createElement('span'); - setClassAttr(srScope,'SRScope'); - srScope.innerHTML = searchData[e][1][1][2]; - srEntry.appendChild(srScope); - } - else // multiple results - { - srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); - var srChildren = document.createElement('div'); - setClassAttr(srChildren,'SRChildren'); - for (var c=0; c<searchData[e][1].length-1; c++) - { - var srChild = document.createElement('a'); - srChild.setAttribute('id','Item'+e+'_c'+c); - setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')'); - setClassAttr(srChild,'SRScope'); - srChild.setAttribute('href',searchData[e][1][c+1][0]); - if (searchData[e][1][c+1][1]) - { - srChild.setAttribute('target','_parent'); - } - srChild.innerHTML = searchData[e][1][c+1][2]; - srChildren.appendChild(srChild); - } - srEntry.appendChild(srChildren); - } - srResult.appendChild(srEntry); - results.appendChild(srResult); - } -} - diff --git a/zenxml/doc/search/search_l.png b/zenxml/doc/search/search_l.png Binary files differdeleted file mode 100644 index c872f4da..00000000 --- a/zenxml/doc/search/search_l.png +++ /dev/null diff --git a/zenxml/doc/search/search_m.png b/zenxml/doc/search/search_m.png Binary files differdeleted file mode 100644 index b429a16b..00000000 --- a/zenxml/doc/search/search_m.png +++ /dev/null diff --git a/zenxml/doc/search/search_r.png b/zenxml/doc/search/search_r.png Binary files differdeleted file mode 100644 index 97ee8b43..00000000 --- a/zenxml/doc/search/search_r.png +++ /dev/null diff --git a/zenxml/doc/structzen_1_1_xml_error-members.html b/zenxml/doc/structzen_1_1_xml_error-members.html deleted file mode 100644 index d71a4ab6..00000000 --- a/zenxml/doc/structzen_1_1_xml_error-members.html +++ /dev/null @@ -1,105 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Member List</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">zen::XmlError Member List</div> </div> -</div><!--header--> -<div class="contents"> - -<p>This is the complete list of members for <a class="el" href="structzen_1_1_xml_error.html">zen::XmlError</a>, including all inherited members.</p> -<table class="directory"> -</table></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/structzen_1_1_xml_error.html b/zenxml/doc/structzen_1_1_xml_error.html deleted file mode 100644 index 6660274e..00000000 --- a/zenxml/doc/structzen_1_1_xml_error.html +++ /dev/null @@ -1,121 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: zen::XmlError Struct Reference</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="summary"> -<a href="structzen_1_1_xml_error-members.html">List of all members</a> </div> - <div class="headertitle"> -<div class="title">zen::XmlError Struct Reference</div> </div> -</div><!--header--> -<div class="contents"> - -<p>Exception base class for zen::Xml. - <a href="structzen_1_1_xml_error.html#details">More...</a></p> - -<p><code>#include <<a class="el" href="error_8h_source.html">error.h</a>></code></p> -<div class="dynheader"> -Inheritance diagram for zen::XmlError:</div> -<div class="dyncontent"> - <div class="center"> - <img src="structzen_1_1_xml_error.png" usemap="#zen::XmlError_map" alt=""/> - <map id="zen::XmlError_map" name="zen::XmlError_map"> -<area href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O. " alt="zen::XmlFileError" shape="rect" coords="0,56,132,80"/> -<area href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error. " alt="zen::XmlParsingError" shape="rect" coords="142,56,274,80"/> -</map> - </div></div> -<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> -<div class="textblock"><p>Exception base class for zen::Xml. </p> -</div></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/structzen_1_1_xml_error.png b/zenxml/doc/structzen_1_1_xml_error.png Binary files differdeleted file mode 100644 index f1a74bd5..00000000 --- a/zenxml/doc/structzen_1_1_xml_error.png +++ /dev/null diff --git a/zenxml/doc/structzen_1_1_xml_file_error-members.html b/zenxml/doc/structzen_1_1_xml_file_error-members.html deleted file mode 100644 index 1a545d6b..00000000 --- a/zenxml/doc/structzen_1_1_xml_file_error-members.html +++ /dev/null @@ -1,106 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Member List</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">zen::XmlFileError Member List</div> </div> -</div><!--header--> -<div class="contents"> - -<p>This is the complete list of members for <a class="el" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a>, including all inherited members.</p> -<table class="directory"> - <tr class="even"><td class="entry"><a class="el" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">lastError</a></td><td class="entry"><a class="el" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a></td><td class="entry"></td></tr> -</table></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/structzen_1_1_xml_file_error.html b/zenxml/doc/structzen_1_1_xml_file_error.html deleted file mode 100644 index 4a546151..00000000 --- a/zenxml/doc/structzen_1_1_xml_file_error.html +++ /dev/null @@ -1,129 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: zen::XmlFileError Struct Reference</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="summary"> -<a href="#pub-attribs">Public Attributes</a> | -<a href="structzen_1_1_xml_file_error-members.html">List of all members</a> </div> - <div class="headertitle"> -<div class="title">zen::XmlFileError Struct Reference</div> </div> -</div><!--header--> -<div class="contents"> - -<p>Exception thrown due to failed file I/O. - <a href="structzen_1_1_xml_file_error.html#details">More...</a></p> - -<p><code>#include <<a class="el" href="io_8h_source.html">io.h</a>></code></p> -<div class="dynheader"> -Inheritance diagram for zen::XmlFileError:</div> -<div class="dyncontent"> - <div class="center"> - <img src="structzen_1_1_xml_file_error.png" usemap="#zen::XmlFileError_map" alt=""/> - <map id="zen::XmlFileError_map" name="zen::XmlFileError_map"> -<area href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml. " alt="zen::XmlError" shape="rect" coords="0,0,110,24"/> -</map> - </div></div> -<table class="memberdecls"> -<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> -Public Attributes</h2></td></tr> -<tr class="memitem:a4a109e749675a3887af8cfc140303b8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a109e749675a3887af8cfc140303b8f"></a> -ErrorCode </td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">lastError</a></td></tr> -<tr class="memdesc:a4a109e749675a3887af8cfc140303b8f"><td class="mdescLeft"> </td><td class="mdescRight">Native error code: errno. <br/></td></tr> -<tr class="separator:a4a109e749675a3887af8cfc140303b8f"><td class="memSeparator" colspan="2"> </td></tr> -</table> -<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> -<div class="textblock"><p>Exception thrown due to failed file I/O. </p> -</div></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/structzen_1_1_xml_file_error.png b/zenxml/doc/structzen_1_1_xml_file_error.png Binary files differdeleted file mode 100644 index dc28e3bf..00000000 --- a/zenxml/doc/structzen_1_1_xml_file_error.png +++ /dev/null diff --git a/zenxml/doc/structzen_1_1_xml_parsing_error-members.html b/zenxml/doc/structzen_1_1_xml_parsing_error-members.html deleted file mode 100644 index 570b20f6..00000000 --- a/zenxml/doc/structzen_1_1_xml_parsing_error-members.html +++ /dev/null @@ -1,107 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: Member List</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">zen::XmlParsingError Member List</div> </div> -</div><!--header--> -<div class="contents"> - -<p>This is the complete list of members for <a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a>, including all inherited members.</p> -<table class="directory"> - <tr class="even"><td class="entry"><a class="el" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">col</a></td><td class="entry"><a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></td><td class="entry"></td></tr> - <tr><td class="entry"><a class="el" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">row</a></td><td class="entry"><a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></td><td class="entry"></td></tr> -</table></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/structzen_1_1_xml_parsing_error.html b/zenxml/doc/structzen_1_1_xml_parsing_error.html deleted file mode 100644 index a41efc36..00000000 --- a/zenxml/doc/structzen_1_1_xml_parsing_error.html +++ /dev/null @@ -1,133 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: zen::XmlParsingError Struct Reference</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="annotated.html"><span>Class List</span></a></li> - <li><a href="classes.html"><span>Class Index</span></a></li> - <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> - <li><a href="functions.html"><span>Class Members</span></a></li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="summary"> -<a href="#pub-attribs">Public Attributes</a> | -<a href="structzen_1_1_xml_parsing_error-members.html">List of all members</a> </div> - <div class="headertitle"> -<div class="title">zen::XmlParsingError Struct Reference</div> </div> -</div><!--header--> -<div class="contents"> - -<p>Exception thrown due to an XML parsing error. - <a href="structzen_1_1_xml_parsing_error.html#details">More...</a></p> - -<p><code>#include <<a class="el" href="parser_8h_source.html">parser.h</a>></code></p> -<div class="dynheader"> -Inheritance diagram for zen::XmlParsingError:</div> -<div class="dyncontent"> - <div class="center"> - <img src="structzen_1_1_xml_parsing_error.png" usemap="#zen::XmlParsingError_map" alt=""/> - <map id="zen::XmlParsingError_map" name="zen::XmlParsingError_map"> -<area href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml. " alt="zen::XmlError" shape="rect" coords="0,0,132,24"/> -</map> - </div></div> -<table class="memberdecls"> -<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> -Public Attributes</h2></td></tr> -<tr class="memitem:a3ed4cd1b5599df9b52500f620421496e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ed4cd1b5599df9b52500f620421496e"></a> -size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">row</a></td></tr> -<tr class="memdesc:a3ed4cd1b5599df9b52500f620421496e"><td class="mdescLeft"> </td><td class="mdescRight">Input file row where the parsing error occured (zero-based) <br/></td></tr> -<tr class="separator:a3ed4cd1b5599df9b52500f620421496e"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a4a37dc48883337499804a9dc791669fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a37dc48883337499804a9dc791669fd"></a> -size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">col</a></td></tr> -<tr class="memdesc:a4a37dc48883337499804a9dc791669fd"><td class="mdescLeft"> </td><td class="mdescRight">Input file column where the parsing error occured (zero-based) <br/></td></tr> -<tr class="separator:a4a37dc48883337499804a9dc791669fd"><td class="memSeparator" colspan="2"> </td></tr> -</table> -<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> -<div class="textblock"><p>Exception thrown due to an XML parsing error. </p> -</div></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/doc/structzen_1_1_xml_parsing_error.png b/zenxml/doc/structzen_1_1_xml_parsing_error.png Binary files differdeleted file mode 100644 index fc7e6dfa..00000000 --- a/zenxml/doc/structzen_1_1_xml_parsing_error.png +++ /dev/null diff --git a/zenxml/doc/tab_a.png b/zenxml/doc/tab_a.png Binary files differdeleted file mode 100644 index 3b725c41..00000000 --- a/zenxml/doc/tab_a.png +++ /dev/null diff --git a/zenxml/doc/tab_b.png b/zenxml/doc/tab_b.png Binary files differdeleted file mode 100644 index e2b4a863..00000000 --- a/zenxml/doc/tab_b.png +++ /dev/null diff --git a/zenxml/doc/tab_h.png b/zenxml/doc/tab_h.png Binary files differdeleted file mode 100644 index fd5cb705..00000000 --- a/zenxml/doc/tab_h.png +++ /dev/null diff --git a/zenxml/doc/tab_s.png b/zenxml/doc/tab_s.png Binary files differdeleted file mode 100644 index ab478c95..00000000 --- a/zenxml/doc/tab_s.png +++ /dev/null diff --git a/zenxml/doc/tabs.css b/zenxml/doc/tabs.css deleted file mode 100644 index 9cf578f2..00000000 --- a/zenxml/doc/tabs.css +++ /dev/null @@ -1,60 +0,0 @@ -.tabs, .tabs2, .tabs3 { - background-image: url('tab_b.png'); - width: 100%; - z-index: 101; - font-size: 13px; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; -} - -.tabs2 { - font-size: 10px; -} -.tabs3 { - font-size: 9px; -} - -.tablist { - margin: 0; - padding: 0; - display: table; -} - -.tablist li { - float: left; - display: table-cell; - background-image: url('tab_b.png'); - line-height: 36px; - list-style: none; -} - -.tablist a { - display: block; - padding: 0 20px; - font-weight: bold; - background-image:url('tab_s.png'); - background-repeat:no-repeat; - background-position:right; - color: #283A5D; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; - outline: none; -} - -.tabs3 .tablist a { - padding: 0 10px; -} - -.tablist a:hover { - background-image: url('tab_h.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); - text-decoration: none; -} - -.tablist li.current a { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} diff --git a/zenxml/doc/xml_8h_source.html b/zenxml/doc/xml_8h_source.html deleted file mode 100644 index 74d4da9f..00000000 --- a/zenxml/doc/xml_8h_source.html +++ /dev/null @@ -1,108 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>zen::Xml: xml.h Source File</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div id="nav-path" class="navpath"> - <ul> -<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> -</div> -</div><!-- top --> -<div class="header"> - <div class="headertitle"> -<div class="title">xml.h</div> </div> -</div><!--header--> -<div class="contents"> -<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> -<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> -<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> -<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> -<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> -<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_HEADER_349578228034572457454554</span></div> -<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_HEADER_349578228034572457454554</span></div> -<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> -<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include "bind.h"</span></div> -<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div> -<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span>zen {}</div> -<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div> -<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#endif //ZEN_XML_HEADER_349578228034572457454554</span></div> -</div><!-- fragment --></div><!-- contents --> -<!-- start footer part --> -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.6 -</small></address> -</body> -</html> diff --git a/zenxml/zenxml/bind.h b/zenxml/zenxml/bind.h deleted file mode 100644 index e66d841b..00000000 --- a/zenxml/zenxml/bind.h +++ /dev/null @@ -1,390 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef ZEN_XML_BIND_HEADER_9081740816593478258435 -#define ZEN_XML_BIND_HEADER_9081740816593478258435 - -#include <set> -#include "cvrt_struc.h" -#include "parser.h" -#include "io.h" - -namespace zen -{ -/** -\file -\brief Map user data types to XML -*/ - -///Load XML document from a file -/** -Convenience function that does nothing more than calling loadStream() and parse(). - -\tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... -\param filename Input file name -\returns The loaded XML document -\throw XmlFileError -\throw XmlParsingError -*/ -template <class String> inline -XmlDoc load(const String& filename) //throw XmlFileError, XmlParsingError -{ - std::string stream = loadStream(filename); //throw XmlFileError - return parse(stream); //throw XmlParsingError -} - - -///Save XML document to a file -/** -Convenience function that does nothing more than calling serialize() and saveStream(). - -\tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... -\param doc The XML document to save -\param filename Output file name -\param lineBreak Line break, default: carriage return + new line -\param indent Indentation, default: four space characters -\throw XmlFileError -*/ -template <class String> inline -void save(const XmlDoc& doc, - const String& filename, - const std::string& lineBreak = "\r\n", - const std::string& indent = " ") //throw XmlFileError -{ - std::string stream = serialize(doc, lineBreak, indent); //throw () - saveStream(stream, filename); //throw XmlFileError -} - - -///Proxy class to conveniently convert user data into XML structure -class XmlOut -{ -public: - ///Construct an output proxy for an XML document - /** - \code - zen::XmlDoc doc; - - zen::XmlOut out(doc); - out["elem1"]( 1); // - out["elem2"]( 2); //write data into XML elements - out["elem3"](-3); // - - save(doc, "out.xml"); //throw XmlFileError - \endcode - Output: - \verbatim - <?xml version="1.0" encoding="UTF-8"?> - <Root> - <elem1>1</elem1> - <elem2>2</elem2> - <elem3>-3</elem3> - </Root> - \endverbatim - */ - XmlOut(XmlDoc& doc) : ref_(&doc.root()) {} - ///Construct an output proxy for a single XML element - /** - \sa XmlOut(XmlDoc& doc) - */ - XmlOut(XmlElement& element) : ref_(&element) {} - - ///Retrieve a handle to an XML child element for writing - /** - The child element will be created if it is not yet existing. - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - \param name The name of the child element - */ - template <class String> - XmlOut operator[](const String& name) const - { - const std::string utf8name = utfCvrtTo<std::string>(name); - XmlElement* child = ref_->getChild(utf8name); - return child ? *child : ref_->addChild(utf8name); - } - - ///Write user data to the underlying XML element - /** - This conversion requires a specialization of zen::writeText() or zen::writeStruc() for type T. - \tparam T User type that is converted into an XML element value. - */ - template <class T> - void operator()(const T& value) { writeStruc(value, *ref_); } - - ///Write user data to an XML attribute - /** - This conversion requires a specialization of zen::writeText() for type T. - \code - zen::XmlDoc doc; - - zen::XmlOut out(doc); - out["elem"].attribute("attr1", 1); // - out["elem"].attribute("attr2", 2); //write data into XML attributes - out["elem"].attribute("attr3", -3); // - - save(doc, "out.xml"); //throw XmlFileError - \endcode - Output: - \verbatim - <?xml version="1.0" encoding="UTF-8"?> - <Root> - <elem attr1="1" attr2="2" attr3="-3"/> - </Root> - \endverbatim - - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - \tparam T String-convertible user data type: e.g. any string-like type, all built-in arithmetic numbers - \sa XmlElement::setAttribute() - */ - template <class String, class T> - void attribute(const String& name, const T& value) { ref_->setAttribute(name, value); } - - ///Return a reference to the underlying Xml element - XmlElement& ref() { return *ref_; } - -private: - XmlElement* ref_; //always bound! -}; - - -///Proxy class to conveniently convert XML structure to user data -class XmlIn -{ - class ErrorLog; - struct ConversionToBool { int dummy; }; - -public: - ///Construct an input proxy for an XML document - /** - \code - zen::XmlDoc doc; - ... //load document - zen::XmlIn in(doc); - in["elem1"](value1); // - in["elem2"](value2); //read data from XML elements into variables "value1", "value2", "value3" - in["elem3"](value3); // - \endcode - */ - XmlIn(const XmlDoc& doc) : refIndex(0), log(std::make_shared<ErrorLog>()) { refList.push_back(&doc.root()); } - ///Construct an input proxy for a single XML element, may be nullptr - /** - \sa XmlIn(const XmlDoc& doc) - */ - XmlIn(const XmlElement* element) : refIndex(0), log(std::make_shared<ErrorLog>()) { refList.push_back(element); } - ///Construct an input proxy for a single XML element - /** - \sa XmlIn(const XmlDoc& doc) - */ - XmlIn(const XmlElement& element) : refIndex(0), log(std::make_shared<ErrorLog>()) { refList.push_back(&element); } - - ///Retrieve a handle to an XML child element for reading - /** - It is \b not an error if the child element does not exist, but only later if a conversion to user data is attempted. - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - \param name The name of the child element - */ - template <class String> - XmlIn operator[](const String& name) const - { - std::vector<const XmlElement*> childList; - - if (refIndex < refList.size()) - { - auto iterPair = refList[refIndex]->getChildren(name); - std::for_each(iterPair.first, iterPair.second, - [&](const XmlElement& child) { childList.push_back(&child); }); - } - - return XmlIn(childList, childList.empty() ? getChildNameFormatted(name) : std::string(), log); - } - - ///Refer to next sibling element with the same name - /** - <b>Example:</b> Loop over all XML child elements named "Item" - \verbatim - <?xml version="1.0" encoding="UTF-8"?> - <Root> - <Item>1</Item> - <Item>3</Item> - <Item>5</Item> - </Root> - \endverbatim - - \code - zen::XmlIn in(doc); - ... - for (zen::XmlIn child = in["Item"]; child; child.next()) - { - ... - } - \endcode - */ - void next() { ++refIndex; } - - ///Read user data from the underlying XML element - /** - This conversion requires a specialization of zen::readText() or zen::readStruc() for type T. - \tparam T User type that receives the data - \return "true" if data was read successfully - */ - template <class T> - bool operator()(T& value) const - { - if (refIndex < refList.size()) - { - bool success = readStruc(*refList[refIndex], value); - if (!success) - log->notifyConversionError(getNameFormatted()); - return success; - } - else - { - log->notifyMissingElement(getNameFormatted()); - return false; - } - } - - ///Read user data from an XML attribute - /** - This conversion requires a specialization of zen::readText() for type T. - - \code - zen::XmlDoc doc; - ... //load document - zen::XmlIn in(doc); - in["elem"].attribute("attr1", value1); // - in["elem"].attribute("attr2", value2); //read data from XML attributes into variables "value1", "value2", "value3" - in["elem"].attribute("attr3", value3); // - \endcode - - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - \tparam T String-convertible user data type: e.g. any string-like type, all built-in arithmetic numbers - \returns "true" if the attribute was found and the conversion to the output value was successful. - \sa XmlElement::getAttribute() - */ - template <class String, class T> - bool attribute(const String& name, T& value) const - { - if (refIndex < refList.size()) - { - bool success = refList[refIndex]->getAttribute(name, value); - if (!success) - log->notifyMissingAttribute(getNameFormatted(), utfCvrtTo<std::string>(name)); - return success; - } - else - { - log->notifyMissingElement(getNameFormatted()); - return false; - } - } - - ///Return a pointer to the underlying Xml element, may be nullptr - const XmlElement* get() const { return refIndex < refList.size() ? refList[refIndex] : nullptr; } - - ///Test whether the underlying XML element exists - /** - \code - XmlIn in(doc); - XmlIn child = in["elem1"]; - if (child) - ... - \endcode - Use member pointer as implicit conversion to bool (C++ Templates - Vandevoorde/Josuttis; chapter 20) - */ - operator int ConversionToBool::* () const { return get() ? &ConversionToBool::dummy : nullptr; } - - ///Notifies errors while mapping the XML to user data - /** - Error logging is shared by each hiearchy of XmlIn proxy instances that are created from each other. Consequently it doesn't matter which instance you query for errors: - \code - XmlIn in(doc); - XmlIn inItem = in["item1"]; - - int value = 0; - inItem(value); //let's assume this conversion failed - - assert(in.errorsOccured() == inItem.errorsOccured()); - assert(in.getErrorsAs<std::string>() == inItem.getErrorsAs<std::string>()); - \endcode - - Note that error logging is \b NOT global, but owned by all instances of a hierarchy of XmlIn proxies. - Therefore it's safe to use unrelated XmlIn proxies in multiple threads. - \n\n - However be aware that the chain of connected proxy instances will be broken once you call XmlIn::get() to retrieve the underlying pointer. - Errors that occur when working with this pointer are not logged by the original set of related instances. - */ - bool errorsOccured() const { return !log->elementList().empty(); } - - ///Get a list of XML element and attribute names which failed to convert to user data. - /** - \tparam String Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... - \returns A list of XML element and attribute names, empty list if no errors occured. - */ - template <class String> - std::vector<String> getErrorsAs() const - { - std::vector<String> output; - const auto& elements = log->elementList(); - std::transform(elements.begin(), elements.end(), std::back_inserter(output), [](const std::string& str) { return utfCvrtTo<String>(str); }); - return output; - } - -private: - XmlIn(const std::vector<const XmlElement*>& siblingList, const std::string& elementNameFmt, const std::shared_ptr<ErrorLog>& sharedlog) : - refList(siblingList), refIndex(0), formattedName(elementNameFmt), log(sharedlog) - { assert((!siblingList.empty() && elementNameFmt.empty()) || (siblingList.empty() && !elementNameFmt.empty())); } - - static std::string getNameFormatted(const XmlElement& elem) //"<Root> <Level1> <Level2>" - { - return (elem.parent() ? getNameFormatted(*elem.parent()) + " " : std::string()) + "<" + elem.getNameAs<std::string>() + ">"; - } - - std::string getNameFormatted() const - { - if (refIndex < refList.size()) - { - assert(formattedName.empty()); - return getNameFormatted(*refList[refIndex]); - } - else - return formattedName; - } - - std::string getChildNameFormatted(const std::string& childName) const - { - std::string parentName = getNameFormatted(); - return (parentName.empty() ? std::string() : (parentName + " ")) + "<" + childName + ">"; - } - - class ErrorLog - { - public: - void notifyConversionError (const std::string& formattedName) { insert(formattedName); } - void notifyMissingElement (const std::string& formattedName) { insert(formattedName); } - void notifyMissingAttribute(const std::string& formattedName, const std::string& attribName) { insert(formattedName + " @" + attribName); } - - const std::vector<std::string>& elementList() const { return failedElements; } - - private: - void insert(const std::string& newVal) - { - if (usedElements.insert(newVal).second) - failedElements.push_back(newVal); - } - - std::vector<std::string> failedElements; //unique list of failed elements - std::set<std::string> usedElements; - }; - - std::vector<const XmlElement*> refList; //all sibling elements with same name (all pointers bound!) - size_t refIndex; //this sibling's index in refList - std::string formattedName; //contains full and formatted element name if (and only if) refList is empty - std::shared_ptr<ErrorLog> log; //always bound -}; -} - -#endif //ZEN_XML_BIND_HEADER_9081740816593478258435 diff --git a/zenxml/zenxml/cvrt_struc.h b/zenxml/zenxml/cvrt_struc.h deleted file mode 100644 index ceb4297d..00000000 --- a/zenxml/zenxml/cvrt_struc.h +++ /dev/null @@ -1,211 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743 -#define ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743 - -#include "dom.h" - -namespace zen -{ -/** -\file -\brief Handle conversion of arbitrary types to and from XML elements. -See comments in cvrt_text.h -*/ - -///Convert XML element to structured user data -/** - \param input The input XML element. - \param value Conversion target value. - \return "true" if value was read successfully. -*/ -template <class T> bool readStruc(const XmlElement& input, T& value); -///Convert structured user data into an XML element -/** - \param value The value to be converted. - \param output The output XML element. -*/ -template <class T> void writeStruc(const T& value, XmlElement& output); - - - - - - - - - - - - - - - - - -//------------------------------ implementation ------------------------------------- -namespace impl_2384343 -{ -ZEN_INIT_DETECT_MEMBER_TYPE(value_type); -ZEN_INIT_DETECT_MEMBER_TYPE(iterator); -ZEN_INIT_DETECT_MEMBER_TYPE(const_iterator); - -ZEN_INIT_DETECT_MEMBER(begin) // -ZEN_INIT_DETECT_MEMBER(end) //we don't know the exact declaration of the member attribute: may be in a base class! -ZEN_INIT_DETECT_MEMBER(insert) // -} - -template <typename T> -struct IsStlContainer : - StaticBool< - impl_2384343::HasMemberType_value_type <T>::value&& - impl_2384343::HasMemberType_iterator <T>::value&& - impl_2384343::HasMemberType_const_iterator<T>::value&& - impl_2384343::HasMember_begin <T>::value&& - impl_2384343::HasMember_end <T>::value&& - impl_2384343::HasMember_insert <T>::value> {}; - - -namespace impl_2384343 -{ -ZEN_INIT_DETECT_MEMBER_TYPE(first_type); -ZEN_INIT_DETECT_MEMBER_TYPE(second_type); - -ZEN_INIT_DETECT_MEMBER(first) //we don't know the exact declaration of the member attribute: may be in a base class! -ZEN_INIT_DETECT_MEMBER(second) // -} - -template <typename T> -struct IsStlPair : - StaticBool< - impl_2384343::HasMemberType_first_type <T>::value&& - impl_2384343::HasMemberType_second_type<T>::value&& - impl_2384343::HasMember_first <T>::value&& - impl_2384343::HasMember_second <T>::value> {}; - -//###################################################################################### - -//Conversion from arbitrary types to an XML element -enum ValueType -{ - VALUE_TYPE_STL_CONTAINER, - VALUE_TYPE_STL_PAIR, - VALUE_TYPE_OTHER, -}; - -template <class T> -struct GetValueType : StaticEnum<ValueType, - GetTextType<T>::value != TEXT_TYPE_OTHER ? VALUE_TYPE_OTHER : //some string classes are also STL containers, so check this first - IsStlContainer<T>::value ? VALUE_TYPE_STL_CONTAINER : - IsStlPair<T>::value ? VALUE_TYPE_STL_PAIR : - VALUE_TYPE_OTHER> {}; - - -template <class T, ValueType type> -struct ConvertElement; -/* -> expected interface -{ - void writeStruc(const T& value, XmlElement& output) const; - bool readStruc(const XmlElement& input, T& value) const; -}; -*/ - - -//partial specialization: handle conversion for all STL-container types! -template <class T> -struct ConvertElement<T, VALUE_TYPE_STL_CONTAINER> -{ - void writeStruc(const T& value, XmlElement& output) const - { - std::for_each(value.begin(), value.end(), - [&](const typename T::value_type & childVal) - { - XmlElement& newChild = output.addChild("Item"); - zen::writeStruc(childVal, newChild); - }); - } - bool readStruc(const XmlElement& input, T& value) const - { - bool success = true; - value.clear(); - - auto iterPair = input.getChildren("Item"); - for (auto iter = iterPair.first; iter != iterPair.second; ++iter) - { - typename T::value_type childVal; //MSVC 2010 bug: cannot put this into a lambda body - if (zen::readStruc(*iter, childVal)) - value.insert(value.end(), childVal); - else - success = false; - } - return success; - } -}; - - -//partial specialization: handle conversion for std::pair -template <class T> -struct ConvertElement<T, VALUE_TYPE_STL_PAIR> -{ - void writeStruc(const T& value, XmlElement& output) const - { - XmlElement& child1 = output.addChild("one"); //don't use "1st/2nd", this will confuse a few pedantic XML parsers - zen::writeStruc(value.first, child1); - - XmlElement& child2 = output.addChild("two"); - zen::writeStruc(value.second, child2); - } - bool readStruc(const XmlElement& input, T& value) const - { - bool success = true; - const XmlElement* child1 = input.getChild("one"); - if (!child1 || !zen::readStruc(*child1, value.first)) - success = false; - - const XmlElement* child2 = input.getChild("two"); - if (!child2 || !zen::readStruc(*child2, value.second)) - success = false; - - return success; - } -}; - - -//partial specialization: not a pure structured type, try text conversion (thereby respect user specializations of writeText()/readText()) -template <class T> -struct ConvertElement<T, VALUE_TYPE_OTHER> -{ - void writeStruc(const T& value, XmlElement& output) const - { - std::string tmp; - writeText(value, tmp); - output.setValue(tmp); - } - bool readStruc(const XmlElement& input, T& value) const - { - std::string rawStr; - input.getValue(rawStr); - return readText(rawStr, value); - } -}; - - -template <class T> inline -void writeStruc(const T& value, XmlElement& output) -{ - ConvertElement<T, GetValueType<T>::value>().writeStruc(value, output); -} - - -template <class T> inline -bool readStruc(const XmlElement& input, T& value) -{ - return ConvertElement<T, GetValueType<T>::value>().readStruc(input, value); -} -} - -#endif //ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743 diff --git a/zenxml/zenxml/cvrt_text.h b/zenxml/zenxml/cvrt_text.h deleted file mode 100644 index 43272d48..00000000 --- a/zenxml/zenxml/cvrt_text.h +++ /dev/null @@ -1,222 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434 -#define ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434 - -#include <zen/utf.h> -#include <zen/string_tools.h> - -namespace zen -{ -/** -\file -\brief Handle conversion of string-convertible types to and from std::string. - -It is \b not required to call these functions directly. They are implicitly used by zen::XmlElement::getValue(), -zen::XmlElement::setValue(), zen::XmlElement::getAttribute() and zen::XmlElement::setAttribute(). -\n\n -Conversions for the following user types are supported by default: - - strings - std::string, std::wstring, char*, wchar_t*, char, wchar_t, ect..., all STL-compatible-string-classes - - numbers - int, double, float, bool, long, ect..., all built-in numbers - - STL containers - std::map, std::set, std::vector, std::list, ect..., all STL-compatible-containers - - std::pair - -You can add support for additional types via template specialization. \n\n -Specialize zen::readStruc() and zen::writeStruc() to enable conversion from structured user types to XML elements. -Specialize zen::readText() and zen::writeText() to enable conversion from string-convertible user types to std::string. -Prefer latter if possible since it does not only enable conversions from XML elements to user data, but also from and to XML attributes. -\n\n -<b> Example: </b> type "bool" -\code -namespace zen -{ -template <> inline -void writeText(const bool& value, std::string& output) -{ - output = value ? "true" : "false"; -} - -template <> inline -bool readText(const std::string& input, bool& value) -{ - std::string tmp = input; - zen::trim(tmp); - if (tmp == "true") - value = true; - else if (tmp == "false") - value = false; - else - return false; - return true; -} -} -\endcode -*/ - - -///Convert text to user data - used by XML elements and attributes -/** - \param input Input text. - \param value Conversion target value. - \return "true" if value was read successfully. -*/ -template <class T> bool readText(const std::string& input, T& value); -///Convert user data into text - used by XML elements and attributes -/** - \param value The value to be converted. - \param output Output text. -*/ -template <class T> void writeText(const T& value, std::string& output); - - -/* Different classes of data types: - ------------------------------ -| structured | readStruc/writeStruc - e.g. string-convertible types, STL containers, std::pair, structured user types -| ------------------------- | -| | to-string-convertible | | readText/writeText - e.g. string-like types, all built-in arithmetic numbers, bool -| | --------------- | | -| | | string-like | | | utfCvrtTo - e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... -| | --------------- | | -| ------------------------- | ------------------------------ -*/ - - - - - - - - - - - - - - - -//------------------------------ implementation ------------------------------------- - -//Conversion from arbitrary types to text (for use with XML elements and attributes) -enum TextType -{ - TEXT_TYPE_BOOL, - TEXT_TYPE_NUMBER, - TEXT_TYPE_STRING, - TEXT_TYPE_OTHER, -}; - -template <class T> -struct GetTextType : StaticEnum<TextType, - IsSameType<T, bool>::value ? TEXT_TYPE_BOOL : - IsStringLike<T>::value ? TEXT_TYPE_STRING : //string before number to correctly handle char/wchar_t -> this was an issue with Loki only! - IsArithmetic<T>::value ? TEXT_TYPE_NUMBER : // - TEXT_TYPE_OTHER> {}; - -//###################################################################################### - -template <class T, TextType type> -struct ConvertText; -/* -> expected interface -{ - void writeText(const T& value, std::string& output) const; - bool readText(const std::string& input, T& value) const; -}; -*/ - -//partial specialization: type bool -template <class T> -struct ConvertText<T, TEXT_TYPE_BOOL> -{ - void writeText(bool value, std::string& output) const - { - output = value ? "true" : "false"; - } - bool readText(const std::string& input, bool& value) const - { - std::string tmp = input; - zen::trim(tmp); - if (tmp == "true") - value = true; - else if (tmp == "false") - value = false; - else - return false; - return true; - } -}; - -//partial specialization: handle conversion for all built-in arithmetic types! -template <class T> -struct ConvertText<T, TEXT_TYPE_NUMBER> -{ - void writeText(const T& value, std::string& output) const - { - output = numberTo<std::string>(value); - } - bool readText(const std::string& input, T& value) const - { - value = stringTo<T>(input); - return true; - } -}; - -//partial specialization: handle conversion for all string-like types! -template <class T> -struct ConvertText<T, TEXT_TYPE_STRING> -{ - void writeText(const T& value, std::string& output) const - { - output = utfCvrtTo<std::string>(value); - } - bool readText(const std::string& input, T& value) const - { - value = utfCvrtTo<T>(input); - return true; - } -}; - - -//partial specialization: unknown type -template <class T> -struct ConvertText<T, TEXT_TYPE_OTHER> -{ - //########################################################################################################################################### - assert_static(sizeof(T) == -1); - /* - ATTENTION: The data type T is yet unknown to the zen::Xml framework! - - Please provide a specialization for T of the following two functions in order to handle conversions to XML elements and attributes - - template <> void zen::writeText(const T& value, std::string& output) - template <> bool zen::readText(const std::string& input, T& value) - - If T is structured and cannot be converted to a text representation specialize these two functions to allow at least for conversions to XML elements: - - template <> void zen::writeStruc(const T& value, XmlElement& output) - template <> bool zen::readStruc(const XmlElement& input, T& value) - */ - //########################################################################################################################################### -}; - - -template <class T> inline -void writeText(const T& value, std::string& output) -{ - ConvertText<T, GetTextType<T>::value>().writeText(value, output); -} - - -template <class T> inline -bool readText(const std::string& input, T& value) -{ - return ConvertText<T, GetTextType<T>::value>().readText(input, value); -} -} - -#endif //ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434 diff --git a/zenxml/zenxml/dom.h b/zenxml/zenxml/dom.h deleted file mode 100644 index cb5e5aab..00000000 --- a/zenxml/zenxml/dom.h +++ /dev/null @@ -1,335 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef ZEN_XML_DOM_HEADER_82085720723894567204564256 -#define ZEN_XML_DOM_HEADER_82085720723894567204564256 - -#include <string> -#include <vector> -#include <memory> -#include <map> -#include "cvrt_text.h" //"readText/writeText" - -namespace zen -{ -class XmlDoc; - -/// An XML element -class XmlElement -{ - struct PrivateConstruction {}; -public: - //Construct an empty XML element - //This constructor should be private, however std::make_shared() requires public access - //Therefore at least prevent users from calling it via private dummy type PrivateConstruction - template <class String> - XmlElement(const String& name, XmlElement* parentElement, PrivateConstruction) : name_(utfCvrtTo<std::string>(name)), parent_(parentElement) {} - - ///Retrieve the name of this XML element. - /** - \tparam String Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... - \returns Name of the XML element. - */ - template <class String> - String getNameAs() const { return utfCvrtTo<String>(name_); } - - ///Get the value of this element as a user type. - /** - \tparam T Arbitrary user data type: e.g. any string class, all built-in arithmetic numbers, STL container, ... - \returns "true" if Xml element was successfully converted to value, cannot fail for string-like types - */ - template <class T> - bool getValue(T& value) const { return readStruc(*this, value); } - - ///Set the value of this element. - /** - \tparam T Arbitrary user data type: e.g. any string-like type, all built-in arithmetic numbers, STL container, ... - */ - template <class T> - void setValue(const T& value) { writeStruc(value, *this); } - - ///Retrieve an attribute by name. - /** - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - \tparam T String-convertible user data type: e.g. any string class, all built-in arithmetic numbers - \param name The name of the attribute to retrieve. - \param value The value of the attribute converted to T. - \return "true" if value was retrieved successfully. - */ - template <class String, class T> - bool getAttribute(const String& name, T& value) const - { - auto it = attributes.find(utfCvrtTo<std::string>(name)); - return it == attributes.end() ? false : readText(it->second, value); - } - - ///Create or update an XML attribute. - /** - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - \tparam T String-convertible user data type: e.g. any string-like type, all built-in arithmetic numbers - \param name The name of the attribute to create or update. - \param value The value to set. - */ - template <class String, class T> - void setAttribute(const String& name, const T& value) - { - std::string attrValue; - writeText(value, attrValue); - attributes[utfCvrtTo<std::string>(name)] = attrValue; - } - - ///Remove the attribute with the given name. - /** - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - */ - template <class String> - void removeAttribute(const String& name) { attributes.erase(utfCvrtTo<std::string>(name)); } - - ///Create a new child element and return a reference to it. - /** - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - \param name The name of the child element to be created. - */ - template <class String> - XmlElement& addChild(const String& name) - { - std::string utf8Name = utfCvrtTo<std::string>(name); - auto newElement = std::make_shared<XmlElement>(utf8Name, this, PrivateConstruction()); - childElements.push_back(newElement); - childElementsSorted.insert(std::make_pair(utf8Name, newElement)); - return *newElement; - } - - ///Retrieve a child element with the given name. - /** - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - \param name The name of the child element to be retrieved. - \return A pointer to the child element or nullptr if none was found. - */ - template <class String> - const XmlElement* getChild(const String& name) const - { - auto it = childElementsSorted.find(utfCvrtTo<std::string>(name)); - return it == childElementsSorted.end() ? nullptr : &*(it->second); - } - - ///\sa getChild - template <class String> - XmlElement* getChild(const String& name) - { - return const_cast<XmlElement*>(static_cast<const XmlElement*>(this)->getChild(name)); - } - - template < class IterTy, //underlying iterator type - class T, //target object type - class AccessPolicy > //access policy: see AccessPtrMap - class PtrIter : public std::iterator<std::input_iterator_tag, T>, private AccessPolicy //get rid of shared_ptr indirection - { - public: - PtrIter(IterTy it) : it_(it) {} - PtrIter(const PtrIter& other) : it_(other.it_) {} - PtrIter& operator++() { ++it_; return *this; } - PtrIter operator++(int) { PtrIter tmp(*this); operator++(); return tmp; } - inline friend bool operator==(const PtrIter& lhs, const PtrIter& rhs) { return lhs.it_ == rhs.it_; } - inline friend bool operator!=(const PtrIter& lhs, const PtrIter& rhs) { return !(lhs == rhs); } - T& operator* () { return AccessPolicy::template objectRef<T>(it_); } - T* operator->() { return &AccessPolicy::template objectRef<T>(it_); } - private: - IterTy it_; - }; - - struct AccessPtrMap - { - template <class T, class IterTy> - T& objectRef(const IterTy& it) { return *(it->second); } - }; - - typedef PtrIter<std::multimap<std::string, std::shared_ptr<XmlElement>>::iterator, XmlElement, AccessPtrMap> ChildIter2; - typedef PtrIter<std::multimap<std::string, std::shared_ptr<XmlElement>>::const_iterator, const XmlElement, AccessPtrMap> ChildIterConst2; - - ///Access all child elements with the given name via STL iterators. - /** - \code - auto iterPair = elem.getChildren("Item"); - std::for_each(iterPair.first, iterPair.second, - [](const XmlElement& child) { ... }); - \endcode - \param name The name of the child elements to be retrieved. - \return A pair of STL begin/end iterators to access the child elements sequentially. - */ - template <class String> - std::pair<ChildIterConst2, ChildIterConst2> getChildren(const String& name) const { return childElementsSorted.equal_range(utfCvrtTo<std::string>(name)); } - - ///\sa getChildren - template <class String> - std::pair<ChildIter2, ChildIter2> getChildren(const String& name) { return childElementsSorted.equal_range(utfCvrtTo<std::string>(name)); } - - struct AccessPtrVec - { - template <class T, class IterTy> - T& objectRef(const IterTy& it) { return **it; } - }; - - typedef PtrIter<std::vector<std::shared_ptr<XmlElement>>::iterator, XmlElement, AccessPtrVec> ChildIter; - typedef PtrIter<std::vector<std::shared_ptr<XmlElement>>::const_iterator, const XmlElement, AccessPtrVec> ChildIterConst; - - ///Access all child elements sequentially via STL iterators. - /** - \code - auto iterPair = elem.getChildren(); - std::for_each(iterPair.first, iterPair.second, - [](const XmlElement& child) { ... }); - \endcode - \return A pair of STL begin/end iterators to access all child elements sequentially. - */ - std::pair<ChildIterConst, ChildIterConst> getChildren() const { return std::make_pair(childElements.begin(), childElements.end()); } - - ///\sa getChildren - std::pair<ChildIter, ChildIter> getChildren() { return std::make_pair(childElements.begin(), childElements.end()); } - - ///Get parent XML element, may be nullptr for root element - XmlElement* parent() { return parent_; }; - ///Get parent XML element, may be nullptr for root element - const XmlElement* parent() const { return parent_; }; - - - typedef std::map<std::string, std::string>::const_iterator AttrIter; - - /* -> disabled documentation extraction - \brief Get all attributes associated with the element. - \code - auto iterPair = elem.getAttributes(); - for (auto it = iterPair.first; it != iterPair.second; ++it) - std::cout << "name: " << it->first << " value: " << it->second << "\n"; - \endcode - \return A pair of STL begin/end iterators to access all attributes sequentially as a list of name/value pairs of std::string. - */ - std::pair<AttrIter, AttrIter> getAttributes() const { return std::make_pair(attributes.begin(), attributes.end()); } - - //Transactionally swap two elements. -> disabled documentation extraction - void swap(XmlElement& other) - { - name_ .swap(other.name_); - value_ .swap(other.value_); - attributes.swap(other.attributes); - childElements.swap(other.childElements); - childElementsSorted.swap(other.childElementsSorted); - //std::swap(parent_, other.parent_); -> parent is physical location; update children's parent reference instead: - std::for_each( childElements.begin(), childElements.end(), [&](const std::shared_ptr<XmlElement>& child) { child->parent_ = this; }); - std::for_each(other.childElements.begin(), other.childElements.end(), [&](const std::shared_ptr<XmlElement>& child) { child->parent_ = &other; }); - } - -private: - friend class XmlDoc; - - XmlElement(const XmlElement&); //not implemented - XmlElement& operator=(const XmlElement&); // - - std::string name_; - std::string value_; - std::map<std::string, std::string> attributes; - std::vector<std::shared_ptr<XmlElement>> childElements; //all child elements in order of creation - std::multimap<std::string, std::shared_ptr<XmlElement>> childElementsSorted; //alternate key: sorted by element name - XmlElement* parent_; -}; - - -//XmlElement::setValue<T>() calls zen::writeStruc() which calls XmlElement::setValue() ... => these two specializations end the circle -template <> inline -void XmlElement::setValue(const std::string& value) { value_ = value; } - -template <> inline -bool XmlElement::getValue(std::string& value) const { value = value_; return true; } - - -///The complete XML document -class XmlDoc -{ -public: - ///Default constructor setting up an empty XML document with a standard declaration: <?xml version="1.0" encoding="UTF-8" ?> - XmlDoc() : version_("1.0"), encoding_("UTF-8"), rootElement("Root", nullptr, XmlElement::PrivateConstruction()) {} - - XmlDoc(XmlDoc&& tmp) : rootElement("Root", nullptr, XmlElement::PrivateConstruction()) { swap(tmp); } - XmlDoc& operator=(XmlDoc&& tmp) { swap(tmp); return *this; } - - //Setup an empty XML document - /** - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - \param rootName The name of the XML document's root element. - */ - template <class String> - XmlDoc(String rootName) : version_("1.0"), encoding_("UTF-8"), rootElement(rootName, nullptr, XmlElement::PrivateConstruction()) {} - - ///Get a const reference to the document's root element. - const XmlElement& root() const { return rootElement; } - ///Get a reference to the document's root element. - XmlElement& root() { return rootElement; } - - ///Get the version used in the XML declaration. - /** - \tparam String Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... - */ - template <class String> - String getVersionAs() const { return utfCvrtTo<String>(version_); } - - ///Set the version used in the XML declaration. - /** - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - */ - template <class String> - void setVersion(const String& version) { version_ = utfCvrtTo<std::string>(version); } - - ///Get the encoding used in the XML declaration. - /** - \tparam String Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... - */ - template <class String> - String getEncodingAs() const { return utfCvrtTo<String>(encoding_); } - - ///Set the encoding used in the XML declaration. - /** - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - */ - template <class String> - void setEncoding(const String& encoding) { encoding_ = utfCvrtTo<std::string>(encoding); } - - ///Get the standalone string used in the XML declaration. - /** - \tparam String Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... - */ - template <class String> - String getStandaloneAs() const { return utfCvrtTo<String>(standalone_); } - - ///Set the standalone string used in the XML declaration. - /** - \tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... - */ - template <class String> - void setStandalone(const String& standalone) { standalone_ = utfCvrtTo<std::string>(standalone); } - - //Transactionally swap two elements. -> disabled documentation extraction - void swap(XmlDoc& other) - { - version_ .swap(other.version_); - encoding_ .swap(other.encoding_); - standalone_.swap(other.standalone_); - rootElement.swap(other.rootElement); - } - -private: - XmlDoc(const XmlDoc&); //not implemented, thanks to XmlElement::parent_ - XmlDoc& operator=(const XmlDoc&); // - - std::string version_; - std::string encoding_; - std::string standalone_; - - XmlElement rootElement; -}; - -} - -#endif //ZEN_XML_DOM_HEADER_82085720723894567204564256 diff --git a/zenxml/zenxml/error.h b/zenxml/zenxml/error.h deleted file mode 100644 index 645f24f7..00000000 --- a/zenxml/zenxml/error.h +++ /dev/null @@ -1,19 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef ZEN_XML_ERROR_HEADER_018734618433021489473214873214 -#define ZEN_XML_ERROR_HEADER_018734618433021489473214873214 - -namespace zen -{ -///Exception base class for zen::Xml -struct XmlError -{ - virtual ~XmlError() {} -}; -} - -#endif //ZEN_XML_ERROR_HEADER_018734618433021489473214873214 diff --git a/zenxml/zenxml/io.h b/zenxml/zenxml/io.h deleted file mode 100644 index 09bb7358..00000000 --- a/zenxml/zenxml/io.h +++ /dev/null @@ -1,125 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef ZEN_XML_IO_HEADER_8917640501480763248343343 -#define ZEN_XML_IO_HEADER_8917640501480763248343343 - -#include <cstdio> -#include <cerrno> -#include <zen/scope_guard.h> -#include <zen/utf.h> -#include "error.h" - -namespace zen -{ -/** -\file -\brief Save and load byte streams from files -*/ - -#if !defined(ZEN_WIN) && !defined(ZEN_LINUX) && !defined(ZEN_MAC) -#error Please specify your platform: #define ZEN_WIN, ZEN_LINUX or ZEN_MAC -#endif - - -///Exception thrown due to failed file I/O -struct XmlFileError : public XmlError -{ - typedef int ErrorCode; - - explicit XmlFileError(ErrorCode ec) : lastError(ec) {} - ///Native error code: errno - ErrorCode lastError; -}; - - -#ifdef ZEN_WIN -namespace implemenation //sad but true -{ -template <class String> inline -FILE* fopen(const String& filename, const wchar_t* mode) -{ -#ifdef _MSC_VER - FILE* handle = nullptr; - errno_t rv = ::_wfopen_s(&handle, utfCvrtTo<std::wstring>(filename).c_str(), mode); //more secure? - (void)rv; - return handle; -#else - return ::_wfopen(utfCvrtTo<std::wstring>(filename).c_str(), mode); -#endif -} -} -#endif - - -///Save byte stream to a file -/** -\tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... -\param stream Input byte stream -\param filename Output file name -\throw XmlFileError -*/ -template <class String> -void saveStream(const std::string& stream, const String& filename) //throw XmlFileError -{ -#ifdef ZEN_WIN - FILE* handle = implemenation::fopen(utfCvrtTo<std::wstring>(filename).c_str(), L"wb"); -#else - FILE* handle = ::fopen(utfCvrtTo<std::string>(filename).c_str(), "w"); -#endif - if (handle == nullptr) - throw XmlFileError(errno); - ZEN_ON_SCOPE_EXIT(::fclose(handle)); - - const size_t bytesWritten = ::fwrite(stream.c_str(), 1, stream.size(), handle); - if (::ferror(handle) != 0) - throw XmlFileError(errno); - - (void)bytesWritten; - assert(bytesWritten == stream.size()); -} - - -///Load byte stream from a file -/** -\tparam String Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... -\param filename Input file name -\return Output byte stream -\throw XmlFileError -*/ -template <class String> -std::string loadStream(const String& filename) //throw XmlFileError -{ -#ifdef ZEN_WIN - FILE* handle = implemenation::fopen(utfCvrtTo<std::wstring>(filename).c_str(), L"rb"); -#else - FILE* handle = ::fopen(utfCvrtTo<std::string>(filename).c_str(), "r"); -#endif - if (handle == nullptr) - throw XmlFileError(errno); - ZEN_ON_SCOPE_EXIT(::fclose(handle)); - - std::string stream; - const size_t blockSize = 64 * 1024; - do - { - stream.resize(stream.size() + blockSize); //let's pray std::string implements exponential growth! - - const size_t bytesRead = ::fread(&*(stream.begin() + stream.size() - blockSize), 1, blockSize, handle); - if (::ferror(handle)) - throw XmlFileError(errno); - if (bytesRead > blockSize) - throw XmlFileError(0); - if (bytesRead < blockSize) - stream.resize(stream.size() - (blockSize - bytesRead)); //caveat: unsigned arithmetics - } - while (!::feof(handle)); - - return stream; -} -} - -#endif //ZEN_XML_IO_HEADER_8917640501480763248343343 diff --git a/zenxml/zenxml/parser.h b/zenxml/zenxml/parser.h deleted file mode 100644 index 19d36ed5..00000000 --- a/zenxml/zenxml/parser.h +++ /dev/null @@ -1,618 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef ZEN_XML_PARSER_HEADER_81248670213764583021432 -#define ZEN_XML_PARSER_HEADER_81248670213764583021432 - -#include <cstdio> -#include <cstddef> //ptrdiff_t; req. on Linux -#include <zen/string_traits.h> -#include "dom.h" -#include "error.h" - -namespace zen -{ -/** -\file -\brief Convert an XML document object model (class XmlDoc) to and from a byte stream representation. -*/ - -///Save XML document as a byte stream -/** -\param doc Input XML document -\param lineBreak Line break, default: carriage return + new line -\param indent Indentation, default: four space characters -\return Output byte stream -*/ -std::string serialize(const XmlDoc& doc, - const std::string& lineBreak = "\r\n", - const std::string& indent = " "); //throw () - -///Exception thrown due to an XML parsing error -struct XmlParsingError : public XmlError -{ - XmlParsingError(size_t rowNo, size_t colNo) : row(rowNo), col(colNo) {} - ///Input file row where the parsing error occured (zero-based) - size_t row; //beginning with 0 - ///Input file column where the parsing error occured (zero-based) - size_t col; // -}; - - -///Load XML document from a byte stream -/** -\param stream Input byte stream -\returns Output XML document -\throw XmlParsingError -*/ -XmlDoc parse(const std::string& stream); //throw XmlParsingError - - - - - - - - - - - - - - - - - - - - -//---------------------------- implementation ---------------------------- -//see: http://www.w3.org/TR/xml/ - -namespace implementation -{ -inline -std::pair<char, char> hexify(unsigned char c) -{ - auto hexifyDigit = [](int num) -> char //input [0, 15], output 0-9, A-F - { - assert(0 <= num&& num <= 15); //guaranteed by design below! - return static_cast<char>(num <= 9 ? //no signed/unsigned char problem here! - '0' + num : - 'A' + (num - 10)); - }; - return std::make_pair(hexifyDigit(c / 16), hexifyDigit(c % 16)); -} - - -inline -char unhexify(char high, char low) -{ - auto unhexifyDigit = [](char hex) -> int //input 0-9, a-f, A-F; output range: [0, 15] - { - if ('0' <= hex && hex <= '9') //no signed/unsigned char problem here! - return hex - '0'; - else if ('A' <= hex && hex <= 'F') - return (hex - 'A') + 10; - else if ('a' <= hex && hex <= 'f') - return (hex - 'a') + 10; - assert(false); - return 0; - }; - return static_cast<unsigned char>(16 * unhexifyDigit(high) + unhexifyDigit(low)); //[!] convert to unsigned char first, then to char (which may be signed) -}; - - -template <class Predicate> inline -std::string normalize(const std::string& str, Predicate pred) //pred: unary function taking a char, return true if value shall be encoded as hex -{ - std::string output; - std::for_each(str.begin(), str.end(), - [&](char c) - { - if (c == '&') // - output += "&"; - else if (c == '<') //normalization mandatory: http://www.w3.org/TR/xml/#syntax - output += "<"; - else if (c == '>') // - output += ">"; - else if (pred(c)) - { - if (c == '\'') - output += "'"; - else if (c == '\"') - output += """; - else - { - output += "&#x"; - const auto hexDigits = hexify(c); //hexify beats "printNumber<std::string>("&#x%02X;", c)" by a nice factor of 3! - output += hexDigits.first; - output += hexDigits.second; - output += ';'; - } - } - else - output += c; - }); - return output; -} - -inline -std::string normalizeName(const std::string& str) -{ - return normalize(str, [](char c) { return isWhiteSpace(c) || c == '=' || c == '/' || c == '\'' || c == '\"'; }); -} - -inline -std::string normalizeElementValue(const std::string& str) -{ - return normalize(str, [](char c) { return static_cast<unsigned char>(c) < 32; }); -} - -inline -std::string normalizeAttribValue(const std::string& str) -{ - return normalize(str, [](char c) { return static_cast<unsigned char>(c) < 32 || c == '\'' || c == '\"'; }); -} - - -template <class CharIterator, size_t N> inline -bool checkEntity(CharIterator& first, CharIterator last, const char (&placeholder)[N]) -{ - assert(placeholder[N - 1] == 0); - const ptrdiff_t strLen = N - 1; //don't count null-terminator - if (last - first >= strLen && std::equal(first, first + strLen, placeholder)) - { - first += strLen - 1; - return true; - } - return false; -} - - -namespace -{ -std::string denormalize(const std::string& str) -{ - std::string output; - for (auto it = str.begin(); it != str.end(); ++it) - { - const char c = *it; - - if (c == '&') - { - if (checkEntity(it, str.end(), "&")) - output += '&'; - else if (checkEntity(it, str.end(), "<")) - output += '<'; - else if (checkEntity(it, str.end(), ">")) - output += '>'; - else if (checkEntity(it, str.end(), "'")) - output += '\''; - else if (checkEntity(it, str.end(), """)) - output += '\"'; - else if (str.end() - it >= 6 && - it[1] == '#' && - it[2] == 'x' && - it[5] == ';') - { - output += unhexify(it[3], it[4]); //unhexify beats "::sscanf(&it[3], "%02X", &tmp)" by a factor of 3000 for ~250000 calls!!! - it += 5; - } - else - output += c; //unexpected char! - } - else if (c == '\r') //map all end-of-line characters to \n http://www.w3.org/TR/xml/#sec-line-ends - { - auto itNext = it + 1; - if (itNext != str.end() && *itNext == '\n') - ++it; - output += '\n'; - } - else - output += c; - }; - return output; -} - - -void serialize(const XmlElement& element, std::string& stream, - const std::string& lineBreak, - const std::string& indent, - size_t indentLevel) -{ - const std::string& nameFmt = normalizeName(element.getNameAs<std::string>()); - - for (size_t i = 0; i < indentLevel; ++i) - stream += indent; - - stream += '<' + nameFmt; - - auto attr = element.getAttributes(); - for (auto it = attr.first; it != attr.second; ++it) - stream += ' ' + normalizeName(it->first) + "=\"" + normalizeAttribValue(it->second) + '\"'; - - //no support for mixed-mode content - auto iterPair = element.getChildren(); - if (iterPair.first != iterPair.second) //structured element - { - stream += '>' + lineBreak; - - std::for_each(iterPair.first, iterPair.second, - [&](const XmlElement & el) { serialize(el, stream, lineBreak, indent, indentLevel + 1); }); - - for (size_t i = 0; i < indentLevel; ++i) - stream += indent; - stream += "</" + nameFmt + '>' + lineBreak; - } - else - { - std::string value; - element.getValue(value); - - if (!value.empty()) //value element - stream += '>' + normalizeElementValue(value) + "</" + nameFmt + '>' + lineBreak; - else //empty element - stream += "/>" + lineBreak; - } -} - -std::string serialize(const XmlDoc& doc, - const std::string& lineBreak, - const std::string& indent) -{ - std::string version = doc.getVersionAs<std::string>(); - if (!version.empty()) - version = " version=\"" + normalizeAttribValue(version) + '\"'; - - std::string encoding = doc.getEncodingAs<std::string>(); - if (!encoding.empty()) - encoding = " encoding=\"" + normalizeAttribValue(encoding) + '\"'; - - std::string standalone = doc.getStandaloneAs<std::string>(); - if (!standalone.empty()) - standalone = " standalone=\"" + normalizeAttribValue(standalone) + '\"'; - - std::string output = "<?xml" + version + encoding + standalone + "?>" + lineBreak; - serialize(doc.root(), output, lineBreak, indent, 0); - return output; -} -} -} - -inline -std::string serialize(const XmlDoc& doc, - const std::string& lineBreak, - const std::string& indent) { return implementation::serialize(doc, lineBreak, indent); } - -/* -Grammar for XML parser -------------------------------- -document-expression: - <?xml version="1.0" encoding="UTF-8" standalone="yes"?> - element-expression: - -element-expression: - <string attributes-expression/> - <string attributes-expression> pm-expression </string> - -element-list-expression: - <empty> - element-expression element-list-expression - -attributes-expression: - <empty> - string="string" attributes-expression - -pm-expression: - string - element-list-expression -*/ - -namespace implementation -{ -struct Token -{ - enum Type - { - TK_LESS, - TK_GREATER, - TK_LESS_SLASH, - TK_SLASH_GREATER, - TK_EQUAL, - TK_QUOTE, - TK_DECL_BEGIN, - TK_DECL_END, - TK_NAME, - TK_END - }; - - Token(Type t) : type(t) {} - Token(const std::string& txt) : type(TK_NAME), name(txt) {} - - Type type; - std::string name; //filled if type == TK_NAME -}; - -class Scanner -{ -public: - Scanner(const std::string& stream) : - xmlCommentBegin("<!--"), - xmlCommentEnd ("-->"), - stream_(stream), - pos(stream_.begin()) - { - if (zen::startsWith(stream_, BYTE_ORDER_MARK_UTF8)) - pos += strLength(BYTE_ORDER_MARK_UTF8); - - tokens.push_back(std::make_pair("<?xml", Token::TK_DECL_BEGIN)); - tokens.push_back(std::make_pair("?>", Token::TK_DECL_END)); - tokens.push_back(std::make_pair("</", Token::TK_LESS_SLASH)); - tokens.push_back(std::make_pair("/>", Token::TK_SLASH_GREATER)); - tokens.push_back(std::make_pair("<" , Token::TK_LESS)); //evaluate after TK_DECL_BEGIN! - tokens.push_back(std::make_pair(">" , Token::TK_GREATER)); - tokens.push_back(std::make_pair("=" , Token::TK_EQUAL)); - tokens.push_back(std::make_pair("\"", Token::TK_QUOTE)); - tokens.push_back(std::make_pair("\'", Token::TK_QUOTE)); - } - - Token nextToken() //throw XmlParsingError - { - //skip whitespace - pos = std::find_if(pos, stream_.end(), [](char c) { return !zen::isWhiteSpace(c); }); - - if (pos == stream_.end()) - return Token::TK_END; - - //skip XML comments - if (startsWith(xmlCommentBegin)) - { - auto it = std::search(pos + xmlCommentBegin.size(), stream_.end(), xmlCommentEnd.begin(), xmlCommentEnd.end()); - if (it != stream_.end()) - { - pos = it + xmlCommentEnd.size(); - return nextToken(); - } - } - - for (auto it = tokens.begin(); it != tokens.end(); ++it) - if (startsWith(it->first)) - { - pos += it->first.size(); - return it->second; - } - - auto nameEnd = std::find_if(pos, stream_.end(), [](char c) - { - return c == '<' || - c == '>' || - c == '=' || - c == '/' || - c == '\'' || - c == '\"' || - zen::isWhiteSpace(c); - }); - - if (nameEnd != pos) - { - std::string name(&*pos, nameEnd - pos); - pos = nameEnd; - return implementation::denormalize(name); - } - - //unknown token - throw XmlParsingError(posRow(), posCol()); - } - - std::string extractElementValue() - { - auto it = std::find_if(pos, stream_.end(), [](char c) - { - return c == '<' || - c == '>'; - }); - std::string output(pos, it); - pos = it; - return implementation::denormalize(output); - } - - std::string extractAttributeValue() - { - auto it = std::find_if(pos, stream_.end(), [](char c) - { - return c == '<' || - c == '>' || - c == '\'' || - c == '\"'; - }); - std::string output(pos, it); - pos = it; - return implementation::denormalize(output); - } - - size_t posRow() const //current row beginning with 0 - { - const size_t crSum = std::count(stream_.begin(), pos, '\r'); //carriage returns - const size_t nlSum = std::count(stream_.begin(), pos, '\n'); //new lines - assert(crSum == 0 || nlSum == 0 || crSum == nlSum); - return std::max(crSum, nlSum); //be compatible with Linux/Mac/Win - } - - size_t posCol() const //current col beginning with 0 - { - //seek beginning of line - for (auto it = pos; it != stream_.begin(); ) - { - --it; - if (*it == '\r' || *it == '\n') - return pos - it - 1; - } - return pos - stream_.begin(); - } - -private: - Scanner(const Scanner&); - Scanner& operator=(const Scanner&); - - bool startsWith(const std::string& prefix) const - { - if (stream_.end() - pos < static_cast<ptrdiff_t>(prefix.size())) - return false; - return std::equal(prefix.begin(), prefix.end(), pos); - } - - typedef std::vector<std::pair<std::string, Token::Type> > TokenList; - TokenList tokens; - - const std::string xmlCommentBegin; - const std::string xmlCommentEnd; - - const std::string stream_; - std::string::const_iterator pos; -}; - - -class XmlParser -{ -public: - XmlParser(const std::string& stream) : - scn(stream), - tk(scn.nextToken()) {} - - XmlDoc parse() //throw XmlParsingError - { - XmlDoc doc; - - //declaration (optional) - if (token().type == Token::TK_DECL_BEGIN) - { - nextToken(); - - while (token().type == Token::TK_NAME) - { - std::string attribName = token().name; - nextToken(); - - consumeToken(Token::TK_EQUAL); - expectToken(Token::TK_QUOTE); - std::string attribValue = scn.extractAttributeValue(); - nextToken(); - - consumeToken(Token::TK_QUOTE); - - if (attribName == "version") - doc.setVersion(attribValue); - else if (attribName == "encoding") - doc.setEncoding(attribValue); - else if (attribName == "standalone") - doc.setStandalone(attribValue); - } - consumeToken(Token::TK_DECL_END); - } - - XmlDoc dummy; - XmlElement& elemTmp = dummy.root(); - parseChildElements(elemTmp); - - auto iterPair = elemTmp.getChildren(); - if (iterPair.first != iterPair.second) - doc.root().swap(*iterPair.first); - - expectToken(Token::TK_END); - return doc; - }; - -private: - XmlParser(const XmlParser&); - XmlParser& operator=(const XmlParser&); - - void parseChildElements(XmlElement& parent) - { - while (token().type == Token::TK_LESS) - { - nextToken(); - - expectToken(Token::TK_NAME); - std::string elementName = token().name; - nextToken(); - - XmlElement& newElement = parent.addChild(elementName); - - parseAttributes(newElement); - - if (token().type == Token::TK_SLASH_GREATER) //empty element - { - nextToken(); - continue; - } - - expectToken(Token::TK_GREATER); - std::string elementValue = scn.extractElementValue(); - nextToken(); - - //no support for mixed-mode content - if (token().type == Token::TK_LESS) //structured element - parseChildElements(newElement); - else //value element - newElement.setValue(elementValue); - - consumeToken(Token::TK_LESS_SLASH); - - if (token().type != Token::TK_NAME || - elementName != token().name) - throw XmlParsingError(scn.posRow(), scn.posCol()); - nextToken(); - - consumeToken(Token::TK_GREATER); - } - }; - - void parseAttributes(XmlElement& element) - { - while (token().type == Token::TK_NAME) - { - std::string attribName = token().name; - nextToken(); - - consumeToken(Token::TK_EQUAL); - expectToken(Token::TK_QUOTE); - std::string attribValue = scn.extractAttributeValue(); - nextToken(); - - consumeToken(Token::TK_QUOTE); - element.setAttribute(attribName, attribValue); - } - } - - const Token& token() const { return tk; } - void nextToken() { tk = scn.nextToken(); } - - void consumeToken(Token::Type t) //throw XmlParsingError - { - expectToken(t); //throw XmlParsingError - nextToken(); - } - - void expectToken(Token::Type t) //throw XmlParsingError - { - if (token().type != t) - throw XmlParsingError(scn.posRow(), scn.posCol()); - } - - Scanner scn; - Token tk; -}; -} - -inline -XmlDoc parse(const std::string& stream) //throw XmlParsingError -{ - return implementation::XmlParser(stream).parse(); //throw XmlParsingError -} -} - -#endif //ZEN_XML_PARSER_HEADER_81248670213764583021432 diff --git a/zenxml/zenxml/unit_test.cpp b/zenxml/zenxml/unit_test.cpp deleted file mode 100644 index 084e764b..00000000 --- a/zenxml/zenxml/unit_test.cpp +++ /dev/null @@ -1,95 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#include <set> -#include <map> -#include <deque> -#include <vector> -#include <list> -#include <utility> -#include "xml.h" - -using namespace zen; - -namespace -{ -void unit_test() -{ - class Dummy {}; - - //compile time checks only - - assert_static(!IsStlContainer<wchar_t> ::value); - assert_static(!IsStlContainer<char> ::value); - assert_static(!IsStlContainer<Dummy> ::value); - assert_static(!IsStlContainer<NullType> ::value); - assert_static(IsStlContainer<std::set <int>> ::value); - assert_static(IsStlContainer<std::deque <float>> ::value); - assert_static(IsStlContainer<std::list <size_t>> ::value); - assert_static((IsStlContainer<std::map <double, char>> ::value)); - assert_static((IsStlContainer<std::multimap<short, double>>::value)); - assert_static(IsStlContainer <std::vector <wchar_t>> ::value); - assert_static((IsStlPair <std::pair<int, double>> ::value)); - assert_static(!IsStlPair<Dummy> ::value); - - assert_static(!IsStringLike<Dummy>::value); - assert_static(!IsStringLike<int>::value); - assert_static(!IsStringLike<double>::value); - assert_static(!IsStringLike<short>::value); - assert_static(IsStringLike<char>::value); - assert_static(IsStringLike<const wchar_t>::value); - assert_static(IsStringLike<const char>::value); - assert_static(IsStringLike<wchar_t>::value); - assert_static(IsStringLike<char*>::value); - assert_static(IsStringLike<wchar_t*>::value); - assert_static(IsStringLike<char* const>::value); - assert_static(IsStringLike<wchar_t* const>::value); - assert_static(IsStringLike<const char*>::value); - assert_static(IsStringLike<const char* const>::value); - assert_static(IsStringLike<const wchar_t*>::value); - assert_static(IsStringLike<const wchar_t* const>::value); - assert_static(IsStringLike<const char[4]>::value); - assert_static(IsStringLike<const wchar_t[4]>::value); - assert_static(IsStringLike<char[4]>::value); - assert_static(IsStringLike<wchar_t[4]>::value); - assert_static(IsStringLike<std::string>::value); - assert_static(IsStringLike<std::wstring>::value); - assert_static(IsStringLike<const std::string>::value); - assert_static(IsStringLike<const std::wstring>::value); - assert_static(IsStringLike<const std::string&>::value); - assert_static(IsStringLike<const std::wstring&>::value); - assert_static(IsStringLike<std::string&>::value); - assert_static(IsStringLike<std::wstring&>::value); - - assert_static(!(IsSameType<GetCharType<int>::Type, char>::value)); - assert_static(!(IsSameType<GetCharType<double>::Type, char>::value)); - assert_static(!(IsSameType<GetCharType<short>::Type, char>::value)); - assert_static((IsSameType<GetCharType<char>::Type, char>::value)); - assert_static((IsSameType<GetCharType<wchar_t>::Type, wchar_t>::value)); - assert_static((IsSameType<GetCharType<const char>::Type, char>::value)); - assert_static((IsSameType<GetCharType<const wchar_t>::Type, wchar_t>::value)); - assert_static((IsSameType<GetCharType<char*>::Type, char>::value)); - assert_static((IsSameType<GetCharType<wchar_t*>::Type, wchar_t>::value)); - assert_static((IsSameType<GetCharType<char* const>::Type, char>::value)); - assert_static((IsSameType<GetCharType<wchar_t* const>::Type, wchar_t>::value)); - assert_static((IsSameType<GetCharType<const char*>::Type, char>::value)); - assert_static((IsSameType<GetCharType<const char* const>::Type, char>::value)); - assert_static((IsSameType<GetCharType<const wchar_t*>::Type, wchar_t>::value)); - assert_static((IsSameType<GetCharType<const wchar_t* const>::Type, wchar_t>::value)); - assert_static((IsSameType<GetCharType<const char[4]>::Type, char>::value)); - assert_static((IsSameType<GetCharType<const wchar_t[4]>::Type, wchar_t>::value)); - assert_static((IsSameType<GetCharType<char[4]>::Type, char>::value)); - assert_static((IsSameType<GetCharType<wchar_t[4]>::Type, wchar_t>::value)); - assert_static((IsSameType<GetCharType<std::string>::Type, char>::value)); - assert_static((IsSameType<GetCharType<std::wstring>::Type, wchar_t>::value)); - assert_static((IsSameType<GetCharType<const std::string>::Type, char>::value)); - assert_static((IsSameType<GetCharType<const std::wstring>::Type, wchar_t>::value)); - assert_static((IsSameType<GetCharType<const std::string&>::Type, char>::value)); - assert_static((IsSameType<GetCharType<const std::wstring&>::Type, wchar_t>::value)); - assert_static((IsSameType<GetCharType<std::string&>::Type, char>::value)); - assert_static((IsSameType<GetCharType<std::wstring&>::Type, wchar_t>::value)); -} -} diff --git a/zenxml/zenxml/xml.h b/zenxml/zenxml/xml.h deleted file mode 100644 index 411593e7..00000000 --- a/zenxml/zenxml/xml.h +++ /dev/null @@ -1,15 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef ZEN_XML_HEADER_349578228034572457454554 -#define ZEN_XML_HEADER_349578228034572457454554 - -#include "bind.h" - -/// The zen::Xml namespace -namespace zen {} - -#endif //ZEN_XML_HEADER_349578228034572457454554
\ No newline at end of file |