diff options
author | B. Stack <bgstack15@gmail.com> | 2022-05-22 21:09:26 +0000 |
---|---|---|
committer | B. Stack <bgstack15@gmail.com> | 2022-05-22 21:09:26 +0000 |
commit | 54c2e44d7b37b2c3efc449e054eef21fa414dfde (patch) | |
tree | 3894ba7e10c78750c195381a861da5e8166a6bfd | |
parent | Merge branch 'b11.20' into 'master' (diff) | |
parent | add upstream 11.21 (diff) | |
download | FreeFileSync-54c2e44d7b37b2c3efc449e054eef21fa414dfde.tar.gz FreeFileSync-54c2e44d7b37b2c3efc449e054eef21fa414dfde.tar.bz2 FreeFileSync-54c2e44d7b37b2c3efc449e054eef21fa414dfde.zip |
Merge branch 'b11.21' into 'master'11.21
add upstream 11.21
See merge request opensource-tracking/FreeFileSync!44
131 files changed, 6472 insertions, 6505 deletions
@@ -5,7 +5,7 @@ the ones mentioned below. The remaining issues that are yet to be fixed are list ---------------- -| libcurl 7.74 | +| libcurl 7.83| ---------------- __________________________________________________________________________________________________________ /lib/ftp.c @@ -62,6 +62,19 @@ move the following constants from src/sftp.h to include/libssh2_sftp.h: #define MAX_SFTP_READ_SIZE 30000 __________________________________________________________________________________________________________ +src/userauth.c +buffer overflow: https://github.com/libssh2/libssh2/pull/693 + +-if (banner_len >= session->userauth_list_data_len - 5) { ++if (banner_len > session->userauth_list_data_len - 5) { + +-session->userauth_banner = LIBSSH2_ALLOC(session, banner_len); ++session->userauth_banner = LIBSSH2_ALLOC(session, banner_len + 1); + +-memmove(session->userauth_banner, session->userauth_list_data + 5, ++memcpy(session->userauth_banner, session->userauth_list_data + 5, + +__________________________________________________________________________________________________________ ------------------- diff --git a/Changelog.txt b/Changelog.txt index 60be0c17..6e5a278b 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,6 +1,19 @@ -FreeFileSync 11.20 [2022-04-16] +FreeFileSync 11.21 [2022-05-17] +------------------------------- +Support volume GUID as path: \\?\Volume{01234567-89ab-cdef-0123-456789abcdef} (Windows) +Avoid Two-Way conflict when changing folder name upper/lower-case +List hidden warning messages in options dialog +Fixed buffer overflow while receiving SFTP server banner +Create crash dumps even if FFS-internal crash handling doesn't kick in +Log time when error occured, not when it is reported +Swap sides: Require confirmation only after comparison +Updated translation files + + +FreeFileSync 11.20 [2022-04-17] ------------------------------- Fixed broken icon scaling on high-DPI displays +Fixed user language set to English after update FreeFileSync 11.19 [2022-04-16] diff --git a/FreeFileSync/Build/Resources/Icons.zip b/FreeFileSync/Build/Resources/Icons.zip Binary files differindex 309497f4..c04df22e 100644 --- a/FreeFileSync/Build/Resources/Icons.zip +++ b/FreeFileSync/Build/Resources/Icons.zip diff --git a/FreeFileSync/Build/Resources/Languages.zip b/FreeFileSync/Build/Resources/Languages.zip Binary files differindex 9880b5ef..d2a9db95 100644 --- a/FreeFileSync/Build/Resources/Languages.zip +++ b/FreeFileSync/Build/Resources/Languages.zip diff --git a/FreeFileSync/Build/Resources/cacert.pem b/FreeFileSync/Build/Resources/cacert.pem index e91e25fa..5dbd0af2 100644 --- a/FreeFileSync/Build/Resources/cacert.pem +++ b/FreeFileSync/Build/Resources/cacert.pem @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Fri Mar 18 12:29:51 2022 GMT +## Certificate data from Mozilla as of: Tue Mar 29 03:12:05 2022 GMT ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates @@ -14,7 +14,7 @@ ## Just configure this file as the SSLCACertificateFile. ## ## Conversion done with mk-ca-bundle.pl version 1.29. -## SHA256: 187ef9dc231135324fe78830cf4462f1ecdeab3e6c9d5e38d623391e88dc5d3c +## SHA256: d59c5c83ce7a7635fa95521d8d245677949b86d5574bfcc6f855b6a48f2d5566 ## diff --git a/FreeFileSync/Source/RealTimeSync/application.cpp b/FreeFileSync/Source/RealTimeSync/application.cpp index 873d1d54..785c93fc 100644 --- a/FreeFileSync/Source/RealTimeSync/application.cpp +++ b/FreeFileSync/Source/RealTimeSync/application.cpp @@ -47,13 +47,13 @@ bool Application::OnInit() std::cerr << utfTo<std::string>(titleFmt + SPACED_DASH + msg) << '\n'; }; - try { imageResourcesInit(fff::getResourceDirPf() + Zstr("Icons.zip")); } + try { imageResourcesInit(appendPath(fff::getResourceDirPath(), Zstr("Icons.zip"))); } catch (const FileError& e) { logInitError(e.toString()); } //errors are not really critical in this context //GTK should already have been initialized by wxWidgets (see \src\gtk\app.cpp:wxApp::Initialize) #if GTK_MAJOR_VERSION == 2 - ::gtk_rc_parse((fff::getResourceDirPf() + "Gtk2Styles.rc").c_str()); + ::gtk_rc_parse(appendPath(fff::getResourceDirPath(), "Gtk2Styles.rc").c_str()); //fix hang on Ubuntu 19.10 (see FFS's application.cpp) g_vfs_get_default(); //returns unowned GVfs* @@ -115,7 +115,7 @@ bool Application::OnInit() try { - fff::localizationInit(fff::getResourceDirPf() + Zstr("Languages.zip")); //throw FileError + fff::localizationInit(appendPath(fff::getResourceDirPath(), Zstr("Languages.zip"))); //throw FileError fff::setLanguage(getProgramLanguage()); //throw FileError } catch (const FileError& e) { logInitError(e.toString()); } diff --git a/FreeFileSync/Source/RealTimeSync/config.cpp b/FreeFileSync/Source/RealTimeSync/config.cpp index 7d5cf52f..53b76fac 100644 --- a/FreeFileSync/Source/RealTimeSync/config.cpp +++ b/FreeFileSync/Source/RealTimeSync/config.cpp @@ -166,7 +166,7 @@ void rts::readRealOrBatchConfig(const Zstring& filePath, XmlRealConfig& cfg, std wxLanguage rts::getProgramLanguage() //throw FileError { - const Zstring& filePath = fff::getConfigDirPathPf() + Zstr("GlobalSettings.xml"); + const Zstring& filePath = appendPath(fff::getConfigDirPath(), Zstr("GlobalSettings.xml")); XmlDoc doc; try @@ -186,7 +186,7 @@ wxLanguage rts::getProgramLanguage() //throw FileError XmlIn in(doc); wxLanguage lng = wxLANGUAGE_UNKNOWN; - in["Language"].attribute("Name", lng); + in["Language"].attribute("Code", lng); checkXmlMappingErrors(in, filePath); //throw FileError return lng; diff --git a/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp b/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp index b4f22cd8..01767ae3 100644 --- a/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp +++ b/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp @@ -7,7 +7,6 @@ #include "folder_selector2.h" #include <zen/thread.h> #include <zen/file_access.h> -#include <zen/file_path.h> #include <wx/dirdlg.h> #include <wx/scrolwin.h> #include <wx+/popup_dlg.h> diff --git a/FreeFileSync/Source/RealTimeSync/folder_selector2.h b/FreeFileSync/Source/RealTimeSync/folder_selector2.h index 5f044557..370ba0f2 100644 --- a/FreeFileSync/Source/RealTimeSync/folder_selector2.h +++ b/FreeFileSync/Source/RealTimeSync/folder_selector2.h @@ -7,7 +7,6 @@ #ifndef FOLDER_SELECTOR2_H_073246031245342566 #define FOLDER_SELECTOR2_H_073246031245342566 -#include <zen/zstring.h> #include <wx/stattext.h> #include <wx/button.h> #include <wx/textctrl.h> diff --git a/FreeFileSync/Source/RealTimeSync/main_dlg.cpp b/FreeFileSync/Source/RealTimeSync/main_dlg.cpp index 92a0b23c..9d179543 100644 --- a/FreeFileSync/Source/RealTimeSync/main_dlg.cpp +++ b/FreeFileSync/Source/RealTimeSync/main_dlg.cpp @@ -12,7 +12,6 @@ #include <wx+/popup_dlg.h> #include <wx+/image_resources.h> #include <zen/file_access.h> -#include <zen/file_path.h> #include <zen/build_info.h> #include <zen/shutdown.h> #include <zen/time.h> @@ -72,7 +71,7 @@ void MainDialog::create(const Zstring& cfgFile) MainDialog::MainDialog(const Zstring& cfgFileName) : MainDlgGenerated(nullptr), - lastRunConfigPath_(fff::getConfigDirPathPf() + Zstr("LastRun.ffs_real")) + lastRunConfigPath_(appendPath(fff::getConfigDirPath(), Zstr("LastRun.ffs_real"))) { SetIcon(getRtsIcon()); //set application icon @@ -88,7 +87,7 @@ MainDialog::MainDialog(const Zstring& cfgFileName) : m_panelMainFolder->Layout(); setImage(*m_bitmapBatch, loadImage("cfg_batch_sicon")); - setImage(*m_bitmapFolders, fff::IconBuffer::genericDirIcon(fff::IconBuffer::SIZE_SMALL)); + setImage(*m_bitmapFolders, fff::IconBuffer::genericDirIcon(fff::IconBuffer::IconSize::small)); setImage(*m_bitmapConsole, loadImage("command_line", fastFromDIP(20))); setImage(*m_bpButtonAddFolder, loadImage("item_add")); diff --git a/FreeFileSync/Source/RealTimeSync/tray_menu.cpp b/FreeFileSync/Source/RealTimeSync/tray_menu.cpp index 32989d38..8c9ba6fa 100644 --- a/FreeFileSync/Source/RealTimeSync/tray_menu.cpp +++ b/FreeFileSync/Source/RealTimeSync/tray_menu.cpp @@ -115,7 +115,7 @@ private: wxString tooltip = L"RealTimeSync"; if (!jobName_.empty()) - tooltip += L" | " + jobName_; + tooltip += SPACED_DASH + jobName_; tooltip += L"\n" + statusTxt; diff --git a/FreeFileSync/Source/afs/abstract.cpp b/FreeFileSync/Source/afs/abstract.cpp index de534470..f7bd8bbb 100644 --- a/FreeFileSync/Source/afs/abstract.cpp +++ b/FreeFileSync/Source/afs/abstract.cpp @@ -15,18 +15,6 @@ using namespace fff; using AFS = AbstractFileSystem; -bool fff::isValidRelPath(const Zstring& relPath) -{ - //relPath is expected to use FILE_NAME_SEPARATOR! - if constexpr (FILE_NAME_SEPARATOR != Zstr('/' )) if (contains(relPath, Zstr('/' ))) return false; - if constexpr (FILE_NAME_SEPARATOR != Zstr('\\')) if (contains(relPath, Zstr('\\'))) return false; - - const Zchar doubleSep[] = {FILE_NAME_SEPARATOR, FILE_NAME_SEPARATOR, 0}; - return !startsWith(relPath, FILE_NAME_SEPARATOR)&& !endsWith(relPath, FILE_NAME_SEPARATOR)&& - !contains(relPath, doubleSep); -} - - AfsPath fff::sanitizeDeviceRelativePath(Zstring relPath) { if constexpr (FILE_NAME_SEPARATOR != Zstr('/' )) replace(relPath, Zstr('/'), FILE_NAME_SEPARATOR); @@ -339,7 +327,7 @@ void AFS::removeFolderIfExistsRecursion(const AfsPath& afsPath, //throw FileErro for (const Zstring& fileName : fileNames) { - const AfsPath filePath(nativeAppendPaths(folderPath.value, fileName)); + const AfsPath filePath(appendPath(folderPath.value, fileName)); if (onBeforeFileDeletion) onBeforeFileDeletion(getDisplayPath(filePath)); //throw X @@ -348,7 +336,7 @@ void AFS::removeFolderIfExistsRecursion(const AfsPath& afsPath, //throw FileErro for (const Zstring& symlinkName : symlinkNames) { - const AfsPath linkPath(nativeAppendPaths(folderPath.value, symlinkName)); + const AfsPath linkPath(appendPath(folderPath.value, symlinkName)); if (onBeforeFileDeletion) onBeforeFileDeletion(getDisplayPath(linkPath)); //throw X @@ -356,7 +344,7 @@ void AFS::removeFolderIfExistsRecursion(const AfsPath& afsPath, //throw FileErro } for (const Zstring& folderName : folderNames) - removeFolderRecursionImpl(AfsPath(nativeAppendPaths(folderPath.value, folderName))); //throw FileError + removeFolderRecursionImpl(AfsPath(appendPath(folderPath.value, folderName))); //throw FileError if (onBeforeFolderDeletion) onBeforeFolderDeletion(getDisplayPath(folderPath)); //throw X diff --git a/FreeFileSync/Source/afs/abstract.h b/FreeFileSync/Source/afs/abstract.h index 87bcd558..dad08a6f 100644 --- a/FreeFileSync/Source/afs/abstract.h +++ b/FreeFileSync/Source/afs/abstract.h @@ -10,7 +10,7 @@ #include <functional> #include <chrono> #include <zen/file_error.h> -#include <zen/zstring.h> +#include <zen/file_path.h> #include <zen/serialize.h> //InputStream/OutputStream support buffered stream concept #include <wx+/image_holder.h> //NOT a wxWidgets dependency! @@ -18,7 +18,6 @@ namespace fff { struct AfsPath; -bool isValidRelPath(const Zstring& relPath); AfsPath sanitizeDeviceRelativePath(Zstring relPath); struct AbstractFileSystem; @@ -29,7 +28,7 @@ using AfsDevice = zen::SharedRef<const AbstractFileSystem>; struct AfsPath //= path relative to the file system root folder (no leading/traling separator) { AfsPath() {} - explicit AfsPath(const Zstring& p) : value(p) { assert(isValidRelPath(value)); } + explicit AfsPath(const Zstring& p) : value(p) { assert(zen::isValidRelPath(value)); } Zstring value; std::strong_ordering operator<=>(const AfsPath&) const = default; @@ -69,6 +68,8 @@ struct AbstractFileSystem //THREAD-SAFETY: "const" member functions must model t static Zstring getInitPathPhrase(const AbstractPath& ap) { return ap.afsDevice.ref().getInitPathPhrase(ap.afsPath); } + static std::vector<Zstring> getPathPhraseAliases(const AbstractPath& ap) { return ap.afsDevice.ref().getPathPhraseAliases(ap.afsPath); } + //---------------------------------------------------------------------------------------------------------------- static void authenticateAccess(const AfsDevice& afsDevice, bool allowUserInteraction) //throw FileError { return afsDevice.ref().authenticateAccess(allowUserInteraction); } @@ -337,6 +338,8 @@ private: virtual Zstring getInitPathPhrase(const AfsPath& afsPath) const = 0; + virtual std::vector<Zstring> getPathPhraseAliases(const AfsPath& afsPath) const = 0; + virtual std::wstring getDisplayPath(const AfsPath& afsPath) const = 0; virtual bool isNullFileSystem() const = 0; @@ -434,8 +437,7 @@ bool operator==(const AbstractPath& lhs, const AbstractPath& rhs) { return lhs.a inline AbstractPath AbstractFileSystem::appendRelPath(const AbstractPath& ap, const Zstring& relPath) { - assert(isValidRelPath(relPath)); - return AbstractPath(ap.afsDevice, AfsPath(nativeAppendPaths(ap.afsPath.value, relPath))); + return AbstractPath(ap.afsDevice, AfsPath(appendPath(ap.afsPath.value, relPath))); } //--------------------------------------------------------------------------------------------- diff --git a/FreeFileSync/Source/afs/concrete.cpp b/FreeFileSync/Source/afs/concrete.cpp index 40a7f015..ff2fd6be 100644 --- a/FreeFileSync/Source/afs/concrete.cpp +++ b/FreeFileSync/Source/afs/concrete.cpp @@ -11,14 +11,15 @@ #include "gdrive.h" using namespace fff; +using namespace zen; void fff::initAfs(const AfsConfig& cfg) { ftpInit(); sftpInit(); - gdriveInit(appendSeparator(cfg.configDirPathPf) + Zstr("GoogleDrive"), - appendSeparator(cfg.resourceDirPathPf) + Zstr("cacert.pem")); + gdriveInit(appendPath(cfg.configDirPath, Zstr("GoogleDrive")), + appendPath(cfg.resourceDirPath, Zstr("cacert.pem"))); } diff --git a/FreeFileSync/Source/afs/concrete.h b/FreeFileSync/Source/afs/concrete.h index ac1306b2..c627e58b 100644 --- a/FreeFileSync/Source/afs/concrete.h +++ b/FreeFileSync/Source/afs/concrete.h @@ -13,8 +13,8 @@ namespace fff { struct AfsConfig { - Zstring resourceDirPathPf; //directory to read AFS-specific files - Zstring configDirPathPf; //directory to store AFS-specific files + Zstring resourceDirPath; //directory to read AFS-specific files + Zstring configDirPath; //directory to store AFS-specific files }; void initAfs(const AfsConfig& cfg); [[nodiscard]] std::wstring /*warningMsg*/ teardownAfs(); diff --git a/FreeFileSync/Source/afs/ftp.cpp b/FreeFileSync/Source/afs/ftp.cpp index 23497fef..50bf5cc3 100644 --- a/FreeFileSync/Source/afs/ftp.cpp +++ b/FreeFileSync/Source/afs/ftp.cpp @@ -179,7 +179,7 @@ std::vector<std::string> splitFtpResponse(const std::string& buf) split2(buf, [](char c) { return isLineBreak(c) || c == '\0'; }, //is 0-char check even needed? [&lines](const char* blockFirst, const char* blockLast) { - if (blockFirst != blockLast) + if (blockFirst != blockLast) //consider Windows' <CR><LF> lines.emplace_back(blockFirst, blockLast); }); @@ -210,11 +210,10 @@ public: std::string readRange(Function acceptChar) //throw SysError { auto itEnd = std::find_if_not(it_, line_.end(), acceptChar); - std::string output(it_, itEnd); - if (output.empty()) + if (itEnd == it_) throw SysError(L"Expected char range not found."); - it_ = itEnd; - return output; + + return {std::exchange(it_, itEnd), itEnd}; } char peekNextChar() const { return it_ == line_.end() ? '\0' : *it_; } @@ -747,7 +746,7 @@ private: bool clnt = false; bool utf8 = false; }; - using FeatureList = std::map<Zstring /*server name*/, std::optional<Features>, LessAsciiNoCase>; + using FeatureList = std::unordered_map<Zstring /*server name*/, std::optional<Features>, StringHashAsciiNoCase, StringEqualAsciiNoCase>; bool getFeatureSupport(bool Features::* status) //throw SysError { @@ -910,7 +909,7 @@ private: lastCleanupTime = std::chrono::steady_clock::now(); - std::vector<Protected<IdleFtpSessions>*> sessionStores; //pointers remain stable, thanks to std::map<> + std::vector<Protected<IdleFtpSessions>*> sessionStores; //pointers remain stable, thanks to std::unordered_map<> globalSessionStore_.access([&](GlobalFtpSessions& sessionsById) { @@ -1185,7 +1184,7 @@ private: BUT: practially this will be the inode ID/file index, so we can assume persistence */ const std::string uniqueId = afterFirst(fact, '=', IfNotFoundReturn::none); assert(!uniqueId.empty()); - item.filePrint = hashArray<AFS::FingerPrint>(uniqueId.begin(), uniqueId.end()); + item.filePrint = hashString<AFS::FingerPrint>(uniqueId); //other metadata to hash e.g. create fact? => not available on Linux-hosted FTP! } @@ -1584,7 +1583,7 @@ private: { for (const FtpItem& item : FtpDirectoryReader::execute(login_, dirPath)) //throw FileError { - const AfsPath itemPath(nativeAppendPaths(dirPath.value, item.itemName)); + const AfsPath itemPath(appendPath(dirPath.value, item.itemName)); switch (item.type) { @@ -1958,6 +1957,8 @@ public: private: Zstring getInitPathPhrase(const AfsPath& afsPath) const override { return concatenateFtpFolderPathPhrase(login_, afsPath); } + std::vector<Zstring> getPathPhraseAliases(const AfsPath& afsPath) const override { return {getInitPathPhrase(afsPath)}; } + std::wstring getDisplayPath(const AfsPath& afsPath) const override { return getCurlDisplayPath(login_, afsPath); } bool isNullFileSystem() const override { return login_.server.empty(); } diff --git a/FreeFileSync/Source/afs/ftp_common.h b/FreeFileSync/Source/afs/ftp_common.h index c8fcff0a..233edd26 100644 --- a/FreeFileSync/Source/afs/ftp_common.h +++ b/FreeFileSync/Source/afs/ftp_common.h @@ -58,6 +58,7 @@ Zstring decodeFtpUsername(Zstring name) inline Zstring getServerRelPath(const AfsPath& afsPath) { + using namespace zen; if constexpr (FILE_NAME_SEPARATOR != Zstr('/' )) return Zstr('/') + replaceCpy(afsPath.value, FILE_NAME_SEPARATOR, Zstr('/')); else diff --git a/FreeFileSync/Source/afs/gdrive.cpp b/FreeFileSync/Source/afs/gdrive.cpp index df065225..96f7340b 100644 --- a/FreeFileSync/Source/afs/gdrive.cpp +++ b/FreeFileSync/Source/afs/gdrive.cpp @@ -170,7 +170,7 @@ AFS::FingerPrint getGdriveFilePrint(const std::string& itemId) { assert(!itemId.empty()); //Google Drive item ID is persistent and globally unique! :) - return hashArray<AFS::FingerPrint>(itemId.begin(), itemId.end()); + return hashString<AFS::FingerPrint>(itemId); } //---------------------------------------------------------------------------------------------------------------- @@ -264,7 +264,7 @@ private: lastCleanupTime = std::chrono::steady_clock::now(); - std::vector<Protected<IdleHttpSessions>*> sessionStores; //pointers remain stable, thanks to std::map<> + std::vector<Protected<IdleHttpSessions>*> sessionStores; //pointers remain stable, thanks to std::unordered_map<> globalSessionStore_.access([&](GlobalHttpSessions& sessionsById) { @@ -1956,7 +1956,7 @@ public: if (ps.relPath.empty()) return ps.existingItemId; - const AfsPath afsPathMissingChild(nativeAppendPaths(ps.existingPath.value, ps.relPath.front())); + const AfsPath afsPathMissingChild(appendPath(ps.existingPath.value, ps.relPath.front())); throw SysError(replaceCpy(_("Cannot find %x."), L"%x", fmtPath(getShortDisplayPath(afsPathMissingChild)))); } @@ -2080,7 +2080,7 @@ public: if (auto it = itemDetails_.find(itemId); it != itemDetails_.end()) { GdriveItemDetails detailsNew = it->second; - std::erase_if(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdOld; }); + std::erase(detailsNew.parentIds, parentIdOld); notifyItemUpdated(stateDelta, itemId, &detailsNew); } else //conflict!!! @@ -2176,7 +2176,7 @@ private: { if (itFound != itemDetails_.end()) throw SysError(replaceCpy(_("Cannot find %x."), L"%x", - fmtPath(getShortDisplayPath(AfsPath(nativeAppendPaths(folderPath.value, relPath.front()))))) + L' ' + + fmtPath(getShortDisplayPath(AfsPath(appendPath(folderPath.value, relPath.front()))))) + L' ' + replaceCpy(_("The name %x is used by more than one item in the folder."), L"%x", fmtPath(relPath.front()))); itFound = itChild; @@ -2200,7 +2200,7 @@ private: }; const auto& [childId, childDetails] = *itFound; - const AfsPath childItemPath(nativeAppendPaths(folderPath.value, relPath.front())); + const AfsPath childItemPath(appendPath(folderPath.value, relPath.front())); const std::vector<Zstring> childRelPath(relPath.begin() + 1, relPath.end()); if (childRelPath.empty()) @@ -2230,7 +2230,7 @@ private: case GdriveItemType::shortcut: //should never happen: creating shortcuts to shortcuts fails with "Internal Error" throw SysError(replaceCpy(_("Cannot resolve symbolic link %x."), L"%x", - fmtPath(getShortDisplayPath(AfsPath(nativeAppendPaths(folderPath.value, relPath.front()))))) + L' ' + + fmtPath(getShortDisplayPath(AfsPath(appendPath(folderPath.value, relPath.front()))))) + L' ' + L"Google Drive Shortcut points to another Shortcut."); } break; @@ -2276,7 +2276,7 @@ private: for (const std::string& parentId : parentIdsRemoved) if (auto itP = folderContents_.find(parentId); itP != folderContents_.end()) - std::erase_if(itP->second.childItems, [&](auto itChild) { return itChild == it; }); + std::erase(itP->second.childItems, it); //if all parents are removed, Google Drive will (recursively) delete the item => don't prematurely do this now: wait for change notifications! //OR: item without parents located in "Shared with me", but referenced via Shortcut => don't remove!!! @@ -2296,7 +2296,7 @@ private: { for (const std::string& parentId : it->second.parentIds) //1. delete from parent folders if (auto itP = folderContents_.find(parentId); itP != folderContents_.end()) - std::erase_if(itP->second.childItems, [&](auto itChild) { return itChild == it; }); + std::erase(itP->second.childItems, it); itemDetails_.erase(it); } @@ -2308,7 +2308,7 @@ private: // and no notifications for child items: possible with Google drive!? // => no problem: FolderContent::isKnownFolder will be false for this restored folder => only a rescan needed for (auto itChild : itP->second.childItems) - std::erase_if(itChild->second.parentIds, [&](const std::string& id) { return id == itemId; }); + std::erase(itChild->second.parentIds, itemId); folderContents_.erase(itP); } } @@ -2542,7 +2542,7 @@ public: void saveActiveSessions() //throw FileError { - std::vector<Protected<SessionHolder>*> protectedSessions; //pointers remain stable, thanks to std::map<> + std::vector<Protected<SessionHolder>*> protectedSessions; //pointers remain stable, thanks to std::unordered_map<> globalSessions_.access([&](GlobalSessions& sessions) { for (auto& [accountEmail, protectedSession] : sessions) @@ -2634,7 +2634,7 @@ public: { std::vector<std::string> emails; - std::vector<Protected<SessionHolder>*> protectedSessions; //pointers remain stable, thanks to std::map<> + std::vector<Protected<SessionHolder>*> protectedSessions; //pointers remain stable, thanks to std::unordered_map<> globalSessions_.access([&](GlobalSessions& sessions) { for (auto& [accountEmail, protectedSession] : sessions) @@ -2717,13 +2717,13 @@ private: { for (char& c : accountEmail) c = asciiToLower(c); - //return appendSeparator(configDirPath_) + utfTo<Zstring>(formatAsHexString(getMd5(utfTo<std::string>(accountEmail)))) + Zstr(".db"); - return appendSeparator(configDirPath_) + utfTo<Zstring>(accountEmail) + Zstr(".db"); + //return appendPath(configDirPath_, utfTo<Zstring>(formatAsHexString(getMd5(utfTo<std::string>(accountEmail)))) + Zstr(".db")); + return appendPath(configDirPath_, utfTo<Zstring>(accountEmail) + Zstr(".db")); } void accessUserSession(const std::string& accountEmail, int timeoutSec, const std::function<void(std::optional<UserSession>& userSession)>& useSession /*throw X*/) //throw SysError, X { - Protected<SessionHolder>* protectedSession = nullptr; //pointers remain stable, thanks to std::map<> + Protected<SessionHolder>* protectedSession = nullptr; //pointers remain stable, thanks to std::unordered_map<> globalSessions_.access([&](GlobalSessions& sessions) { protectedSession = &sessions[accountEmail]; }); protectedSession->access([&](SessionHolder& holder) @@ -2854,7 +2854,7 @@ private: bool dbWasLoaded = false; std::optional<UserSession> session; }; - using GlobalSessions = std::map<std::string /*Google account email*/, Protected<SessionHolder>, LessAsciiNoCase>; + using GlobalSessions = std::unordered_map<std::string /*Google account email*/, Protected<SessionHolder>, StringHashAsciiNoCase, StringEqualAsciiNoCase>; Protected<GlobalSessions> globalSessions_; const Zstring configDirPath_; @@ -3017,7 +3017,7 @@ private: case GdriveItemType::folder: if (std::shared_ptr<AFS::TraverserCallback> cbSub = cb.onFolder({itemName, false /*isFollowedSymlink*/})) //throw X { - const AfsPath afsItemPath(nativeAppendPaths(folderPath.value, itemName)); + const AfsPath afsItemPath(appendPath(folderPath.value, itemName)); workload_.push_back({afsItemPath, std::move(cbSub)}); } break; @@ -3027,7 +3027,7 @@ private: { case AFS::TraverserCallback::HandleLink::follow: { - const AfsPath afsItemPath(nativeAppendPaths(folderPath.value, itemName)); + const AfsPath afsItemPath(appendPath(folderPath.value, itemName)); GdriveItemDetails targetDetails = {}; if (!tryReportingItemError([&] //throw X @@ -3179,7 +3179,7 @@ struct OutputStreamGdrive : public AFS::OutputStreamImpl if (ps.relPath.size() > 1) //parent folder missing throw SysError(replaceCpy(_("Cannot find %x."), L"%x", - fmtPath(getGdriveDisplayPath({gdrivePath.gdriveLogin, AfsPath(nativeAppendPaths(ps.existingPath.value, ps.relPath.front()))})))); + fmtPath(getGdriveDisplayPath({gdrivePath.gdriveLogin, AfsPath(appendPath(ps.existingPath.value, ps.relPath.front()))})))); parentId = ps.existingItemId; }); @@ -3328,6 +3328,8 @@ private: Zstring getInitPathPhrase(const AfsPath& afsPath) const override { return concatenateGdriveFolderPathPhrase(getGdrivePath(afsPath)); } + std::vector<Zstring> getPathPhraseAliases(const AfsPath& afsPath) const override { return {getInitPathPhrase(afsPath)}; } + std::wstring getDisplayPath(const AfsPath& afsPath) const override { return getGdriveDisplayPath(getGdrivePath(afsPath)); } bool isNullFileSystem() const override { return gdriveLogin_.email.empty(); } @@ -3393,7 +3395,7 @@ private: throw SysError(replaceCpy(_("The name %x is already used by another item."), L"%x", fmtPath(folderName))); if (ps.relPath.size() > 1) //parent folder missing - throw SysError(replaceCpy(_("Cannot find %x."), L"%x", fmtPath(getDisplayPath(AfsPath(nativeAppendPaths(ps.existingPath.value, ps.relPath.front())))))); + throw SysError(replaceCpy(_("Cannot find %x."), L"%x", fmtPath(getDisplayPath(AfsPath(appendPath(ps.existingPath.value, ps.relPath.front())))))); parentId = ps.existingItemId; }); @@ -3599,7 +3601,7 @@ private: if (psTo.relPath.size() > 1) //parent folder missing throw SysError(replaceCpy(_("Cannot find %x."), L"%x", - fmtPath(fsTarget.getDisplayPath(AfsPath(nativeAppendPaths(psTo.existingPath.value, psTo.relPath.front())))))); + fmtPath(fsTarget.getDisplayPath(AfsPath(appendPath(psTo.existingPath.value, psTo.relPath.front())))))); parentIdTrg = psTo.existingItemId; }); @@ -3676,7 +3678,7 @@ private: throw SysError(replaceCpy(_("The name %x is already used by another item."), L"%x", fmtPath(shortcutName))); if (ps.relPath.size() > 1) //parent folder missing - throw SysError(replaceCpy(_("Cannot find %x."), L"%x", fmtPath(fsTarget.getDisplayPath(AfsPath(nativeAppendPaths(ps.existingPath.value, ps.relPath.front())))))); + throw SysError(replaceCpy(_("Cannot find %x."), L"%x", fmtPath(fsTarget.getDisplayPath(AfsPath(appendPath(ps.existingPath.value, ps.relPath.front())))))); parentId = ps.existingItemId; }); @@ -3747,7 +3749,7 @@ private: if (psTo.relPath.size() > 1) //parent folder missing throw SysError(replaceCpy(_("Cannot find %x."), L"%x", - fmtPath(fsTarget.getDisplayPath(AfsPath(nativeAppendPaths(psTo.existingPath.value, psTo.relPath.front())))))); + fmtPath(fsTarget.getDisplayPath(AfsPath(appendPath(psTo.existingPath.value, psTo.relPath.front())))))); parentIdTo = psTo.existingItemId; } }); @@ -3974,7 +3976,7 @@ Zstring fff::getGoogleDriveFolderUrl(const AbstractPath& folderPath) //throw Fil { if (const auto gdriveDevice = dynamic_cast<const GdriveFileSystem*>(&folderPath.afsDevice.ref())) return gdriveDevice->getFolderUrl(folderPath.afsPath); //throw FileError - assert(false); + //assert(false); return {}; } diff --git a/FreeFileSync/Source/afs/native.cpp b/FreeFileSync/Source/afs/native.cpp index de3cea86..a4f7caab 100644 --- a/FreeFileSync/Source/afs/native.cpp +++ b/FreeFileSync/Source/afs/native.cpp @@ -243,7 +243,7 @@ private: { for (const auto& [itemName] : getDirContentFlat(dirPath)) //throw FileError { - const Zstring itemPath = appendSeparator(dirPath) + itemName; + const Zstring itemPath = appendPath(dirPath, itemName); FsItemDetails itemDetails = {}; if (!tryReportingItemError([&] //throw X @@ -314,7 +314,7 @@ class RecycleSessionNative : public AFS::RecycleSession public: explicit RecycleSessionNative(const Zstring& baseFolderPath) : baseFolderPath_(baseFolderPath) {} - void recycleItemIfExists(const AbstractPath& itemPath, const Zstring& logicalRelPath) override; //throw FileError + void recycleItemIfExists(const AbstractPath& itemPath, const Zstring& relPath) override; //throw FileError void tryCleanup(const std::function<void (const std::wstring& displayPath)>& notifyDeletionStatus /*throw X*/) override; //throw FileError, X private: @@ -400,15 +400,17 @@ class NativeFileSystem : public AbstractFileSystem public: explicit NativeFileSystem(const Zstring& rootPath) : rootPath_(rootPath) {} - Zstring getNativePath(const AfsPath& afsPath) const { return isNullFileSystem() ? Zstring() : nativeAppendPaths(rootPath_, afsPath.value); } + Zstring getNativePath(const AfsPath& afsPath) const { return appendPath(rootPath_, afsPath.value); } private: - Zstring getInitPathPhrase(const AfsPath& afsPath) const override + Zstring getInitPathPhrase(const AfsPath& afsPath) const override { return makePathPhrase(getNativePath(afsPath)); } + + std::vector<Zstring> getPathPhraseAliases(const AfsPath& afsPath) const override { - Zstring initPathPhrase = getNativePath(afsPath); - if (endsWith(initPathPhrase, Zstr(' '))) //path prase concept must survive trimming! - initPathPhrase += FILE_NAME_SEPARATOR; - return initPathPhrase; + if (isNullFileSystem()) + return {}; + + return ::getPathPhraseAliases(getNativePath(afsPath)); } std::wstring getDisplayPath(const AfsPath& afsPath) const override { return utfTo<std::wstring>(getNativePath(afsPath)); } @@ -693,10 +695,8 @@ private: //- return true if item existed //- multi-threaded access: internally synchronized! -void RecycleSessionNative::recycleItemIfExists(const AbstractPath& itemPath, const Zstring& logicalRelPath) //throw FileError +void RecycleSessionNative::recycleItemIfExists(const AbstractPath& itemPath, const Zstring& relPath) //throw FileError { - assert(!startsWith(logicalRelPath, FILE_NAME_SEPARATOR)); - const Zstring& itemPathNative = getNativeItemPath(itemPath); if (itemPathNative.empty()) throw std::logic_error("Contract violation! " + std::string(__FILE__) + ':' + numberTo<std::string>(__LINE__)); @@ -717,10 +717,10 @@ bool fff::acceptsItemPathPhraseNative(const Zstring& itemPathPhrase) //noexcept Zstring path = expandMacros(itemPathPhrase); //expand before trimming! trim(path); - if (path.empty()) //eat up empty paths before other AFS implementations get a chance! return true; + if (startsWith(path, Zstr('['))) //drive letter by volume name syntax return true; @@ -741,8 +741,8 @@ AbstractPath fff::createItemPathNative(const Zstring& itemPathPhrase) //noexcept AbstractPath fff::createItemPathNativeNoFormatting(const Zstring& nativePath) //noexcept { - if (const std::optional<PathComponents> comp = parsePathComponents(nativePath)) - return AbstractPath(makeSharedRef<NativeFileSystem>(comp->rootPath), AfsPath(comp->relPath)); + if (const std::optional<PathComponents> pc = parsePathComponents(nativePath)) + return AbstractPath(makeSharedRef<NativeFileSystem>(pc->rootPath), AfsPath(pc->relPath)); else //broken path syntax return AbstractPath(makeSharedRef<NativeFileSystem>(nativePath), AfsPath()); } diff --git a/FreeFileSync/Source/afs/sftp.cpp b/FreeFileSync/Source/afs/sftp.cpp index 1d6546f8..d2446b8f 100644 --- a/FreeFileSync/Source/afs/sftp.cpp +++ b/FreeFileSync/Source/afs/sftp.cpp @@ -910,7 +910,7 @@ private: lastCleanupTime = std::chrono::steady_clock::now(); - std::vector<Protected<IdleSshSessions>*> sessionStores; //pointers remain stable, thanks to std::map<> + std::vector<Protected<IdleSshSessions>*> sessionStores; //pointers remain stable, thanks to std::unordered_map<> globalSessionStore_.access([&](GlobalSshSessions& sessionsById) { @@ -1061,7 +1061,7 @@ std::vector<SftpItem> getDirContentFlat(const SftpLogin& login, const AfsPath& d continue; const Zstring& itemName = utfTo<Zstring>(sftpItemName); - const AfsPath itemPath(nativeAppendPaths(dirPath.value, itemName)); + const AfsPath itemPath(appendPath(dirPath.value, itemName)); if ((attribs.flags & LIBSSH2_SFTP_ATTR_PERMISSIONS) == 0) //server probably does not support these attributes => fail at folder level throw FileError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtPath(getSftpDisplayPath(login, itemPath))), L"File attributes not available."); @@ -1145,7 +1145,7 @@ private: { for (const SftpItem& item : getDirContentFlat(login_, dirPath)) //throw FileError { - const AfsPath itemPath(nativeAppendPaths(dirPath.value, item.itemName)); + const AfsPath itemPath(appendPath(dirPath.value, item.itemName)); switch (item.details.type) { @@ -1516,6 +1516,23 @@ public: private: Zstring getInitPathPhrase(const AfsPath& afsPath) const override { return concatenateSftpFolderPathPhrase(login_, afsPath); } + std::vector<Zstring> getPathPhraseAliases(const AfsPath& afsPath) const override + { + std::vector<Zstring> pathAliases; + + if (login_.authType != SftpAuthType::keyFile || login_.privateKeyFilePath.empty()) + pathAliases.push_back(concatenateSftpFolderPathPhrase(login_, afsPath)); + else //why going crazy with key path aliases!? because we can... + for (const Zstring& pathPhrase : ::getPathPhraseAliases(login_.privateKeyFilePath)) + { + auto loginTmp = login_; + loginTmp.privateKeyFilePath = pathPhrase; + + pathAliases.push_back(concatenateSftpFolderPathPhrase(loginTmp, afsPath)); + } + return pathAliases; + } + std::wstring getDisplayPath(const AfsPath& afsPath) const override { return getSftpDisplayPath(login_, afsPath); } bool isNullFileSystem() const override { return login_.server.empty(); } @@ -2021,7 +2038,7 @@ AbstractPath fff::createItemPathSftp(const Zstring& itemPathPhrase) //noexcept else if (startsWith(optPhrase, Zstr("keyfile="))) { login.authType = SftpAuthType::keyFile; - login.privateKeyFilePath = afterFirst(optPhrase, Zstr("="), IfNotFoundReturn::none); + login.privateKeyFilePath = getResolvedFilePath(afterFirst(optPhrase, Zstr("="), IfNotFoundReturn::none)); } else if (optPhrase == Zstr("agent")) login.authType = SftpAuthType::agent; diff --git a/FreeFileSync/Source/application.cpp b/FreeFileSync/Source/application.cpp index c9acda62..c070fc5e 100644 --- a/FreeFileSync/Source/application.cpp +++ b/FreeFileSync/Source/application.cpp @@ -7,7 +7,6 @@ #include "application.h" #include <memory> #include <zen/file_access.h> -#include <zen/file_path.h> #include <zen/perf.h> #include <zen/shutdown.h> #include <zen/process_exec.h> @@ -66,13 +65,13 @@ bool Application::OnInit() }; //parallel xBRZ-scaling! => run as early as possible - try { imageResourcesInit(getResourceDirPf() + Zstr("Icons.zip")); } + try { imageResourcesInit(appendPath(getResourceDirPath(), Zstr("Icons.zip"))); } catch (const FileError& e) { logInitError(e.toString()); } //errors are not really critical in this context //GTK should already have been initialized by wxWidgets (see \src\gtk\app.cpp:wxApp::Initialize) #if GTK_MAJOR_VERSION == 2 - ::gtk_rc_parse((getResourceDirPf() + "Gtk2Styles.rc").c_str()); + ::gtk_rc_parse(appendPath(getResourceDirPath(), "Gtk2Styles.rc").c_str()); //hang on Ubuntu 19.10 (GLib 2.62) caused by ibus initialization: https://freefilesync.org/forum/viewtopic.php?t=6704 //=> work around 1: bonus: avoid needless DBus calls: https://developer.gnome.org/gio/stable/running-gio-apps.html @@ -140,10 +139,10 @@ bool Application::OnInit() SetAppName(L"FreeFileSync"); //if not set, the default is the executable's name! //tentatively set program language to OS default until GlobalSettings.xml is read later - try { localizationInit(getResourceDirPf() + Zstr("Languages.zip")); } //throw FileError + try { localizationInit(appendPath(getResourceDirPath(), Zstr("Languages.zip"))); } //throw FileError catch (const FileError& e) { logInitError(e.toString()); } - initAfs({getResourceDirPf(), getConfigDirPathPf()}); //bonus: using FTP Gdrive implicitly inits OpenSSL (used in runSanityChecks() on Linux) already during globals init + initAfs({getResourceDirPath(), getConfigDirPath()}); //bonus: using FTP Gdrive implicitly inits OpenSSL (used in runSanityChecks() on Linux) already during globals init diff --git a/FreeFileSync/Source/base/algorithm.cpp b/FreeFileSync/Source/base/algorithm.cpp index 0486c66b..2ce3cd41 100644 --- a/FreeFileSync/Source/base/algorithm.cpp +++ b/FreeFileSync/Source/base/algorithm.cpp @@ -5,13 +5,10 @@ // ***************************************************************************** #include "algorithm.h" -#include <set> -#include <unordered_map> #include <zen/perf.h> #include <zen/crc.h> #include <zen/guid.h> #include <zen/file_access.h> //needed for TempFileBuffer only -#include <zen/serialize.h> #include "norm_filter.h" #include "db_file.h" #include "cmp_filetime.h" @@ -19,71 +16,10 @@ #include "../afs/concrete.h" #include "../afs/native.h" - using namespace zen; using namespace fff; -namespace -{ -class RecursiveObjectVisitorImpl -{ -public: - RecursiveObjectVisitorImpl(std::function<void (FolderPair& folder)> onFolder, - std::function<void (FilePair& file)> onFile, - std::function<void (SymlinkPair& symlink)> onSymlink) : - onFolder_(onFolder), onFile_(onFile), onSymlink_(onSymlink) {} - - void execute(FileSystemObject& fsObj) - { - visitFSObject(fsObj, - [&](const FolderPair& folder) { visit(const_cast<FolderPair& >(folder )); }, // - [&](const FilePair& file) { visit(const_cast<FilePair& >(file )); }, //physical object is not const anyway - [&](const SymlinkPair& symlink) { visit(const_cast<SymlinkPair&>(symlink)); }); // - } - -private: - void visit(FolderPair& folder) - { - if (onFolder_) - onFolder_(folder); - - for (FilePair& file : folder.refSubFiles()) - visit(file); - for (SymlinkPair& symlink : folder.refSubLinks()) - visit(symlink); - for (FolderPair& subFolder : folder.refSubFolders()) - visit(subFolder); - } - - void visit(FilePair& file) - { - if (onFile_) - onFile_(file); - } - - void visit(SymlinkPair& symlink) - { - if (onSymlink_) - onSymlink_(symlink); - } - - std::function<void (FolderPair& folder)> onFolder_; - std::function<void (FilePair& file)> onFile_; - std::function<void (SymlinkPair& symlink)> onSymlink_; -}; -} - - -void fff::recursiveObjectVisitor(FileSystemObject& fsObj, - std::function<void (FolderPair& folder)> onFolder, - std::function<void (FilePair& file)> onFile, - std::function<void (SymlinkPair& symlink)> onSymlink) -{ - RecursiveObjectVisitorImpl(onFolder, onFile, onSymlink).execute(fsObj); -} - - void fff::swapGrids(const MainConfiguration& mainCfg, FolderComparison& folderCmp, PhaseCallback& callback /*throw X*/) //throw X { @@ -97,13 +33,14 @@ void fff::swapGrids(const MainConfiguration& mainCfg, FolderComparison& folderCm namespace { -class Redetermine +//visitFSObjectRecursively? nope, see premature end of traversal in processFolder() +class SetSyncDirectionByConfig { public: - static void execute(const DirectionSet& dirCfgIn, ContainerObject& hierObj) { Redetermine(dirCfgIn).recurse(hierObj); } + static void execute(const DirectionSet& dirCfgIn, ContainerObject& hierObj) { SetSyncDirectionByConfig(dirCfgIn).recurse(hierObj); } private: - Redetermine(const DirectionSet& dirCfgIn) : dirCfg_(dirCfgIn) {} + SetSyncDirectionByConfig(const DirectionSet& dirCfgIn) : dirCfg_(dirCfgIn) {} void recurse(ContainerObject& hierObj) const { @@ -234,7 +171,7 @@ bool allItemsCategoryEqual(const ContainerObject& hierObj) [](const FilePair& file) { return file.getCategory() == FILE_EQUAL; })&& std::all_of(hierObj.refSubLinks().begin(), hierObj.refSubLinks().end(), - [](const SymlinkPair& link) { return link.getLinkCategory() == SYMLINK_EQUAL; })&& + [](const SymlinkPair& symlink) { return symlink.getLinkCategory() == SYMLINK_EQUAL; })&& std::all_of(hierObj.refSubFolders().begin(), hierObj.refSubFolders().end(), [](const FolderPair& folder) { @@ -260,7 +197,7 @@ bool matchesDbEntry(const FilePair& file, const InSyncFile* dbFile, const std::v else if (!dbFile) return false; - const InSyncDescrFile& descrDb = SelectParam<side>::ref(dbFile->left, dbFile->right); + const InSyncDescrFile& descrDb = selectParam<side>(dbFile->left, dbFile->right); return //we're not interested in "fileTimeTolerance" here! sameFileTime(file.getLastWriteTime<side>(), descrDb.modTime, FAT_FILE_TIME_PRECISION_SEC, ignoreTimeShiftMinutes) && @@ -304,7 +241,7 @@ bool matchesDbEntry(const SymlinkPair& symlink, const InSyncSymlink* dbSymlink, else if (!dbSymlink) return false; - const InSyncDescrLink& descrDb = SelectParam<side>::ref(dbSymlink->left, dbSymlink->right); + const InSyncDescrLink& descrDb = selectParam<side>(dbSymlink->left, dbSymlink->right); return sameFileTime(symlink.getLastWriteTime<side>(), descrDb.modTime, FAT_FILE_TIME_PRECISION_SEC, ignoreTimeShiftMinutes); } @@ -408,7 +345,7 @@ private: for (FolderPair& folder : hierObj.refSubFolders()) { - auto getDbEntry = [](const InSyncFolder* dbFolder, const Zstring& folderName) -> const InSyncFolder* + auto getDbEntry = [](const InSyncFolder* dbFolder, const ZstringNorm& folderName) -> const InSyncFolder* { if (dbFolder) if (const auto it = dbFolder->folders.find(folderName); @@ -416,12 +353,12 @@ private: return &it->second; return nullptr; }; - const InSyncFolder* dbEntryL = getDbEntry(dbFolderL, folder.getItemName<SelectSide::left>()); - const InSyncFolder* dbEntryR = dbEntryL; - if (dbFolderL != dbFolderR || - getUnicodeNormalForm(folder.getItemName<SelectSide::left >()) != - getUnicodeNormalForm(folder.getItemName<SelectSide::right>())) - dbEntryR = getDbEntry(dbFolderR, folder.getItemName<SelectSide::right>()); + const ZstringNorm itemNameL = folder.getItemName<SelectSide::left >(); + const ZstringNorm itemNameR = folder.getItemName<SelectSide::right>(); + + const InSyncFolder* dbEntryL = getDbEntry(dbFolderL, itemNameL); + const InSyncFolder* dbEntryR = dbFolderL == dbFolderR && itemNameL == itemNameR ? + dbEntryL : getDbEntry(dbFolderR, itemNameR); recurse(folder, dbEntryL, dbEntryR); } @@ -477,7 +414,7 @@ private: static bool sameSizeAndDate(const FilePair& file, const InSyncFile& dbFile) { return file.getFileSize<side>() == dbFile.fileSize && - file.getLastWriteTime<side>() == SelectParam<side>::ref(dbFile.left, dbFile.right).modTime; + file.getLastWriteTime<side>() == selectParam<side>(dbFile.left, dbFile.right).modTime; /* do NOT consider FAT_FILE_TIME_PRECISION_SEC: 1. if DB contains file metadata collected during folder comparison we can be as precise as we want here 2. if DB contains file metadata *estimated* directly after file copy: @@ -492,8 +429,8 @@ private: template <SelectSide side> FilePair* getAssocFilePair(const InSyncFile& dbFile) const { - const std::unordered_map<const InSyncFile*, FilePair*>& exOneSideByPath = SelectParam<side>::ref(exLeftOnlyByPath_, exRightOnlyByPath_); - const std::unordered_map<AFS::FingerPrint, FilePair*>& exOneSideById = SelectParam<side>::ref(exLeftOnlyById_, exRightOnlyById_); + const std::unordered_map<const InSyncFile*, FilePair*>& exOneSideByPath = selectParam<side>(exLeftOnlyByPath_, exRightOnlyByPath_); + const std::unordered_map<AFS::FingerPrint, FilePair*>& exOneSideById = selectParam<side>(exLeftOnlyById_, exRightOnlyById_); if (const auto it = exOneSideByPath.find(&dbFile); it != exOneSideByPath.end()) @@ -501,7 +438,7 @@ private: //even if the association by path doesn't match time and size while the association by ID does! //there doesn't seem to be (any?) value in allowing this! - if (const AFS::FingerPrint filePrint = SelectParam<side>::ref(dbFile.left, dbFile.right).filePrint; + if (const AFS::FingerPrint filePrint = selectParam<side>(dbFile.left, dbFile.right).filePrint; filePrint != 0) if (const auto it = exOneSideById.find(filePrint); it != exOneSideById.end()) @@ -570,13 +507,13 @@ private: //---------------------------------------------------------------------------------------------- -class RedetermineTwoWay +class SetSyncDirectionsTwoWay { public: - static void execute(BaseFolderPair& baseFolder, const InSyncFolder& dbFolder) { RedetermineTwoWay(baseFolder, dbFolder); } + static void execute(BaseFolderPair& baseFolder, const InSyncFolder& dbFolder) { SetSyncDirectionsTwoWay(baseFolder, dbFolder); } private: - RedetermineTwoWay(BaseFolderPair& baseFolder, const InSyncFolder& dbFolder) : + SetSyncDirectionsTwoWay(BaseFolderPair& baseFolder, const InSyncFolder& dbFolder) : cmpVar_ (baseFolder.getCompVariant()), fileTimeTolerance_ (baseFolder.getFileTimeTolerance()), ignoreTimeShiftMinutes_(baseFolder.getIgnoredTimeShift()) @@ -584,20 +521,20 @@ private: //-> considering filter not relevant: // if stricter filter than last time: all ok; // if less strict filter (if file ex on both sides -> conflict, fine; if file ex. on one side: copy to other side: fine) - recurse(baseFolder, &dbFolder, &dbFolder); + recurse(baseFolder, &dbFolder); } - void recurse(ContainerObject& hierObj, const InSyncFolder* dbFolderL, const InSyncFolder* dbFolderR) const + void recurse(ContainerObject& hierObj, const InSyncFolder* dbFolder) const { for (FilePair& file : hierObj.refSubFiles()) - processFile(file, dbFolderL, dbFolderR); - for (SymlinkPair& link : hierObj.refSubLinks()) - processSymlink(link, dbFolderL, dbFolderR); + processFile(file, dbFolder); + for (SymlinkPair& symlink : hierObj.refSubLinks()) + processSymlink(symlink, dbFolder); for (FolderPair& folder : hierObj.refSubFolders()) - processDir(folder, dbFolderL, dbFolderR); + processDir(folder, dbFolder); } - void processFile(FilePair& file, const InSyncFolder* dbFolderL, const InSyncFolder* dbFolderR) const + void processFile(FilePair& file, const InSyncFolder* dbFolder) const { const CompareFileResult cat = file.getCategory(); if (cat == FILE_EQUAL) @@ -611,88 +548,72 @@ private: //#################################################################################### //try to find corresponding database entry - auto getDbEntry = [](const InSyncFolder* dbFolder, const Zstring& fileName) -> const InSyncFile* + auto getDbEntry = [dbFolder](const ZstringNorm& fileName) -> const InSyncFile* { if (dbFolder) - { - auto it = dbFolder->files.find(fileName); - if (it != dbFolder->files.end()) + if (auto it = dbFolder->files.find(fileName); + it != dbFolder->files.end()) return &it->second; - } return nullptr; }; - const InSyncFile* dbEntryL = getDbEntry(dbFolderL, file.getItemName<SelectSide::left>()); - const InSyncFile* dbEntryR = dbEntryL; - if (dbFolderL != dbFolderR || getUnicodeNormalForm(file.getItemName<SelectSide::left>()) != getUnicodeNormalForm(file.getItemName<SelectSide::right>())) - dbEntryR = getDbEntry(dbFolderR, file.getItemName<SelectSide::right>()); + const ZstringNorm itemNameL = file.getItemName<SelectSide::left >(); + const ZstringNorm itemNameR = file.getItemName<SelectSide::right>(); + + const InSyncFile* dbEntryL = getDbEntry(itemNameL); + const InSyncFile* dbEntryR = itemNameL == itemNameR ? dbEntryL : getDbEntry(itemNameR); + + if (dbEntryL && dbEntryR && dbEntryL != dbEntryR) //conflict: which db entry to use? + return file.setSyncDirConflict(txtDbAmbiguous_); - //evaluation const bool changeOnLeft = !matchesDbEntry<SelectSide::left >(file, dbEntryL, ignoreTimeShiftMinutes_); const bool changeOnRight = !matchesDbEntry<SelectSide::right>(file, dbEntryR, ignoreTimeShiftMinutes_); - if (changeOnLeft != changeOnRight) - { - //if database entry not in sync according to current settings! -> set direction based on sync status only! - if ((dbEntryL && !stillInSync(*dbEntryL, cmpVar_, fileTimeTolerance_, ignoreTimeShiftMinutes_)) || - (dbEntryR && !stillInSync(*dbEntryR, cmpVar_, fileTimeTolerance_, ignoreTimeShiftMinutes_))) - file.setSyncDirConflict(txtDbNotInSync_); - else - file.setSyncDir(changeOnLeft ? SyncDirection::right : SyncDirection::left); - } + if (changeOnLeft == changeOnRight) + file.setSyncDirConflict(changeOnLeft ? txtBothSidesChanged_ : txtNoSideChanged_); + else if (const InSyncFile* dbEntry = dbEntryL ? dbEntryL : dbEntryR; + dbEntry && !stillInSync(*dbEntry, cmpVar_, fileTimeTolerance_, ignoreTimeShiftMinutes_)) + file.setSyncDirConflict(txtDbNotInSync_); else - { - if (changeOnLeft) - file.setSyncDirConflict(txtBothSidesChanged_); - else - file.setSyncDirConflict(txtNoSideChanged_); - } + file.setSyncDir(changeOnLeft ? SyncDirection::right : SyncDirection::left); } - void processSymlink(SymlinkPair& symlink, const InSyncFolder* dbFolderL, const InSyncFolder* dbFolderR) const + void processSymlink(SymlinkPair& symlink, const InSyncFolder* dbFolder) const { const CompareSymlinkResult cat = symlink.getLinkCategory(); if (cat == SYMLINK_EQUAL) return; //try to find corresponding database entry - auto getDbEntry = [](const InSyncFolder* dbFolder, const Zstring& linkName) -> const InSyncSymlink* + auto getDbEntry = [dbFolder](const ZstringNorm& linkName) -> const InSyncSymlink* { if (dbFolder) - { - auto it = dbFolder->symlinks.find(linkName); - if (it != dbFolder->symlinks.end()) + if (auto it = dbFolder->symlinks.find(linkName); + it != dbFolder->symlinks.end()) return &it->second; - } return nullptr; }; - const InSyncSymlink* dbEntryL = getDbEntry(dbFolderL, symlink.getItemName<SelectSide::left>()); - const InSyncSymlink* dbEntryR = dbEntryL; - if (dbFolderL != dbFolderR || getUnicodeNormalForm(symlink.getItemName<SelectSide::left>()) != getUnicodeNormalForm(symlink.getItemName<SelectSide::right>())) - dbEntryR = getDbEntry(dbFolderR, symlink.getItemName<SelectSide::right>()); + const ZstringNorm itemNameL = symlink.getItemName<SelectSide::left >(); + const ZstringNorm itemNameR = symlink.getItemName<SelectSide::right>(); + + const InSyncSymlink* dbEntryL = getDbEntry(itemNameL); + const InSyncSymlink* dbEntryR = itemNameL == itemNameR ? dbEntryL : getDbEntry(itemNameR); + + if (dbEntryL && dbEntryR && dbEntryL != dbEntryR) //conflict: which db entry to use? + return symlink.setSyncDirConflict(txtDbAmbiguous_); - //evaluation const bool changeOnLeft = !matchesDbEntry<SelectSide::left >(symlink, dbEntryL, ignoreTimeShiftMinutes_); const bool changeOnRight = !matchesDbEntry<SelectSide::right>(symlink, dbEntryR, ignoreTimeShiftMinutes_); - if (changeOnLeft != changeOnRight) - { - //if database entry not in sync according to current settings! -> set direction based on sync status only! - if ((dbEntryL && !stillInSync(*dbEntryL, cmpVar_, fileTimeTolerance_, ignoreTimeShiftMinutes_)) || - (dbEntryR && !stillInSync(*dbEntryR, cmpVar_, fileTimeTolerance_, ignoreTimeShiftMinutes_))) - symlink.setSyncDirConflict(txtDbNotInSync_); - else - symlink.setSyncDir(changeOnLeft ? SyncDirection::right : SyncDirection::left); - } + if (changeOnLeft == changeOnRight) + symlink.setSyncDirConflict(changeOnLeft ? txtBothSidesChanged_ : txtNoSideChanged_); + else if (const InSyncSymlink* dbEntry = dbEntryL ? dbEntryL : dbEntryR; + dbEntry && !stillInSync(*dbEntry, cmpVar_, fileTimeTolerance_, ignoreTimeShiftMinutes_)) + symlink.setSyncDirConflict(txtDbNotInSync_); else - { - if (changeOnLeft) - symlink.setSyncDirConflict(txtBothSidesChanged_); - else - symlink.setSyncDirConflict(txtNoSideChanged_); - } + symlink.setSyncDir(changeOnLeft ? SyncDirection::right : SyncDirection::left); } - void processDir(FolderPair& folder, const InSyncFolder* dbFolderL, const InSyncFolder* dbFolderR) const + void processDir(FolderPair& folder, const InSyncFolder* dbFolder) const { const CompareDirResult cat = folder.getDirCategory(); @@ -704,51 +625,53 @@ private: //####################################################################################### //try to find corresponding database entry - auto getDbEntry = [](const InSyncFolder* dbFolder, const Zstring& folderName) -> const InSyncFolder* + auto getDbEntry = [dbFolder](const ZstringNorm& folderName) -> const InSyncFolder* { if (dbFolder) - { - auto it = dbFolder->folders.find(folderName); - if (it != dbFolder->folders.end()) + if (auto it = dbFolder->folders.find(folderName); + it != dbFolder->folders.end()) return &it->second; - } return nullptr; }; - const InSyncFolder* dbEntryL = getDbEntry(dbFolderL, folder.getItemName<SelectSide::left>()); - const InSyncFolder* dbEntryR = dbEntryL; - if (dbFolderL != dbFolderR || getUnicodeNormalForm(folder.getItemName<SelectSide::left>()) != getUnicodeNormalForm(folder.getItemName<SelectSide::right>())) - dbEntryR = getDbEntry(dbFolderR, folder.getItemName<SelectSide::right>()); + + const ZstringNorm itemNameL = folder.getItemName<SelectSide::left >(); + const ZstringNorm itemNameR = folder.getItemName<SelectSide::right>(); + + const InSyncFolder* dbEntryL = getDbEntry(itemNameL); + const InSyncFolder* dbEntryR = itemNameL == itemNameR ? dbEntryL : getDbEntry(itemNameR); + + if (dbEntryL && dbEntryR && dbEntryL != dbEntryR) //conflict: which db entry to use? + { + auto onFsItem = [&](FileSystemObject& fsObj) + { + if (fsObj.getCategory() != FILE_EQUAL) + fsObj.setSyncDirConflict(txtDbAmbiguous_); + }; + return visitFSObjectRecursively(static_cast<FileSystemObject&>(folder), onFsItem, onFsItem, onFsItem); + } + const InSyncFolder* dbEntry = dbEntryL ? dbEntryL : dbEntryR; //exactly one side nullptr? => change in upper/lower case! if (cat != DIR_EQUAL) { - //evaluation const bool changeOnLeft = !matchesDbEntry<SelectSide::left >(folder, dbEntryL); const bool changeOnRight = !matchesDbEntry<SelectSide::right>(folder, dbEntryR); - if (changeOnLeft != changeOnRight) - { - //if database entry not in sync according to current settings! -> set direction based on sync status only! - if ((dbEntryL && !stillInSync(*dbEntryL)) || - (dbEntryR && !stillInSync(*dbEntryR))) - folder.setSyncDirConflict(txtDbNotInSync_); - else - folder.setSyncDir(changeOnLeft ? SyncDirection::right : SyncDirection::left); - } + if (changeOnLeft == changeOnRight) + folder.setSyncDirConflict(changeOnLeft ? txtBothSidesChanged_ : txtNoSideChanged_); + else if (dbEntry && !stillInSync(*dbEntry)) + folder.setSyncDirConflict(txtDbNotInSync_); else - { - if (changeOnLeft) - folder.setSyncDirConflict(txtBothSidesChanged_); - else - folder.setSyncDirConflict(txtNoSideChanged_); - } + folder.setSyncDir(changeOnLeft ? SyncDirection::right : SyncDirection::left); } - recurse(folder, dbEntryL, dbEntryR); + recurse(folder, dbEntry); } + //need ref-counted strings! see FileSystemObject::syncDirectionConflict_ const Zstringc txtBothSidesChanged_ = utfTo<Zstringc>(_("Both sides have changed since last synchronization.")); - const Zstringc txtNoSideChanged_ = utfTo<Zstringc>(_("Cannot determine sync-direction:") + L" \n" + _("No change since last synchronization.")); - const Zstringc txtDbNotInSync_ = utfTo<Zstringc>(_("Cannot determine sync-direction:") + L" \n" + _("The database entry is not in sync considering current settings.")); + const Zstringc txtNoSideChanged_ = utfTo<Zstringc>(_("Cannot determine sync-direction:") + L'\n' + _("No change since last synchronization.")); + const Zstringc txtDbNotInSync_ = utfTo<Zstringc>(_("Cannot determine sync-direction:") + L'\n' + _("The database entry is not in sync considering current settings.")); + const Zstringc txtDbAmbiguous_ = utfTo<Zstringc>(_("Cannot determine sync-direction:") + L'\n' + _("The database entry is ambiguous.")); const CompareVariant cmpVar_; const int fileTimeTolerance_; @@ -808,7 +731,7 @@ void fff::redetermineSyncDirection(const std::vector<std::pair<BaseFolderPair*, if (dirCfg.var == SyncVariant::twoWay) { if (lastSyncState) - RedetermineTwoWay::execute(*baseFolder, *lastSyncState); + SetSyncDirectionsTwoWay::execute(*baseFolder, *lastSyncState); else //default fallback { std::wstring msg = _("Setting directions for first synchronization: Old files will be overwritten with newer files."); @@ -818,11 +741,11 @@ void fff::redetermineSyncDirection(const std::vector<std::pair<BaseFolderPair*, try { callback.logInfo(msg); /*throw X*/} catch (...) {}; - Redetermine::execute(getTwoWayUpdateSet(), *baseFolder); + SetSyncDirectionByConfig::execute(getTwoWayUpdateSet(), *baseFolder); } } else - Redetermine::execute(extractDirections(dirCfg), *baseFolder); + SetSyncDirectionByConfig::execute(extractDirections(dirCfg), *baseFolder); //detect renamed files if (lastSyncState) @@ -851,89 +774,37 @@ void fff::redetermineSyncDirection(const std::vector<std::pair<BaseFolderPair*, //--------------------------------------------------------------------------------------------------------------- -namespace -{ -void setSyncDirectionImpl(FilePair& file, SyncDirection newDirection) -{ - if (file.getCategory() != FILE_EQUAL) - file.setSyncDir(newDirection); -} - -void setSyncDirectionImpl(SymlinkPair& symlink, SyncDirection newDirection) -{ - if (symlink.getLinkCategory() != SYMLINK_EQUAL) - symlink.setSyncDir(newDirection); -} - -void setSyncDirectionImpl(FolderPair& folder, SyncDirection newDirection) -{ - if (folder.getDirCategory() != DIR_EQUAL) - folder.setSyncDir(newDirection); - - for (FilePair& file : folder.refSubFiles()) - setSyncDirectionImpl(file, newDirection); - for (SymlinkPair& link : folder.refSubLinks()) - setSyncDirectionImpl(link, newDirection); - for (FolderPair& subFolder : folder.refSubFolders()) - setSyncDirectionImpl(subFolder, newDirection); -} -} - - void fff::setSyncDirectionRec(SyncDirection newDirection, FileSystemObject& fsObj) { - //process subdirectories also! - visitFSObject(fsObj, - [&](const FolderPair& folder) { setSyncDirectionImpl(const_cast<FolderPair& >(folder ), newDirection); }, // - [&](const FilePair& file) { setSyncDirectionImpl(const_cast<FilePair& >(file ), newDirection); }, //physical object is not const anyway - [&](const SymlinkPair& symlink) { setSyncDirectionImpl(const_cast<SymlinkPair&>(symlink), newDirection); }); // - -} - -//--------------- functions related to filtering ------------------------------------------------------------------------------------ - -namespace -{ -template <bool include> -void inOrExcludeAllRows(ContainerObject& hierObj) -{ - for (FilePair& file : hierObj.refSubFiles()) - file.setActive(include); - for (SymlinkPair& link : hierObj.refSubLinks()) - link.setActive(include); - for (FolderPair& folder : hierObj.refSubFolders()) + auto onFsItem = [newDirection](FileSystemObject& fsObj2) { - folder.setActive(include); - inOrExcludeAllRows<include>(folder); //recurse - } -} + if (fsObj2.getCategory() != FILE_EQUAL) + fsObj2.setSyncDir(newDirection); + }; + visitFSObjectRecursively(fsObj, onFsItem, onFsItem, onFsItem); } +//--------------- functions related to filtering ------------------------------------------------------------------------------------ void fff::setActiveStatus(bool newStatus, FolderComparison& folderCmp) { - if (newStatus) - std::for_each(begin(folderCmp), end(folderCmp), [](BaseFolderPair& baseFolder) { inOrExcludeAllRows<true>(baseFolder); }); //include all rows - else - std::for_each(begin(folderCmp), end(folderCmp), [](BaseFolderPair& baseFolder) { inOrExcludeAllRows<false>(baseFolder); }); //exclude all rows + auto onFsItem = [newStatus](FileSystemObject& fsObj) { fsObj.setActive(newStatus); }; + + std::for_each(begin(folderCmp), end(folderCmp), [onFsItem](BaseFolderPair& baseFolder) + { + visitFSObjectRecursively(baseFolder, onFsItem, onFsItem, onFsItem); + }); } void fff::setActiveStatus(bool newStatus, FileSystemObject& fsObj) { - fsObj.setActive(newStatus); + auto onFsItem = [newStatus](FileSystemObject& fsObj2) { fsObj2.setActive(newStatus); }; - //process subdirectories also! - visitFSObject(fsObj, [&](const FolderPair& folder) - { - if (newStatus) - inOrExcludeAllRows<true>(const_cast<FolderPair&>(folder)); //object is not physically const here anyway - else - inOrExcludeAllRows<false>(const_cast<FolderPair&>(folder)); // - }, - [](const FilePair& file) {}, [](const SymlinkPair& symlink) {}); + visitFSObjectRecursively(fsObj, onFsItem, onFsItem, onFsItem); } + namespace { enum FilterStrategy @@ -973,8 +844,8 @@ private: { for (FilePair& file : hierObj.refSubFiles()) processFile(file); - for (SymlinkPair& link : hierObj.refSubLinks()) - processLink(link); + for (SymlinkPair& symlink : hierObj.refSubLinks()) + processLink(symlink); for (FolderPair& folder : hierObj.refSubFolders()) processDir(folder); } @@ -1001,7 +872,9 @@ private: if (!childItemMightMatch) //use same logic like directory traversing here: evaluate filter in subdirs only if objects could match { - inOrExcludeAllRows<false>(folder); //exclude all files dirs in subfolders => incompatible with STRATEGY_OR! + //exclude all files dirs in subfolders => incompatible with STRATEGY_OR! + auto onFsItem = [](FileSystemObject& fsObj) { fsObj.setActive(false); }; + visitFSObjectRecursively(static_cast<ContainerObject&>(folder), onFsItem, onFsItem, onFsItem); return; } @@ -1025,8 +898,8 @@ private: { for (FilePair& file : hierObj.refSubFiles()) processFile(file); - for (SymlinkPair& link : hierObj.refSubLinks()) - processLink(link); + for (SymlinkPair& symlink : hierObj.refSubLinks()) + processLink(symlink); for (FolderPair& folder : hierObj.refSubFolders()) processDir(folder); } @@ -1147,71 +1020,45 @@ void fff::applyFiltering(FolderComparison& folderCmp, const MainConfiguration& m } -class FilterByTimeSpan +namespace { -public: - static void execute(ContainerObject& hierObj, time_t timeFrom, time_t timeTo) { FilterByTimeSpan(hierObj, timeFrom, timeTo); } - -private: - FilterByTimeSpan(ContainerObject& hierObj, - time_t timeFrom, - time_t timeTo) : - timeFrom_(timeFrom), - timeTo_(timeTo) { recurse(hierObj); } - - void recurse(ContainerObject& hierObj) const - { - for (FilePair& file : hierObj.refSubFiles()) - processFile(file); - for (SymlinkPair& link : hierObj.refSubLinks()) - processLink(link); - for (FolderPair& folder : hierObj.refSubFolders()) - processDir(folder); - } - - void processFile(FilePair& file) const - { - if (file.isEmpty<SelectSide::left>()) - file.setActive(matchTime<SelectSide::right>(file)); - else if (file.isEmpty<SelectSide::right>()) - file.setActive(matchTime<SelectSide::left>(file)); - else - file.setActive(matchTime<SelectSide::right>(file) || - matchTime<SelectSide::left>(file)); - } - - void processLink(SymlinkPair& link) const - { - if (link.isEmpty<SelectSide::left>()) - link.setActive(matchTime<SelectSide::right>(link)); - else if (link.isEmpty<SelectSide::right>()) - link.setActive(matchTime<SelectSide::left>(link)); - else - link.setActive(matchTime<SelectSide::right>(link) || - matchTime<SelectSide::left> (link)); - } +template <SelectSide side, class T> inline +bool matchesTime(const T& obj, time_t timeFrom, time_t timeTo) +{ + return timeFrom <= obj.template getLastWriteTime<side>() && + /**/ obj.template getLastWriteTime<side>() <= timeTo; +} +} - void processDir(FolderPair& folder) const - { - folder.setActive(false); - recurse(folder); - } - template <SelectSide side, class T> - bool matchTime(const T& obj) const +void fff::applyTimeSpanFilter(FolderComparison& folderCmp, time_t timeFrom, time_t timeTo) +{ + std::for_each(begin(folderCmp), end(folderCmp), [timeFrom, timeTo](BaseFolderPair& baseFolder) { - return timeFrom_ <= obj.template getLastWriteTime<side>() && - obj.template getLastWriteTime<side>() <= timeTo_; - } - - const time_t timeFrom_; - const time_t timeTo_; -}; + visitFSObjectRecursively(baseFolder, [](FolderPair& folder) { folder.setActive(false); }, + [timeFrom, timeTo](FilePair& file) + { + if (file.isEmpty<SelectSide::left>()) + file.setActive(matchesTime<SelectSide::right>(file, timeFrom, timeTo)); + else if (file.isEmpty<SelectSide::right>()) + file.setActive(matchesTime<SelectSide::left>(file, timeFrom, timeTo)); + else + file.setActive(matchesTime<SelectSide::right>(file, timeFrom, timeTo) || + matchesTime<SelectSide::left>(file, timeFrom, timeTo)); + }, -void fff::applyTimeSpanFilter(FolderComparison& folderCmp, time_t timeFrom, time_t timeTo) -{ - std::for_each(begin(folderCmp), end(folderCmp), [&](BaseFolderPair& baseFolder) { FilterByTimeSpan::execute(baseFolder, timeFrom, timeTo); }); + [timeFrom, timeTo](SymlinkPair& symlink) + { + if (symlink.isEmpty<SelectSide::left>()) + symlink.setActive(matchesTime<SelectSide::right>(symlink, timeFrom, timeTo)); + else if (symlink.isEmpty<SelectSide::right>()) + symlink.setActive(matchesTime<SelectSide::left>(symlink, timeFrom, timeTo)); + else + symlink.setActive(matchesTime<SelectSide::right>(symlink, timeFrom, timeTo) || + matchesTime<SelectSide::left> (symlink, timeFrom, timeTo)); + }); + }); } @@ -1235,7 +1082,7 @@ std::optional<PathDependency> fff::getPathDependency(const AbstractPath& basePat Zstring relDirPath; std::for_each(relPathC.begin() + relPathP.size(), relPathC.end(), [&](const Zstring& itemName) { - relDirPath = nativeAppendPaths(relDirPath, itemName); + relDirPath = appendPath(relDirPath, itemName); }); const AbstractPath& basePathP = leftParent ? basePathL : basePathR; const AbstractPath& basePathC = leftParent ? basePathR : basePathL; @@ -1683,7 +1530,7 @@ TempFileBuffer::~TempFileBuffer() removeDirectoryPlainRecursion(tempFolderPath_); //throw FileError } catch (FileError&) { assert(false); } - warn_static("log, maybe?") + warn_static("log, maybe?") } @@ -1694,8 +1541,8 @@ void TempFileBuffer::createTempFolderPath() //throw FileError //generate random temp folder path e.g. C:\Users\Zenju\AppData\Local\Temp\FFS-068b2e88 const uint32_t shortGuid = getCrc32(generateGUID()); //no need for full-blown (pseudo-)random numbers for this one-time invocation - const Zstring& tempPathTmp = appendSeparator(getTempFolderPath()) + //throw FileError - Zstr("FFS-") + printNumber<Zstring>(Zstr("%08x"), static_cast<unsigned int>(shortGuid)); + const Zstring& tempPathTmp = appendPath(getTempFolderPath(), //throw FileError + Zstr("FFS-") + printNumber<Zstring>(Zstr("%08x"), static_cast<unsigned int>(shortGuid))); createDirectoryIfMissingRecursion(tempPathTmp); //throw FileError @@ -1757,7 +1604,7 @@ void TempFileBuffer::createTempFiles(const std::set<FileDescriptor>& workLoad, P auto it = findLast(fileName.begin(), fileName.end(), Zstr('.')); //gracefully handle case of missing "." const Zstring tempFileName = Zstring(fileName.begin(), it) + Zstr('~') + descrHash + Zstring(it, fileName.end()); - const Zstring tempFilePath = appendSeparator(tempFolderPath_) + tempFileName; + const Zstring tempFilePath = appendPath(tempFolderPath_, tempFileName); const AFS::StreamAttributes sourceAttr{descr.attr.modTime, descr.attr.fileSize, descr.attr.filePrint}; tryReportingError([&] diff --git a/FreeFileSync/Source/base/algorithm.h b/FreeFileSync/Source/base/algorithm.h index b1ddcce3..16c9c179 100644 --- a/FreeFileSync/Source/base/algorithm.h +++ b/FreeFileSync/Source/base/algorithm.h @@ -17,11 +17,6 @@ namespace fff { -void recursiveObjectVisitor(FileSystemObject& fsObj, - std::function<void (FolderPair& folder)> onFolder, - std::function<void (FilePair& file)> onFile, - std::function<void (SymlinkPair& symlink)> onSymlink); - void swapGrids(const MainConfiguration& mainCfg, FolderComparison& folderCmp, PhaseCallback& callback /*throw X*/); //throw X diff --git a/FreeFileSync/Source/base/comparison.cpp b/FreeFileSync/Source/base/comparison.cpp index c4e26c9b..c2d6fcaf 100644 --- a/FreeFileSync/Source/base/comparison.cpp +++ b/FreeFileSync/Source/base/comparison.cpp @@ -163,7 +163,7 @@ public: //create comparison result table and fill category except for files existing on both sides: undefinedFiles and undefinedSymlinks are appended! std::shared_ptr<BaseFolderPair> compareByTimeSize(const ResolvedFolderPair& fp, const FolderPairCfg& fpConfig) const; std::shared_ptr<BaseFolderPair> compareBySize (const ResolvedFolderPair& fp, const FolderPairCfg& fpConfig) const; - std::list<std::shared_ptr<BaseFolderPair>> compareByContent(const std::vector<std::pair<ResolvedFolderPair, FolderPairCfg>>& workLoad) const; + std::vector<std::shared_ptr<BaseFolderPair>> compareByContent(const std::vector<std::pair<ResolvedFolderPair, FolderPairCfg>>& workLoad) const; private: ComparisonBuffer (const ComparisonBuffer&) = delete; @@ -214,7 +214,7 @@ ComparisonBuffer::ComparisonBuffer(const std::set<DirectoryKey>& folderKeys, const int64_t totalTimeSec = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::steady_clock::now() - compareStartTime).count(); callback.logInfo(_("Comparison finished:") + L' ' + - _P("1 item found", "%x items found", itemsReported) + L" | " + + _P("1 item found", "%x items found", itemsReported) + SPACED_DASH + _("Time elapsed:") + L' ' + copyStringTo<std::wstring>(wxTimeSpan::Seconds(totalTimeSec).Format())); //throw X //------------------------------------------------------------------ @@ -522,7 +522,7 @@ void categorizeFileByContent(FilePair& file, const std::wstring& txtComparingCon } -std::list<std::shared_ptr<BaseFolderPair>> ComparisonBuffer::compareByContent(const std::vector<std::pair<ResolvedFolderPair, FolderPairCfg>>& workLoad) const +std::vector<std::shared_ptr<BaseFolderPair>> ComparisonBuffer::compareByContent(const std::vector<std::pair<ResolvedFolderPair, FolderPairCfg>>& workLoad) const { struct ParallelOps { @@ -546,7 +546,7 @@ std::list<std::shared_ptr<BaseFolderPair>> ComparisonBuffer::compareByContent(co }; //PERF_START; - std::list<std::shared_ptr<BaseFolderPair>> output; + std::vector<std::shared_ptr<BaseFolderPair>> output; const Zstringc txtConflictSkippedBinaryComparison = getConflictSkippedBinaryComparison(); //avoid premature pess.: save memory via ref-counted string @@ -661,7 +661,7 @@ std::list<std::shared_ptr<BaseFolderPair>> ComparisonBuffer::compareByContent(co class MergeSides { public: - MergeSides(const std::map<ZstringNoCase, Zstringc>& errorsByRelPath, + MergeSides(const std::unordered_map<ZstringNoCase, Zstringc>& errorsByRelPath, std::vector<FilePair*>& undefinedFilesOut, std::vector<SymlinkPair*>& undefinedSymlinksOut) : errorsByRelPath_(errorsByRelPath), @@ -685,7 +685,7 @@ private: const Zstringc* checkFailedRead(FileSystemObject& fsObj, const Zstringc* errorMsg); - const std::map<ZstringNoCase, Zstringc>& errorsByRelPath_; //base-relative paths or empty if read-error for whole base directory + const std::unordered_map<ZstringNoCase, Zstringc>& errorsByRelPath_; //base-relative paths or empty if read-error for whole base directory std::vector<FilePair*>& undefinedFiles_; std::vector<SymlinkPair*>& undefinedSymlinks_; }; @@ -745,14 +745,15 @@ void matchFolders(const MapType& mapLeft, const MapType& mapRight, ProcessLeftOn std::vector<FileRef> fileList; fileList.reserve(mapLeft.size() + mapRight.size()); //perf: ~5% shorter runtime - for (const auto& item : mapLeft ) fileList.push_back({getUpperCase(item.first), &item, true}); + for (const auto& item : mapLeft ) fileList.push_back({getUpperCase(item.first), &item, true }); for (const auto& item : mapRight) fileList.push_back({getUpperCase(item.first), &item, false}); - //primary sort: ignore unicode normal form and case - //bonus: natural default sequence on file guid UI + //primary sort: ignore Unicode normal form and upper/lower case + //bonus: natural default sequence on file grid UI std::sort(fileList.begin(), fileList.end(), [](const FileRef& lhs, const FileRef& rhs) { return lhs.upperCaseName < rhs.upperCaseName; }); - auto tryMatchRange = [&](auto it, auto itLast) + using ItType = typename std::vector<FileRef>::iterator; + auto tryMatchRange = [&](ItType it, ItType itLast) //auto? compiler error on VS 17.2... { const size_t equalCountL = std::count_if(it, itLast, [](const FileRef& fr) { return fr.leftSide; }); const size_t equalCountR = itLast - it - equalCountL; @@ -921,7 +922,7 @@ std::shared_ptr<BaseFolderPair> ComparisonBuffer::performComparison(const Resolv cb_.updateStatus(_("Generating file list...")); //throw X cb_.requestUiUpdate(true /*force*/); //throw X - std::map<ZstringNoCase, Zstringc> failedReads; //base-relative paths or empty if read-error for whole base directory + std::unordered_map<ZstringNoCase, Zstringc> failedReads; //base-relative paths or empty if read-error for whole base directory auto evalFolderContent = [&](const AbstractPath& folderPath) -> const FolderContainer& { @@ -931,7 +932,7 @@ std::shared_ptr<BaseFolderPair> ComparisonBuffer::performComparison(const Resolv //mix failedFolderReads with failedItemReads: //associate folder traversing errors with folder (instead of child items only) to show on GUI! See "MergeSides" //=> minor pessimization for "excludefilterFailedRead" which needlessly excludes parent folders, too - auto append = [&](const std::map<Zstring, Zstringc>& c) + auto append = [&](const std::unordered_map<Zstring, Zstringc>& c) { for (const auto& [relPath, errorMsg] : c) failedReads.emplace(relPath, errorMsg); @@ -1124,7 +1125,8 @@ FolderComparison fff::compare(WarningDialogs& warnings, if (fpCfg.compareVar == CompareVariant::content) workLoadByContent.push_back({folderPair, fpCfg}); - std::list<std::shared_ptr<BaseFolderPair>> outputByContent = cmpBuff.compareByContent(workLoadByContent); + std::vector<std::shared_ptr<BaseFolderPair>> outputByContent = cmpBuff.compareByContent(workLoadByContent); + auto itOByC = outputByContent.begin(); //write output in expected order for (const auto& [folderPair, fpCfg] : workLoad) @@ -1137,12 +1139,9 @@ FolderComparison fff::compare(WarningDialogs& warnings, output.push_back(cmpBuff.compareBySize(folderPair, fpCfg)); break; case CompareVariant::content: - assert(!outputByContent.empty()); - if (!outputByContent.empty()) - { - output.push_back(outputByContent.front()); - /**/ outputByContent.pop_front(); - } + assert(itOByC != outputByContent.end()); + if (itOByC != outputByContent.end()) + output.push_back(*itOByC++); break; } } diff --git a/FreeFileSync/Source/base/db_file.cpp b/FreeFileSync/Source/base/db_file.cpp index 7599e4df..db74bbe0 100644 --- a/FreeFileSync/Source/base/db_file.cpp +++ b/FreeFileSync/Source/base/db_file.cpp @@ -260,7 +260,7 @@ private: writeNumber<uint32_t>(streamOutSmallNum_, static_cast<uint32_t>(container.files.size())); for (const auto& [itemName, inSyncData] : container.files) { - writeItemName(itemName); + writeItemName(itemName.normStr); writeNumber(streamOutSmallNum_, static_cast<int32_t>(inSyncData.cmpVar)); writeNumber<uint64_t>(streamOutSmallNum_, inSyncData.fileSize); @@ -271,7 +271,7 @@ private: writeNumber<uint32_t>(streamOutSmallNum_, static_cast<uint32_t>(container.symlinks.size())); for (const auto& [itemName, inSyncData] : container.symlinks) { - writeItemName(itemName); + writeItemName(itemName.normStr); writeNumber(streamOutSmallNum_, static_cast<int32_t>(inSyncData.cmpVar)); writeNumber<int64_t>(streamOutBigNum_, inSyncData.left .modTime); @@ -281,7 +281,7 @@ private: writeNumber<uint32_t>(streamOutSmallNum_, static_cast<uint32_t>(container.folders.size())); for (const auto& [itemName, inSyncData] : container.folders) { - writeItemName(itemName); + writeItemName(itemName.normStr); writeNumber<int32_t>(streamOutSmallNum_, inSyncData.status); recurse(inSyncData); @@ -422,8 +422,8 @@ private: const InSyncDescrFile dataT = readFileDescr(); // container.addFile(itemName, - SelectParam<leadSide>::ref(dataL, dataT), - SelectParam<leadSide>::ref(dataT, dataL), cmpVar, fileSize); + selectParam<leadSide>(dataL, dataT), + selectParam<leadSide>(dataT, dataL), cmpVar, fileSize); } size_t linkCount = readNumber<uint32_t>(streamInSmallNum_); @@ -436,8 +436,8 @@ private: const InSyncDescrLink dataT(readNumber<int64_t>(streamInBigNum_)); // container.addSymlink(itemName, - SelectParam<leadSide>::ref(dataL, dataT), - SelectParam<leadSide>::ref(dataT, dataL), cmpVar); + selectParam<leadSide>(dataL, dataT), + selectParam<leadSide>(dataT, dataL), cmpVar); } size_t dirCount = readNumber<uint32_t>(streamInSmallNum_); // @@ -563,7 +563,7 @@ private: void process(const ContainerObject::FileList& currentFiles, const Zstring& parentRelPath, InSyncFolder::FileList& dbFiles) { - std::set<Zstring, LessUnicodeNormal> toPreserve; + std::unordered_set<ZstringNorm> toPreserve; for (const FilePair& file : currentFiles) if (!file.isPairEmpty()) @@ -598,7 +598,7 @@ private: if (toPreserve.contains(v.first)) return false; //all items not existing in "currentFiles" have either been deleted meanwhile or been excluded via filter: - const Zstring& itemRelPath = nativeAppendPaths(parentRelPath, v.first); + const Zstring& itemRelPath = appendPath(parentRelPath, v.first.normStr); return filter_.passFileFilter(itemRelPath); //note: items subject to traveral errors are also excluded by this file filter here! see comparison.cpp, modified file filter for read errors }); @@ -606,7 +606,7 @@ private: void process(const ContainerObject::SymlinkList& currentSymlinks, const Zstring& parentRelPath, InSyncFolder::SymlinkList& dbSymlinks) { - std::set<Zstring, LessUnicodeNormal> toPreserve; + std::unordered_set<ZstringNorm> toPreserve; for (const SymlinkPair& symlink : currentSymlinks) if (!symlink.isPairEmpty()) @@ -635,14 +635,14 @@ private: if (toPreserve.contains(v.first)) return false; //all items not existing in "currentSymlinks" have either been deleted meanwhile or been excluded via filter: - const Zstring& itemRelPath = nativeAppendPaths(parentRelPath, v.first); + const Zstring& itemRelPath = appendPath(parentRelPath, v.first.normStr); return filter_.passFileFilter(itemRelPath); }); } void process(const ContainerObject::FolderList& currentFolders, const Zstring& parentRelPath, InSyncFolder::FolderList& dbFolders) { - std::map<Zstring, const FolderPair*, LessUnicodeNormal> toPreserve; + std::unordered_map<ZstringNorm, const FolderPair*> toPreserve; for (const FolderPair& folder : currentFolders) if (!folder.isPairEmpty()) @@ -665,7 +665,7 @@ private: } //delete removed items (= "in-sync") from database - std::erase_if(dbFolders, [&](InSyncFolder::FolderList::value_type& v) + eraseIf(dbFolders, [&](InSyncFolder::FolderList::value_type& v) { if (auto it = toPreserve.find(v.first); it != toPreserve.end()) { @@ -674,7 +674,7 @@ private: return false; } - const Zstring& itemRelPath = nativeAppendPaths(parentRelPath, v.first); + const Zstring& itemRelPath = appendPath(parentRelPath, v.first.normStr); //if folder is not included in "current folders", it is either not existing anymore, in which case it should be deleted from database //or it was excluded via filter and the database entry should be preserved @@ -689,12 +689,12 @@ private: //delete all entries for removed folder (= "in-sync") from database void dbSetEmptyState(InSyncFolder& dbFolder, const Zstring& parentRelPathPf) { - std::erase_if(dbFolder.files, [&](const InSyncFolder::FileList ::value_type& v) { return filter_.passFileFilter(parentRelPathPf + v.first); }); - std::erase_if(dbFolder.symlinks, [&](const InSyncFolder::SymlinkList::value_type& v) { return filter_.passFileFilter(parentRelPathPf + v.first); }); + std::erase_if(dbFolder.files, [&](const InSyncFolder::FileList ::value_type& v) { return filter_.passFileFilter(parentRelPathPf + v.first.normStr); }); + std::erase_if(dbFolder.symlinks, [&](const InSyncFolder::SymlinkList::value_type& v) { return filter_.passFileFilter(parentRelPathPf + v.first.normStr); }); - std::erase_if(dbFolder.folders, [&](InSyncFolder::FolderList::value_type& v) + eraseIf(dbFolder.folders, [&](InSyncFolder::FolderList::value_type& v) { - const Zstring& itemRelPath = parentRelPathPf + v.first; + const Zstring& itemRelPath = parentRelPathPf + v.first.normStr; bool childItemMightMatch = true; const bool passFilter = filter_.passDirFilter(itemRelPath, &childItemMightMatch); diff --git a/FreeFileSync/Source/base/db_file.h b/FreeFileSync/Source/base/db_file.h index 49d14813..83174c3b 100644 --- a/FreeFileSync/Source/base/db_file.h +++ b/FreeFileSync/Source/base/db_file.h @@ -67,9 +67,9 @@ struct InSyncFolder InSyncStatus status = DIR_STATUS_STRAW_MAN; //------------------------------------------------------------------ - using FolderList = std::map<Zstring, InSyncFolder, LessUnicodeNormal>; // - using FileList = std::map<Zstring, InSyncFile, LessUnicodeNormal>; // key: file name (ignoring Unicode normal forms) - using SymlinkList = std::map<Zstring, InSyncSymlink, LessUnicodeNormal>; // + using FolderList = std::unordered_map<ZstringNorm, InSyncFolder >; // + using FileList = std::unordered_map<ZstringNorm, InSyncFile >; // key: file name (ignoring Unicode normal forms) + using SymlinkList = std::unordered_map<ZstringNorm, InSyncSymlink>; // //------------------------------------------------------------------ FolderList folders; diff --git a/FreeFileSync/Source/base/dir_lock.cpp b/FreeFileSync/Source/base/dir_lock.cpp index d06826d3..ad2e06f6 100644 --- a/FreeFileSync/Source/base/dir_lock.cpp +++ b/FreeFileSync/Source/base/dir_lock.cpp @@ -5,15 +5,14 @@ // ***************************************************************************** #include "dir_lock.h" -#include <map> #include <memory> +#include <unordered_map> #include <zen/crc.h> #include <zen/sys_error.h> #include <zen/thread.h> #include <zen/scope_guard.h> #include <zen/guid.h> #include <zen/file_access.h> -#include <zen/file_path.h> #include <zen/file_io.h> #include <zen/sys_info.h> @@ -175,14 +174,14 @@ LockInformation getLockInfoFromCurrentProcess() //throw FileError const std::string osName = "Linux"; //wxGetFullHostName() is a performance killer and can hang for some users, so don't touch! - std::vector<char> buffer(10000); - if (::gethostname(&buffer[0], buffer.size()) != 0) + std::vector<char> buf(10000); + if (::gethostname(&buf[0], buf.size()) != 0) THROW_LAST_FILE_ERROR(_("Cannot get process information."), "gethostname"); - lockInfo.computerName = osName + ' ' + &buffer[0] + '.'; + lockInfo.computerName = osName + ' ' + &buf[0] + '.'; - if (::getdomainname(&buffer[0], buffer.size()) != 0) + if (::getdomainname(&buf[0], buf.size()) != 0) THROW_LAST_FILE_ERROR(_("Cannot get process information."), "getdomainname"); - lockInfo.computerName += &buffer[0]; //can be "(none)"! + lockInfo.computerName += &buf[0]; //can be "(none)"! lockInfo.processId = ::getpid(); //never fails @@ -328,7 +327,7 @@ void waitOnDirLock(const Zstring& lockFilePath, const DirLockCallback& notifySta { const LockInformation& lockInfo = retrieveLockInfo(lockFilePath); //throw FileError - infoMsg += L" | " + _("User name:") + L' ' + utfTo<std::wstring>(lockInfo.userId); + infoMsg += SPACED_DASH + _("User name:") + L' ' + utfTo<std::wstring>(lockInfo.userId); originalLockId = lockInfo.lockId; switch (getProcessStatus(lockInfo)) //throw FileError @@ -399,7 +398,7 @@ void waitOnDirLock(const Zstring& lockFilePath, const DirLockCallback& notifySta if (lastCheckTime >= lastLifeSign + EMIT_LIFE_SIGN_INTERVAL + std::chrono::seconds(1)) { const int remainingSeconds = std::max(0, static_cast<int>(std::chrono::duration_cast<std::chrono::seconds>(DETECT_ABANDONED_INTERVAL - (now - lastLifeSign)).count())); - notifyStatus(infoMsg + L" | " + _("Detecting abandoned lock...") + L' ' + _P("1 sec", "%x sec", remainingSeconds)); //throw X + notifyStatus(infoMsg + SPACED_DASH + _("Detecting abandoned lock...") + L' ' + _P("1 sec", "%x sec", remainingSeconds)); //throw X } else notifyStatus(std::wstring(infoMsg)); //throw X; emit a message in any case (might clear other one) @@ -547,8 +546,8 @@ private: std::erase_if(guidByPath_, [&](const auto& v) { return !locksByGuid_.contains(v.second); }); } - std::map<Zstring, UniqueId> guidByPath_; //lockFilePath |-> GUID; n:1; locks can be referenced by a lockFilePath or alternatively a GUID - std::map<UniqueId, std::weak_ptr<SharedDirLock>> locksByGuid_; //GUID |-> "shared lock ownership"; 1:1 + std::unordered_map<Zstring, UniqueId> guidByPath_; //lockFilePath |-> GUID; n:1; locks can be referenced by a lockFilePath or alternatively a GUID + std::unordered_map<UniqueId, std::weak_ptr<SharedDirLock>> locksByGuid_; //GUID |-> "shared lock ownership"; 1:1 }; diff --git a/FreeFileSync/Source/base/file_hierarchy.cpp b/FreeFileSync/Source/base/file_hierarchy.cpp index 8b21a743..57102e98 100644 --- a/FreeFileSync/Source/base/file_hierarchy.cpp +++ b/FreeFileSync/Source/base/file_hierarchy.cpp @@ -33,7 +33,7 @@ std::wstring fff::getShortDisplayNameForFolderPair(const AbstractPath& itemPathL tmpPathL = *parentPathL; tmpPathR = *parentPathR; - commonTrail = nativeAppendPaths(itemNameL, commonTrail); + commonTrail = appendPath(itemNameL, commonTrail); } if (!commonTrail.empty()) return utfTo<std::wstring>(commonTrail); diff --git a/FreeFileSync/Source/base/file_hierarchy.h b/FreeFileSync/Source/base/file_hierarchy.h index 76d741ef..37d5b8b2 100644 --- a/FreeFileSync/Source/base/file_hierarchy.h +++ b/FreeFileSync/Source/base/file_hierarchy.h @@ -7,14 +7,12 @@ #ifndef FILE_HIERARCHY_H_257235289645296 #define FILE_HIERARCHY_H_257235289645296 -#include <map> #include <string> #include <memory> #include <list> #include <functional> #include <unordered_set> -#include <zen/zstring.h> -#include <zen/stl_tools.h> +#include <unordered_map> #include "structures.h" #include "path_filter.h" #include "../afs/abstract.h" @@ -71,32 +69,19 @@ enum class SelectSide right }; -template <SelectSide side> -struct OtherSide; -template <> -struct OtherSide<SelectSide::left> { static const SelectSide value = SelectSide::right; }; +template <SelectSide side> +constexpr SelectSide getOtherSide = side == SelectSide::left ? SelectSide::right : SelectSide::left; -template <> -struct OtherSide<SelectSide::right> { static const SelectSide value = SelectSide::left; }; - -template <SelectSide side> -struct SelectParam; - -template <> -struct SelectParam<SelectSide::left> -{ - template <class T> - static T& ref(T& left, T& right) { return left; } -}; - -template <> -struct SelectParam<SelectSide::right> +template <SelectSide side, class T> inline +static T& selectParam(T& left, T& right) { - template <class T> - static T& ref(T& left, T& right) { return right; } -}; + if constexpr (side == SelectSide::left) + return left; + else + return right; +} //------------------------------------------------------------------ @@ -107,9 +92,11 @@ std::wstring getShortDisplayNameForFolderPair(const AbstractPath& itemPathL, con struct FolderContainer { //------------------------------------------------------------------ - using FolderList = std::map<Zstring, std::pair<FolderAttributes, FolderContainer>>; // - using FileList = std::map<Zstring, FileAttributes>; //key: raw file name, without any (Unicode) normalization, preserving original upper-/lower-case - using SymlinkList = std::map<Zstring, LinkAttributes>; //"Changing data [...] to NFC would cause interoperability problems. Always leave data as it is." + //key: raw file name, without any (Unicode) normalization, preserving original upper-/lower-case + //"Changing data [...] to NFC would cause interoperability problems. Always leave data as it is." + using FolderList = std::unordered_map<Zstring, std::pair<FolderAttributes, FolderContainer>>; + using FileList = std::unordered_map<Zstring, FileAttributes>; + using SymlinkList = std::unordered_map<Zstring, LinkAttributes>; //------------------------------------------------------------------ FolderContainer() = default; @@ -561,7 +548,7 @@ public: FilePair(const Zstring& itemNameL, //use empty string if "not existing" const FileAttributes& attrL, - CompareFileResult defaultCmpResult, + CompareFileResult defaultCmpResult, const Zstring& itemNameR, // const FileAttributes& attrR, ContainerObject& parentObj) : @@ -595,8 +582,8 @@ public: bool isSymlinkSrc); private: - Zstring getRelativePathL() const override { return nativeAppendPaths(parent().getRelativePath<SelectSide::left >(), getItemName<SelectSide::left >()); } - Zstring getRelativePathR() const override { return nativeAppendPaths(parent().getRelativePath<SelectSide::right>(), getItemName<SelectSide::right>()); } + Zstring getRelativePathL() const override { return appendPath(parent().getRelativePath<SelectSide::left >(), getItemName<SelectSide::left >()); } + Zstring getRelativePathR() const override { return appendPath(parent().getRelativePath<SelectSide::right>(), getItemName<SelectSide::right>()); } SyncOperation applyMoveOptimization(SyncOperation op) const; @@ -639,8 +626,8 @@ public: int64_t lastWriteTimeSrc); private: - Zstring getRelativePathL() const override { return nativeAppendPaths(parent().getRelativePath<SelectSide::left >(), getItemName<SelectSide::left >()); } - Zstring getRelativePathR() const override { return nativeAppendPaths(parent().getRelativePath<SelectSide::right>(), getItemName<SelectSide::right>()); } + Zstring getRelativePathL() const override { return appendPath(parent().getRelativePath<SelectSide::left >(), getItemName<SelectSide::left >()); } + Zstring getRelativePathR() const override { return appendPath(parent().getRelativePath<SelectSide::right>(), getItemName<SelectSide::right>()); } void flip() override; void removeObjectL() override { attrL_ = LinkAttributes(); } @@ -662,30 +649,89 @@ std::wstring getSyncOpDescription (const FileSystemObject& fsObj); //------------------------------------------------------------------ +namespace impl +{ template <class Function1, class Function2, class Function3> struct FSObjectLambdaVisitor : public FSObjectVisitor { FSObjectLambdaVisitor(Function1 onFolder, Function2 onFile, - Function3 onSymlink) : onFolder_(onFolder), onFile_(onFile), onSymlink_(onSymlink) {} + Function3 onSymlink) : //unifying assignment + onFolder_(std::move(onFolder)), onFile_(std::move(onFile)), onSymlink_(std::move(onSymlink)) {} private: - void visit(const FolderPair& folder) override { onFolder_ (folder); } - void visit(const FilePair& file ) override { onFile_ (file); } - void visit(const SymlinkPair& link ) override { onSymlink_(link); } + void visit(const FolderPair& folder ) override { onFolder_ (folder); } + void visit(const FilePair& file ) override { onFile_ (file); } + void visit(const SymlinkPair& symlink) override { onSymlink_(symlink); } - Function1 onFolder_; - Function2 onFile_; - Function3 onSymlink_; + const Function1 onFolder_; + const Function2 onFile_; + const Function3 onSymlink_; }; +} template <class Function1, class Function2, class Function3> inline void visitFSObject(const FileSystemObject& fsObj, Function1 onFolder, Function2 onFile, Function3 onSymlink) { - FSObjectLambdaVisitor<Function1, Function2, Function3> visitor(onFolder, onFile, onSymlink); + impl::FSObjectLambdaVisitor<Function1, Function2, Function3> visitor(onFolder, onFile, onSymlink); fsObj.accept(visitor); } +//------------------------------------------------------------------ +namespace impl +{ +template <class Function1, class Function2, class Function3> +class RecursiveObjectVisitor +{ +public: + RecursiveObjectVisitor(Function1 onFolder, + Function2 onFile, + Function3 onSymlink) : //unifying assignment + onFolder_(std::move(onFolder)), onFile_(std::move(onFile)), onSymlink_(std::move(onSymlink)) {} + + void execute(ContainerObject& hierObj) + { + for (FilePair& file : hierObj.refSubFiles()) + onFile_(file); + for (SymlinkPair& symlink : hierObj.refSubLinks()) + onSymlink_(symlink); + for (FolderPair& subFolder : hierObj.refSubFolders()) + { + onFolder_(subFolder); + execute(subFolder); + } + } + +private: + const Function1 onFolder_; + const Function2 onFile_; + const Function3 onSymlink_; +}; +} + +template <class Function1, class Function2, class Function3> inline +void visitFSObjectRecursively(ContainerObject& hierObj, //consider contained items only + Function1 onFolder, + Function2 onFile, + Function3 onSymlink) +{ + impl::RecursiveObjectVisitor(onFolder, onFile, onSymlink).execute(hierObj); +} + +template <class Function1, class Function2, class Function3> inline +void visitFSObjectRecursively(FileSystemObject& fsObj, //consider item and contained items (if folder) + Function1 onFolder, + Function2 onFile, + Function3 onSymlink) +{ + visitFSObject(fsObj, [onFolder, onFile, onSymlink](const FolderPair& folder) + { + onFolder(const_cast<FolderPair&>(folder)); + impl::RecursiveObjectVisitor(onFolder, onFile, onSymlink).execute(const_cast<FolderPair&>(folder)); + }, + [onFile ](const FilePair& file) { onFile (const_cast<FilePair& >(file )); }, //physical object is not const anyway + [onSymlink](const SymlinkPair& symlink) { onSymlink(const_cast<SymlinkPair&>(symlink)); }); // +} @@ -774,7 +820,7 @@ void FileSystemObject::setActive(bool active) template <SelectSide side> inline bool FileSystemObject::isEmpty() const { - return SelectParam<side>::ref(itemNameL_, itemNameR_).empty(); + return selectParam<side>(itemNameL_, itemNameR_).empty(); } @@ -791,10 +837,10 @@ Zstring FileSystemObject::getItemName() const assert(!itemNameL_.empty() || !itemNameR_.empty()); //-> file pair might be empty (until removed after sync) //=> okay, but where does this trigger!? calling this function in this case is a bug! - const Zstring& itemName = SelectParam<side>::ref(itemNameL_, itemNameR_); //empty if not existing + const Zstring& itemName = selectParam<side>(itemNameL_, itemNameR_); //empty if not existing if (!itemName.empty()) //avoid ternary-WTF! (implicit copy-constructor call!!!!!!) return itemName; - return SelectParam<OtherSide<side>::value>::ref(itemNameL_, itemNameR_); + return selectParam<getOtherSide<side>>(itemNameL_, itemNameR_); } @@ -919,10 +965,10 @@ void FileSystemObject::propagateChangedItemName(const Zstring& itemNameOld) template <SelectSide side> inline void ContainerObject::updateRelPathsRecursion(const FileSystemObject& fsAlias) { - assert(SelectParam<side>::ref(relPathL_, relPathR_) != //perf: only call if actual item name changed! - nativeAppendPaths(fsAlias.parent().getRelativePath<side>(), fsAlias.getItemName<side>())); + assert(selectParam<side>(relPathL_, relPathR_) != //perf: only call if actual item name changed! + appendPath(fsAlias.parent().getRelativePath<side>(), fsAlias.getItemName<side>())); - SelectParam<side>::ref(relPathL_, relPathR_) = nativeAppendPaths(fsAlias.parent().getRelativePath<side>(), fsAlias.getItemName<side>()); + selectParam<side>(relPathL_, relPathR_) = appendPath(fsAlias.parent().getRelativePath<side>(), fsAlias.getItemName<side>()); for (FolderPair& folder : subFolders_) folder.updateRelPathsRecursion<side>(folder); @@ -931,14 +977,14 @@ void ContainerObject::updateRelPathsRecursion(const FileSystemObject& fsAlias) inline ContainerObject::ContainerObject(const FileSystemObject& fsAlias) : - relPathL_(nativeAppendPaths(fsAlias.parent().relPathL_, fsAlias.getItemName<SelectSide::left>())), + relPathL_(appendPath(fsAlias.parent().relPathL_, fsAlias.getItemName<SelectSide::left>())), relPathR_( fsAlias.parent().relPathL_.c_str() == // fsAlias.parent().relPathR_.c_str() && //take advantage of FileSystemObject's Zstring reuse: fsAlias.getItemName<SelectSide::left >().c_str() == //=> perf: 12% faster merge phase; -4% peak memory fsAlias.getItemName<SelectSide::right>().c_str() ? // relPathL_ : //ternary-WTF! (implicit copy-constructor call!!) => no big deal for a Zstring - nativeAppendPaths(fsAlias.parent().relPathR_, fsAlias.getItemName<SelectSide::right>())), + appendPath(fsAlias.parent().relPathR_, fsAlias.getItemName<SelectSide::right>())), base_(fsAlias.parent().base_) { assert(relPathL_.c_str() == relPathR_.c_str() || relPathL_ != relPathR_); @@ -950,8 +996,8 @@ void ContainerObject::flip() { for (FilePair& file : refSubFiles()) file.flip(); - for (SymlinkPair& link : refSubLinks()) - link.flip(); + for (SymlinkPair& symlink : refSubLinks()) + symlink.flip(); for (FolderPair& folder : refSubFolders()) folder.flip(); @@ -1066,8 +1112,8 @@ void FolderPair::removeObjectL() { for (FilePair& file : refSubFiles()) file.removeObject<SelectSide::left>(); - for (SymlinkPair& link : refSubLinks()) - link.removeObject<SelectSide::left>(); + for (SymlinkPair& symlink : refSubLinks()) + symlink.removeObject<SelectSide::left>(); for (FolderPair& folder : refSubFolders()) folder.removeObject<SelectSide::left>(); @@ -1080,8 +1126,8 @@ void FolderPair::removeObjectR() { for (FilePair& file : refSubFiles()) file.removeObject<SelectSide::right>(); - for (SymlinkPair& link : refSubLinks()) - link.removeObject<SelectSide::right>(); + for (SymlinkPair& symlink : refSubLinks()) + symlink.removeObject<SelectSide::right>(); for (FolderPair& folder : refSubFolders()) folder.removeObject<SelectSide::right>(); @@ -1092,14 +1138,14 @@ void FolderPair::removeObjectR() template <SelectSide side> inline BaseFolderStatus BaseFolderPair::getFolderStatus() const { - return SelectParam<side>::ref(folderStatusLeft_, folderStatusRight_); + return selectParam<side>(folderStatusLeft_, folderStatusRight_); } template <SelectSide side> inline void BaseFolderPair::setFolderStatus(BaseFolderStatus value) { - SelectParam<side>::ref(folderStatusLeft_, folderStatusRight_) = value; + selectParam<side>(folderStatusLeft_, folderStatusRight_) = value; } @@ -1114,49 +1160,49 @@ void FilePair::flip() template <SelectSide side> inline FileAttributes FilePair::getAttributes() const { - return SelectParam<side>::ref(attrL_, attrR_); + return selectParam<side>(attrL_, attrR_); } template <SelectSide side> inline time_t FilePair::getLastWriteTime() const { - return SelectParam<side>::ref(attrL_, attrR_).modTime; + return selectParam<side>(attrL_, attrR_).modTime; } template <SelectSide side> inline uint64_t FilePair::getFileSize() const { - return SelectParam<side>::ref(attrL_, attrR_).fileSize; + return selectParam<side>(attrL_, attrR_).fileSize; } template <SelectSide side> inline bool FilePair::isFollowedSymlink() const { - return SelectParam<side>::ref(attrL_, attrR_).isFollowedSymlink; + return selectParam<side>(attrL_, attrR_).isFollowedSymlink; } template <SelectSide side> inline bool FolderPair::isFollowedSymlink() const { - return SelectParam<side>::ref(attrL_, attrR_).isFollowedSymlink; + return selectParam<side>(attrL_, attrR_).isFollowedSymlink; } template <SelectSide side> inline AFS::FingerPrint FilePair::getFilePrint() const { - return SelectParam<side>::ref(attrL_, attrR_).filePrint; + return selectParam<side>(attrL_, attrR_).filePrint; } template <SelectSide side> inline void FilePair::clearFilePrint() { - SelectParam<side>::ref(attrL_, attrR_).filePrint = 0; + selectParam<side>(attrL_, attrR_).filePrint = 0; } @@ -1171,10 +1217,8 @@ void FilePair::setSyncedTo(const Zstring& itemName, bool isSymlinkSrc) { //FILE_EQUAL is only allowed for same short name and file size: enforced by this method! - constexpr SelectSide sideSrc = OtherSide<sideTrg>::value; - - SelectParam<sideTrg>::ref(attrL_, attrR_) = FileAttributes(lastWriteTimeTrg, fileSize, filePrintTrg, isSymlinkTrg); - SelectParam<sideSrc>::ref(attrL_, attrR_) = FileAttributes(lastWriteTimeSrc, fileSize, filePrintSrc, isSymlinkSrc); + selectParam< sideTrg >(attrL_, attrR_) = FileAttributes(lastWriteTimeTrg, fileSize, filePrintTrg, isSymlinkTrg); + selectParam<getOtherSide<sideTrg>>(attrL_, attrR_) = FileAttributes(lastWriteTimeSrc, fileSize, filePrintSrc, isSymlinkSrc); moveFileRef_ = nullptr; FileSystemObject::setSynced(itemName); //set FileSystemObject specific part @@ -1186,10 +1230,8 @@ void SymlinkPair::setSyncedTo(const Zstring& itemName, int64_t lastWriteTimeTrg, int64_t lastWriteTimeSrc) { - constexpr SelectSide sideSrc = OtherSide<sideTrg>::value; - - SelectParam<sideTrg>::ref(attrL_, attrR_) = LinkAttributes(lastWriteTimeTrg); - SelectParam<sideSrc>::ref(attrL_, attrR_) = LinkAttributes(lastWriteTimeSrc); + selectParam< sideTrg >(attrL_, attrR_) = LinkAttributes(lastWriteTimeTrg); + selectParam<getOtherSide<sideTrg>>(attrL_, attrR_) = LinkAttributes(lastWriteTimeSrc); FileSystemObject::setSynced(itemName); //set FileSystemObject specific part } @@ -1200,10 +1242,8 @@ void FolderPair::setSyncedTo(const Zstring& itemName, bool isSymlinkTrg, bool isSymlinkSrc) { - constexpr SelectSide sideSrc = OtherSide<sideTrg>::value; - - SelectParam<sideTrg>::ref(attrL_, attrR_) = FolderAttributes(isSymlinkTrg); - SelectParam<sideSrc>::ref(attrL_, attrR_) = FolderAttributes(isSymlinkSrc); + selectParam< sideTrg >(attrL_, attrR_) = FolderAttributes(isSymlinkTrg); + selectParam<getOtherSide<sideTrg>>(attrL_, attrR_) = FolderAttributes(isSymlinkSrc); FileSystemObject::setSynced(itemName); //set FileSystemObject specific part } @@ -1212,7 +1252,7 @@ void FolderPair::setSyncedTo(const Zstring& itemName, template <SelectSide side> inline time_t SymlinkPair::getLastWriteTime() const { - return SelectParam<side>::ref(attrL_, attrR_).modTime; + return selectParam<side>(attrL_, attrR_).modTime; } diff --git a/FreeFileSync/Source/base/icon_loader.cpp b/FreeFileSync/Source/base/icon_loader.cpp index b211f0fe..527afa78 100644 --- a/FreeFileSync/Source/base/icon_loader.cpp +++ b/FreeFileSync/Source/base/icon_loader.cpp @@ -204,7 +204,7 @@ FileIconHolder fff::getFileIcon(const Zstring& filePath, int maxSize) //throw Sy throw SysError(formatGlibError("g_file_query_info", error)); ZEN_ON_SCOPE_EXIT(::g_object_unref(fileInfo)); - GIcon* const gicon = ::g_file_info_get_icon(fileInfo); //not owned! + GIcon* const gicon = ::g_file_info_get_icon(fileInfo); //no ownership transfer! if (!gicon) throw SysError(formatSystemError("g_file_info_get_icon", L"", L"Icon not available.")); @@ -216,7 +216,8 @@ FileIconHolder fff::getFileIcon(const Zstring& filePath, int maxSize) //throw Sy //the remaining icon types won't block! assert(GDK_IS_PIXBUF(gicon) || G_IS_THEMED_ICON(gicon) || G_IS_EMBLEMED_ICON(gicon)); - return FileIconHolder(static_cast<GIcon*>(::g_object_ref(gicon)) /*pass ownership*/, maxSize); + ::g_object_ref(gicon); //pass ownership + return FileIconHolder(gicon, maxSize); // } diff --git a/FreeFileSync/Source/base/lock_holder.h b/FreeFileSync/Source/base/lock_holder.h index 68d8215e..0b02b1c3 100644 --- a/FreeFileSync/Source/base/lock_holder.h +++ b/FreeFileSync/Source/base/lock_holder.h @@ -1,9 +1,8 @@ #ifndef LOCK_HOLDER_H_489572039485723453425 #define LOCK_HOLDER_H_489572039485723453425 -#include <set> -#include <zen/zstring.h> #include <zen/stl_tools.h> +#include <zen/file_path.h> #include "dir_lock.h" #include "process_callback.h" @@ -30,7 +29,7 @@ public: try { //lock file creation is synchronous and may block noticeably for very slow devices (USB sticks, mapped cloud storage) - lockHolder_.emplace_back(appendSeparator(folderPath) + Zstr("sync") + LOCK_FILE_ENDING, + lockHolder_.emplace_back(appendPath(folderPath, Zstring(Zstr("sync")) + LOCK_FILE_ENDING), [&](std::wstring&& msg) { pcb.updateStatus(std::move(msg)); /*throw X*/ }, UI_UPDATE_INTERVAL / 2); //throw FileError } diff --git a/FreeFileSync/Source/base/parallel_scan.cpp b/FreeFileSync/Source/base/parallel_scan.cpp index b7718a30..a0d40da2 100644 --- a/FreeFileSync/Source/base/parallel_scan.cpp +++ b/FreeFileSync/Source/base/parallel_scan.cpp @@ -7,7 +7,6 @@ #include "parallel_scan.h" #include <chrono> #include <zen/file_error.h> -//#include <zen/basic_math.h> #include <zen/thread.h> #include <zen/scope_guard.h> @@ -211,8 +210,8 @@ struct TraverserConfig const FilterRef filter; const SymLinkHandling handleSymlinks; - std::map<Zstring, Zstringc>& failedDirReads; - std::map<Zstring, Zstringc>& failedItemReads; + std::unordered_map<Zstring, Zstringc>& failedDirReads; + std::unordered_map<Zstring, Zstringc>& failedItemReads; AsyncCallback& acb; const int threadIdx; @@ -435,7 +434,8 @@ std::map<DirectoryKey, DirectoryValue> fff::parallelDeviceTraversal(const std::s for (const auto& [afsDevice, dirKeys] : perDeviceFolders) { const int threadIdx = static_cast<int>(worker.size()); - Zstring threadName = Zstr("Comp Device[") + numberTo<Zstring>(threadIdx + 1) + Zstr('/') + numberTo<Zstring>(perDeviceFolders.size()) + Zstr(']'); + Zstring threadName = Zstr("Comp Device[") + numberTo<Zstring>(threadIdx + 1) + Zstr('/') + numberTo<Zstring>(perDeviceFolders.size()) + Zstr("] ") + + utfTo<Zstring>(AFS::getDisplayPath({afsDevice, AfsPath()})); const size_t parallelOps = 1; std::map<DirectoryKey, DirectoryValue*> workload; diff --git a/FreeFileSync/Source/base/parallel_scan.h b/FreeFileSync/Source/base/parallel_scan.h index bc519cce..0e25f035 100644 --- a/FreeFileSync/Source/base/parallel_scan.h +++ b/FreeFileSync/Source/base/parallel_scan.h @@ -33,10 +33,10 @@ struct DirectoryValue FolderContainer folderCont; //relative paths (or empty string for root) for directories that could not be read (completely), e.g. access denied, or temporary network drop - std::map<Zstring, Zstringc /*error message*/> failedFolderReads; + std::unordered_map<Zstring, Zstringc /*error message*/> failedFolderReads; //relative paths (never empty) for failure to read single file/dir/symlink - std::map<Zstring, Zstringc /*error message*/> failedItemReads; + std::unordered_map<Zstring, Zstringc /*error message*/> failedItemReads; }; diff --git a/FreeFileSync/Source/base/path_filter.cpp b/FreeFileSync/Source/base/path_filter.cpp index afb61878..0d96b20b 100644 --- a/FreeFileSync/Source/base/path_filter.cpp +++ b/FreeFileSync/Source/base/path_filter.cpp @@ -5,12 +5,8 @@ // ***************************************************************************** #include "path_filter.h" -#include <set> -#include <stdexcept> -#include <vector> -#include <typeinfo> -#include <iterator> #include <typeindex> +#include <zen/file_path.h> using namespace zen; using namespace fff; diff --git a/FreeFileSync/Source/base/structures.cpp b/FreeFileSync/Source/base/structures.cpp index 4681c2ea..30bb837d 100644 --- a/FreeFileSync/Source/base/structures.cpp +++ b/FreeFileSync/Source/base/structures.cpp @@ -6,7 +6,6 @@ #include "structures.h" #include <iterator> -#include <stdexcept> #include <ctime> #include <zen/i18n.h> #include <zen/time.h> diff --git a/FreeFileSync/Source/base/synchronization.cpp b/FreeFileSync/Source/base/synchronization.cpp index 22f0aa65..65428c6d 100644 --- a/FreeFileSync/Source/base/synchronization.cpp +++ b/FreeFileSync/Source/base/synchronization.cpp @@ -67,8 +67,8 @@ void SyncStatistics::recurse(const ContainerObject& hierObj) { for (const FilePair& file : hierObj.refSubFiles()) processFile(file); - for (const SymlinkPair& link : hierObj.refSubLinks()) - processLink(link); + for (const SymlinkPair& symlink : hierObj.refSubLinks()) + processLink(symlink); for (const FolderPair& folder : hierObj.refSubFolders()) processFolder(folder); @@ -150,9 +150,9 @@ void SyncStatistics::processFile(const FilePair& file) inline -void SyncStatistics::processLink(const SymlinkPair& link) +void SyncStatistics::processLink(const SymlinkPair& symlink) { - switch (link.getSyncOperation()) //evaluate comparison result and sync direction + switch (symlink.getSyncOperation()) //evaluate comparison result and sync direction { case SO_CREATE_NEW_LEFT: ++createLeft_; @@ -187,7 +187,7 @@ void SyncStatistics::processLink(const SymlinkPair& link) case SO_UNRESOLVED_CONFLICT: ++conflictCount_; if (conflictsPreview_.size() < CONFLICTS_PREVIEW_MAX) - conflictsPreview_.push_back({link.getRelativePathAny(), link.getSyncOpConflict()}); + conflictsPreview_.push_back({symlink.getRelativePathAny(), symlink.getSyncOpConflict()}); break; case SO_MOVE_LEFT_FROM: @@ -959,7 +959,7 @@ private: acb_(acb) {} static PassNo getPass(const FilePair& file); - static PassNo getPass(const SymlinkPair& link); + static PassNo getPass(const SymlinkPair& symlink); static PassNo getPass(const FolderPair& folder); static bool needZeroPass(const FilePair& file); static bool needZeroPass(const FolderPair& folder); @@ -975,8 +975,8 @@ private: void synchronizeFile(FilePair& file); // template <SelectSide side> void synchronizeFileInt(FilePair& file, SyncOperation syncOp); //throw FileError, ErrorMoveUnsupported, ThreadStopRequest - void synchronizeLink(SymlinkPair& link); // - template <SelectSide sideTrg> void synchronizeLinkInt(SymlinkPair& link, SyncOperation syncOp); //throw FileError, ThreadStopRequest + void synchronizeLink(SymlinkPair& symlink); // + template <SelectSide sideTrg> void synchronizeLinkInt(SymlinkPair& symlink, SyncOperation syncOp); //throw FileError, ThreadStopRequest void synchronizeFolder(FolderPair& folder); // template <SelectSide sideTrg> void synchronizeFolderInt(FolderPair& folder, SyncOperation syncOp); //throw FileError, ThreadStopRequest @@ -1019,7 +1019,7 @@ private: const std::wstring txtVerifyingFile_ {_("Verifying file %x" )}; const std::wstring txtUpdatingAttributes_{_("Updating attributes of %x")}; const std::wstring txtMovingFileXtoY_ {_("Moving file %x to %y" )}; - const std::wstring txtSourceItemNotExist_{_("Source item %x not found" )}; + const std::wstring txtSourceItemNotExist_{_("Source item %x is not existing")}; }; //=================================================================================================== @@ -1401,9 +1401,9 @@ FolderPairSyncer::PassNo FolderPairSyncer::getPass(const FilePair& file) inline -FolderPairSyncer::PassNo FolderPairSyncer::getPass(const SymlinkPair& link) +FolderPairSyncer::PassNo FolderPairSyncer::getPass(const SymlinkPair& symlink) { - switch (link.getSyncOperation()) //evaluate comparison result and sync direction + switch (symlink.getSyncOperation()) //evaluate comparison result and sync direction { case SO_DELETE_LEFT: case SO_DELETE_RIGHT: @@ -1486,8 +1486,8 @@ void FolderPairSyncer::synchronizeFile(FilePair& file) //throw FileError, ErrorM template <SelectSide sideTrg> void FolderPairSyncer::synchronizeFileInt(FilePair& file, SyncOperation syncOp) //throw FileError, ErrorMoveUnsupported, ThreadStopRequest { - constexpr SelectSide sideSrc = OtherSide<sideTrg>::value; - DeletionHandler& delHandlerTrg = SelectParam<sideTrg>::ref(delHandlerLeft_, delHandlerRight_); + constexpr SelectSide sideSrc = getOtherSide<sideTrg>; + DeletionHandler& delHandlerTrg = selectParam<sideTrg>(delHandlerLeft_, delHandlerRight_); switch (syncOp) { @@ -1724,17 +1724,17 @@ void FolderPairSyncer::synchronizeFileInt(FilePair& file, SyncOperation syncOp) inline -void FolderPairSyncer::synchronizeLink(SymlinkPair& link) //throw FileError, ThreadStopRequest +void FolderPairSyncer::synchronizeLink(SymlinkPair& symlink) //throw FileError, ThreadStopRequest { assert(isLocked(singleThread_)); - const SyncOperation syncOp = link.getSyncOperation(); + const SyncOperation syncOp = symlink.getSyncOperation(); if (std::optional<SelectSide> sideTrg = getTargetDirection(syncOp)) { if (*sideTrg == SelectSide::left) - synchronizeLinkInt<SelectSide::left>(link, syncOp); + synchronizeLinkInt<SelectSide::left>(symlink, syncOp); else - synchronizeLinkInt<SelectSide::right>(link, syncOp); + synchronizeLinkInt<SelectSide::right>(symlink, syncOp); } } @@ -1742,8 +1742,8 @@ void FolderPairSyncer::synchronizeLink(SymlinkPair& link) //throw FileError, Thr template <SelectSide sideTrg> void FolderPairSyncer::synchronizeLinkInt(SymlinkPair& symlink, SyncOperation syncOp) //throw FileError, ThreadStopRequest { - constexpr SelectSide sideSrc = OtherSide<sideTrg>::value; - DeletionHandler& delHandlerTrg = SelectParam<sideTrg>::ref(delHandlerLeft_, delHandlerRight_); + constexpr SelectSide sideSrc = getOtherSide<sideTrg>; + DeletionHandler& delHandlerTrg = selectParam<sideTrg>(delHandlerLeft_, delHandlerRight_); switch (syncOp) { @@ -1892,8 +1892,8 @@ void FolderPairSyncer::synchronizeFolder(FolderPair& folder) //throw FileError, template <SelectSide sideTrg> void FolderPairSyncer::synchronizeFolderInt(FolderPair& folder, SyncOperation syncOp) //throw FileError, ThreadStopRequest { - constexpr SelectSide sideSrc = OtherSide<sideTrg>::value; - DeletionHandler& delHandlerTrg = SelectParam<sideTrg>::ref(delHandlerLeft_, delHandlerRight_); + constexpr SelectSide sideSrc = getOtherSide<sideTrg>; + DeletionHandler& delHandlerTrg = selectParam<sideTrg>(delHandlerLeft_, delHandlerRight_); switch (syncOp) { @@ -2137,7 +2137,7 @@ bool createBaseFolder(BaseFolderPair& baseFolder, bool copyFilePermissions, Phas { //create target directory: user presumably ignored warning "dir not yet existing" in order to have it created automatically const AbstractPath folderPath = baseFolder.getAbstractPath<side>(); - static const SelectSide sideSrc = OtherSide<side>::value; + static const SelectSide sideSrc = getOtherSide<side>; const std::wstring errMsg = tryReportingError([&] { diff --git a/FreeFileSync/Source/base/synchronization.h b/FreeFileSync/Source/base/synchronization.h index 592760ce..6a4f4b0d 100644 --- a/FreeFileSync/Source/base/synchronization.h +++ b/FreeFileSync/Source/base/synchronization.h @@ -15,28 +15,28 @@ namespace fff { -class SyncStatistics //this class counts *logical* operations, (create, update, delete + bytes), *not* disk accesses! +class SyncStatistics //count *logical* operations, (create, update, delete + bytes), *not* disk accesses! { //-> note the fundamental difference compared to counting disk accesses! public: - SyncStatistics(const FolderComparison& folderCmp); - SyncStatistics(const ContainerObject& hierObj); - SyncStatistics(const FilePair& file); + explicit SyncStatistics(const FolderComparison& folderCmp); + explicit SyncStatistics(const ContainerObject& hierObj); + explicit SyncStatistics(const FilePair& file); template <SelectSide side> - int createCount() const { return SelectParam<side>::ref(createLeft_, createRight_); } + int createCount() const { return selectParam<side>(createLeft_, createRight_); } int createCount() const { return createLeft_ + createRight_; } template <SelectSide side> - int updateCount() const { return SelectParam<side>::ref(updateLeft_, updateRight_); } + int updateCount() const { return selectParam<side>(updateLeft_, updateRight_); } int updateCount() const { return updateLeft_ + updateRight_; } template <SelectSide side> - int deleteCount() const { return SelectParam<side>::ref(deleteLeft_, deleteRight_); } + int deleteCount() const { return selectParam<side>(deleteLeft_, deleteRight_); } int deleteCount() const { return deleteLeft_ + deleteRight_; } template <SelectSide side> - bool expectPhysicalDeletion() const { return SelectParam<side>::ref(physicalDeleteLeft_, physicalDeleteRight_); } + bool expectPhysicalDeletion() const { return selectParam<side>(physicalDeleteLeft_, physicalDeleteRight_); } int64_t getBytesToProcess() const { return bytesToProcess_; } size_t rowCount () const { return rowsTotal_; } @@ -53,7 +53,7 @@ private: void recurse(const ContainerObject& hierObj); void processFile (const FilePair& file); - void processLink (const SymlinkPair& link); + void processLink (const SymlinkPair& symlink); void processFolder(const FolderPair& folder); int createLeft_ = 0; diff --git a/FreeFileSync/Source/base/versioning.cpp b/FreeFileSync/Source/base/versioning.cpp index 245e0bb1..bcc5d34a 100644 --- a/FreeFileSync/Source/base/versioning.cpp +++ b/FreeFileSync/Source/base/versioning.cpp @@ -257,7 +257,7 @@ void FileVersioner::revisionFolder(const AbstractPath& folderPath, const Zstring } -void FileVersioner::revisionFolderImpl(const AbstractPath& folderPath, const Zstring& relativePath, //throw FileError, X +void FileVersioner::revisionFolderImpl(const AbstractPath& folderPath, const Zstring& relPath, //throw FileError, X const std::function<void(const std::wstring& displayPathFrom, const std::wstring& displayPathTo)>& onBeforeFileMove, const std::function<void(const std::wstring& displayPathFrom, const std::wstring& displayPathTo)>& onBeforeFolderMove, const IoCallback& notifyUnbufferedIO /*throw X*/) const @@ -273,28 +273,26 @@ void FileVersioner::revisionFolderImpl(const AbstractPath& folderPath, const Zst [&](const AFS::FolderInfo& fi) { folders .push_back(fi); }, [&](const AFS::SymlinkInfo& si) { symlinks.push_back(si); }); - const Zstring relPathPf = appendSeparator(relativePath); - for (const AFS::FileInfo& fileInfo : files) { const FileDescriptor fileDescr{AFS::appendRelPath(folderPath, fileInfo.itemName), FileAttributes(fileInfo.modTime, fileInfo.fileSize, fileInfo.filePrint, false /*isFollowedSymlink*/)}; - revisionFileImpl(fileDescr, relPathPf + fileInfo.itemName, onBeforeFileMove, notifyUnbufferedIO); //throw FileError, X + revisionFileImpl(fileDescr, appendPath(relPath, fileInfo.itemName), onBeforeFileMove, notifyUnbufferedIO); //throw FileError, X } for (const AFS::SymlinkInfo& linkInfo : symlinks) revisionSymlinkImpl(AFS::appendRelPath(folderPath, linkInfo.itemName), - relPathPf + linkInfo.itemName, onBeforeFileMove); //throw FileError + appendPath(relPath, linkInfo.itemName), onBeforeFileMove); //throw FileError //move folders recursively for (const AFS::FolderInfo& folderInfo : folders) revisionFolderImpl(AFS::appendRelPath(folderPath, folderInfo.itemName), //throw FileError, X - relPathPf + folderInfo.itemName, + appendPath(relPath, folderInfo.itemName), onBeforeFileMove, onBeforeFolderMove, notifyUnbufferedIO); //delete source if (onBeforeFolderMove) - onBeforeFolderMove(AFS::getDisplayPath(folderPath), AFS::getDisplayPath(AFS::appendRelPath(versioningFolderPath_, relativePath))); + onBeforeFolderMove(AFS::getDisplayPath(folderPath), AFS::getDisplayPath(AFS::appendRelPath(versioningFolderPath_, relPath))); AFS::removeFolderPlain(folderPath); //throw FileError } @@ -309,7 +307,7 @@ struct VersionInfo AbstractPath filePath; bool isSymlink = false; }; -using VersionInfoMap = std::map<Zstring, std::vector<VersionInfo>>; //relPathOrig => <version infos> +using VersionInfoMap = std::unordered_map<Zstring, std::vector<VersionInfo>>; //relPathOrig => <version infos> //subfolder\Sample.txt 2012-05-15 131513.txt => subfolder\Sample.txt version:2012-05-15 131513 //2012-05-15 131513\subfolder\Sample.txt => " " @@ -322,7 +320,7 @@ void findFileVersions(VersionInfoMap& versions, { auto addVersion = [&](const Zstring& fileName, const Zstring& fileNameOrig, time_t versionTime, bool isSymlink) { - const Zstring& relPathOrig = nativeAppendPaths(relPathOrigParent, fileNameOrig); + const Zstring& relPathOrig = appendPath(relPathOrigParent, fileNameOrig); const AbstractPath& filePath = AFS::appendRelPath(parentFolderPath, fileName); versions[relPathOrig].push_back(VersionInfo{versionTime, filePath, isSymlink}); @@ -364,7 +362,7 @@ void findFileVersions(VersionInfoMap& versions, findFileVersions(versions, attrAndSub.second, AFS::appendRelPath(parentFolderPath, folderName), - nativeAppendPaths(relPathOrigParent, folderName), + appendPath(relPathOrigParent, folderName), versionTimeParent); } } diff --git a/FreeFileSync/Source/base/versioning.h b/FreeFileSync/Source/base/versioning.h index 6c5d667b..8f9be3ff 100644 --- a/FreeFileSync/Source/base/versioning.h +++ b/FreeFileSync/Source/base/versioning.h @@ -57,7 +57,7 @@ public: void revisionSymlink(const AbstractPath& linkPath, const Zstring& relativePath) const; //throw FileError - void revisionFolder(const AbstractPath& folderPath, const Zstring& relativePath, //throw FileError, X + void revisionFolder(const AbstractPath& folderPath, const Zstring& relPath, //throw FileError, X const std::function<void(const std::wstring& displayPathFrom, const std::wstring& displayPathTo)>& onBeforeFileMove, /*throw X*/ const std::function<void(const std::wstring& displayPathFrom, const std::wstring& displayPathTo)>& onBeforeFolderMove, /*throw X*/ //called frequently if move has to revert to copy + delete => see zen::copyFile for limitations when throwing exceptions! diff --git a/FreeFileSync/Source/base_tools.cpp b/FreeFileSync/Source/base_tools.cpp index 73246dde..59b8e616 100644 --- a/FreeFileSync/Source/base_tools.cpp +++ b/FreeFileSync/Source/base_tools.cpp @@ -14,36 +14,40 @@ using namespace fff; std::vector<unsigned int> fff::fromTimeShiftPhrase(const std::wstring& timeShiftPhrase) { - std::wstring tmp = replaceCpy(timeShiftPhrase, L';', L','); //harmonize , ; and ' ' - replace(tmp, L' ', L','); // - replace(tmp, L'-', L""); //there is no negative shift => treat as positive! + std::vector<unsigned int> minutes; - std::set<unsigned int> minutes; - for (const std::wstring& part : split(tmp, L',', SplitOnEmpty::skip)) + split2(timeShiftPhrase, [](wchar_t c) { return c == L',' || c == L';' || c == L' '; }, //delimiters + [&minutes](const wchar_t* blockFirst, const wchar_t* blockLast) { - if (contains(part, L':')) - minutes.insert(stringTo<unsigned int>(beforeFirst(part, L':', IfNotFoundReturn::none)) * 60 + - stringTo<unsigned int>(afterFirst (part, L':', IfNotFoundReturn::none))); - else - minutes.insert(stringTo<unsigned int>(part) * 60); - } - minutes.erase(0); + if (blockFirst != blockLast) + { + std::wstring part(blockFirst, blockLast); + replace(part, L'-', L""); //there is no negative shift => treat as positive! - return {minutes.begin(), minutes.end()}; + const unsigned int timeShift = stringTo<unsigned int>(beforeFirst(part, L':', IfNotFoundReturn::all)) * 60 + + stringTo<unsigned int>(afterFirst (part, L':', IfNotFoundReturn::none)); + if (timeShift > 0) + minutes.push_back(timeShift); + } + }); + removeDuplicates(minutes); + return minutes; } std::wstring fff::toTimeShiftPhrase(const std::vector<unsigned int>& ignoreTimeShiftMinutes) { std::wstring phrase; - for (auto it = ignoreTimeShiftMinutes.begin(); it != ignoreTimeShiftMinutes.end(); ++it) + for (const unsigned int timeShift : ignoreTimeShiftMinutes) { - if (it != ignoreTimeShiftMinutes.begin()) + if (!phrase.empty()) phrase += L", "; - phrase += numberTo<std::wstring>(*it / 60); - if (*it % 60 != 0) - phrase += L':' + printNumber<std::wstring>(L"%02d", static_cast<int>(*it % 60)); + phrase += numberTo<std::wstring>(timeShift / 60); + + if (const unsigned int shiftRem = timeShift % 60; + shiftRem != 0) + phrase += L':' + printNumber<std::wstring>(L"%02d", static_cast<int>(shiftRem)); } return phrase; } diff --git a/FreeFileSync/Source/config.cpp b/FreeFileSync/Source/config.cpp index 818a2342..1e04fa92 100644 --- a/FreeFileSync/Source/config.cpp +++ b/FreeFileSync/Source/config.cpp @@ -23,7 +23,7 @@ using namespace fff; //functionally needed for correct overload resolution!!! namespace { //------------------------------------------------------------------------------------------------------------------------------- -const int XML_FORMAT_GLOBAL_CFG = 23; //2021-12-02 +const int XML_FORMAT_GLOBAL_CFG = 24; //2022-04-29 const int XML_FORMAT_SYNC_CFG = 17; //2020-10-14 //------------------------------------------------------------------------------------------------------------------------------- } @@ -31,16 +31,15 @@ const int XML_FORMAT_SYNC_CFG = 17; //2020-10-14 const ExternalApp fff::extCommandFileBrowse //"xdg-open \"%parent_path%\"" -> not good enough: we need %local_path% for proper MTP/Google Drive handling -{L"Browse directory", "xdg-open \"$(dirname \"%local_path%\")\""}; -//mark for extraction: _("Browse directory") Linux doesn't use the term "folder" +{L"Show in file manager", "xdg-open \"$(dirname \"%local_path%\")\""}; +//mark for extraction: _("Show in file manager") Linux doesn't use the term "folder" const ExternalApp fff::extCommandOpenDefault -//"xdg-open \"%parent_path%\"" -> not good enough: we need %local_path% for proper MTP/Google Drive handling {L"Open with default application", "xdg-open \"%local_path%\""}; -XmlType getXmlTypeNoThrow(const XmlDoc& doc) //throw() +XmlType getXmlTypeNoThrow(const XmlDoc& doc) //noexcept { if (doc.root().getName() == "FreeFileSync") { @@ -90,8 +89,8 @@ void setXmlType(XmlDoc& doc, XmlType type) //throw() XmlGlobalSettings::XmlGlobalSettings() : - soundFileSyncFinished(getResourceDirPf() + Zstr("bell.wav")), - soundFileAlertPending(getResourceDirPf() + Zstr("remind.wav")) + soundFileSyncFinished(appendPath(getResourceDirPath(), Zstr("bell.wav"))), + soundFileAlertPending(appendPath(getResourceDirPath(), Zstr("remind.wav"))) { } @@ -99,7 +98,7 @@ XmlGlobalSettings::XmlGlobalSettings() : Zstring fff::getGlobalConfigFile() { - return getConfigDirPathPf() + Zstr("GlobalSettings.xml"); + return appendPath(getConfigDirPath(), Zstr("GlobalSettings.xml")); } @@ -150,13 +149,13 @@ void writeText(const wxLanguage& value, std::string& output) { //use description as unique wxLanguage identifier, see localization.cpp //=> handle changes to wxLanguage enum between wxWidgets versions - const wxLanguageInfo* lngInfo = wxLocale::GetLanguageInfo(value); - assert(lngInfo); - if (!lngInfo) - lngInfo = wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_US); - if (lngInfo) - output = utfTo<std::string>(lngInfo->Description); + const wxString& canonicalName = wxLocale::GetLanguageCanonicalName(value); + assert(!canonicalName.empty()); + if (!canonicalName.empty()) + output = utfTo<std::string>(canonicalName); + else + output = utfTo<std::string>(wxLocale::GetLanguageCanonicalName(wxLANGUAGE_ENGLISH_US)); } template <> inline @@ -366,32 +365,32 @@ bool readText(const std::string& input, PostSyncAction& value) template <> inline -void writeText(const FileIconSize& value, std::string& output) +void writeText(const GridIconSize& value, std::string& output) { switch (value) { - case FileIconSize::small: + case GridIconSize::small: output = "Small"; break; - case FileIconSize::medium: + case GridIconSize::medium: output = "Medium"; break; - case FileIconSize::large: + case GridIconSize::large: output = "Large"; break; } } template <> inline -bool readText(const std::string& input, FileIconSize& value) +bool readText(const std::string& input, GridIconSize& value) { const std::string tmp = trimCpy(input); if (tmp == "Small") - value = FileIconSize::small; + value = GridIconSize::small; else if (tmp == "Medium") - value = FileIconSize::medium; + value = GridIconSize::medium; else if (tmp == "Large") - value = FileIconSize::large; + value = GridIconSize::large; else return false; return true; @@ -942,16 +941,16 @@ Zstring resolveFreeFileSyncDriveMacro(const Zstring& cfgFilePhrase) Zstring substituteFfsResourcePath(const Zstring& filePath) { - const Zstring resPathPf = getResourceDirPf(); + const Zstring resPathPf = appendSeparator(getResourceDirPath()); if (startsWith(trimCpy(filePath, true, false), resPathPf)) - return Zstring(Zstr("%ffs_resource%")) + FILE_NAME_SEPARATOR + afterFirst(filePath, resPathPf, IfNotFoundReturn::none); + return Zstring(Zstr("%ffs_resource%")) + FILE_NAME_SEPARATOR + (filePath.c_str() + resPathPf.size()); return filePath; } Zstring resolveFfsResourceMacro(const Zstring& filePhrase) { if (startsWith(trimCpy(filePhrase, true, false), Zstring(Zstr("%ffs_resource%")) + FILE_NAME_SEPARATOR)) - return getResourceDirPf() + afterFirst(filePhrase, FILE_NAME_SEPARATOR, IfNotFoundReturn::none); + return appendSeparator(getResourceDirPath()) + afterFirst(filePhrase, FILE_NAME_SEPARATOR, IfNotFoundReturn::none); return filePhrase; } } @@ -1197,7 +1196,7 @@ void readConfig(const XmlIn& in, LocalPairConfig& lpc, std::map<AfsDevice, size_ setParallelOps(lpc.folderPathPhraseRight, parallelOpsR); //TODO: remove after migration - 2016-07-24 - auto ciReplace = [](Zstring& pathPhrase, const Zstring& oldTerm, const Zstring& newTerm) { pathPhrase = replaceCpyAsciiNoCase(pathPhrase, oldTerm, newTerm); }; + auto ciReplace = [](Zstring& pathPhrase, const Zstring& oldTerm, const Zstring& newTerm) { replaceAsciiNoCase(pathPhrase, oldTerm, newTerm); }; ciReplace(lpc.folderPathPhraseLeft, Zstr("%csidl_MyDocuments%"), Zstr("%csidl_Documents%")); ciReplace(lpc.folderPathPhraseLeft, Zstr("%csidl_MyMusic%" ), Zstr("%csidl_Music%")); ciReplace(lpc.folderPathPhraseLeft, Zstr("%csidl_MyPictures%" ), Zstr("%csidl_Pictures%")); @@ -1230,8 +1229,8 @@ void readConfig(const XmlIn& in, LocalPairConfig& lpc, std::map<AfsDevice, size_ //TODO: remove after migration! 2020-04-24 if (formatVer < 16) { - lpc.folderPathPhraseLeft = replaceCpyAsciiNoCase(lpc.folderPathPhraseLeft, Zstr("%weekday%"), Zstr("%WeekDayName%")); - lpc.folderPathPhraseRight = replaceCpyAsciiNoCase(lpc.folderPathPhraseRight, Zstr("%weekday%"), Zstr("%WeekDayName%")); + replaceAsciiNoCase(lpc.folderPathPhraseLeft, Zstr("%weekday%"), Zstr("%WeekDayName%")); + replaceAsciiNoCase(lpc.folderPathPhraseRight, Zstr("%weekday%"), Zstr("%WeekDayName%")); } //########################################################### @@ -1333,7 +1332,7 @@ void readConfig(const XmlIn& in, MainConfiguration& mainCfg, int formatVer) //TODO: remove after migration! 2020-04-24 if (formatVer < 16) - mainCfg.altLogFolderPathPhrase= replaceCpyAsciiNoCase(mainCfg.altLogFolderPathPhrase, Zstr("%weekday%"), Zstr("%WeekDayName%")); + replaceAsciiNoCase(mainCfg.altLogFolderPathPhrase, Zstr("%weekday%"), Zstr("%WeekDayName%")); //TODO: remove if parameter migration after some time! 2020-01-30 if (formatVer < 15) @@ -1494,7 +1493,29 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& cfg, int formatVer) else if (in["General"]) //TODO: remove old parameter after migration! 2020-12-03 in2 = in["General"]; - in2["Language"].attribute("Name", cfg.programLanguage); + //TODO: remove after migration! 2022-04-18 + if (in2["Language"].hasAttribute("Name")) + { + std::string lngName; + in2["Language"].attribute("Name", lngName); + + if (lngName == "English (US)") + cfg.programLanguage = wxLANGUAGE_ENGLISH_US; + else if (lngName == "Chinese (Simplified)") + cfg.programLanguage = wxLANGUAGE_CHINESE_CHINA; + else if (lngName == "Chinese (Traditional)") + cfg.programLanguage = wxLANGUAGE_CHINESE_TAIWAN; + else if (lngName == "English (U.K.)") + cfg.programLanguage = wxLANGUAGE_ENGLISH_UK; + else if (lngName == "Norwegian (Bokmal)") + cfg.programLanguage = wxLANGUAGE_NORWEGIAN; + else if (lngName == "Portuguese (Brazilian)") + cfg.programLanguage = wxLANGUAGE_PORTUGUESE_BRAZILIAN; + else if (const wxLanguageInfo* lngInfo = wxLocale::FindLanguageInfo(utfTo<wxString>(lngName))) + cfg.programLanguage = static_cast<wxLanguage>(lngInfo->Language); + } + else + in2["Language"].attribute("Code", cfg.programLanguage); in2["FailSafeFileCopy" ].attribute("Enabled", cfg.failSafeFileCopy); in2["CopyLockedFiles" ].attribute("Enabled", cfg.copyLockedFiles); @@ -1544,6 +1565,7 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& cfg, int formatVer) XmlIn inOpt = in2["OptionalDialogs"]; inOpt["ConfirmStartSync" ].attribute("Show", cfg.confirmDlgs.confirmSyncStart); inOpt["ConfirmSaveConfig" ].attribute("Show", cfg.confirmDlgs.confirmSaveConfig); + inOpt["ConfirmSwapSides" ].attribute("Show", cfg.confirmDlgs.confirmSwapSides); if (formatVer < 12) //TODO: remove old parameter after migration! 2019-02-09 inOpt["ConfirmExternalCommandMassInvoke"].attribute("Show", cfg.confirmDlgs.confirmCommandMassInvoke); else @@ -1578,8 +1600,8 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& cfg, int formatVer) //TODO: remove if parameter migration after some time! 2019-05-29 if (formatVer < 13) { - if (!cfg.soundFileCompareFinished.empty()) cfg.soundFileCompareFinished = getResourceDirPf() + cfg.soundFileCompareFinished; - if (!cfg.soundFileSyncFinished .empty()) cfg.soundFileSyncFinished = getResourceDirPf() + cfg.soundFileSyncFinished; + if (!cfg.soundFileCompareFinished.empty()) cfg.soundFileCompareFinished = appendPath(getResourceDirPath(), cfg.soundFileCompareFinished); + if (!cfg.soundFileSyncFinished .empty()) cfg.soundFileSyncFinished = appendPath(getResourceDirPath(), cfg.soundFileSyncFinished); } else { @@ -1673,7 +1695,7 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& cfg, int formatVer) //TODO: remove after migration! 2019-11-30 if (formatVer < 15) { - const Zstring lastRunConfigPath = getConfigDirPathPf() + Zstr("LastRun.ffs_gui"); + const Zstring lastRunConfigPath = appendPath(getConfigDirPath(), Zstr("LastRun.ffs_gui")); for (ConfigFileItem& item : cfg.mainDlg.config.fileHistory) if (equalNativePath(item.cfgFilePath, lastRunConfigPath)) item.backColor = wxColor(0xdd, 0xdd, 0xdd); //light grey from onCfgGridContext() @@ -1976,6 +1998,12 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& cfg, int formatVer) item.cmdLine = "xdg-open \"$(dirname \"%local_path%\")\""; } + //TODO: remove after migration! 2022-04-29 + if (formatVer < 24) + for (ExternalApp& item : cfg.externalApps) + if (item.description == L"Browse directory") + item.description = L"Show in file manager"; + if (formatVer < 20) //TODO: remove old parameter after migration! 2020-12-03 { in["Gui"]["LastOnlineCheck" ](cfg.lastUpdateCheck); @@ -2332,7 +2360,7 @@ void writeConfig(const XmlBatchConfig& cfg, XmlOut& out) void writeConfig(const XmlGlobalSettings& cfg, XmlOut& out) { - out["Language"].attribute("Name", cfg.programLanguage); + out["Language"].attribute("Code", cfg.programLanguage); out["FailSafeFileCopy" ].attribute("Enabled", cfg.failSafeFileCopy); out["CopyLockedFiles" ].attribute("Enabled", cfg.copyLockedFiles); @@ -2349,6 +2377,7 @@ void writeConfig(const XmlGlobalSettings& cfg, XmlOut& out) XmlOut outOpt = out["OptionalDialogs"]; outOpt["ConfirmStartSync" ].attribute("Show", cfg.confirmDlgs.confirmSyncStart); outOpt["ConfirmSaveConfig" ].attribute("Show", cfg.confirmDlgs.confirmSaveConfig); + outOpt["ConfirmSwapSides" ].attribute("Show", cfg.confirmDlgs.confirmSwapSides); outOpt["ConfirmCommandMassInvoke" ].attribute("Show", cfg.confirmDlgs.confirmCommandMassInvoke); outOpt["WarnFolderNotExisting" ].attribute("Show", cfg.warnDlgs.warnFolderNotExisting); outOpt["WarnFoldersDifferInCase" ].attribute("Show", cfg.warnDlgs.warnFoldersDifferInCase); diff --git a/FreeFileSync/Source/config.h b/FreeFileSync/Source/config.h index c32023ef..d2e41c4c 100644 --- a/FreeFileSync/Source/config.h +++ b/FreeFileSync/Source/config.h @@ -83,12 +83,13 @@ struct ConfirmationDialogs bool confirmSaveConfig = true; bool confirmSyncStart = true; bool confirmCommandMassInvoke = true; + bool confirmSwapSides = true; bool operator==(const ConfirmationDialogs&) const = default; }; -enum class FileIconSize +enum class GridIconSize { small, medium, @@ -211,7 +212,7 @@ struct XmlGlobalSettings Zstring folderLastSelectedRight; bool showIcons = true; - FileIconSize iconSize = FileIconSize::small; + GridIconSize iconSize = GridIconSize::small; int sashOffset = 0; ItemPathFormat itemPathFormatLeftGrid = defaultItemPathFormatLeftGrid; diff --git a/FreeFileSync/Source/fatal_error.h b/FreeFileSync/Source/fatal_error.h index 8d310b3b..20b01484 100644 --- a/FreeFileSync/Source/fatal_error.h +++ b/FreeFileSync/Source/fatal_error.h @@ -31,10 +31,10 @@ inline void logFatalError(const std::wstring& msg) //noexcept { warn_static("new semantics: logErrorWhileBusy or logErrorShowLater + show upon next FFS start!?") - warn_static("this really should append!") - //create time-stamped file path + show if newer than last FFS run? (save in GlobalSettings.xml) - //replace calls to ::MessageBox() and std::cerr ? - //save std::time() + warn_static("this really should append!") + //create time-stamped file path + show if newer than last FFS run? (save in GlobalSettings.xml) + //replace calls to ::MessageBox() and std::cerr ? + //save std::time() using namespace zen; @@ -42,7 +42,7 @@ void logFatalError(const std::wstring& msg) //noexcept const std::string logEntry = '[' + utfTo<std::string>(formatTime(formatDateTimeTag)) + "] " + utfTo<std::string>(msg); try { - setFileContent(getConfigDirPathPf() + Zstr("LastError.log"), logEntry, nullptr /*notifyUnbufferedIO*/); //throw FileError + setFileContent(appendPath(getConfigDirPath(), Zstr("LastError.log")), logEntry, nullptr /*notifyUnbufferedIO*/); //throw FileError } catch (FileError&) { assert(false); } } diff --git a/FreeFileSync/Source/ffs_paths.cpp b/FreeFileSync/Source/ffs_paths.cpp index a21bb26c..eee2f981 100644 --- a/FreeFileSync/Source/ffs_paths.cpp +++ b/FreeFileSync/Source/ffs_paths.cpp @@ -11,7 +11,6 @@ #include <iostream> //std::cerr - using namespace zen; @@ -48,26 +47,26 @@ Zstring fff::getInstallDirPath() -Zstring fff::getResourceDirPf() +Zstring fff::getResourceDirPath() { - return getProcessParentFolderPath() + FILE_NAME_SEPARATOR + Zstr("Resources") + FILE_NAME_SEPARATOR; + return appendPath(getProcessParentFolderPath(), Zstr("Resources")); } -Zstring fff::getConfigDirPathPf() +Zstring fff::getConfigDirPath() { //note: compiler generates magic-statics code => fine, we don't expect accesses during shutdown - static const Zstring ffsConfigPathPf = [] + static const Zstring ffsConfigPath = [] { /* Windows: %AppData%\FreeFileSync macOS: ~/Library/Application Support/FreeFileSync Linux (XDG layout): ~/.config/FreeFileSync */ - const Zstring& ffsConfigPath = [] + const Zstring& configPath = [] { try { return - appendSeparator(getUserDataPath()) + Zstr("FreeFileSync"); //throw FileError + appendPath(getUserDataPath(), Zstr("FreeFileSync")); //throw FileError } catch (const FileError& e) { @@ -77,16 +76,16 @@ Zstring fff::getConfigDirPathPf() try //create the config folder if not existing + create "Logs" subfolder while we're at it { - createDirectoryIfMissingRecursion(appendSeparator(ffsConfigPath) + Zstr("Logs")); //throw FileError + createDirectoryIfMissingRecursion(appendPath(configPath, Zstr("Logs"))); //throw FileError } catch (const FileError& e) { assert(false); std::cerr << utfTo<std::string>(e.toString()) << '\n'; } - return appendSeparator(ffsConfigPath); + return configPath; }(); - return ffsConfigPathPf; + return ffsConfigPath; } diff --git a/FreeFileSync/Source/ffs_paths.h b/FreeFileSync/Source/ffs_paths.h index a2310a14..c2d63252 100644 --- a/FreeFileSync/Source/ffs_paths.h +++ b/FreeFileSync/Source/ffs_paths.h @@ -15,8 +15,8 @@ namespace fff //------------------------------------------------------------------------------ //global program directories //------------------------------------------------------------------------------ -Zstring getResourceDirPf (); //resource directory WITH trailing path separator -Zstring getConfigDirPathPf(); // config directory WITH trailing path separator +Zstring getResourceDirPath(); +Zstring getConfigDirPath(); //------------------------------------------------------------------------------ diff --git a/FreeFileSync/Source/icon_buffer.cpp b/FreeFileSync/Source/icon_buffer.cpp index 30ad3173..72d0fd05 100644 --- a/FreeFileSync/Source/icon_buffer.cpp +++ b/FreeFileSync/Source/icon_buffer.cpp @@ -35,10 +35,10 @@ std::variant<ImageHolder, FileIconHolder> getDisplayIcon(const AbstractPath& ite //1. try to load thumbnails switch (sz) { - case IconBuffer::SIZE_SMALL: + case IconBuffer::IconSize::small: break; - case IconBuffer::SIZE_MEDIUM: - case IconBuffer::SIZE_LARGE: + case IconBuffer::IconSize::medium: + case IconBuffer::IconSize::large: try { if (ImageHolder ih = AFS::getThumbnailImage(itemPath, IconBuffer::getSize(sz))) //throw SysError; optional return value @@ -286,7 +286,7 @@ struct IconBuffer::Impl InterruptibleThread worker; //------------------------- //------------------------- - std::map<Zstring, wxImage, LessAsciiNoCase> extensionIcons; //no item count limit!? Test case C:\ ~ 3800 unique file extensions + std::unordered_map<Zstring, wxImage, StringHashAsciiNoCase, StringEqualAsciiNoCase> extensionIcons; //no item count limit!? Test case C:\ ~ 3800 unique file extensions }; @@ -312,7 +312,7 @@ IconBuffer::~IconBuffer() { setWorkload({}); //make sure interruption point is always reached! needed??? pimpl_->worker.requestStop(); //end thread life time *before* - pimpl_->worker.join(); //IconBuffer::Impl member clean up! + pimpl_->worker.join(); //IconBuffer::Impl member clean up! } @@ -321,12 +321,11 @@ int IconBuffer::getSize(IconSize sz) //coordinate with getIconByIndexImpl() and linkOverlayIcon()! switch (sz) { - case IconBuffer::SIZE_SMALL: + case IconSize::small: return getDefaultMenuIconSize(); - case IconBuffer::SIZE_MEDIUM: + case IconSize::medium: return fastFromDIP(48); - - case IconBuffer::SIZE_LARGE: + case IconSize::large: return fastFromDIP(128); } assert(false); diff --git a/FreeFileSync/Source/icon_buffer.h b/FreeFileSync/Source/icon_buffer.h index f38053e9..af6620aa 100644 --- a/FreeFileSync/Source/icon_buffer.h +++ b/FreeFileSync/Source/icon_buffer.h @@ -19,14 +19,14 @@ namespace fff class IconBuffer { public: - enum IconSize + enum class IconSize { - SIZE_SMALL, - SIZE_MEDIUM, - SIZE_LARGE + small, + medium, + large }; - IconBuffer(IconSize sz); + explicit IconBuffer(IconSize sz); ~IconBuffer(); static int getSize(IconSize sz); //expected and *maximum* icon size in pixel diff --git a/FreeFileSync/Source/localization.cpp b/FreeFileSync/Source/localization.cpp index 1f56eb66..0d653b34 100644 --- a/FreeFileSync/Source/localization.cpp +++ b/FreeFileSync/Source/localization.cpp @@ -35,7 +35,7 @@ namespace class FFSTranslation : public TranslationHandler { public: - FFSTranslation(const std::string& lngStream); //throw lng::ParsingError, plural::ParsingError + explicit FFSTranslation(const std::string& lngStream); //throw lng::ParsingError, plural::ParsingError std::wstring translate(const std::wstring& text) const override { @@ -131,17 +131,17 @@ std::vector<TranslationInfo> loadTranslations(const Zstring& zipPath) //throw Fi } //-------------------------------------------------------------------- - std::vector<TranslationInfo> locMapping; + std::vector<TranslationInfo> translations; { //default entry: TranslationInfo newEntry; newEntry.languageID = wxLANGUAGE_ENGLISH_US; - newEntry.languageName = std::wstring(L"English (US)") + LTR_MARK; //handle weak ")" for bidi-algorithm + newEntry.languageName = L"English"; newEntry.translatorName = L"Zenju"; newEntry.languageFlag = "flag_usa"; newEntry.lngFileName = Zstr(""); newEntry.lngStream = ""; - locMapping.push_back(newEntry); + translations.push_back(newEntry); } for (/*const*/ auto& [fileName, stream] : streams) @@ -152,187 +152,83 @@ std::vector<TranslationInfo> loadTranslations(const Zstring& zipPath) //throw Fi assert(!lngHeader.translatorName.empty()); assert(!lngHeader.localeName .empty()); assert(!lngHeader.flagFile .empty()); - /* - Some ISO codes are used by multiple wxLanguage IDs which can lead to incorrect mapping by wxLocale::FindLanguageInfo()!!! - => Identify by description, e.g. "Chinese (Traditional)". The following IDs are affected: - wxLANGUAGE_CHINESE_TRADITIONAL - wxLANGUAGE_ENGLISH_UK - wxLANGUAGE_SPANISH //non-unique, but still mapped correctly (or is it incidentally???) - wxLANGUAGE_SERBIAN // - */ - if (const wxLanguageInfo* locInfo = wxLocale::FindLanguageInfo(utfTo<wxString>(lngHeader.localeName))) + + const wxLanguageInfo* lngInfo = wxLocale::FindLanguageInfo(utfTo<wxString>(lngHeader.localeName)); + assert(lngInfo && lngInfo->CanonicalName == utfTo<wxString>(lngHeader.localeName)); + if (lngInfo) { TranslationInfo newEntry; - newEntry.languageID = static_cast<wxLanguage>(locInfo->Language); + newEntry.languageID = static_cast<wxLanguage>(lngInfo->Language); newEntry.languageName = utfTo<std::wstring>(lngHeader.languageName); newEntry.translatorName = utfTo<std::wstring>(lngHeader.translatorName); newEntry.languageFlag = lngHeader.flagFile; newEntry.lngFileName = fileName; newEntry.lngStream = std::move(stream); - locMapping.push_back(newEntry); + translations.push_back(std::move(newEntry)); } - else assert(false); } catch (lng::ParsingError&) { assert(false); } - std::sort(locMapping.begin(), locMapping.end(), [](const TranslationInfo& lhs, const TranslationInfo& rhs) + std::sort(translations.begin(), translations.end(), [](const TranslationInfo& lhs, const TranslationInfo& rhs) { return LessNaturalSort()(utfTo<Zstring>(lhs.languageName), - utfTo<Zstring>(rhs.languageName)); //use a more "natural" sort: ignore case and diacritics + utfTo<Zstring>(rhs.languageName)); //"natural" sort: ignore case and diacritics }); - return locMapping; + return translations; } -wxLanguage mapLanguageDialect(wxLanguage language) +/* Some ISO codes are used by multiple wxLanguage IDs which can lead to incorrect mapping by wxLocale::FindLanguageInfo()!!! + => Identify by description, e.g. "Chinese (Traditional)". The following IDs are affected: + - zh_TW: wxLANGUAGE_CHINESE_TAIWAN, wxLANGUAGE_CHINESE, wxLANGUAGE_CHINESE_TRADITIONAL_EXPLICIT + - en_GB: wxLANGUAGE_ENGLISH_UK, wxLANGUAGE_ENGLISH + - es_ES: wxLANGUAGE_SPANISH, wxLANGUAGE_SPANISH_SPAIN */ +wxLanguage mapLanguageDialect(wxLanguage lng) { - switch (static_cast<int>(language)) //avoid enumeration value wxLANGUAGE_*' not handled in switch [-Wswitch-enum] + if (const wxString& canonicalName = wxLocale::GetLanguageCanonicalName(lng); + !canonicalName.empty()) { - //variants of wxLANGUAGE_ARABIC - case wxLANGUAGE_ARABIC_ALGERIA: - case wxLANGUAGE_ARABIC_BAHRAIN: - case wxLANGUAGE_ARABIC_EGYPT: - case wxLANGUAGE_ARABIC_IRAQ: - case wxLANGUAGE_ARABIC_JORDAN: - case wxLANGUAGE_ARABIC_KUWAIT: - case wxLANGUAGE_ARABIC_LEBANON: - case wxLANGUAGE_ARABIC_LIBYA: - case wxLANGUAGE_ARABIC_MOROCCO: - case wxLANGUAGE_ARABIC_OMAN: - case wxLANGUAGE_ARABIC_QATAR: - case wxLANGUAGE_ARABIC_SAUDI_ARABIA: - case wxLANGUAGE_ARABIC_SUDAN: - case wxLANGUAGE_ARABIC_SYRIA: - case wxLANGUAGE_ARABIC_TUNISIA: - case wxLANGUAGE_ARABIC_UAE: - case wxLANGUAGE_ARABIC_YEMEN: - return wxLANGUAGE_ARABIC; - - //variants of wxLANGUAGE_CHINESE_SIMPLIFIED - case wxLANGUAGE_CHINESE: - case wxLANGUAGE_CHINESE_SINGAPORE: - return wxLANGUAGE_CHINESE_SIMPLIFIED; - - //variants of wxLANGUAGE_CHINESE_TRADITIONAL - case wxLANGUAGE_CHINESE_TAIWAN: - case wxLANGUAGE_CHINESE_HONGKONG: - case wxLANGUAGE_CHINESE_MACAU: - return wxLANGUAGE_CHINESE_TRADITIONAL; - - //variants of wxLANGUAGE_DUTCH - case wxLANGUAGE_DUTCH_BELGIAN: - return wxLANGUAGE_DUTCH; - - //variants of wxLANGUAGE_ENGLISH_UK - case wxLANGUAGE_ENGLISH_AUSTRALIA: - case wxLANGUAGE_ENGLISH_NEW_ZEALAND: - case wxLANGUAGE_ENGLISH_TRINIDAD: - case wxLANGUAGE_ENGLISH_CARIBBEAN: - case wxLANGUAGE_ENGLISH_JAMAICA: - case wxLANGUAGE_ENGLISH_BELIZE: - case wxLANGUAGE_ENGLISH_EIRE: - case wxLANGUAGE_ENGLISH_SOUTH_AFRICA: - case wxLANGUAGE_ENGLISH_ZIMBABWE: - case wxLANGUAGE_ENGLISH_BOTSWANA: - case wxLANGUAGE_ENGLISH_DENMARK: + assert(!contains(canonicalName, L'-')); + const std::string locale = beforeFirst(utfTo<std::string>(canonicalName), '@', IfNotFoundReturn::all); //e.g. "sr_RS@latin"; see wxLocale::InitLanguagesDB() + const std::string lngCode = beforeFirst(locale, '_', IfNotFoundReturn::all); + + if (lngCode == "zh") + { + if (lng == wxLANGUAGE_CHINESE) //wxWidgets assigns this to "zh" or "zh_TW" for some reason + return wxLANGUAGE_CHINESE_CHINA; + + for (const char* l : {"zh_HK", "zh_MO", "zh_TW"}) + if (locale == l) + return wxLANGUAGE_CHINESE_TAIWAN; + + return wxLANGUAGE_CHINESE_CHINA; + } + + if (lngCode == "en") + { + if (lng == wxLANGUAGE_ENGLISH || //wxWidgets assigns this to "en" or "en_GB" for some reason + lng == wxLANGUAGE_ENGLISH_WORLD) + return wxLANGUAGE_ENGLISH_US; + + for (const char* l : {"en_US", "en_CA", "en_AS", "en_UM", "en_VI"}) + if (locale == l) + return wxLANGUAGE_ENGLISH_US; + return wxLANGUAGE_ENGLISH_UK; + } - //variants of wxLANGUAGE_ENGLISH_US - case wxLANGUAGE_ENGLISH: - case wxLANGUAGE_ENGLISH_CANADA: - case wxLANGUAGE_ENGLISH_PHILIPPINES: - return wxLANGUAGE_ENGLISH_US; - - //variants of wxLANGUAGE_FRENCH - case wxLANGUAGE_FRENCH_BELGIAN: - case wxLANGUAGE_FRENCH_CANADIAN: - case wxLANGUAGE_FRENCH_LUXEMBOURG: - case wxLANGUAGE_FRENCH_MONACO: - case wxLANGUAGE_FRENCH_SWISS: - return wxLANGUAGE_FRENCH; - - //variants of wxLANGUAGE_GERMAN - case wxLANGUAGE_GERMAN_AUSTRIAN: - case wxLANGUAGE_GERMAN_BELGIUM: - case wxLANGUAGE_GERMAN_LIECHTENSTEIN: - case wxLANGUAGE_GERMAN_LUXEMBOURG: - case wxLANGUAGE_GERMAN_SWISS: - return wxLANGUAGE_GERMAN; - - //variants of wxLANGUAGE_ITALIAN - case wxLANGUAGE_ITALIAN_SWISS: - return wxLANGUAGE_ITALIAN; - - //variants of wxLANGUAGE_NORWEGIAN_BOKMAL - case wxLANGUAGE_NORWEGIAN_NYNORSK: - return wxLANGUAGE_NORWEGIAN_BOKMAL; - - //variants of wxLANGUAGE_ROMANIAN - case wxLANGUAGE_MOLDAVIAN: - return wxLANGUAGE_ROMANIAN; - - //variants of wxLANGUAGE_RUSSIAN - case wxLANGUAGE_RUSSIAN_UKRAINE: - return wxLANGUAGE_RUSSIAN; - - //variants of wxLANGUAGE_SERBIAN - case wxLANGUAGE_SERBIAN_CYRILLIC: - case wxLANGUAGE_SERBIAN_LATIN: - case wxLANGUAGE_SERBO_CROATIAN: - return wxLANGUAGE_SERBIAN; - - //variants of wxLANGUAGE_SPANISH - case wxLANGUAGE_SPANISH_ARGENTINA: - case wxLANGUAGE_SPANISH_BOLIVIA: - case wxLANGUAGE_SPANISH_CHILE: - case wxLANGUAGE_SPANISH_COLOMBIA: - case wxLANGUAGE_SPANISH_COSTA_RICA: - case wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC: - case wxLANGUAGE_SPANISH_ECUADOR: - case wxLANGUAGE_SPANISH_EL_SALVADOR: - case wxLANGUAGE_SPANISH_GUATEMALA: - case wxLANGUAGE_SPANISH_HONDURAS: - case wxLANGUAGE_SPANISH_MEXICAN: - case wxLANGUAGE_SPANISH_MODERN: - case wxLANGUAGE_SPANISH_NICARAGUA: - case wxLANGUAGE_SPANISH_PANAMA: - case wxLANGUAGE_SPANISH_PARAGUAY: - case wxLANGUAGE_SPANISH_PERU: - case wxLANGUAGE_SPANISH_PUERTO_RICO: - case wxLANGUAGE_SPANISH_URUGUAY: - case wxLANGUAGE_SPANISH_US: - case wxLANGUAGE_SPANISH_VENEZUELA: - return wxLANGUAGE_SPANISH; - - //variants of wxLANGUAGE_SWEDISH - case wxLANGUAGE_SWEDISH_FINLAND: - return wxLANGUAGE_SWEDISH; - - //languages without variants: - //case wxLANGUAGE_BULGARIAN: - //case wxLANGUAGE_CROATIAN: - //case wxLANGUAGE_CZECH: - //case wxLANGUAGE_DANISH: - //case wxLANGUAGE_FINNISH: - //case wxLANGUAGE_GREEK: - //case wxLANGUAGE_HINDI: - //case wxLANGUAGE_HEBREW: - //case wxLANGUAGE_HUNGARIAN: - //case wxLANGUAGE_JAPANESE: - //case wxLANGUAGE_KOREAN: - //case wxLANGUAGE_LITHUANIAN: - //case wxLANGUAGE_POLISH: - //case wxLANGUAGE_PORTUGUESE: - //case wxLANGUAGE_PORTUGUESE_BRAZILIAN: - //case wxLANGUAGE_SCOTS_GAELIC: - //case wxLANGUAGE_SLOVAK: - //case wxLANGUAGE_SLOVENIAN: - //case wxLANGUAGE_TURKISH: - //case wxLANGUAGE_UKRAINIAN: - //case wxLANGUAGE_VIETNAMESE: - default: - return language; + if (lngCode == "nb" || lngCode == "nn") //wxLANGUAGE_NORWEGIAN_BOKMAL, wxLANGUAGE_NORWEGIAN_NYNORSK + return wxLANGUAGE_NORWEGIAN; + + if (locale == "pt_BR") + return wxLANGUAGE_PORTUGUESE_BRAZILIAN; + + //all other cases: map to primary language code + if (contains(locale, '_')) + if (const wxLanguageInfo* lngInfo2 = wxLocale::FindLanguageInfo(utfTo<wxString>(lngCode))) + return static_cast<wxLanguage>(lngInfo2->Language); } + return lng; //including wxLANGUAGE_DEFAULT, wxLANGUAGE_UNKNOWN } @@ -345,6 +241,7 @@ public: canonicalName_(wxLocale::GetLanguageCanonicalName(langId)) { assert(!canonicalName_.empty()); + static_assert(std::is_same_v<std::remove_cvref_t<decltype(transMapping)>, std::map<std::string, std::wstring>>); //translations *must* be sorted in MO file! //https://www.gnu.org/software/gettext/manual/html_node/MO-Files.html transMapping[""] = L"Content-Type: text/plain; charset=UTF-8\n"; @@ -524,7 +421,7 @@ void fff::setLanguage(wxLanguage lng) //throw FileError } //load language file into buffer - if (lngStream.empty()) //if file stream is empty, texts will be English by default + if (lngStream.empty()) //if file stream is empty, texts will be English (US) by default { setTranslator(nullptr); lng = wxLANGUAGE_ENGLISH_US; @@ -567,9 +464,9 @@ void fff::setLanguage(wxLanguage lng) //throw FileError wxLanguage fff::getDefaultLanguage() { - static const wxLanguage defaultLng = static_cast<wxLanguage>(wxLocale::GetSystemLanguage()); - //uses GetUserDefaultUILanguage(): https://github.com/wxWidgets/wxWidgets/commit/9600c29ff2ca13ef66b76eabadaac5ec8654b792 - + static const wxLanguage defaultLng = mapLanguageDialect(static_cast<wxLanguage>(wxLocale::GetSystemLanguage())); + //uses GetUserPreferredUILanguages() since wxWidgets 1.3.6, not GetUserDefaultUILanguage() anymore: + // https://github.com/wxWidgets/wxWidgets/blob/master/src/common/intl.cpp return defaultLng; } diff --git a/FreeFileSync/Source/log_file.cpp b/FreeFileSync/Source/log_file.cpp index 27670aef..cc4a4f5a 100644 --- a/FreeFileSync/Source/log_file.cpp +++ b/FreeFileSync/Source/log_file.cpp @@ -543,7 +543,7 @@ void limitLogfileCount(const AbstractPath& logFolderPath, //throw FileError, X } -Zstring fff::getLogFolderDefaultPath() { return getConfigDirPathPf() + Zstr("Logs") ; } +Zstring fff::getLogFolderDefaultPath() { return appendPath(getConfigDirPath(), Zstr("Logs")); } //"Backup FreeFileSync 2013-09-15 015052.123.html" diff --git a/FreeFileSync/Source/parse_lng.h b/FreeFileSync/Source/parse_lng.h index 60ec04e8..48a2dd81 100644 --- a/FreeFileSync/Source/parse_lng.h +++ b/FreeFileSync/Source/parse_lng.h @@ -7,30 +7,22 @@ #ifndef PARSE_LNG_H_46794693622675638 #define PARSE_LNG_H_46794693622675638 -#include <algorithm> -#include <cctype> -#include <functional> -#include <memory> -#include <map> -#include <set> -#include <stdexcept> -#include <string> -#include <vector> -#include <list> +#include <unordered_map> +#include <unordered_set> #include <zen/utf.h> -#include <zen/string_tools.h> +#include <zen/ring_buffer.h> #include "parse_plural.h" namespace lng { //singular forms -using TranslationMap = std::map <std::string, std::string>; //orig |-> translation +using TranslationMap = std::unordered_map<std::string, std::string>; //orig |-> translation //plural forms using SingularPluralPair = std::pair<std::string, std::string>; //1 house | %x houses using PluralForms = std::vector<std::string>; //1 dom | 2 domy | %x domów -using TranslationPluralMap = std::map<SingularPluralPair, PluralForms>; //(sing/plu) |-> pluralforms +using TranslationPluralMap = std::unordered_map<SingularPluralPair, PluralForms>; //(sing/plu) |-> pluralforms struct TransHeader { @@ -42,7 +34,6 @@ struct TransHeader std::string pluralDefinition; //"n == 1 ? 0 : 1" }; - struct ParsingError { std::wstring msg; @@ -74,10 +65,25 @@ std::string generateLng(const TranslationUnorderedList& in, const TransHeader& h //--------------------------- implementation --------------------------- +} + +template<> struct std::hash<lng::SingularPluralPair> +{ + size_t operator()(const lng::SingularPluralPair& str) const + { + zen::FNV1aHash<size_t> hash2; //shut up "GCC: shadow declaration" + for (const char c : str.first ) hash2.add(c); + for (const char c : str.second) hash2.add(c); + return hash2.get(); + } +}; + +namespace lng +{ enum class TranslationNewItemPos { - REL, - TOP + rel, + top }; class TranslationUnorderedList //unordered list of unique translation items @@ -95,10 +101,10 @@ public: else switch (newItemPos_) { - case TranslationNewItemPos::REL: + case TranslationNewItemPos::rel: sequence_.push_back(std::make_shared<RegularItem>(std::make_pair(orig, std::string()))); break; - case TranslationNewItemPos::TOP: + case TranslationNewItemPos::top: sequence_.push_front(std::make_shared<RegularItem>(std::make_pair(orig, std::string()))); //put untranslated items to the front of the .lng filebreak; break; } @@ -113,10 +119,10 @@ public: else switch (newItemPos_) { - case TranslationNewItemPos::REL: + case TranslationNewItemPos::rel: sequence_.push_back(std::make_shared<PluralItem>(std::make_pair(orig, PluralForms()))); break; - case TranslationNewItemPos::TOP: + case TranslationNewItemPos::top: sequence_.push_front(std::make_shared<PluralItem>(std::make_pair(orig, PluralForms()))); //put untranslated items to the front of the .lng file break; } @@ -141,50 +147,50 @@ private: struct PluralItem : public Item { PluralItem (const TranslationPluralMap::value_type& val) : value(val) {} bool hasTranslation() const override { return !value.second.empty(); } TranslationPluralMap::value_type value; }; const TranslationNewItemPos newItemPos_; - std::list<std::shared_ptr<Item>> sequence_; //ordered list of translation elements + zen::RingBuffer<std::shared_ptr<Item>> sequence_; //ordered list of translation elements - std::set<TranslationMap ::key_type> transUnique_; //check uniqueness - std::set<TranslationPluralMap::key_type> pluralUnique_; // + std::unordered_set<TranslationMap ::key_type> transUnique_; //check uniqueness + std::unordered_set<TranslationPluralMap::key_type> pluralUnique_; // const TranslationMap transOld_; //reuse existing translation const TranslationPluralMap transPluralOld_; // }; -struct Token +enum class TokenType { - enum Type - { - //header information - TK_HEADER_BEGIN, - TK_HEADER_END, - TK_LANG_NAME_BEGIN, - TK_LANG_NAME_END, - TK_TRANS_NAME_BEGIN, - TK_TRANS_NAME_END, - TK_LOCALE_NAME_BEGIN, - TK_LOCALE_NAME_END, - TK_FLAG_FILE_BEGIN, - TK_FLAG_FILE_END, - TK_PLURAL_COUNT_BEGIN, - TK_PLURAL_COUNT_END, - TK_PLURAL_DEF_BEGIN, - TK_PLURAL_DEF_END, - - //item level - TK_SRC_BEGIN, - TK_SRC_END, - TK_TRG_BEGIN, - TK_TRG_END, - TK_TEXT, - TK_PLURAL_BEGIN, - TK_PLURAL_END, - TK_END - }; + //header information + headerBegin, + headerEnd, + langNameBegin, + langNameEnd, + transNameBegin, + transNameEnd, + localeNameBegin, + localeNameEnd, + flagFileBegin, + flagFileEnd, + pluralCountBegin, + pluralCountEnd, + pluralDefBegin, + pluralDefEnd, + + //item level + srcBegin, + srcEnd, + trgBegin, + trgEnd, + text, + pluralBegin, + pluralEnd, + end, +}; - Token(Type t) : type(t) {} +struct Token +{ + Token(TokenType t) : type(t) {} - Type type; + TokenType type; std::string text; }; @@ -194,11 +200,11 @@ class KnownTokens public: KnownTokens() {} //clang wants it, clang gets it - using TokenMap = std::unordered_map<Token::Type, std::string>; + using TokenMap = std::unordered_map<TokenType, std::string>; const TokenMap& getList() const { return tokens_; } - std::string text(Token::Type t) const + std::string text(TokenType t) const { auto it = tokens_.find(t); if (it != tokens_.end()) @@ -211,28 +217,28 @@ private: const TokenMap tokens_ = { //header information - {Token::TK_HEADER_BEGIN, "<header>"}, - {Token::TK_HEADER_END, "</header>"}, - {Token::TK_LANG_NAME_BEGIN, "<language>"}, - {Token::TK_LANG_NAME_END, "</language>"}, - {Token::TK_TRANS_NAME_BEGIN, "<translator>"}, - {Token::TK_TRANS_NAME_END, "</translator>"}, - {Token::TK_LOCALE_NAME_BEGIN, "<locale>"}, - {Token::TK_LOCALE_NAME_END, "</locale>"}, - {Token::TK_FLAG_FILE_BEGIN, "<image>"}, - {Token::TK_FLAG_FILE_END, "</image>"}, - {Token::TK_PLURAL_COUNT_BEGIN, "<plural_count>"}, - {Token::TK_PLURAL_COUNT_END, "</plural_count>"}, - {Token::TK_PLURAL_DEF_BEGIN, "<plural_definition>"}, - {Token::TK_PLURAL_DEF_END, "</plural_definition>"}, + {TokenType::headerBegin, "<header>"}, + {TokenType::headerEnd, "</header>"}, + {TokenType::langNameBegin, "<language>"}, + {TokenType::langNameEnd, "</language>"}, + {TokenType::transNameBegin, "<translator>"}, + {TokenType::transNameEnd, "</translator>"}, + {TokenType::localeNameBegin, "<locale>"}, + {TokenType::localeNameEnd, "</locale>"}, + {TokenType::flagFileBegin, "<image>"}, + {TokenType::flagFileEnd, "</image>"}, + {TokenType::pluralCountBegin, "<plural_count>"}, + {TokenType::pluralCountEnd, "</plural_count>"}, + {TokenType::pluralDefBegin, "<plural_definition>"}, + {TokenType::pluralDefEnd, "</plural_definition>"}, //item level - {Token::TK_SRC_BEGIN, "<source>"}, - {Token::TK_SRC_END, "</source>"}, - {Token::TK_TRG_BEGIN, "<target>"}, - {Token::TK_TRG_END, "</target>"}, - {Token::TK_PLURAL_BEGIN, "<pluralform>"}, - {Token::TK_PLURAL_END, "</pluralform>"}, + {TokenType::srcBegin, "<source>"}, + {TokenType::srcEnd, "</source>"}, + {TokenType::trgBegin, "<target>"}, + {TokenType::trgEnd, "</target>"}, + {TokenType::pluralBegin, "<pluralform>"}, + {TokenType::pluralEnd, "</pluralform>"}, }; }; @@ -252,7 +258,7 @@ public: pos_ = std::find_if_not(pos_, stream_.end(), zen::isWhiteSpace<char>); if (pos_ == stream_.end()) - return Token(Token::TK_END); + return Token(TokenType::end); for (const auto& [tokenEnum, tokenString] : tokens_.getList()) if (startsWith(tokenString)) @@ -271,9 +277,9 @@ public: normalize(text); //remove whitespace from end etc. if (text.empty() && pos_ == stream_.end()) - return Token(Token::TK_END); + return Token(TokenType::end); - Token out(Token::TK_TEXT); + Token out(TokenType::text); out.text = std::move(text); return out; } @@ -321,7 +327,7 @@ private: //Mac: 0xD \r //Win: 0xD 0xA \r\n <- language files are in Windows format zen::replace(text, "\r\n", '\n'); // - zen::replace(text, "\r", '\n'); //ensure c-style line breaks + zen::replace(text, '\r', '\n'); //ensure c-style line breaks } const std::string stream_; @@ -333,7 +339,7 @@ private: class LngParser { public: - LngParser(const std::string& fileStream) : scn_(fileStream), tk_(scn_.getNextToken()) {} + explicit LngParser(const std::string& fileStream) : scn_(fileStream), tk_(scn_.getNextToken()) {} void parse(TranslationMap& out, TranslationPluralMap& pluralOut, TransHeader& header) { @@ -344,7 +350,7 @@ public: plural::PluralFormInfo pi(header.pluralDefinition, header.pluralCount); //items - while (token().type != Token::TK_END) + while (token().type != TokenType::end) parseRegular(out, pluralOut, pi); } catch (const plural::InvalidPluralForm&) @@ -355,96 +361,96 @@ public: void parseHeader(TransHeader& header) { - consumeToken(Token::TK_HEADER_BEGIN); //throw ParsingError + consumeToken(TokenType::headerBegin); //throw ParsingError - consumeToken(Token::TK_LANG_NAME_BEGIN); //throw ParsingError + consumeToken(TokenType::langNameBegin); //throw ParsingError header.languageName = token().text; - consumeToken(Token::TK_TEXT); //throw ParsingError - consumeToken(Token::TK_LANG_NAME_END); // + consumeToken(TokenType::text); //throw ParsingError + consumeToken(TokenType::langNameEnd); // - consumeToken(Token::TK_TRANS_NAME_BEGIN); //throw ParsingError + consumeToken(TokenType::transNameBegin); //throw ParsingError header.translatorName = token().text; - consumeToken(Token::TK_TEXT); //throw ParsingError - consumeToken(Token::TK_TRANS_NAME_END); // + consumeToken(TokenType::text); //throw ParsingError + consumeToken(TokenType::transNameEnd); // - consumeToken(Token::TK_LOCALE_NAME_BEGIN); //throw ParsingError + consumeToken(TokenType::localeNameBegin); //throw ParsingError header.localeName = token().text; - consumeToken(Token::TK_TEXT); //throw ParsingError - consumeToken(Token::TK_LOCALE_NAME_END); // + consumeToken(TokenType::text); //throw ParsingError + consumeToken(TokenType::localeNameEnd); // - consumeToken(Token::TK_FLAG_FILE_BEGIN); //throw ParsingError + consumeToken(TokenType::flagFileBegin); //throw ParsingError header.flagFile = token().text; - consumeToken(Token::TK_TEXT); //throw ParsingError - consumeToken(Token::TK_FLAG_FILE_END); // + consumeToken(TokenType::text); //throw ParsingError + consumeToken(TokenType::flagFileEnd); // - consumeToken(Token::TK_PLURAL_COUNT_BEGIN); //throw ParsingError + consumeToken(TokenType::pluralCountBegin); //throw ParsingError header.pluralCount = zen::stringTo<int>(token().text); - consumeToken(Token::TK_TEXT); //throw ParsingError - consumeToken(Token::TK_PLURAL_COUNT_END); // + consumeToken(TokenType::text); //throw ParsingError + consumeToken(TokenType::pluralCountEnd); // - consumeToken(Token::TK_PLURAL_DEF_BEGIN); //throw ParsingError + consumeToken(TokenType::pluralDefBegin); //throw ParsingError header.pluralDefinition = token().text; - consumeToken(Token::TK_TEXT); //throw ParsingError - consumeToken(Token::TK_PLURAL_DEF_END); // + consumeToken(TokenType::text); //throw ParsingError + consumeToken(TokenType::pluralDefEnd); // - consumeToken(Token::TK_HEADER_END); //throw ParsingError + consumeToken(TokenType::headerEnd); //throw ParsingError } private: void parseRegular(TranslationMap& out, TranslationPluralMap& pluralOut, const plural::PluralFormInfo& pluralInfo) { - consumeToken(Token::TK_SRC_BEGIN); //throw ParsingError + consumeToken(TokenType::srcBegin); //throw ParsingError - if (token().type == Token::TK_PLURAL_BEGIN) + if (token().type == TokenType::pluralBegin) return parsePlural(pluralOut, pluralInfo); std::string original = token().text; - consumeToken(Token::TK_TEXT); //throw ParsingError - consumeToken(Token::TK_SRC_END); // + consumeToken(TokenType::text); //throw ParsingError + consumeToken(TokenType::srcEnd); // - consumeToken(Token::TK_TRG_BEGIN); //throw ParsingError + consumeToken(TokenType::trgBegin); //throw ParsingError std::string translation; - if (token().type == Token::TK_TEXT) + if (token().type == TokenType::text) { translation = token().text; nextToken(); } validateTranslation(original, translation); //throw ParsingError - consumeToken(Token::TK_TRG_END); // + consumeToken(TokenType::trgEnd); // out.emplace(original, translation); } void parsePlural(TranslationPluralMap& pluralOut, const plural::PluralFormInfo& pluralInfo) { - //Token::TK_SRC_BEGIN already consumed + //TokenType::srcBegin already consumed - consumeToken(Token::TK_PLURAL_BEGIN); //throw ParsingError + consumeToken(TokenType::pluralBegin); //throw ParsingError std::string engSingular = token().text; - consumeToken(Token::TK_TEXT); //throw ParsingError - consumeToken(Token::TK_PLURAL_END); // + consumeToken(TokenType::text); //throw ParsingError + consumeToken(TokenType::pluralEnd); // - consumeToken(Token::TK_PLURAL_BEGIN); //throw ParsingError + consumeToken(TokenType::pluralBegin); //throw ParsingError std::string engPlural = token().text; - consumeToken(Token::TK_TEXT); //throw ParsingError - consumeToken(Token::TK_PLURAL_END); // + consumeToken(TokenType::text); //throw ParsingError + consumeToken(TokenType::pluralEnd); // - consumeToken(Token::TK_SRC_END); //throw ParsingError + consumeToken(TokenType::srcEnd); //throw ParsingError const SingularPluralPair original(engSingular, engPlural); - consumeToken(Token::TK_TRG_BEGIN); //throw ParsingError + consumeToken(TokenType::trgBegin); //throw ParsingError PluralForms pluralList; - while (token().type == Token::TK_PLURAL_BEGIN) + while (token().type == TokenType::pluralBegin) { - consumeToken(Token::TK_PLURAL_BEGIN); //throw ParsingError + consumeToken(TokenType::pluralBegin); //throw ParsingError std::string pluralForm = token().text; - consumeToken(Token::TK_TEXT); //throw ParsingError - consumeToken(Token::TK_PLURAL_END); // + consumeToken(TokenType::text); //throw ParsingError + consumeToken(TokenType::pluralEnd); // pluralList.push_back(pluralForm); } validateTranslation(original, pluralList, pluralInfo); - consumeToken(Token::TK_TRG_END); //throw ParsingError + consumeToken(TokenType::trgEnd); //throw ParsingError pluralOut.emplace(original, pluralList); } @@ -683,13 +689,13 @@ private: void nextToken() { tk_ = scn_.getNextToken(); } - void expectToken(Token::Type t) //throw ParsingError + void expectToken(TokenType t) //throw ParsingError { if (token().type != t) throw ParsingError({L"Unexpected token", scn_.posRow(), scn_.posCol()}); } - void consumeToken(Token::Type t) //throw ParsingError + void consumeToken(TokenType t) //throw ParsingError { expectToken(t); //throw ParsingError nextToken(); @@ -734,39 +740,40 @@ void formatMultiLineText(std::string& text) } +inline std::string generateLng(const TranslationUnorderedList& in, const TransHeader& header) { const KnownTokens tokens; //no need for static non-POD! std::string out; //header - out += tokens.text(Token::TK_HEADER_BEGIN) + '\n'; + out += tokens.text(TokenType::headerBegin) + '\n'; - out += '\t' + tokens.text(Token::TK_LANG_NAME_BEGIN); + out += '\t' + tokens.text(TokenType::langNameBegin); out += header.languageName; - out += tokens.text(Token::TK_LANG_NAME_END) + '\n'; + out += tokens.text(TokenType::langNameEnd) + '\n'; - out += '\t' + tokens.text(Token::TK_TRANS_NAME_BEGIN); + out += '\t' + tokens.text(TokenType::transNameBegin); out += header.translatorName; - out += tokens.text(Token::TK_TRANS_NAME_END) + '\n'; + out += tokens.text(TokenType::transNameEnd) + '\n'; - out += '\t' + tokens.text(Token::TK_LOCALE_NAME_BEGIN); + out += '\t' + tokens.text(TokenType::localeNameBegin); out += header.localeName; - out += tokens.text(Token::TK_LOCALE_NAME_END) + '\n'; + out += tokens.text(TokenType::localeNameEnd) + '\n'; - out += '\t' + tokens.text(Token::TK_FLAG_FILE_BEGIN); + out += '\t' + tokens.text(TokenType::flagFileBegin); out += header.flagFile; - out += tokens.text(Token::TK_FLAG_FILE_END) + '\n'; + out += tokens.text(TokenType::flagFileEnd) + '\n'; - out += '\t' + tokens.text(Token::TK_PLURAL_COUNT_BEGIN); + out += '\t' + tokens.text(TokenType::pluralCountBegin); out += zen::numberTo<std::string>(header.pluralCount); - out += tokens.text(Token::TK_PLURAL_COUNT_END) + '\n'; + out += tokens.text(TokenType::pluralCountEnd) + '\n'; - out += '\t' + tokens.text(Token::TK_PLURAL_DEF_BEGIN); + out += '\t' + tokens.text(TokenType::pluralDefBegin); out += header.pluralDefinition; - out += tokens.text(Token::TK_PLURAL_DEF_END) + '\n'; + out += tokens.text(TokenType::pluralDefEnd) + '\n'; - out += tokens.text(Token::TK_HEADER_END) + '\n'; + out += tokens.text(TokenType::headerEnd) + '\n'; out += '\n'; @@ -779,13 +786,13 @@ std::string generateLng(const TranslationUnorderedList& in, const TransHeader& h formatMultiLineText(original); formatMultiLineText(translation); - out += tokens.text(Token::TK_SRC_BEGIN); + out += tokens.text(TokenType::srcBegin); out += original; - out += tokens.text(Token::TK_SRC_END) + '\n'; + out += tokens.text(TokenType::srcEnd) + '\n'; - out += tokens.text(Token::TK_TRG_BEGIN); + out += tokens.text(TokenType::trgBegin); out += translation; - out += tokens.text(Token::TK_TRG_END) + '\n' + '\n'; + out += tokens.text(TokenType::trgEnd) + '\n' + '\n'; }, [&](const TranslationPluralMap::value_type& transPlural) { @@ -796,27 +803,27 @@ std::string generateLng(const TranslationUnorderedList& in, const TransHeader& h formatMultiLineText(engSingular); formatMultiLineText(engPlural); - out += tokens.text(Token::TK_SRC_BEGIN) + '\n'; - out += tokens.text(Token::TK_PLURAL_BEGIN); + out += tokens.text(TokenType::srcBegin) + '\n'; + out += tokens.text(TokenType::pluralBegin); out += engSingular; - out += tokens.text(Token::TK_PLURAL_END) + '\n'; - out += tokens.text(Token::TK_PLURAL_BEGIN); + out += tokens.text(TokenType::pluralEnd) + '\n'; + out += tokens.text(TokenType::pluralBegin); out += engPlural; - out += tokens.text(Token::TK_PLURAL_END) + '\n'; - out += tokens.text(Token::TK_SRC_END) + '\n'; + out += tokens.text(TokenType::pluralEnd) + '\n'; + out += tokens.text(TokenType::srcEnd) + '\n'; - out += tokens.text(Token::TK_TRG_BEGIN); + out += tokens.text(TokenType::trgBegin); if (!forms.empty()) //translators will be searching for "<target></target>" out += '\n'; for (std::string plForm : forms) { formatMultiLineText(plForm); - out += tokens.text(Token::TK_PLURAL_BEGIN); + out += tokens.text(TokenType::pluralBegin); out += plForm; - out += tokens.text(Token::TK_PLURAL_END) + '\n'; + out += tokens.text(TokenType::pluralEnd) + '\n'; } - out += tokens.text(Token::TK_TRG_END) + '\n' + '\n'; + out += tokens.text(TokenType::trgEnd) + '\n' + '\n'; }); assert(!zen::contains(out, "\r\n") && !zen::contains(out, "\r")); diff --git a/FreeFileSync/Source/parse_plural.h b/FreeFileSync/Source/parse_plural.h index 2484b265..5f19c6b2 100644 --- a/FreeFileSync/Source/parse_plural.h +++ b/FreeFileSync/Source/parse_plural.h @@ -7,10 +7,7 @@ #ifndef PARSE_PLURAL_H_180465845670839576 #define PARSE_PLURAL_H_180465845670839576 -#include <memory> -#include <cstdint> -#include <functional> -#include <zen/string_base.h> +#include <zen/string_tools.h> namespace plural @@ -65,51 +62,49 @@ private: //--------------------------- implementation --------------------------- +/* https://www.gnu.org/software/hello/manual/gettext/Plural-forms.html + https://translate.sourceforge.net/wiki/l10n/pluralforms -//https://www.gnu.org/software/hello/manual/gettext/Plural-forms.html -//https://translate.sourceforge.net/wiki/l10n/pluralforms -/* -Grammar for Plural forms parser -------------------------------- -expression: - conditional-expression + Grammar for Plural forms parser + ------------------------------- + expression: + conditional-expression -conditional-expression: - logical-or-expression - logical-or-expression ? expression : expression + conditional-expression: + logical-or-expression + logical-or-expression ? expression : expression -logical-or-expression: - logical-and-expression - logical-or-expression || logical-and-expression + logical-or-expression: + logical-and-expression + logical-or-expression || logical-and-expression -logical-and-expression: - equality-expression - logical-and-expression && equality-expression + logical-and-expression: + equality-expression + logical-and-expression && equality-expression -equality-expression: - relational-expression - relational-expression == relational-expression - relational-expression != relational-expression + equality-expression: + relational-expression + relational-expression == relational-expression + relational-expression != relational-expression -relational-expression: - multiplicative-expression - multiplicative-expression > multiplicative-expression - multiplicative-expression < multiplicative-expression - multiplicative-expression >= multiplicative-expression - multiplicative-expression <= multiplicative-expression + relational-expression: + multiplicative-expression + multiplicative-expression > multiplicative-expression + multiplicative-expression < multiplicative-expression + multiplicative-expression >= multiplicative-expression + multiplicative-expression <= multiplicative-expression -multiplicative-expression: - pm-expression - multiplicative-expression % pm-expression + multiplicative-expression: + pm-expression + multiplicative-expression % pm-expression -pm-expression: - variable-number-n-expression - constant-number-expression - ( expression ) + pm-expression: + variable-number-n-expression + constant-number-expression + ( expression ) -.po format,e.g.: (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2) -*/ + .po format,e.g.: (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2) */ namespace impl { @@ -174,39 +169,39 @@ private: //------------------------------------------------------------------------------- -struct Token +enum class TokenType { - enum Type - { - TK_TERNARY_QUEST, - TK_TERNARY_COLON, - TK_OR, - TK_AND, - TK_EQUAL, - TK_NOT_EQUAL, - TK_LESS, - TK_LESS_EQUAL, - TK_GREATER, - TK_GREATER_EQUAL, - TK_MODULUS, - TK_VARIABLE_N, - TK_CONST_NUMBER, - TK_BRACKET_LEFT, - TK_BRACKET_RIGHT, - TK_END - }; + ternaryQuest, + ternaryColon, + logicOr, + logicAnd, + equal, + notEqual, + less, + lessEqual, + greater, + greaterEqual, + modulus, + variableN, + constNumber, + bracketLeft, + bracketRight, + end, +}; - Token(Type t) : type(t) {} +struct Token +{ + Token(TokenType t) : type(t) {} Token(int64_t num) : number(num) {} - Type type = TK_CONST_NUMBER; - int64_t number = 0; //if type == TK_CONST_NUMBER + TokenType type = TokenType::constNumber; + int64_t number = 0; //if type == TokenType::constNumber }; class Scanner { public: - Scanner(const std::string& stream) : stream_(stream), pos_(stream_.begin()) {} + explicit Scanner(const std::string& stream) : stream_(stream), pos_(stream_.begin()) {} Token getNextToken() //throw ParsingError { @@ -214,7 +209,7 @@ public: pos_ = std::find_if_not(pos_, stream_.end(), zen::isWhiteSpace<char>); if (pos_ == stream_.end()) - return Token::TK_END; + return TokenType::end; for (const auto& [tokenString, tokenEnum] : tokens_) if (startsWith(tokenString)) @@ -238,24 +233,24 @@ private: return zen::startsWith(zen::makeStringView(pos_, stream_.end()), prefix); } - using TokenList = std::vector<std::pair<std::string, Token::Type>>; + using TokenList = std::vector<std::pair<std::string, TokenType>>; const TokenList tokens_ { - {"?", Token::TK_TERNARY_QUEST}, - {":", Token::TK_TERNARY_COLON}, - {"||", Token::TK_OR }, - {"&&", Token::TK_AND }, - {"==", Token::TK_EQUAL }, - {"!=", Token::TK_NOT_EQUAL }, - {"<=", Token::TK_LESS_EQUAL }, - {"<", Token::TK_LESS }, - {">=", Token::TK_GREATER_EQUAL}, - {">", Token::TK_GREATER }, - {"%", Token::TK_MODULUS }, - {"n", Token::TK_VARIABLE_N }, - {"N", Token::TK_VARIABLE_N }, - {"(", Token::TK_BRACKET_LEFT }, - {")", Token::TK_BRACKET_RIGHT}, + {"?", TokenType::ternaryQuest}, + {":", TokenType::ternaryColon}, + {"||", TokenType::logicOr }, + {"&&", TokenType::logicAnd }, + {"==", TokenType::equal }, + {"!=", TokenType::notEqual }, + {"<=", TokenType::lessEqual }, + {"<", TokenType::less }, + {">=", TokenType::greaterEqual}, + {">", TokenType::greater }, + {"%", TokenType::modulus }, + {"n", TokenType::variableN }, + {"N", TokenType::variableN }, + {"(", TokenType::bracketLeft }, + {")", TokenType::bracketRight}, }; const std::string stream_; @@ -277,7 +272,7 @@ public: auto e = std::dynamic_pointer_cast<Expr<int64_t>>(parseExpression()); //throw ParsingError if (!e) throw ParsingError(); - expectToken(Token::TK_END); //throw ParsingError + expectToken(TokenType::end); //throw ParsingError return e; } @@ -288,14 +283,14 @@ private: { std::shared_ptr<Expression> e = parseLogicalOr(); - if (token().type == Token::TK_TERNARY_QUEST) + if (token().type == TokenType::ternaryQuest) { nextToken(); //throw ParsingError auto ifExp = std::dynamic_pointer_cast<Expr<bool>>(e); auto thenExp = std::dynamic_pointer_cast<Expr<int64_t>>(parseExpression()); //associativity: <- - consumeToken(Token::TK_TERNARY_COLON); //throw ParsingError + consumeToken(TokenType::ternaryColon); //throw ParsingError auto elseExp = std::dynamic_pointer_cast<Expr<int64_t>>(parseExpression()); // if (!ifExp || !thenExp || !elseExp) @@ -308,7 +303,7 @@ private: std::shared_ptr<Expression> parseLogicalOr() { std::shared_ptr<Expression> e = parseLogicalAnd(); - while (token().type == Token::TK_OR) //associativity: -> + while (token().type == TokenType::logicOr) //associativity: -> { nextToken(); //throw ParsingError @@ -321,7 +316,7 @@ private: std::shared_ptr<Expression> parseLogicalAnd() { std::shared_ptr<Expression> e = parseEquality(); - while (token().type == Token::TK_AND) //associativity: -> + while (token().type == TokenType::logicAnd) //associativity: -> { nextToken(); //throw ParsingError std::shared_ptr<Expression> rhs = parseEquality(); @@ -335,15 +330,15 @@ private: { std::shared_ptr<Expression> e = parseRelational(); - Token::Type t = token().type; - if (t == Token::TK_EQUAL || //associativity: n/a - t == Token::TK_NOT_EQUAL) + TokenType t = token().type; + if (t == TokenType::equal || //associativity: n/a + t == TokenType::notEqual) { nextToken(); //throw ParsingError std::shared_ptr<Expression> rhs = parseRelational(); - if (t == Token::TK_EQUAL) return makeBiExp<std:: equal_to<>, int64_t>(e, rhs); //throw ParsingError - if (t == Token::TK_NOT_EQUAL) return makeBiExp<std::not_equal_to<>, int64_t>(e, rhs); // + if (t == TokenType::equal) return makeBiExp<std:: equal_to<>, int64_t>(e, rhs); //throw ParsingError + if (t == TokenType::notEqual) return makeBiExp<std::not_equal_to<>, int64_t>(e, rhs); // } return e; } @@ -352,19 +347,19 @@ private: { std::shared_ptr<Expression> e = parseMultiplicative(); - Token::Type t = token().type; - if (t == Token::TK_LESS || //associativity: n/a - t == Token::TK_LESS_EQUAL || - t == Token::TK_GREATER || - t == Token::TK_GREATER_EQUAL) + TokenType t = token().type; + if (t == TokenType::less || //associativity: n/a + t == TokenType::lessEqual || + t == TokenType::greater || + t == TokenType::greaterEqual) { nextToken(); //throw ParsingError std::shared_ptr<Expression> rhs = parseMultiplicative(); - if (t == Token::TK_LESS) return makeBiExp<std::less <>, int64_t>(e, rhs); // - if (t == Token::TK_LESS_EQUAL) return makeBiExp<std::less_equal <>, int64_t>(e, rhs); //throw ParsingError - if (t == Token::TK_GREATER) return makeBiExp<std::greater <>, int64_t>(e, rhs); // - if (t == Token::TK_GREATER_EQUAL) return makeBiExp<std::greater_equal<>, int64_t>(e, rhs); // + if (t == TokenType::less) return makeBiExp<std::less <>, int64_t>(e, rhs); // + if (t == TokenType::lessEqual) return makeBiExp<std::less_equal <>, int64_t>(e, rhs); //throw ParsingError + if (t == TokenType::greater) return makeBiExp<std::greater <>, int64_t>(e, rhs); // + if (t == TokenType::greaterEqual) return makeBiExp<std::greater_equal<>, int64_t>(e, rhs); // } return e; } @@ -373,7 +368,7 @@ private: { std::shared_ptr<Expression> e = parsePrimary(); - while (token().type == Token::TK_MODULUS) //associativity: -> + while (token().type == TokenType::modulus) //associativity: -> { nextToken(); //throw ParsingError std::shared_ptr<Expression> rhs = parsePrimary(); @@ -390,23 +385,23 @@ private: std::shared_ptr<Expression> parsePrimary() { - if (token().type == Token::TK_VARIABLE_N) + if (token().type == TokenType::variableN) { nextToken(); //throw ParsingError return std::make_shared<VariableNumberNExp>(n_); } - else if (token().type == Token::TK_CONST_NUMBER) + else if (token().type == TokenType::constNumber) { const int64_t number = token().number; nextToken(); //throw ParsingError return std::make_shared<ConstNumberExp>(number); } - else if (token().type == Token::TK_BRACKET_LEFT) + else if (token().type == TokenType::bracketLeft) { nextToken(); //throw ParsingError std::shared_ptr<Expression> e = parseExpression(); - expectToken(Token::TK_BRACKET_RIGHT); //throw ParsingError + expectToken(TokenType::bracketRight); //throw ParsingError nextToken(); // return e; } @@ -418,13 +413,13 @@ private: void nextToken() { tk_ = scn_.getNextToken(); } //throw ParsingError - void expectToken(Token::Type t) //throw ParsingError + void expectToken(TokenType t) //throw ParsingError { if (token().type != t) throw ParsingError(); } - void consumeToken(Token::Type t) //throw ParsingError + void consumeToken(TokenType t) //throw ParsingError { expectToken(t); //throw ParsingError nextToken(); diff --git a/FreeFileSync/Source/ui/abstract_folder_picker.cpp b/FreeFileSync/Source/ui/abstract_folder_picker.cpp index 77ae562f..a43e8b41 100644 --- a/FreeFileSync/Source/ui/abstract_folder_picker.cpp +++ b/FreeFileSync/Source/ui/abstract_folder_picker.cpp @@ -90,14 +90,14 @@ AbstractFolderPickerDlg::AbstractFolderPickerDlg(wxWindow* parent, AbstractPath& m_staticTextStatus->SetLabel(L""); m_treeCtrlFileSystem->SetMinSize({fastFromDIP(350), fastFromDIP(400)}); - const int iconSize = IconBuffer::getSize(IconBuffer::SIZE_SMALL); + const int iconSize = IconBuffer::getSize(IconBuffer::IconSize::small); auto imgList = std::make_unique<wxImageList>(iconSize, iconSize); //add images in same sequence like TreeNodeImage enum!!! imgList->Add(loadImage("server", iconSize)); - imgList->Add( IconBuffer::genericDirIcon(IconBuffer::SIZE_SMALL)); - imgList->Add(layOver(IconBuffer::genericDirIcon(IconBuffer::SIZE_SMALL), - IconBuffer::linkOverlayIcon(IconBuffer::SIZE_SMALL))); + imgList->Add( IconBuffer::genericDirIcon (IconBuffer::IconSize::small)); + imgList->Add(layOver(IconBuffer::genericDirIcon (IconBuffer::IconSize::small), + IconBuffer::linkOverlayIcon(IconBuffer::IconSize::small))); imgList->Add(loadImage("msg_error", iconSize)); assert(imgList->GetImageCount() == static_cast<int>(TreeNodeImage::error) + 1); @@ -148,7 +148,7 @@ struct FlatTraverserCallback : public AFS::TraverserCallback { struct Result { - std::map<Zstring, bool /*is symlink*/> folderNames; + std::unordered_map<Zstring, bool /*is symlink*/> folderNames; std::wstring errorMsg; }; diff --git a/FreeFileSync/Source/ui/batch_status_handler.cpp b/FreeFileSync/Source/ui/batch_status_handler.cpp index f6b36854..a30b7df6 100644 --- a/FreeFileSync/Source/ui/batch_status_handler.cpp +++ b/FreeFileSync/Source/ui/batch_status_handler.cpp @@ -141,7 +141,7 @@ BatchStatusHandler::Result BatchStatusHandler::reportResults(const Zstring& post try { sendLogAsEmail(notifyEmail, summary, errorLog_, logFilePath, notifyStatusNoThrow); //throw FileError - errorLog_.logMsg(replaceCpy(_("Sending email notification to %x..."), L"%x", utfTo<std::wstring>(notifyEmail)), MSG_TYPE_INFO); + errorLog_.logMsg(replaceCpy(_("Sending email notification to %x"), L"%x", utfTo<std::wstring>(notifyEmail)), MSG_TYPE_INFO); } catch (const FileError& e) { errorLog_.logMsg(e.toString(), MSG_TYPE_ERROR); } @@ -317,20 +317,23 @@ ProcessCallback::Response BatchStatusHandler::reportError(const ErrorInfo& error { PauseTimers dummy(*progressDlg_); + //log actual fail time (not "now"!) + const time_t failTime = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now() - + std::chrono::duration_cast<std::chrono::system_clock::duration>(std::chrono::steady_clock::now() - errorInfo.failTime)); //auto-retry if (errorInfo.retryNumber < autoRetryCount_) { - errorLog_.logMsg(errorInfo.msg + L"\n-> " + _("Automatic retry"), MSG_TYPE_INFO); + errorLog_.logMsg(errorInfo.msg + L"\n-> " + _("Automatic retry"), MSG_TYPE_INFO, failTime); delayAndCountDown(errorInfo.failTime + autoRetryDelay_, [&, statusPrefix = _("Automatic retry") + - (errorInfo.retryNumber == 0 ? L"" : L' ' + formatNumber(errorInfo.retryNumber + 1)) + L" | ", - statusPostfix = L" | " + _("Error") + L": " + replaceCpy(errorInfo.msg, L'\n', L' ')](const std::wstring& timeRemMsg) + (errorInfo.retryNumber == 0 ? L"" : L' ' + formatNumber(errorInfo.retryNumber + 1)) + SPACED_DASH, + statusPostfix = SPACED_DASH + _("Error") + L": " + replaceCpy(errorInfo.msg, L'\n', L' ')](const std::wstring& timeRemMsg) { this->updateStatus(statusPrefix + timeRemMsg + statusPostfix); }); //throw AbortProcess return ProcessCallback::retry; } //always, except for "retry": - auto guardWriteLog = makeGuard<ScopeGuardRunMode::onExit>([&] { errorLog_.logMsg(errorInfo.msg, MSG_TYPE_ERROR); }); + auto guardWriteLog = makeGuard<ScopeGuardRunMode::onExit>([&] { errorLog_.logMsg(errorInfo.msg, MSG_TYPE_ERROR, failTime); }); if (!progressDlg_->getOptionIgnoreErrors()) { @@ -354,7 +357,7 @@ ProcessCallback::Response BatchStatusHandler::reportError(const ErrorInfo& error case ConfirmationButton3::decline: //retry guardWriteLog.dismiss(); - errorLog_.logMsg(errorInfo.msg + L"\n-> " + _("Retrying operation..."), MSG_TYPE_INFO); + errorLog_.logMsg(errorInfo.msg + L"\n-> " + _("Retrying operation..."), MSG_TYPE_INFO, failTime); return ProcessCallback::retry; case ConfirmationButton3::cancel: diff --git a/FreeFileSync/Source/ui/cfg_grid.cpp b/FreeFileSync/Source/ui/cfg_grid.cpp index 6f712d3c..c2ae7b66 100644 --- a/FreeFileSync/Source/ui/cfg_grid.cpp +++ b/FreeFileSync/Source/ui/cfg_grid.cpp @@ -24,7 +24,7 @@ using AFS = AbstractFileSystem; Zstring fff::getLastRunConfigPath() { - return getConfigDirPathPf() + Zstr("LastRun.ffs_gui"); + return appendPath(getConfigDirPath(), Zstr("LastRun.ffs_gui")); } @@ -114,7 +114,7 @@ void ConfigView::removeItems(const std::vector<Zstring>& filePaths) { const std::set<Zstring, LessNativePath> pathsSorted(filePaths.begin(), filePaths.end()); - std::erase_if(cfgListView_, [&](auto it) { return pathsSorted.find(it->first) != pathsSorted.end(); }); + std::erase_if(cfgListView_, [&](auto it) { return pathsSorted.contains(it->first); }); for (const Zstring& filePath : filePaths) cfgList_.erase(filePath); diff --git a/FreeFileSync/Source/ui/cfg_grid.h b/FreeFileSync/Source/ui/cfg_grid.h index 84364584..5359718e 100644 --- a/FreeFileSync/Source/ui/cfg_grid.h +++ b/FreeFileSync/Source/ui/cfg_grid.h @@ -139,7 +139,7 @@ private: const Zstring lastRunConfigPath_ = getLastRunConfigPath(); //let's not use another static... - using CfgFileList = std::map<Zstring /*file path*/, Details, LessNativePath>; + using CfgFileList = std::map<Zstring /*file path*/, Details, zen::LessNativePath>; CfgFileList cfgList_; std::vector<CfgFileList::iterator> cfgListView_; //sorted view on cfgList_ diff --git a/FreeFileSync/Source/ui/command_box.cpp b/FreeFileSync/Source/ui/command_box.cpp index c0637b10..2e5407df 100644 --- a/FreeFileSync/Source/ui/command_box.cpp +++ b/FreeFileSync/Source/ui/command_box.cpp @@ -181,7 +181,7 @@ void CommandBox::onKeyEvent(wxKeyEvent& event) //this->SetSelection(wxNOT_FOUND); //delete selected row - std::erase_if(history_, [&](const Zstring& item) { return item == selValue; }); + std::erase(history_, selValue); SetString(pos, wxString()); //in contrast to Delete(), this one does not kill the drop-down list and gives a nice visual feedback! //Delete(pos); diff --git a/FreeFileSync/Source/ui/command_box.h b/FreeFileSync/Source/ui/command_box.h index 71e46335..f780b380 100644 --- a/FreeFileSync/Source/ui/command_box.h +++ b/FreeFileSync/Source/ui/command_box.h @@ -9,9 +9,7 @@ #include <vector> #include <string> -#include <map> #include <wx/combobox.h> -#include <zen/string_tools.h> #include <zen/zstring.h> diff --git a/FreeFileSync/Source/ui/file_grid.cpp b/FreeFileSync/Source/ui/file_grid.cpp index 807dd081..86d2bf28 100644 --- a/FreeFileSync/Source/ui/file_grid.cpp +++ b/FreeFileSync/Source/ui/file_grid.cpp @@ -8,6 +8,7 @@ #include <set> #include <wx/dc.h> #include <wx/settings.h> +#include <wx/timer.h> #include <zen/i18n.h> #include <zen/file_error.h> #include <zen/format_unit.h> @@ -206,11 +207,11 @@ struct IconManager IconManager() {} IconManager(GridDataLeft& provLeft, GridDataRight& provRight, IconBuffer::IconSize sz, bool showFileIcons) : - fileIcon_ (IconBuffer::genericFileIcon (showFileIcons ? sz : IconBuffer::SIZE_SMALL)), - dirIcon_ (IconBuffer::genericDirIcon (showFileIcons ? sz : IconBuffer::SIZE_SMALL)), - linkOverlayIcon_ (IconBuffer::linkOverlayIcon (showFileIcons ? sz : IconBuffer::SIZE_SMALL)), - plusOverlayIcon_ (IconBuffer::plusOverlayIcon (showFileIcons ? sz : IconBuffer::SIZE_SMALL)), - minusOverlayIcon_(IconBuffer::minusOverlayIcon(showFileIcons ? sz : IconBuffer::SIZE_SMALL)) + fileIcon_ (IconBuffer::genericFileIcon (showFileIcons ? sz : IconBuffer::IconSize::small)), + dirIcon_ (IconBuffer::genericDirIcon (showFileIcons ? sz : IconBuffer::IconSize::small)), + linkOverlayIcon_ (IconBuffer::linkOverlayIcon (showFileIcons ? sz : IconBuffer::IconSize::small)), + plusOverlayIcon_ (IconBuffer::plusOverlayIcon (showFileIcons ? sz : IconBuffer::IconSize::small)), + minusOverlayIcon_(IconBuffer::minusOverlayIcon(showFileIcons ? sz : IconBuffer::IconSize::small)) { if (showFileIcons) { @@ -219,7 +220,7 @@ struct IconManager } } - int getIconSize() const { return iconBuffer_ ? iconBuffer_->getSize() : IconBuffer::getSize(IconBuffer::SIZE_SMALL); } + int getIconSize() const { return iconBuffer_ ? iconBuffer_->getSize() : IconBuffer::getSize(IconBuffer::IconSize::small); } IconBuffer* getIconBuffer() { return iconBuffer_.get(); } void startIconUpdater(); @@ -652,7 +653,7 @@ private: _____________________________________________________ _____________________________________________________ | <right-aligned> (gap | icon | gap | group name) | | | (gap | icon) | gap | item name | <- group name on first row |---------------------------------------------------| | (2x gap | vline) |--------------------------------| - | (gap | group parent/... | wide gap) | | | (gap | icon) | gap | item name | <- group parent on second + | (gap | group parent_/\ | wide gap) | | | (gap | icon) | gap | item name | <- group parent on second ----------------------------------------------------- ----------------------------------------------------- */ bool stackedGroupRender = false; int groupParentWidth = groupParentFolder.empty() ? 0 : (gapSize_ + getTextExtentBuffered(dc, groupParentFolder).x); @@ -674,14 +675,8 @@ private: //1. render group components on two rows stackedGroupRender = true; - //add slashes for better readability + a wide gap for disambiguation - assert(!contains(groupParentFolder, L'/') || !contains(groupParentFolder, L'\\')); - const wchar_t groupParentSep = contains(groupParentFolder, L'/') ? L'/' : (contains(groupParentFolder, L'\\') ? L'\\' : FILE_NAME_SEPARATOR); - - if (!endsWith(groupParentFolder, L'/' ) && //e.g. ftp://server/ - !endsWith(groupParentFolder, L'\\')) /*e.g. C:\ */ - groupParentFolder += groupParentSep; - groupParentFolder += ELLIPSIS; + //add Unicode arrow to indicate that path was split + groupParentFolder += L'\u2934'; //Right Arrow Curving Up const int groupParentMinWidth = gapSize_ + ellipsisWidth + gapSizeWide_; groupParentWidth = gapSize_ + getTextExtentBuffered(dc, groupParentFolder).x + gapSizeWide_; @@ -785,7 +780,7 @@ private: if (const auto& [cudAction, cudSide] = getCudAction(syncOp); cudAction != CudAction::doNothing && side == cudSide) { - rectCud.width = gapSize_ + IconBuffer::getSize(IconBuffer::SIZE_SMALL); + rectCud.width = gapSize_ + IconBuffer::getSize(IconBuffer::IconSize::small); //fixed-size looks fine for all icon sizes! use same width even if file icons are disabled! clearArea(dc, rectCud, getBackGroundColorSyncAction(syncOp)); diff --git a/FreeFileSync/Source/ui/file_grid.h b/FreeFileSync/Source/ui/file_grid.h index c71f8288..355c9005 100644 --- a/FreeFileSync/Source/ui/file_grid.h +++ b/FreeFileSync/Source/ui/file_grid.h @@ -9,7 +9,6 @@ #include <wx+/grid.h> #include "file_view.h" -#include "file_grid_attr.h" #include "../icon_buffer.h" diff --git a/FreeFileSync/Source/ui/file_view.cpp b/FreeFileSync/Source/ui/file_view.cpp index 6f7d6ad0..67544c68 100644 --- a/FreeFileSync/Source/ui/file_view.cpp +++ b/FreeFileSync/Source/ui/file_view.cpp @@ -628,8 +628,8 @@ struct LessFullPath const auto& [baseObjA, basePathLA, basePathRA] = a; const auto& [baseObjB, basePathLB, basePathRB] = b; - const AbstractPath& basePathA = SelectParam<side>::ref(basePathLA, basePathRA); - const AbstractPath& basePathB = SelectParam<side>::ref(basePathLB, basePathRB); + const AbstractPath& basePathA = selectParam<side>(basePathLA, basePathRA); + const AbstractPath& basePathB = selectParam<side>(basePathLB, basePathRB); return LessNaturalSort()/*even on Linux*/(zen::utfTo<Zstring>(AFS::getDisplayPath(basePathA)), zen::utfTo<Zstring>(AFS::getDisplayPath(basePathB))); diff --git a/FreeFileSync/Source/ui/folder_history_box.cpp b/FreeFileSync/Source/ui/folder_history_box.cpp index fe0e8a67..24822b61 100644 --- a/FreeFileSync/Source/ui/folder_history_box.cpp +++ b/FreeFileSync/Source/ui/folder_history_box.cpp @@ -5,14 +5,13 @@ // ***************************************************************************** #include "folder_history_box.h" -#include <list> -#include <zen/scope_guard.h> -#include <zen/resolve_path.h> #include <wx+/dc.h> #include <gtk/gtk.h> +#include "../afs/concrete.h" using namespace zen; using namespace fff; +using AFS = AbstractFileSystem; FolderHistoryBox::FolderHistoryBox(wxWindow* parent, @@ -56,18 +55,20 @@ void FolderHistoryBox::onRequireHistoryUpdate(wxEvent& event) event.Skip(); } + //set value and update list are technically entangled: see potential bug description below void FolderHistoryBox::setValueAndUpdateList(const wxString& folderPathPhrase) { //populate selection list.... std::vector<wxString> items; - { - //allow user changing to volume name and back, if possible - std::vector<Zstring> aliases = getFolderPathAliases(utfTo<Zstring>(folderPathPhrase)); //may block when resolving [<volume name>] - for (const Zstring& str : aliases) - items.push_back(utfTo<wxString>(str)); - } + const Zstring& pathPhraseTrimmed = utfTo<Zstring>(trimCpy(folderPathPhrase)); + + //path phrase aliases: allow user changing to volume name and back + for (const Zstring& pathPhrase : AFS::getPathPhraseAliases(createAbstractPath(pathPhraseTrimmed))) //may block when resolving [<volume name>] + if (!equalNoCase(appendSeparator(pathPhraseTrimmed), appendSeparator(pathPhrase))) //don't add redundant aliases + items.push_back(utfTo<wxString>(pathPhrase)); + if (sharedHistory_.get()) { std::vector<Zstring> tmp = sharedHistory_->getList(); diff --git a/FreeFileSync/Source/ui/gui_generated.cpp b/FreeFileSync/Source/ui/gui_generated.cpp index cb0e03fe..4b22fabd 100644 --- a/FreeFileSync/Source/ui/gui_generated.cpp +++ b/FreeFileSync/Source/ui/gui_generated.cpp @@ -11,1194 +11,1193 @@ 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( wxDefaultSize, wxDefaultSize ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - m_menubar = 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_menubar = 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_menuItemLoad = new wxMenuItem( m_menuFile, wxID_OPEN, wxString( _("&Open...") ) + wxT('\t') + wxT("Ctrl+O"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemLoad ); - m_menuFile->AppendSeparator(); + m_menuFile->AppendSeparator(); - m_menuItemSave = new wxMenuItem( m_menuFile, wxID_SAVE, wxString( _("&Save") ) + wxT('\t') + wxT("Ctrl+S"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemSave ); + 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_menuItemSaveAs = new wxMenuItem( m_menuFile, wxID_SAVEAS, wxString( _("Save &as...") ), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemSaveAs ); - m_menuItemSaveAsBatch = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("Save as &batch job...") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemSaveAsBatch ); + m_menuItemSaveAsBatch = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("Save as &batch job...") ), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemSaveAsBatch ); - m_menuFile->AppendSeparator(); + m_menuFile->AppendSeparator(); - m_menuItemQuit = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("E&xit") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemQuit ); + m_menuItemQuit = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("E&xit") ), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemQuit ); - m_menubar->Append( m_menuFile, _("&File") ); + m_menubar->Append( m_menuFile, _("&File") ); - m_menuActions = new wxMenu(); - m_menuItemShowLog = new wxMenuItem( m_menuActions, wxID_ANY, wxString( _("Show &log") ) + wxT('\t') + wxT("F4"), wxEmptyString, wxITEM_NORMAL ); - m_menuActions->Append( m_menuItemShowLog ); + m_menuActions = new wxMenu(); + m_menuItemShowLog = new wxMenuItem( m_menuActions, wxID_ANY, wxString( _("Show &log") ) + wxT('\t') + wxT("F4"), wxEmptyString, wxITEM_NORMAL ); + m_menuActions->Append( m_menuItemShowLog ); - m_menuActions->AppendSeparator(); + m_menuActions->AppendSeparator(); - m_menuItemCompare = new wxMenuItem( m_menuActions, wxID_ANY, wxString( _("Start &comparison") ) + wxT('\t') + wxT("F5"), wxEmptyString, wxITEM_NORMAL ); - m_menuActions->Append( m_menuItemCompare ); + m_menuItemCompare = new wxMenuItem( m_menuActions, wxID_ANY, wxString( _("Start &comparison") ) + wxT('\t') + wxT("F5"), wxEmptyString, wxITEM_NORMAL ); + m_menuActions->Append( m_menuItemCompare ); - m_menuActions->AppendSeparator(); + m_menuActions->AppendSeparator(); - m_menuItemCompSettings = new wxMenuItem( m_menuActions, wxID_ANY, wxString( _("C&omparison settings") ) + wxT('\t') + wxT("F6"), wxEmptyString, wxITEM_NORMAL ); - m_menuActions->Append( m_menuItemCompSettings ); + m_menuItemCompSettings = new wxMenuItem( m_menuActions, wxID_ANY, wxString( _("C&omparison settings") ) + wxT('\t') + wxT("F6"), wxEmptyString, wxITEM_NORMAL ); + m_menuActions->Append( m_menuItemCompSettings ); - m_menuItemFilter = new wxMenuItem( m_menuActions, wxID_ANY, wxString( _("&Filter settings") ) + wxT('\t') + wxT("F7"), wxEmptyString, wxITEM_NORMAL ); - m_menuActions->Append( m_menuItemFilter ); + m_menuItemFilter = new wxMenuItem( m_menuActions, wxID_ANY, wxString( _("&Filter settings") ) + wxT('\t') + wxT("F7"), wxEmptyString, wxITEM_NORMAL ); + m_menuActions->Append( m_menuItemFilter ); - m_menuItemSyncSettings = new wxMenuItem( m_menuActions, wxID_ANY, wxString( _("S&ynchronization settings") ) + wxT('\t') + wxT("F8"), wxEmptyString, wxITEM_NORMAL ); - m_menuActions->Append( m_menuItemSyncSettings ); + m_menuItemSyncSettings = new wxMenuItem( m_menuActions, wxID_ANY, wxString( _("S&ynchronization settings") ) + wxT('\t') + wxT("F8"), wxEmptyString, wxITEM_NORMAL ); + m_menuActions->Append( m_menuItemSyncSettings ); - m_menuActions->AppendSeparator(); + m_menuActions->AppendSeparator(); - m_menuItemSynchronize = new wxMenuItem( m_menuActions, wxID_ANY, wxString( _("Start &synchronization") ) + wxT('\t') + wxT("F9"), wxEmptyString, wxITEM_NORMAL ); - m_menuActions->Append( m_menuItemSynchronize ); + m_menuItemSynchronize = new wxMenuItem( m_menuActions, wxID_ANY, wxString( _("Start &synchronization") ) + wxT('\t') + wxT("F9"), wxEmptyString, wxITEM_NORMAL ); + m_menuActions->Append( m_menuItemSynchronize ); - m_menubar->Append( m_menuActions, _("&Actions") ); + m_menubar->Append( m_menuActions, _("&Actions") ); - m_menuTools = new wxMenu(); - m_menuItemOptions = new wxMenuItem( m_menuTools, wxID_PREFERENCES, wxString( _("&Preferences") ) + wxT('\t') + wxT("Ctrl+,"), wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItemOptions ); + m_menuTools = new wxMenu(); + m_menuItemOptions = new wxMenuItem( m_menuTools, wxID_PREFERENCES, wxString( _("&Preferences") ) + wxT('\t') + wxT("Ctrl+,"), wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItemOptions ); - m_menuLanguages = new wxMenu(); - wxMenuItem* m_menuLanguagesItem = new wxMenuItem( m_menuTools, wxID_ANY, _("&Language"), wxEmptyString, wxITEM_NORMAL, m_menuLanguages ); - m_menuTools->Append( m_menuLanguagesItem ); + m_menuLanguages = new wxMenu(); + wxMenuItem* m_menuLanguagesItem = new wxMenuItem( m_menuTools, wxID_ANY, _("&Language"), wxEmptyString, wxITEM_NORMAL, m_menuLanguages ); + m_menuTools->Append( m_menuLanguagesItem ); - m_menuTools->AppendSeparator(); + m_menuTools->AppendSeparator(); - m_menuItemFind = new wxMenuItem( m_menuTools, wxID_FIND, wxString( _("&Find...") ) + wxT('\t') + wxT("Ctrl+F"), wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItemFind ); + m_menuItemFind = new wxMenuItem( m_menuTools, wxID_FIND, wxString( _("&Find...") ) + wxT('\t') + wxT("Ctrl+F"), wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItemFind ); - m_menuItemExportList = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("&Export file list...") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItemExportList ); + m_menuItemExportList = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("&Export file list") ), wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItemExportList ); - m_menuTools->AppendSeparator(); + m_menuTools->AppendSeparator(); - m_menuItemResetLayout = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("&Reset layout") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItemResetLayout ); + m_menuItemResetLayout = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("&Reset layout") ), wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItemResetLayout ); - m_menuItemShowMain = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("dummy") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItemShowMain ); + m_menuItemShowMain = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("dummy") ), wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItemShowMain ); - m_menuItemShowFolders = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("dummy") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItemShowFolders ); + m_menuItemShowFolders = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("dummy") ), wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItemShowFolders ); - m_menuItemShowViewFilter = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("dummy") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItemShowViewFilter ); + m_menuItemShowViewFilter = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("dummy") ), wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItemShowViewFilter ); - m_menuItemShowConfig = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("dummy") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItemShowConfig ); + m_menuItemShowConfig = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("dummy") ), wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItemShowConfig ); - m_menuItemShowOverview = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("dummy") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuTools->Append( m_menuItemShowOverview ); + m_menuItemShowOverview = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("dummy") ), wxEmptyString, wxITEM_NORMAL ); + m_menuTools->Append( m_menuItemShowOverview ); - m_menubar->Append( m_menuTools, _("&Tools") ); + m_menubar->Append( m_menuTools, _("&Tools") ); - m_menuHelp = new wxMenu(); - m_menuItemHelp = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&View help") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); - m_menuHelp->Append( m_menuItemHelp ); + m_menuHelp = new wxMenu(); + m_menuItemHelp = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&View help") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemHelp ); - m_menuHelp->AppendSeparator(); + m_menuHelp->AppendSeparator(); - m_menuItemCheckVersionNow = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Check for updates now") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuHelp->Append( m_menuItemCheckVersionNow ); + m_menuItemCheckVersionNow = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Check for updates now") ), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemCheckVersionNow ); - m_menuItemCheckVersionAuto = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("Check &automatically once a week") ) , wxEmptyString, wxITEM_CHECK ); - m_menuHelp->Append( m_menuItemCheckVersionAuto ); - m_menuItemCheckVersionAuto->Check( true ); + m_menuItemCheckVersionAuto = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("Check &automatically once a week") ), wxEmptyString, wxITEM_CHECK ); + m_menuHelp->Append( m_menuItemCheckVersionAuto ); + m_menuItemCheckVersionAuto->Check( true ); - m_menuHelp->AppendSeparator(); + 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_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemAbout ); - m_menubar->Append( m_menuHelp, _("&Help") ); + m_menubar->Append( m_menuHelp, _("&Help") ); - this->SetMenuBar( m_menubar ); + this->SetMenuBar( m_menubar ); - bSizerPanelHolder = new wxBoxSizer( wxVERTICAL ); + bSizerPanelHolder = new wxBoxSizer( wxVERTICAL ); - m_panelTopButtons = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelTopButtons->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelTopButtons = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelTopButtons->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer1791; - bSizer1791 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer1791; + bSizer1791 = new wxBoxSizer( wxVERTICAL ); - bSizerTopButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerTopButtons = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer261; - bSizer261 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer261; + bSizer261 = new wxBoxSizer( wxHORIZONTAL ); - bSizer261->Add( 0, 0, 1, 0, 5 ); + bSizer261->Add( 0, 0, 1, 0, 5 ); - m_bpButtonCmpConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonCmpConfig->SetToolTip( _("dummy") ); + m_bpButtonCmpConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonCmpConfig->SetToolTip( _("dummy") ); - bSizer261->Add( m_bpButtonCmpConfig, 0, wxEXPAND, 5 ); + bSizer261->Add( m_bpButtonCmpConfig, 0, wxEXPAND, 5 ); - bSizer261->Add( 4, 0, 0, 0, 5 ); + bSizer261->Add( 4, 0, 0, 0, 5 ); - m_buttonCancel = new wxButton( m_panelTopButtons, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_buttonCancel->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - m_buttonCancel->Enable( false ); - m_buttonCancel->Hide(); + m_buttonCancel = new wxButton( m_panelTopButtons, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_buttonCancel->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonCancel->Enable( false ); + m_buttonCancel->Hide(); - bSizer261->Add( m_buttonCancel, 0, wxEXPAND, 5 ); + bSizer261->Add( m_buttonCancel, 0, wxEXPAND, 5 ); - m_buttonCompare = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Compare"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_buttonCompare->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - m_buttonCompare->SetToolTip( _("dummy") ); + m_buttonCompare = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Compare"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_buttonCompare->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonCompare->SetToolTip( _("dummy") ); - bSizer261->Add( m_buttonCompare, 0, wxEXPAND, 5 ); + bSizer261->Add( m_buttonCompare, 0, wxEXPAND, 5 ); - m_bpButtonCmpContext = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer261->Add( m_bpButtonCmpContext, 0, wxEXPAND, 5 ); + m_bpButtonCmpContext = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer261->Add( m_bpButtonCmpContext, 0, wxEXPAND, 5 ); - bSizer261->Add( 0, 0, 1, 0, 5 ); + bSizer261->Add( 0, 0, 1, 0, 5 ); - bSizerTopButtons->Add( bSizer261, 1, wxEXPAND, 5 ); + bSizerTopButtons->Add( bSizer261, 1, wxEXPAND, 5 ); - bSizerTopButtons->Add( 5, 2, 0, 0, 5 ); + bSizerTopButtons->Add( 5, 2, 0, 0, 5 ); - wxBoxSizer* bSizer199; - bSizer199 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer199; + bSizer199 = new wxBoxSizer( wxHORIZONTAL ); - bSizer199->Add( 0, 0, 1, 0, 5 ); + bSizer199->Add( 0, 0, 1, 0, 5 ); - m_bpButtonFilter = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0|wxFULL_REPAINT_ON_RESIZE ); - m_bpButtonFilter->SetToolTip( _("dummy") ); + m_bpButtonFilter = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0|wxFULL_REPAINT_ON_RESIZE ); + m_bpButtonFilter->SetToolTip( _("dummy") ); - bSizer199->Add( m_bpButtonFilter, 0, wxEXPAND, 5 ); + bSizer199->Add( m_bpButtonFilter, 0, wxEXPAND, 5 ); - m_bpButtonFilterContext = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer199->Add( m_bpButtonFilterContext, 0, wxEXPAND, 5 ); + m_bpButtonFilterContext = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer199->Add( m_bpButtonFilterContext, 0, wxEXPAND, 5 ); - bSizer199->Add( 0, 0, 1, 0, 5 ); + bSizer199->Add( 0, 0, 1, 0, 5 ); - bSizerTopButtons->Add( bSizer199, 0, wxEXPAND, 5 ); + bSizerTopButtons->Add( bSizer199, 0, wxEXPAND, 5 ); - bSizerTopButtons->Add( 5, 2, 0, 0, 5 ); + bSizerTopButtons->Add( 5, 2, 0, 0, 5 ); - wxBoxSizer* bSizer262; - bSizer262 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer262; + bSizer262 = new wxBoxSizer( wxHORIZONTAL ); - bSizer262->Add( 0, 0, 1, 0, 5 ); + bSizer262->Add( 0, 0, 1, 0, 5 ); - m_bpButtonSyncConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonSyncConfig->SetToolTip( _("dummy") ); + m_bpButtonSyncConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonSyncConfig->SetToolTip( _("dummy") ); - bSizer262->Add( m_bpButtonSyncConfig, 0, wxEXPAND, 5 ); + bSizer262->Add( m_bpButtonSyncConfig, 0, wxEXPAND, 5 ); - bSizer262->Add( 4, 0, 0, 0, 5 ); + bSizer262->Add( 4, 0, 0, 0, 5 ); - m_buttonSync = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Synchronize"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_buttonSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - m_buttonSync->SetToolTip( _("dummy") ); + m_buttonSync = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Synchronize"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_buttonSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonSync->SetToolTip( _("dummy") ); - bSizer262->Add( m_buttonSync, 0, wxEXPAND, 5 ); + bSizer262->Add( m_buttonSync, 0, wxEXPAND, 5 ); - m_bpButtonSyncContext = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer262->Add( m_bpButtonSyncContext, 0, wxEXPAND, 5 ); + m_bpButtonSyncContext = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer262->Add( m_bpButtonSyncContext, 0, wxEXPAND, 5 ); - bSizer262->Add( 0, 0, 1, 0, 5 ); + bSizer262->Add( 0, 0, 1, 0, 5 ); - bSizerTopButtons->Add( bSizer262, 1, wxEXPAND, 5 ); + bSizerTopButtons->Add( bSizer262, 1, wxEXPAND, 5 ); - bSizer1791->Add( bSizerTopButtons, 1, wxEXPAND, 5 ); + bSizer1791->Add( bSizerTopButtons, 1, wxEXPAND, 5 ); - m_panelTopButtons->SetSizer( bSizer1791 ); - m_panelTopButtons->Layout(); - bSizer1791->Fit( m_panelTopButtons ); - bSizerPanelHolder->Add( m_panelTopButtons, 0, wxEXPAND, 5 ); + m_panelTopButtons->SetSizer( bSizer1791 ); + m_panelTopButtons->Layout(); + bSizer1791->Fit( m_panelTopButtons ); + bSizerPanelHolder->Add( m_panelTopButtons, 0, wxEXPAND, 5 ); - m_panelDirectoryPairs = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxBORDER_STATIC ); - wxBoxSizer* bSizer1601; - bSizer1601 = new wxBoxSizer( wxVERTICAL ); + m_panelDirectoryPairs = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxBORDER_STATIC ); + wxBoxSizer* bSizer1601; + bSizer1601 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer91; - bSizer91 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer91; + bSizer91 = new wxBoxSizer( wxHORIZONTAL ); - m_panelTopLeft = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelTopLeft->SetMinSize( wxSize( 1,-1 ) ); + 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 ); + 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 ); + 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 ); + 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 ); + wxBoxSizer* bSizer159; + bSizer159 = new wxBoxSizer( wxHORIZONTAL ); - m_bpButtonAddPair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonAddPair->SetToolTip( _("Add folder pair") ); + m_bpButtonAddPair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonAddPair->SetToolTip( _("Add folder pair") ); - bSizer159->Add( m_bpButtonAddPair, 0, wxEXPAND, 5 ); + bSizer159->Add( m_bpButtonAddPair, 0, wxEXPAND, 5 ); - m_bpButtonRemovePair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); + m_bpButtonRemovePair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); - bSizer159->Add( m_bpButtonRemovePair, 0, wxEXPAND, 5 ); + bSizer159->Add( m_bpButtonRemovePair, 0, wxEXPAND, 5 ); - fgSizer8->Add( bSizer159, 0, wxEXPAND, 5 ); + fgSizer8->Add( bSizer159, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer182; - bSizer182 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer182; + bSizer182 = new wxBoxSizer( wxHORIZONTAL ); - m_folderPathLeft = new fff::FolderHistoryBox( m_panelTopLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer182->Add( m_folderPathLeft, 1, wxALIGN_CENTER_VERTICAL, 5 ); + m_folderPathLeft = new fff::FolderHistoryBox( m_panelTopLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer182->Add( m_folderPathLeft, 1, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonSelectFolderLeft = new wxButton( m_panelTopLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectFolderLeft->SetToolTip( _("Select a folder") ); + m_buttonSelectFolderLeft = new wxButton( m_panelTopLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectFolderLeft->SetToolTip( _("Select a folder") ); - bSizer182->Add( m_buttonSelectFolderLeft, 0, wxEXPAND, 5 ); + bSizer182->Add( m_buttonSelectFolderLeft, 0, wxEXPAND, 5 ); - m_bpButtonSelectAltFolderLeft = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonSelectAltFolderLeft->SetToolTip( _("Access online storage") ); + m_bpButtonSelectAltFolderLeft = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonSelectAltFolderLeft->SetToolTip( _("Access online storage") ); - bSizer182->Add( m_bpButtonSelectAltFolderLeft, 0, wxEXPAND, 5 ); + bSizer182->Add( m_bpButtonSelectAltFolderLeft, 0, wxEXPAND, 5 ); - fgSizer8->Add( bSizer182, 0, wxEXPAND, 5 ); + fgSizer8->Add( bSizer182, 0, wxEXPAND, 5 ); - m_panelTopLeft->SetSizer( fgSizer8 ); - m_panelTopLeft->Layout(); - fgSizer8->Fit( m_panelTopLeft ); - bSizer91->Add( m_panelTopLeft, 1, wxLEFT|wxALIGN_BOTTOM, 5 ); + m_panelTopLeft->SetSizer( fgSizer8 ); + m_panelTopLeft->Layout(); + fgSizer8->Fit( m_panelTopLeft ); + bSizer91->Add( m_panelTopLeft, 1, wxLEFT|wxALIGN_BOTTOM, 5 ); - m_panelTopCenter = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1771; - bSizer1771 = new wxBoxSizer( wxVERTICAL ); + m_panelTopCenter = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1771; + bSizer1771 = new wxBoxSizer( wxVERTICAL ); - m_bpButtonSwapSides = new wxBitmapButton( m_panelTopCenter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonSwapSides->SetToolTip( _("dummy") ); + m_bpButtonSwapSides = new wxBitmapButton( m_panelTopCenter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonSwapSides->SetToolTip( _("dummy") ); - bSizer1771->Add( m_bpButtonSwapSides, 0, wxEXPAND, 5 ); + bSizer1771->Add( m_bpButtonSwapSides, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer160; + bSizer160 = new wxBoxSizer( wxHORIZONTAL ); - m_bpButtonLocalCompCfg = new wxBitmapButton( m_panelTopCenter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonLocalCompCfg->SetToolTip( _("dummy") ); + m_bpButtonLocalCompCfg = new wxBitmapButton( m_panelTopCenter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonLocalCompCfg->SetToolTip( _("dummy") ); - bSizer160->Add( m_bpButtonLocalCompCfg, 0, wxEXPAND, 5 ); + bSizer160->Add( m_bpButtonLocalCompCfg, 0, wxEXPAND, 5 ); - m_bpButtonLocalFilter = new wxBitmapButton( m_panelTopCenter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonLocalFilter->SetToolTip( _("dummy") ); + m_bpButtonLocalFilter = new wxBitmapButton( m_panelTopCenter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonLocalFilter->SetToolTip( _("dummy") ); - bSizer160->Add( m_bpButtonLocalFilter, 0, wxEXPAND, 5 ); + bSizer160->Add( m_bpButtonLocalFilter, 0, wxEXPAND, 5 ); - m_bpButtonLocalSyncCfg = new wxBitmapButton( m_panelTopCenter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonLocalSyncCfg->SetToolTip( _("dummy") ); + m_bpButtonLocalSyncCfg = new wxBitmapButton( m_panelTopCenter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonLocalSyncCfg->SetToolTip( _("dummy") ); - bSizer160->Add( m_bpButtonLocalSyncCfg, 0, wxEXPAND, 5 ); + bSizer160->Add( m_bpButtonLocalSyncCfg, 0, wxEXPAND, 5 ); - bSizer1771->Add( bSizer160, 1, wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer1771->Add( bSizer160, 1, wxALIGN_CENTER_HORIZONTAL, 5 ); - m_panelTopCenter->SetSizer( bSizer1771 ); - m_panelTopCenter->Layout(); - bSizer1771->Fit( m_panelTopCenter ); - bSizer91->Add( m_panelTopCenter, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + m_panelTopCenter->SetSizer( bSizer1771 ); + m_panelTopCenter->Layout(); + bSizer1771->Fit( m_panelTopCenter ); + bSizer91->Add( m_panelTopCenter, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_panelTopRight = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelTopRight->SetMinSize( wxSize( 1,-1 ) ); + m_panelTopRight = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelTopRight->SetMinSize( wxSize( 1, -1 ) ); - wxBoxSizer* bSizer183; - bSizer183 = new wxBoxSizer( wxVERTICAL ); + 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, wxALL, 2 ); + m_staticTextResolvedPathR = new wxStaticText( m_panelTopRight, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextResolvedPathR->Wrap( -1 ); + bSizer183->Add( m_staticTextResolvedPathR, 0, wxALL, 2 ); - wxBoxSizer* bSizer179; - bSizer179 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer179; + bSizer179 = new wxBoxSizer( wxHORIZONTAL ); - m_folderPathRight = new fff::FolderHistoryBox( m_panelTopRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer179->Add( m_folderPathRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); + m_folderPathRight = new fff::FolderHistoryBox( m_panelTopRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer179->Add( m_folderPathRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonSelectFolderRight = new wxButton( m_panelTopRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectFolderRight->SetToolTip( _("Select a folder") ); + m_buttonSelectFolderRight = new wxButton( m_panelTopRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectFolderRight->SetToolTip( _("Select a folder") ); - bSizer179->Add( m_buttonSelectFolderRight, 0, wxEXPAND, 5 ); + bSizer179->Add( m_buttonSelectFolderRight, 0, wxEXPAND, 5 ); - m_bpButtonSelectAltFolderRight = new wxBitmapButton( m_panelTopRight, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonSelectAltFolderRight->SetToolTip( _("Access online storage") ); + m_bpButtonSelectAltFolderRight = new wxBitmapButton( m_panelTopRight, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonSelectAltFolderRight->SetToolTip( _("Access online storage") ); - bSizer179->Add( m_bpButtonSelectAltFolderRight, 0, wxEXPAND, 5 ); + bSizer179->Add( m_bpButtonSelectAltFolderRight, 0, wxEXPAND, 5 ); - bSizer183->Add( bSizer179, 0, wxEXPAND, 5 ); + bSizer183->Add( bSizer179, 0, wxEXPAND, 5 ); - m_panelTopRight->SetSizer( bSizer183 ); - m_panelTopRight->Layout(); - bSizer183->Fit( m_panelTopRight ); - bSizer91->Add( m_panelTopRight, 1, wxRIGHT|wxALIGN_BOTTOM, 5 ); + m_panelTopRight->SetSizer( bSizer183 ); + m_panelTopRight->Layout(); + bSizer183->Fit( m_panelTopRight ); + bSizer91->Add( m_panelTopRight, 1, wxRIGHT|wxALIGN_BOTTOM, 5 ); - bSizer1601->Add( bSizer91, 0, wxEXPAND, 5 ); + bSizer1601->Add( bSizer91, 0, wxEXPAND, 5 ); - m_scrolledWindowFolderPairs = new wxScrolledWindow( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxHSCROLL|wxVSCROLL ); - m_scrolledWindowFolderPairs->SetScrollRate( 5, 5 ); - m_scrolledWindowFolderPairs->SetMinSize( wxSize( -1,0 ) ); + m_scrolledWindowFolderPairs = new wxScrolledWindow( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxSize( -1, -1 ), wxHSCROLL|wxVSCROLL ); + m_scrolledWindowFolderPairs->SetScrollRate( 5, 5 ); + m_scrolledWindowFolderPairs->SetMinSize( wxSize( -1, 0 ) ); - bSizerAddFolderPairs = new wxBoxSizer( wxVERTICAL ); + bSizerAddFolderPairs = new wxBoxSizer( wxVERTICAL ); - m_scrolledWindowFolderPairs->SetSizer( bSizerAddFolderPairs ); - m_scrolledWindowFolderPairs->Layout(); - bSizerAddFolderPairs->Fit( m_scrolledWindowFolderPairs ); - bSizer1601->Add( m_scrolledWindowFolderPairs, 1, wxEXPAND, 5 ); + m_scrolledWindowFolderPairs->SetSizer( bSizerAddFolderPairs ); + m_scrolledWindowFolderPairs->Layout(); + bSizerAddFolderPairs->Fit( m_scrolledWindowFolderPairs ); + bSizer1601->Add( m_scrolledWindowFolderPairs, 1, wxEXPAND, 5 ); - m_panelDirectoryPairs->SetSizer( bSizer1601 ); - m_panelDirectoryPairs->Layout(); - bSizer1601->Fit( m_panelDirectoryPairs ); - bSizerPanelHolder->Add( m_panelDirectoryPairs, 0, wxEXPAND, 5 ); + m_panelDirectoryPairs->SetSizer( bSizer1601 ); + m_panelDirectoryPairs->Layout(); + bSizer1601->Fit( m_panelDirectoryPairs ); + bSizerPanelHolder->Add( m_panelDirectoryPairs, 0, wxEXPAND, 5 ); - m_gridOverview = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_gridOverview->SetScrollRate( 5, 5 ); - bSizerPanelHolder->Add( m_gridOverview, 0, 0, 5 ); + m_gridOverview = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridOverview->SetScrollRate( 5, 5 ); + bSizerPanelHolder->Add( m_gridOverview, 0, 0, 5 ); - m_panelCenter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1711; - bSizer1711 = new wxBoxSizer( wxVERTICAL ); + m_panelCenter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1711; + bSizer1711 = new wxBoxSizer( wxVERTICAL ); - m_splitterMain = new fff::TripleSplitter( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1781; - bSizer1781 = new wxBoxSizer( wxHORIZONTAL ); + m_splitterMain = new fff::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_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_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_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_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, wxTAB_TRAVERSAL|wxBORDER_STATIC ); - wxBoxSizer* bSizer451; - bSizer451 = new wxBoxSizer( wxHORIZONTAL ); + m_panelStatusBar = new wxPanel( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxBORDER_STATIC ); + wxBoxSizer* bSizer451; + bSizer451 = new wxBoxSizer( wxHORIZONTAL ); - bSizerFileStatus = new wxBoxSizer( wxHORIZONTAL ); + bSizerFileStatus = new wxBoxSizer( wxHORIZONTAL ); - bSizerStatusLeft = new wxBoxSizer( wxHORIZONTAL ); + bSizerStatusLeft = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer53; - bSizer53 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer53; + bSizer53 = new wxBoxSizer( wxHORIZONTAL ); - bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStatusLeftDirectories = new wxBoxSizer( wxHORIZONTAL ); + 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 ); + 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 ); + 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 ); + 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 ); + bSizer53->Add( bSizerStatusLeftDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStatusLeftFiles = new wxBoxSizer( wxHORIZONTAL ); + bSizerStatusLeftFiles = new wxBoxSizer( wxHORIZONTAL ); - bSizerStatusLeftFiles->Add( 10, 0, 0, 0, 5 ); + 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 ); + 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 ); + 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 ); + 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 ); + 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 ); + 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( bSizerStatusLeftFiles, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStatusLeft->Add( bSizer53, 1, wxEXPAND, 5 ); + bSizerStatusLeft->Add( bSizer53, 1, wxEXPAND, 5 ); - m_staticline9 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizerStatusLeft->Add( m_staticline9, 0, wxEXPAND|wxTOP, 2 ); + m_staticline9 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizerStatusLeft->Add( m_staticline9, 0, wxEXPAND|wxTOP, 2 ); - bSizerFileStatus->Add( bSizerStatusLeft, 1, wxEXPAND, 5 ); + bSizerFileStatus->Add( bSizerStatusLeft, 1, wxEXPAND, 5 ); - bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticTextStatusCenter = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusCenter->Wrap( -1 ); - bSizerFileStatus->Add( m_staticTextStatusCenter, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + m_staticTextStatusCenter = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusCenter->Wrap( -1 ); + bSizerFileStatus->Add( m_staticTextStatusCenter, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStatusRight = new wxBoxSizer( wxHORIZONTAL ); + bSizerStatusRight = new wxBoxSizer( wxHORIZONTAL ); - m_staticline10 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizerStatusRight->Add( m_staticline10, 0, wxEXPAND|wxTOP, 2 ); + m_staticline10 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizerStatusRight->Add( m_staticline10, 0, wxEXPAND|wxTOP, 2 ); - wxBoxSizer* bSizer52; - bSizer52 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer52; + bSizer52 = new wxBoxSizer( wxHORIZONTAL ); - bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStatusRightDirectories = new wxBoxSizer( wxHORIZONTAL ); + 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 ); + 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 ); + 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 ); + 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 ); + bSizer52->Add( bSizerStatusRightDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStatusRightFiles = new wxBoxSizer( wxHORIZONTAL ); + bSizerStatusRightFiles = new wxBoxSizer( wxHORIZONTAL ); - bSizerStatusRightFiles->Add( 10, 0, 0, 0, 5 ); + 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 ); + 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 ); + 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 ); + 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 ); + 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 ); + 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( bSizerStatusRightFiles, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStatusRight->Add( bSizer52, 1, wxEXPAND, 5 ); + bSizerStatusRight->Add( bSizer52, 1, wxEXPAND, 5 ); - bSizerFileStatus->Add( bSizerStatusRight, 1, wxEXPAND, 5 ); + bSizerFileStatus->Add( bSizerStatusRight, 1, wxEXPAND, 5 ); - bSizer451->Add( bSizerFileStatus, 1, wxEXPAND, 5 ); + bSizer451->Add( bSizerFileStatus, 1, 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(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextFullStatus = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextFullStatus->Wrap( -1 ); + m_staticTextFullStatus->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer451->Add( m_staticTextFullStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + 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, wxEXPAND, 5 ); + m_panelStatusBar->SetSizer( bSizer451 ); + m_panelStatusBar->Layout(); + bSizer451->Fit( m_panelStatusBar ); + bSizer1711->Add( m_panelStatusBar, 0, wxEXPAND, 5 ); - m_panelCenter->SetSizer( bSizer1711 ); - m_panelCenter->Layout(); - bSizer1711->Fit( m_panelCenter ); - bSizerPanelHolder->Add( m_panelCenter, 1, 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_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( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonHideSearch->SetToolTip( _("Close search bar") ); + m_bpButtonHideSearch = new wxBitmapButton( m_panelSearch, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonHideSearch->SetToolTip( _("Close search bar") ); - bSizer1713->Add( m_bpButtonHideSearch, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer1713->Add( m_bpButtonHideSearch, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 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_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( -1,-1 ), wxTE_PROCESS_ENTER|wxWANTS_CHARS ); - bSizer1713->Add( m_textCtrlSearchTxt, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + m_textCtrlSearchTxt = new wxTextCtrl( m_panelSearch, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxTE_PROCESS_ENTER|wxWANTS_CHARS ); + 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_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_panelSearch->SetSizer( bSizer1713 ); + m_panelSearch->Layout(); + bSizer1713->Fit( m_panelSearch ); + bSizerPanelHolder->Add( m_panelSearch, 0, 0, 5 ); - m_panelLog = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelLog->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelLog = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelLog->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - bSizerLog = new wxBoxSizer( wxVERTICAL ); + bSizerLog = new wxBoxSizer( wxVERTICAL ); - bSizer42 = new wxBoxSizer( wxHORIZONTAL ); + bSizer42 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapSyncResult = new wxStaticBitmap( m_panelLog, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer42->Add( m_bitmapSyncResult, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_bitmapSyncResult = new wxStaticBitmap( m_panelLog, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer42->Add( m_bitmapSyncResult, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_staticTextSyncResult = new wxStaticText( m_panelLog, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextSyncResult->Wrap( -1 ); - m_staticTextSyncResult->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextSyncResult = new wxStaticText( m_panelLog, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextSyncResult->Wrap( -1 ); + m_staticTextSyncResult->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer42->Add( m_staticTextSyncResult, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); + bSizer42->Add( m_staticTextSyncResult, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); - bSizer42->Add( 10, 0, 0, 0, 5 ); + bSizer42->Add( 10, 0, 0, 0, 5 ); - ffgSizer11 = new wxFlexGridSizer( 2, 0, 5, 5 ); - ffgSizer11->SetFlexibleDirection( wxBOTH ); - ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer11 = new wxFlexGridSizer( 2, 0, 5, 5 ); + ffgSizer11->SetFlexibleDirection( wxBOTH ); + ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_staticTextProcessed = new wxStaticText( m_panelLog, wxID_ANY, _("Processed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextProcessed->Wrap( -1 ); - ffgSizer11->Add( m_staticTextProcessed, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT, 5 ); + m_staticTextProcessed = new wxStaticText( m_panelLog, wxID_ANY, _("Processed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextProcessed->Wrap( -1 ); + ffgSizer11->Add( m_staticTextProcessed, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT, 5 ); - m_staticTextRemaining = new wxStaticText( m_panelLog, wxID_ANY, _("Remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextRemaining->Wrap( -1 ); - ffgSizer11->Add( m_staticTextRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_staticTextRemaining = new wxStaticText( m_panelLog, wxID_ANY, _("Remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRemaining->Wrap( -1 ); + ffgSizer11->Add( m_staticTextRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizer42->Add( ffgSizer11, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 10 ); + bSizer42->Add( ffgSizer11, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 10 ); - m_panelItemStats = new wxPanel( m_panelLog, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelItemStats->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + m_panelItemStats = new wxPanel( m_panelLog, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelItemStats->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer291; - bSizer291 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer291; + bSizer291 = new wxBoxSizer( wxVERTICAL ); - ffgSizer111 = new wxFlexGridSizer( 0, 2, 5, 5 ); - ffgSizer111->SetFlexibleDirection( wxBOTH ); - ffgSizer111->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer111 = new wxFlexGridSizer( 0, 2, 5, 5 ); + ffgSizer111->SetFlexibleDirection( wxBOTH ); + ffgSizer111->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - wxBoxSizer* bSizer293; - bSizer293 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer293; + bSizer293 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapItemStat = new wxStaticBitmap( m_panelItemStats, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer293->Add( m_bitmapItemStat, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_bitmapItemStat = new wxStaticBitmap( m_panelItemStats, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer293->Add( m_bitmapItemStat, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizer293->Add( 0, 0, 1, 0, 5 ); + bSizer293->Add( 0, 0, 1, 0, 5 ); - m_staticTextItemsProcessed = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextItemsProcessed->Wrap( -1 ); - m_staticTextItemsProcessed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextItemsProcessed = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_staticTextItemsProcessed->Wrap( -1 ); + m_staticTextItemsProcessed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer293->Add( m_staticTextItemsProcessed, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer293->Add( m_staticTextItemsProcessed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - ffgSizer111->Add( bSizer293, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + ffgSizer111->Add( bSizer293, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - m_staticTextBytesProcessed = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextBytesProcessed->Wrap( -1 ); - ffgSizer111->Add( m_staticTextBytesProcessed, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + m_staticTextBytesProcessed = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextBytesProcessed->Wrap( -1 ); + ffgSizer111->Add( m_staticTextBytesProcessed, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_staticTextItemsRemaining = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextItemsRemaining->Wrap( -1 ); - m_staticTextItemsRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextItemsRemaining = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_staticTextItemsRemaining->Wrap( -1 ); + m_staticTextItemsRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - ffgSizer111->Add( m_staticTextItemsRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + ffgSizer111->Add( m_staticTextItemsRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticTextBytesRemaining = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextBytesRemaining->Wrap( -1 ); - ffgSizer111->Add( m_staticTextBytesRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + m_staticTextBytesRemaining = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextBytesRemaining->Wrap( -1 ); + ffgSizer111->Add( m_staticTextBytesRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer291->Add( ffgSizer111, 0, wxALL, 5 ); + bSizer291->Add( ffgSizer111, 0, wxALL, 5 ); - m_panelItemStats->SetSizer( bSizer291 ); - m_panelItemStats->Layout(); - bSizer291->Fit( m_panelItemStats ); - bSizer42->Add( m_panelItemStats, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); + m_panelItemStats->SetSizer( bSizer291 ); + m_panelItemStats->Layout(); + bSizer291->Fit( m_panelItemStats ); + bSizer42->Add( m_panelItemStats, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); - m_panelTimeStats = new wxPanel( m_panelLog, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelTimeStats->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + m_panelTimeStats = new wxPanel( m_panelLog, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelTimeStats->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer292; - bSizer292 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer292; + bSizer292 = new wxBoxSizer( wxVERTICAL ); - ffgSizer112 = new wxFlexGridSizer( 0, 1, 5, 5 ); - ffgSizer112->SetFlexibleDirection( wxBOTH ); - ffgSizer112->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer112 = new wxFlexGridSizer( 0, 1, 5, 5 ); + ffgSizer112->SetFlexibleDirection( wxBOTH ); + ffgSizer112->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - wxBoxSizer* bSizer294; - bSizer294 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer294; + bSizer294 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapTimeStat = new wxStaticBitmap( m_panelTimeStats, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer294->Add( m_bitmapTimeStat, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_bitmapTimeStat = new wxStaticBitmap( m_panelTimeStats, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer294->Add( m_bitmapTimeStat, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizer294->Add( 0, 0, 1, 0, 5 ); + bSizer294->Add( 0, 0, 1, 0, 5 ); - m_staticTextTimeElapsed = new wxStaticText( m_panelTimeStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeElapsed->Wrap( -1 ); - m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextTimeElapsed = new wxStaticText( m_panelTimeStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeElapsed->Wrap( -1 ); + m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer294->Add( m_staticTextTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer294->Add( m_staticTextTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - ffgSizer112->Add( bSizer294, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + ffgSizer112->Add( bSizer294, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - bSizer292->Add( ffgSizer112, 0, wxALL, 5 ); + bSizer292->Add( ffgSizer112, 0, wxALL, 5 ); - m_panelTimeStats->SetSizer( bSizer292 ); - m_panelTimeStats->Layout(); - bSizer292->Fit( m_panelTimeStats ); - bSizer42->Add( m_panelTimeStats, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); + m_panelTimeStats->SetSizer( bSizer292 ); + m_panelTimeStats->Layout(); + bSizer292->Fit( m_panelTimeStats ); + bSizer42->Add( m_panelTimeStats, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); - bSizerLog->Add( bSizer42, 0, wxLEFT, 5 ); + bSizerLog->Add( bSizer42, 0, wxLEFT, 5 ); - m_staticline70 = new wxStaticLine( m_panelLog, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerLog->Add( m_staticline70, 0, wxEXPAND, 5 ); + m_staticline70 = new wxStaticLine( m_panelLog, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerLog->Add( m_staticline70, 0, wxEXPAND, 5 ); - m_panelLog->SetSizer( bSizerLog ); - m_panelLog->Layout(); - bSizerLog->Fit( m_panelLog ); - bSizerPanelHolder->Add( m_panelLog, 0, 0, 5 ); + m_panelLog->SetSizer( bSizerLog ); + m_panelLog->Layout(); + bSizerLog->Fit( m_panelLog ); + bSizerPanelHolder->Add( m_panelLog, 0, 0, 5 ); - m_panelConfig = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelConfig->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelConfig = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelConfig->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - bSizerConfig = new wxBoxSizer( wxHORIZONTAL ); + bSizerConfig = new wxBoxSizer( wxHORIZONTAL ); - bSizerCfgHistoryButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerCfgHistoryButtons = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer17611; - bSizer17611 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer17611; + bSizer17611 = new wxBoxSizer( wxVERTICAL ); - m_bpButtonNew = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonNew->SetToolTip( _("dummy") ); + m_bpButtonNew = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonNew->SetToolTip( _("dummy") ); - bSizer17611->Add( m_bpButtonNew, 0, wxEXPAND, 5 ); + bSizer17611->Add( m_bpButtonNew, 0, wxEXPAND, 5 ); - m_staticText951 = new wxStaticText( m_panelConfig, wxID_ANY, _("New"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText951->Wrap( -1 ); - bSizer17611->Add( m_staticText951, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 2 ); + m_staticText951 = new wxStaticText( m_panelConfig, wxID_ANY, _("New"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText951->Wrap( -1 ); + bSizer17611->Add( m_staticText951, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 2 ); - bSizerCfgHistoryButtons->Add( bSizer17611, 0, 0, 5 ); + bSizerCfgHistoryButtons->Add( bSizer17611, 0, 0, 5 ); - wxBoxSizer* bSizer1761; - bSizer1761 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer1761; + bSizer1761 = new wxBoxSizer( wxVERTICAL ); - m_bpButtonOpen = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonOpen->SetToolTip( _("dummy") ); + m_bpButtonOpen = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonOpen->SetToolTip( _("dummy") ); - bSizer1761->Add( m_bpButtonOpen, 0, wxEXPAND, 5 ); + bSizer1761->Add( m_bpButtonOpen, 0, wxEXPAND, 5 ); - m_staticText95 = new wxStaticText( m_panelConfig, wxID_ANY, _("Open..."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText95->Wrap( -1 ); - bSizer1761->Add( m_staticText95, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 2 ); + m_staticText95 = new wxStaticText( m_panelConfig, wxID_ANY, _("Open..."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText95->Wrap( -1 ); + bSizer1761->Add( m_staticText95, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 2 ); - bSizerCfgHistoryButtons->Add( bSizer1761, 0, 0, 5 ); + bSizerCfgHistoryButtons->Add( bSizer1761, 0, 0, 5 ); - wxBoxSizer* bSizer175; - bSizer175 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer175; + bSizer175 = new wxBoxSizer( wxVERTICAL ); - m_bpButtonSave = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonSave->SetToolTip( _("dummy") ); + m_bpButtonSave = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonSave->SetToolTip( _("dummy") ); - bSizer175->Add( m_bpButtonSave, 0, wxEXPAND, 5 ); + bSizer175->Add( m_bpButtonSave, 0, wxEXPAND, 5 ); - m_staticText961 = new wxStaticText( m_panelConfig, wxID_ANY, _("Save"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText961->Wrap( -1 ); - bSizer175->Add( m_staticText961, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 2 ); + m_staticText961 = new wxStaticText( m_panelConfig, wxID_ANY, _("Save"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText961->Wrap( -1 ); + bSizer175->Add( m_staticText961, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 2 ); - bSizerCfgHistoryButtons->Add( bSizer175, 0, 0, 5 ); + bSizerCfgHistoryButtons->Add( bSizer175, 0, 0, 5 ); - wxBoxSizer* bSizer174; - bSizer174 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer174; + bSizer174 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer1772; - bSizer1772 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer1772; + bSizer1772 = new wxBoxSizer( wxHORIZONTAL ); - m_bpButtonSaveAs = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonSaveAs->SetToolTip( _("dummy") ); + m_bpButtonSaveAs = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonSaveAs->SetToolTip( _("dummy") ); - bSizer1772->Add( m_bpButtonSaveAs, 1, 0, 5 ); + bSizer1772->Add( m_bpButtonSaveAs, 1, 0, 5 ); - m_bpButtonSaveAsBatch = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonSaveAsBatch->SetToolTip( _("dummy") ); + m_bpButtonSaveAsBatch = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonSaveAsBatch->SetToolTip( _("dummy") ); - bSizer1772->Add( m_bpButtonSaveAsBatch, 1, 0, 5 ); + bSizer1772->Add( m_bpButtonSaveAsBatch, 1, 0, 5 ); - bSizer174->Add( bSizer1772, 0, wxEXPAND, 5 ); + bSizer174->Add( bSizer1772, 0, wxEXPAND, 5 ); - m_staticText97 = new wxStaticText( m_panelConfig, wxID_ANY, _("Save as..."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText97->Wrap( -1 ); - bSizer174->Add( m_staticText97, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 2 ); + m_staticText97 = new wxStaticText( m_panelConfig, wxID_ANY, _("Save as..."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText97->Wrap( -1 ); + bSizer174->Add( m_staticText97, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 2 ); - bSizerCfgHistoryButtons->Add( bSizer174, 0, 0, 5 ); + bSizerCfgHistoryButtons->Add( bSizer174, 0, 0, 5 ); - bSizerConfig->Add( bSizerCfgHistoryButtons, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizerConfig->Add( bSizerCfgHistoryButtons, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticline81 = new wxStaticLine( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerConfig->Add( m_staticline81, 0, wxEXPAND|wxTOP, 5 ); + m_staticline81 = new wxStaticLine( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerConfig->Add( m_staticline81, 0, wxEXPAND|wxTOP, 5 ); - m_gridCfgHistory = new zen::Grid( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_gridCfgHistory->SetScrollRate( 5, 5 ); - bSizerConfig->Add( m_gridCfgHistory, 1, wxEXPAND, 5 ); + m_gridCfgHistory = new zen::Grid( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridCfgHistory->SetScrollRate( 5, 5 ); + bSizerConfig->Add( m_gridCfgHistory, 1, wxEXPAND, 5 ); - m_panelConfig->SetSizer( bSizerConfig ); - m_panelConfig->Layout(); - bSizerConfig->Fit( m_panelConfig ); - bSizerPanelHolder->Add( m_panelConfig, 0, 0, 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 ); - m_panelViewFilter->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelViewFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelViewFilter->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - bSizerViewFilter = new wxBoxSizer( wxHORIZONTAL ); + bSizerViewFilter = new wxBoxSizer( wxHORIZONTAL ); - m_bpButtonToggleLog = new wxBitmapButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); - bSizerViewFilter->Add( m_bpButtonToggleLog, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonToggleLog = new wxBitmapButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + bSizerViewFilter->Add( m_bpButtonToggleLog, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); - m_bpButtonViewType = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizerViewFilter->Add( m_bpButtonViewType, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_bpButtonViewType = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizerViewFilter->Add( m_bpButtonViewType, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - wxBoxSizer* bSizer300; - bSizer300 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer300; + bSizer300 = new wxBoxSizer( wxHORIZONTAL ); - m_bpButtonShowExcluded = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowExcluded, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 ); + m_bpButtonShowExcluded = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowExcluded, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 ); - m_bpButtonShowDeleteLeft = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowDeleteLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowDeleteLeft = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowDeleteLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowUpdateLeft = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowUpdateLeft = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowCreateLeft = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowCreateLeft = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowLeftOnly = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowLeftOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowLeftOnly = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowLeftOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowLeftNewer = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowLeftNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowLeftNewer = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowLeftNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowEqual = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowEqual, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowEqual = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowEqual, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowDoNothing = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowDoNothing, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowDoNothing = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowDoNothing, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowDifferent = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowDifferent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowDifferent = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowDifferent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowRightNewer = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowRightNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowRightNewer = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowRightNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowRightOnly = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowRightOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowRightOnly = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowRightOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowCreateRight = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowCreateRight = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowUpdateRight = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowUpdateRight = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowDeleteRight = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowDeleteRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowDeleteRight = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowDeleteRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonShowConflict = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonShowConflict, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonShowConflict = new zen::ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonShowConflict, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonViewFilterContext = new wxBitmapButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer300->Add( m_bpButtonViewFilterContext, 0, wxEXPAND, 5 ); + m_bpButtonViewFilterContext = new wxBitmapButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer300->Add( m_bpButtonViewFilterContext, 0, wxEXPAND, 5 ); - bSizerViewFilter->Add( bSizer300, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizerViewFilter->Add( bSizer300, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); - m_staticText96 = new wxStaticText( m_panelViewFilter, wxID_ANY, _("Statistics:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText96->Wrap( -1 ); - bSizerViewFilter->Add( m_staticText96, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_staticText96 = new wxStaticText( m_panelViewFilter, wxID_ANY, _("Statistics:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText96->Wrap( -1 ); + bSizerViewFilter->Add( m_staticText96, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_panelStatistics = new wxPanel( m_panelViewFilter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxBORDER_SUNKEN ); - m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelStatistics = new wxPanel( m_panelViewFilter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxBORDER_SUNKEN ); + m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - bSizer1801 = new wxBoxSizer( wxVERTICAL ); + bSizer1801 = new wxBoxSizer( wxVERTICAL ); - bSizerStatistics = new wxBoxSizer( wxHORIZONTAL ); + bSizerStatistics = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer173; - bSizer173 = new wxBoxSizer( wxVERTICAL ); + 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") ); + 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( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer173->Add( 5, 2, 0, 0, 5 ); + bSizer173->Add( 5, 2, 0, 0, 5 ); - bSizer173->Add( 0, 0, 1, wxEXPAND, 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") ); + 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 ); + bSizer173->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStatistics->Add( bSizer173, 0, wxEXPAND, 5 ); + bSizerStatistics->Add( bSizer173, 0, wxEXPAND, 5 ); - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxVERTICAL ); + 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 updated") ); + m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be updated") ); - bSizer172->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer172->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer172->Add( 5, 2, 0, 0, 5 ); + bSizer172->Add( 5, 2, 0, 0, 5 ); - bSizer172->Add( 0, 0, 1, wxEXPAND, 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 updated") ); + 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 updated") ); - bSizer172->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer172->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizerStatistics->Add( bSizer172, 0, wxEXPAND, 5 ); + bSizerStatistics->Add( bSizer172, 0, wxEXPAND, 5 ); - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - wxBoxSizer* bSizer1712; - bSizer1712 = new wxBoxSizer( wxVERTICAL ); + 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") ); + 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( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizer1712->Add( 5, 2, 0, 0, 5 ); + bSizer1712->Add( 5, 2, 0, 0, 5 ); - bSizer1712->Add( 0, 0, 1, wxEXPAND, 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") ); + 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 ); + bSizer1712->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizerStatistics->Add( bSizer1712, 0, wxEXPAND, 5 ); + bSizerStatistics->Add( bSizer1712, 0, wxEXPAND, 5 ); - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - bSizerData = new wxBoxSizer( wxVERTICAL ); + bSizerData = new wxBoxSizer( wxVERTICAL ); - m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapData->SetToolTip( _("Total bytes to copy") ); + 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( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizerData->Add( 5, 2, 0, 0, 5 ); + bSizerData->Add( 5, 2, 0, 0, 5 ); - bSizerData->Add( 0, 0, 1, wxEXPAND, 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") ); + 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 ); + bSizerData->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStatistics->Add( bSizerData, 0, wxEXPAND, 5 ); + bSizerStatistics->Add( bSizerData, 0, wxEXPAND, 5 ); - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - wxBoxSizer* bSizer178; - bSizer178 = new wxBoxSizer( wxVERTICAL ); + 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") ); + 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( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizer178->Add( 5, 2, 0, 0, 5 ); + bSizer178->Add( 5, 2, 0, 0, 5 ); - bSizer178->Add( 0, 0, 1, wxEXPAND, 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") ); + 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 ); + bSizer178->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStatistics->Add( bSizer178, 0, wxEXPAND, 5 ); + bSizerStatistics->Add( bSizer178, 0, wxEXPAND, 5 ); - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - wxBoxSizer* bSizer177; - bSizer177 = new wxBoxSizer( wxVERTICAL ); + 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 updated") ); + m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateRight->SetToolTip( _("Number of files that will be updated") ); - bSizer177->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer177->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizer177->Add( 5, 2, 0, 0, 5 ); + bSizer177->Add( 5, 2, 0, 0, 5 ); - bSizer177->Add( 0, 0, 1, wxEXPAND, 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 updated") ); + 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 updated") ); - bSizer177->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer177->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStatistics->Add( bSizer177, 0, wxEXPAND, 5 ); + bSizerStatistics->Add( bSizer177, 0, wxEXPAND, 5 ); - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - wxBoxSizer* bSizer176; - bSizer176 = new wxBoxSizer( wxVERTICAL ); + 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") ); + 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( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer176->Add( 5, 2, 0, 0, 5 ); + bSizer176->Add( 5, 2, 0, 0, 5 ); - bSizer176->Add( 0, 0, 1, wxEXPAND, 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") ); + 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 ); + bSizer176->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStatistics->Add( bSizer176, 0, wxEXPAND, 5 ); + bSizerStatistics->Add( bSizer176, 0, wxEXPAND, 5 ); - bSizer1801->Add( bSizerStatistics, 0, wxALL, 4 ); + bSizer1801->Add( bSizerStatistics, 0, 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_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, 0, 5 ); + m_panelViewFilter->SetSizer( bSizerViewFilter ); + m_panelViewFilter->Layout(); + bSizerViewFilter->Fit( m_panelViewFilter ); + bSizerPanelHolder->Add( m_panelViewFilter, 0, 0, 5 ); - this->SetSizer( bSizerPanelHolder ); - this->Layout(); - bSizerPanelHolder->Fit( this ); + this->SetSizer( bSizerPanelHolder ); + this->Layout(); + bSizerPanelHolder->Fit( this ); - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::onClose ) ); - m_menuFile->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onConfigNew ), this, m_menuItemNew->GetId()); - m_menuFile->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onConfigLoad ), this, m_menuItemLoad->GetId()); - m_menuFile->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onConfigSave ), this, m_menuItemSave->GetId()); - m_menuFile->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onConfigSaveAs ), this, m_menuItemSaveAs->GetId()); - m_menuFile->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onSaveAsBatchJob ), this, m_menuItemSaveAsBatch->GetId()); - m_menuFile->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuQuit ), this, m_menuItemQuit->GetId()); - m_menuActions->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onToggleLog ), this, m_menuItemShowLog->GetId()); - m_menuActions->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onCompare ), this, m_menuItemCompare->GetId()); - m_menuActions->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onCmpSettings ), this, m_menuItemCompSettings->GetId()); - m_menuActions->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onConfigureFilter ), this, m_menuItemFilter->GetId()); - m_menuActions->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onSyncSettings ), this, m_menuItemSyncSettings->GetId()); - m_menuActions->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onStartSync ), this, m_menuItemSynchronize->GetId()); - m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuOptions ), this, m_menuItemOptions->GetId()); - m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuFindItem ), this, m_menuItemFind->GetId()); - m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuExportFileList ), this, m_menuItemExportList->GetId()); - m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuResetLayout ), this, m_menuItemResetLayout->GetId()); - m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onShowHelp ), this, m_menuItemHelp->GetId()); - m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuCheckVersion ), this, m_menuItemCheckVersionNow->GetId()); - m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuCheckVersionAutomatically ), this, m_menuItemCheckVersionAuto->GetId()); - m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuAbout ), this, m_menuItemAbout->GetId()); - m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onCmpSettings ), NULL, this ); - m_bpButtonCmpConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onCompSettingsContextMouse ), NULL, this ); - m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onCompare ), NULL, this ); - m_buttonCompare->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onCompSettingsContextMouse ), NULL, this ); - m_bpButtonCmpContext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onCompSettingsContext ), NULL, this ); - m_bpButtonCmpContext->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onCompSettingsContextMouse ), NULL, this ); - m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onConfigureFilter ), NULL, this ); - m_bpButtonFilter->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onGlobalFilterContextMouse ), NULL, this ); - m_bpButtonFilterContext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onGlobalFilterContext ), NULL, this ); - m_bpButtonFilterContext->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onGlobalFilterContextMouse ), NULL, this ); - m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onSyncSettings ), NULL, this ); - m_bpButtonSyncConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onSyncSettingsContextMouse ), NULL, this ); - m_buttonSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onStartSync ), NULL, this ); - m_buttonSync->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onSyncSettingsContextMouse ), NULL, this ); - m_bpButtonSyncContext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onSyncSettingsContext ), NULL, this ); - m_bpButtonSyncContext->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onSyncSettingsContextMouse ), NULL, this ); - m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onTopFolderPairAdd ), NULL, this ); - m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onTopFolderPairRemove ), NULL, this ); - m_bpButtonSwapSides->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onSwapSides ), NULL, this ); - m_bpButtonSwapSides->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onSwapSidesMouse ), NULL, this ); - m_bpButtonLocalCompCfg->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onTopLocalCompCfg ), NULL, this ); - m_bpButtonLocalFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onTopLocalFilterCfg ), NULL, this ); - m_bpButtonLocalSyncCfg->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onTopLocalSyncCfg ), 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_bpButtonNew->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onConfigNew ), 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_bpButtonSaveAs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onConfigSaveAs ), NULL, this ); - m_bpButtonSaveAsBatch->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onSaveAsBatchJob ), NULL, this ); - m_bpButtonToggleLog->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleLog ), NULL, this ); - m_bpButtonViewType->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewType ), NULL, this ); - m_bpButtonViewType->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewTypeContextMouse ), NULL, this ); - m_bpButtonShowExcluded->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowExcluded->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowDeleteLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowDeleteLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowUpdateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowUpdateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowCreateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowCreateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowLeftOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowLeftNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowEqual->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowEqual->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowDoNothing->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowDoNothing->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowDifferent->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowRightNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowRightOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowCreateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowCreateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowUpdateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowUpdateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowDeleteRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowDeleteRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonShowConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); - m_bpButtonShowConflict->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); - m_bpButtonViewFilterContext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onViewFilterContext ), NULL, this ); - m_bpButtonViewFilterContext->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::onClose ) ); + m_menuFile->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onConfigNew ), this, m_menuItemNew->GetId()); + m_menuFile->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onConfigLoad ), this, m_menuItemLoad->GetId()); + m_menuFile->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onConfigSave ), this, m_menuItemSave->GetId()); + m_menuFile->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onConfigSaveAs ), this, m_menuItemSaveAs->GetId()); + m_menuFile->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onSaveAsBatchJob ), this, m_menuItemSaveAsBatch->GetId()); + m_menuFile->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuQuit ), this, m_menuItemQuit->GetId()); + m_menuActions->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onToggleLog ), this, m_menuItemShowLog->GetId()); + m_menuActions->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onCompare ), this, m_menuItemCompare->GetId()); + m_menuActions->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onCmpSettings ), this, m_menuItemCompSettings->GetId()); + m_menuActions->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onConfigureFilter ), this, m_menuItemFilter->GetId()); + m_menuActions->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onSyncSettings ), this, m_menuItemSyncSettings->GetId()); + m_menuActions->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onStartSync ), this, m_menuItemSynchronize->GetId()); + m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuOptions ), this, m_menuItemOptions->GetId()); + m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuFindItem ), this, m_menuItemFind->GetId()); + m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuExportFileList ), this, m_menuItemExportList->GetId()); + m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuResetLayout ), this, m_menuItemResetLayout->GetId()); + m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onShowHelp ), this, m_menuItemHelp->GetId()); + m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuCheckVersion ), this, m_menuItemCheckVersionNow->GetId()); + m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuCheckVersionAutomatically ), this, m_menuItemCheckVersionAuto->GetId()); + m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuAbout ), this, m_menuItemAbout->GetId()); + m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onCmpSettings ), NULL, this ); + m_bpButtonCmpConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onCompSettingsContextMouse ), NULL, this ); + m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onCompare ), NULL, this ); + m_buttonCompare->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onCompSettingsContextMouse ), NULL, this ); + m_bpButtonCmpContext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onCompSettingsContext ), NULL, this ); + m_bpButtonCmpContext->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onCompSettingsContextMouse ), NULL, this ); + m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onConfigureFilter ), NULL, this ); + m_bpButtonFilter->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onGlobalFilterContextMouse ), NULL, this ); + m_bpButtonFilterContext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onGlobalFilterContext ), NULL, this ); + m_bpButtonFilterContext->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onGlobalFilterContextMouse ), NULL, this ); + m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onSyncSettings ), NULL, this ); + m_bpButtonSyncConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onSyncSettingsContextMouse ), NULL, this ); + m_buttonSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onStartSync ), NULL, this ); + m_buttonSync->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onSyncSettingsContextMouse ), NULL, this ); + m_bpButtonSyncContext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onSyncSettingsContext ), NULL, this ); + m_bpButtonSyncContext->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onSyncSettingsContextMouse ), NULL, this ); + m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onTopFolderPairAdd ), NULL, this ); + m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onTopFolderPairRemove ), NULL, this ); + m_bpButtonSwapSides->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onSwapSides ), NULL, this ); + m_bpButtonLocalCompCfg->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onTopLocalCompCfg ), NULL, this ); + m_bpButtonLocalFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onTopLocalFilterCfg ), NULL, this ); + m_bpButtonLocalSyncCfg->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onTopLocalSyncCfg ), 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_bpButtonNew->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onConfigNew ), 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_bpButtonSaveAs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onConfigSaveAs ), NULL, this ); + m_bpButtonSaveAsBatch->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onSaveAsBatchJob ), NULL, this ); + m_bpButtonToggleLog->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleLog ), NULL, this ); + m_bpButtonViewType->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewType ), NULL, this ); + m_bpButtonViewType->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewTypeContextMouse ), NULL, this ); + m_bpButtonShowExcluded->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowExcluded->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowDeleteLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowDeleteLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowUpdateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowUpdateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowCreateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowCreateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowLeftOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowLeftNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowEqual->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowEqual->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowDoNothing->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowDoNothing->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowDifferent->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowRightNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowRightOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowCreateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowCreateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowUpdateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowUpdateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowDeleteRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowDeleteRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonShowConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onToggleViewButton ), NULL, this ); + m_bpButtonShowConflict->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); + m_bpButtonViewFilterContext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onViewFilterContext ), NULL, this ); + m_bpButtonViewFilterContext->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onViewFilterContextMouse ), NULL, this ); } MainDialogGenerated::~MainDialogGenerated() @@ -1207,97 +1206,97 @@ MainDialogGenerated::~MainDialogGenerated() FolderPairPanelGenerated::FolderPairPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name ) { - wxBoxSizer* bSizer74; - bSizer74 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer74; + bSizer74 = new wxBoxSizer( wxHORIZONTAL ); - m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelLeft->SetMinSize( wxSize( 1,-1 ) ); + m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelLeft->SetMinSize( wxSize( 1, -1 ) ); - wxBoxSizer* bSizer134; - bSizer134 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer134; + bSizer134 = new wxBoxSizer( wxHORIZONTAL ); - m_bpButtonFolderPairOptions = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonFolderPairOptions->SetToolTip( _("Arrange folder pair") ); + m_bpButtonFolderPairOptions = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonFolderPairOptions->SetToolTip( _("Arrange folder pair") ); - bSizer134->Add( m_bpButtonFolderPairOptions, 0, wxEXPAND, 5 ); + bSizer134->Add( m_bpButtonFolderPairOptions, 0, wxEXPAND, 5 ); - m_bpButtonRemovePair = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); + m_bpButtonRemovePair = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); - bSizer134->Add( m_bpButtonRemovePair, 0, wxEXPAND, 5 ); + bSizer134->Add( m_bpButtonRemovePair, 0, wxEXPAND, 5 ); - m_folderPathLeft = new fff::FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer134->Add( m_folderPathLeft, 1, wxALIGN_CENTER_VERTICAL, 5 ); + m_folderPathLeft = new fff::FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer134->Add( m_folderPathLeft, 1, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonSelectFolderLeft = new wxButton( m_panelLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_buttonSelectFolderLeft->SetToolTip( _("Select a folder") ); + m_buttonSelectFolderLeft = new wxButton( m_panelLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_buttonSelectFolderLeft->SetToolTip( _("Select a folder") ); - bSizer134->Add( m_buttonSelectFolderLeft, 0, wxEXPAND, 5 ); + bSizer134->Add( m_buttonSelectFolderLeft, 0, wxEXPAND, 5 ); - m_bpButtonSelectAltFolderLeft = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonSelectAltFolderLeft->SetToolTip( _("Access online storage") ); + m_bpButtonSelectAltFolderLeft = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonSelectAltFolderLeft->SetToolTip( _("Access online storage") ); - bSizer134->Add( m_bpButtonSelectAltFolderLeft, 0, wxEXPAND, 5 ); + bSizer134->Add( m_bpButtonSelectAltFolderLeft, 0, wxEXPAND, 5 ); - m_panelLeft->SetSizer( bSizer134 ); - m_panelLeft->Layout(); - bSizer134->Fit( m_panelLeft ); - bSizer74->Add( m_panelLeft, 0, wxLEFT|wxEXPAND, 5 ); + m_panelLeft->SetSizer( bSizer134 ); + m_panelLeft->Layout(); + bSizer134->Fit( m_panelLeft ); + bSizer74->Add( m_panelLeft, 0, wxLEFT|wxEXPAND, 5 ); - m_panel20 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer95; - bSizer95 = new wxBoxSizer( wxHORIZONTAL ); + m_panel20 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer95; + bSizer95 = new wxBoxSizer( wxHORIZONTAL ); - m_bpButtonLocalCompCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonLocalCompCfg->SetToolTip( _("dummy") ); + m_bpButtonLocalCompCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonLocalCompCfg->SetToolTip( _("dummy") ); - bSizer95->Add( m_bpButtonLocalCompCfg, 0, wxEXPAND, 5 ); + bSizer95->Add( m_bpButtonLocalCompCfg, 0, wxEXPAND, 5 ); - m_bpButtonLocalFilter = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonLocalFilter->SetToolTip( _("dummy") ); + m_bpButtonLocalFilter = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonLocalFilter->SetToolTip( _("dummy") ); - bSizer95->Add( m_bpButtonLocalFilter, 0, wxEXPAND, 5 ); + bSizer95->Add( m_bpButtonLocalFilter, 0, wxEXPAND, 5 ); - m_bpButtonLocalSyncCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonLocalSyncCfg->SetToolTip( _("dummy") ); + m_bpButtonLocalSyncCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonLocalSyncCfg->SetToolTip( _("dummy") ); - bSizer95->Add( m_bpButtonLocalSyncCfg, 0, wxEXPAND, 5 ); + bSizer95->Add( m_bpButtonLocalSyncCfg, 0, wxEXPAND, 5 ); - m_panel20->SetSizer( bSizer95 ); - m_panel20->Layout(); - bSizer95->Fit( m_panel20 ); - bSizer74->Add( m_panel20, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + m_panel20->SetSizer( bSizer95 ); + m_panel20->Layout(); + bSizer95->Fit( m_panel20 ); + bSizer74->Add( m_panel20, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelRight->SetMinSize( wxSize( 1,-1 ) ); + m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelRight->SetMinSize( wxSize( 1, -1 ) ); - wxBoxSizer* bSizer135; - bSizer135 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer135; + bSizer135 = new wxBoxSizer( wxHORIZONTAL ); - m_folderPathRight = new fff::FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer135->Add( m_folderPathRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); + m_folderPathRight = new fff::FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer135->Add( m_folderPathRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonSelectFolderRight = new wxButton( m_panelRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectFolderRight->SetToolTip( _("Select a folder") ); + m_buttonSelectFolderRight = new wxButton( m_panelRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectFolderRight->SetToolTip( _("Select a folder") ); - bSizer135->Add( m_buttonSelectFolderRight, 0, wxEXPAND, 5 ); + bSizer135->Add( m_buttonSelectFolderRight, 0, wxEXPAND, 5 ); - m_bpButtonSelectAltFolderRight = new wxBitmapButton( m_panelRight, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonSelectAltFolderRight->SetToolTip( _("Access online storage") ); + m_bpButtonSelectAltFolderRight = new wxBitmapButton( m_panelRight, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonSelectAltFolderRight->SetToolTip( _("Access online storage") ); - bSizer135->Add( m_bpButtonSelectAltFolderRight, 0, wxEXPAND, 5 ); + bSizer135->Add( m_bpButtonSelectAltFolderRight, 0, wxEXPAND, 5 ); - m_panelRight->SetSizer( bSizer135 ); - m_panelRight->Layout(); - bSizer135->Fit( m_panelRight ); - bSizer74->Add( m_panelRight, 1, wxRIGHT|wxEXPAND, 5 ); + m_panelRight->SetSizer( bSizer135 ); + m_panelRight->Layout(); + bSizer135->Fit( m_panelRight ); + bSizer74->Add( m_panelRight, 1, wxRIGHT|wxEXPAND, 5 ); - this->SetSizer( bSizer74 ); - this->Layout(); + this->SetSizer( bSizer74 ); + this->Layout(); } FolderPairPanelGenerated::~FolderPairPanelGenerated() @@ -1306,1259 +1305,1259 @@ FolderPairPanelGenerated::~FolderPairPanelGenerated() ConfigDlgGenerated::ConfigDlgGenerated( 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 ) ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer7; - bSizer7 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer7; + bSizer7 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer190; - bSizer190 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer190; + bSizer190 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer1911; - bSizer1911 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer1911; + bSizer1911 = new wxBoxSizer( wxVERTICAL ); - m_staticTextFolderPairLabel = new wxStaticText( this, wxID_ANY, _("Folder pair:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextFolderPairLabel->Wrap( -1 ); - bSizer1911->Add( m_staticTextFolderPairLabel, 0, wxALL, 5 ); + m_staticTextFolderPairLabel = new wxStaticText( this, wxID_ANY, _("Folder pair:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextFolderPairLabel->Wrap( -1 ); + bSizer1911->Add( m_staticTextFolderPairLabel, 0, wxALL, 5 ); - m_listBoxFolderPair = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_NEEDED_SB ); - bSizer1911->Add( m_listBoxFolderPair, 1, 0, 5 ); + m_listBoxFolderPair = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_NEEDED_SB ); + bSizer1911->Add( m_listBoxFolderPair, 1, 0, 5 ); - bSizer190->Add( bSizer1911, 0, wxEXPAND|wxLEFT, 5 ); + bSizer190->Add( bSizer1911, 0, wxEXPAND|wxLEFT, 5 ); - m_notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelCompSettingsTab = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelCompSettingsTab->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelCompSettingsTab = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelCompSettingsTab->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer275; - bSizer275 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer275; + bSizer275 = new wxBoxSizer( wxVERTICAL ); - bSizerHeaderCompSettings = new wxBoxSizer( wxVERTICAL ); + bSizerHeaderCompSettings = new wxBoxSizer( wxVERTICAL ); - m_staticTextMainCompSettings = new wxStaticText( m_panelCompSettingsTab, wxID_ANY, _("Main settings:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextMainCompSettings->Wrap( -1 ); - bSizerHeaderCompSettings->Add( m_staticTextMainCompSettings, 0, wxALL, 10 ); + m_staticTextMainCompSettings = new wxStaticText( m_panelCompSettingsTab, wxID_ANY, _("Main settings:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextMainCompSettings->Wrap( -1 ); + bSizerHeaderCompSettings->Add( m_staticTextMainCompSettings, 0, wxALL, 10 ); - m_checkBoxUseLocalCmpOptions = new wxCheckBox( m_panelCompSettingsTab, wxID_ANY, _("Use local settings:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxUseLocalCmpOptions->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_checkBoxUseLocalCmpOptions = new wxCheckBox( m_panelCompSettingsTab, wxID_ANY, _("Use local settings:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxUseLocalCmpOptions->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - bSizerHeaderCompSettings->Add( m_checkBoxUseLocalCmpOptions, 0, wxALL|wxEXPAND, 10 ); + bSizerHeaderCompSettings->Add( m_checkBoxUseLocalCmpOptions, 0, wxALL|wxEXPAND, 10 ); - m_staticlineCompHeader = new wxStaticLine( m_panelCompSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerHeaderCompSettings->Add( m_staticlineCompHeader, 0, wxEXPAND, 5 ); + m_staticlineCompHeader = new wxStaticLine( m_panelCompSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerHeaderCompSettings->Add( m_staticlineCompHeader, 0, wxEXPAND, 5 ); - bSizer275->Add( bSizerHeaderCompSettings, 0, wxEXPAND, 5 ); + bSizer275->Add( bSizerHeaderCompSettings, 0, wxEXPAND, 5 ); - m_panelComparisonSettings = new wxPanel( m_panelCompSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelComparisonSettings->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelComparisonSettings = new wxPanel( m_panelCompSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelComparisonSettings->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer2561; - bSizer2561 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer2561; + bSizer2561 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer159; - bSizer159 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer159; + bSizer159 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer178; - bSizer178 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer178; + bSizer178 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer182; - bSizer182 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer182; + bSizer182 = new wxBoxSizer( wxVERTICAL ); - m_staticText91 = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("Select a variant:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText91->Wrap( -1 ); - bSizer182->Add( m_staticText91, 0, wxALL, 5 ); + m_staticText91 = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("Select a variant:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText91->Wrap( -1 ); + bSizer182->Add( m_staticText91, 0, wxALL, 5 ); - wxGridSizer* gSizer2; - gSizer2 = new wxGridSizer( 0, 1, 0, 0 ); + wxGridSizer* gSizer2; + gSizer2 = new wxGridSizer( 0, 1, 0, 0 ); - m_buttonByTimeSize = new zen::ToggleButton( m_panelComparisonSettings, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonByTimeSize = new zen::ToggleButton( m_panelComparisonSettings, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonByTimeSize->SetDefault(); - m_buttonByTimeSize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - m_buttonByTimeSize->SetToolTip( _("dummy") ); + m_buttonByTimeSize->SetDefault(); + m_buttonByTimeSize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonByTimeSize->SetToolTip( _("dummy") ); - gSizer2->Add( m_buttonByTimeSize, 0, wxEXPAND, 5 ); + gSizer2->Add( m_buttonByTimeSize, 0, wxEXPAND, 5 ); - m_buttonByContent = new zen::ToggleButton( m_panelComparisonSettings, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonByContent = new zen::ToggleButton( m_panelComparisonSettings, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonByContent->SetDefault(); - m_buttonByContent->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - m_buttonByContent->SetToolTip( _("dummy") ); + m_buttonByContent->SetDefault(); + m_buttonByContent->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonByContent->SetToolTip( _("dummy") ); - gSizer2->Add( m_buttonByContent, 0, wxEXPAND, 5 ); + gSizer2->Add( m_buttonByContent, 0, wxEXPAND, 5 ); - m_buttonBySize = new zen::ToggleButton( m_panelComparisonSettings, wxID_ANY, _("File size"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonBySize = new zen::ToggleButton( m_panelComparisonSettings, wxID_ANY, _("File size"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonBySize->SetDefault(); - m_buttonBySize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - m_buttonBySize->SetToolTip( _("dummy") ); + m_buttonBySize->SetDefault(); + m_buttonBySize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonBySize->SetToolTip( _("dummy") ); - gSizer2->Add( m_buttonBySize, 0, wxEXPAND, 5 ); + gSizer2->Add( m_buttonBySize, 0, wxEXPAND, 5 ); - bSizer182->Add( gSizer2, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer182->Add( gSizer2, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - bSizer178->Add( bSizer182, 0, wxALL, 5 ); + bSizer178->Add( bSizer182, 0, wxALL, 5 ); - wxBoxSizer* bSizer2371; - bSizer2371 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer2371; + bSizer2371 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapCompVariant = new wxStaticBitmap( m_panelComparisonSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer2371->Add( m_bitmapCompVariant, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapCompVariant = new wxStaticBitmap( m_panelComparisonSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer2371->Add( m_bitmapCompVariant, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticTextCompVarDescription = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCompVarDescription->Wrap( -1 ); - m_staticTextCompVarDescription->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticTextCompVarDescription = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCompVarDescription->Wrap( -1 ); + m_staticTextCompVarDescription->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer2371->Add( m_staticTextCompVarDescription, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer2371->Add( m_staticTextCompVarDescription, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer178->Add( bSizer2371, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + bSizer178->Add( bSizer2371, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - bSizer159->Add( bSizer178, 0, wxEXPAND, 5 ); + bSizer159->Add( bSizer178, 0, wxEXPAND, 5 ); - m_staticline33 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer159->Add( m_staticline33, 0, wxEXPAND, 5 ); + m_staticline33 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer159->Add( m_staticline33, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer1734; - bSizer1734 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer1734; + bSizer1734 = new wxBoxSizer( wxHORIZONTAL ); - bSizer1734->Add( 0, 0, 1, 0, 5 ); + bSizer1734->Add( 0, 0, 1, 0, 5 ); - wxBoxSizer* bSizer1721; - bSizer1721 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer1721; + bSizer1721 = new wxBoxSizer( wxVERTICAL ); - m_checkBoxSymlinksInclude = new wxCheckBox( m_panelComparisonSettings, wxID_ANY, _("Include &symbolic links:"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer1721->Add( m_checkBoxSymlinksInclude, 0, wxALL, 5 ); + m_checkBoxSymlinksInclude = new wxCheckBox( m_panelComparisonSettings, wxID_ANY, _("Include &symbolic links:"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer1721->Add( m_checkBoxSymlinksInclude, 0, wxALL, 5 ); - wxBoxSizer* bSizer176; - bSizer176 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer176; + bSizer176 = new wxBoxSizer( wxVERTICAL ); - m_radioBtnSymlinksFollow = new wxRadioButton( m_panelComparisonSettings, wxID_ANY, _("&Follow"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); - m_radioBtnSymlinksFollow->SetValue( true ); - bSizer176->Add( m_radioBtnSymlinksFollow, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + m_radioBtnSymlinksFollow = new wxRadioButton( m_panelComparisonSettings, wxID_ANY, _("&Follow"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); + m_radioBtnSymlinksFollow->SetValue( true ); + bSizer176->Add( m_radioBtnSymlinksFollow, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - m_radioBtnSymlinksDirect = new wxRadioButton( m_panelComparisonSettings, wxID_ANY, _("&Direct"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer176->Add( m_radioBtnSymlinksDirect, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + m_radioBtnSymlinksDirect = new wxRadioButton( m_panelComparisonSettings, wxID_ANY, _("&Direct"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer176->Add( m_radioBtnSymlinksDirect, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - bSizer1721->Add( bSizer176, 0, wxLEFT|wxEXPAND, 15 ); + bSizer1721->Add( bSizer176, 0, wxLEFT|wxEXPAND, 15 ); - bSizer1721->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizer1721->Add( 0, 0, 1, wxEXPAND, 5 ); - m_hyperlink24 = new wxHyperlinkCtrl( m_panelComparisonSettings, wxID_ANY, _("More information"), wxT("https://freefilesync.org/manual.php?topic=comparison-settings"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink24->SetToolTip( _("https://freefilesync.org/manual.php?topic=comparison-settings") ); + m_hyperlink24 = new wxHyperlinkCtrl( m_panelComparisonSettings, wxID_ANY, _("More information"), wxT("https://freefilesync.org/manual.php?topic=comparison-settings"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink24->SetToolTip( _("https://freefilesync.org/manual.php?topic=comparison-settings") ); - bSizer1721->Add( m_hyperlink24, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer1721->Add( m_hyperlink24, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - bSizer1734->Add( bSizer1721, 0, wxALL|wxEXPAND, 5 ); + bSizer1734->Add( bSizer1721, 0, wxALL|wxEXPAND, 5 ); - bSizer1734->Add( 0, 0, 1, 0, 5 ); + bSizer1734->Add( 0, 0, 1, 0, 5 ); - m_staticline44 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer1734->Add( m_staticline44, 0, wxEXPAND, 5 ); + m_staticline44 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer1734->Add( m_staticline44, 0, wxEXPAND, 5 ); - bSizer1734->Add( 0, 0, 1, 0, 5 ); + bSizer1734->Add( 0, 0, 1, 0, 5 ); - wxBoxSizer* bSizer1733; - bSizer1733 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer1733; + bSizer1733 = new wxBoxSizer( wxVERTICAL ); - m_staticText112 = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("&Ignore time shift [hh:mm]"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText112->Wrap( -1 ); - bSizer1733->Add( m_staticText112, 0, wxALL, 5 ); + m_staticText112 = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("&Ignore time shift [hh:mm]"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText112->Wrap( -1 ); + bSizer1733->Add( m_staticText112, 0, wxALL, 5 ); - m_textCtrlTimeShift = new wxTextCtrl( m_panelComparisonSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_textCtrlTimeShift->SetToolTip( _("List of file time offsets to ignore") ); + m_textCtrlTimeShift = new wxTextCtrl( m_panelComparisonSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_textCtrlTimeShift->SetToolTip( _("List of file time offsets to ignore") ); - bSizer1733->Add( m_textCtrlTimeShift, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + bSizer1733->Add( m_textCtrlTimeShift, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - wxBoxSizer* bSizer197; - bSizer197 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer197; + bSizer197 = new wxBoxSizer( wxHORIZONTAL ); - m_staticText1381 = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("Example:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText1381->Wrap( -1 ); - m_staticText1381->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticText1381 = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("Example:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText1381->Wrap( -1 ); + m_staticText1381->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer197->Add( m_staticText1381, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer197->Add( m_staticText1381, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - m_staticText13811 = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("1, 2, 4:30"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText13811->Wrap( -1 ); - m_staticText13811->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticText13811 = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("1, 2, 4:30"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText13811->Wrap( -1 ); + m_staticText13811->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer197->Add( m_staticText13811, 0, wxBOTTOM|wxRIGHT, 5 ); + bSizer197->Add( m_staticText13811, 0, wxBOTTOM|wxRIGHT, 5 ); - bSizer1733->Add( bSizer197, 0, 0, 5 ); + bSizer1733->Add( bSizer197, 0, 0, 5 ); - bSizer1733->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizer1733->Add( 0, 0, 1, wxEXPAND, 5 ); - m_hyperlink241 = new wxHyperlinkCtrl( m_panelComparisonSettings, wxID_ANY, _("Handle daylight saving time"), wxT("https://freefilesync.org/manual.php?topic=daylight-saving-time"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink241->SetToolTip( _("https://freefilesync.org/manual.php?topic=daylight-saving-time") ); + m_hyperlink241 = new wxHyperlinkCtrl( m_panelComparisonSettings, wxID_ANY, _("Handle daylight saving time"), wxT("https://freefilesync.org/manual.php?topic=daylight-saving-time"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink241->SetToolTip( _("https://freefilesync.org/manual.php?topic=daylight-saving-time") ); - bSizer1733->Add( m_hyperlink241, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer1733->Add( m_hyperlink241, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - bSizer1734->Add( bSizer1733, 0, wxALL|wxEXPAND, 5 ); + bSizer1734->Add( bSizer1733, 0, wxALL|wxEXPAND, 5 ); - bSizer1734->Add( 0, 0, 1, 0, 5 ); + bSizer1734->Add( 0, 0, 1, 0, 5 ); - bSizer159->Add( bSizer1734, 0, wxEXPAND, 5 ); + bSizer159->Add( bSizer1734, 0, wxEXPAND, 5 ); - m_staticline331 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer159->Add( m_staticline331, 0, wxEXPAND, 5 ); + m_staticline331 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer159->Add( m_staticline331, 0, wxEXPAND, 5 ); - bSizerCompMisc = new wxBoxSizer( wxVERTICAL ); + bSizerCompMisc = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer2781; - bSizer2781 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer2781; + bSizer2781 = new wxBoxSizer( wxHORIZONTAL ); - wxFlexGridSizer* fgSizer61; - fgSizer61 = new wxFlexGridSizer( 0, 2, 5, 5 ); - fgSizer61->SetFlexibleDirection( wxBOTH ); - fgSizer61->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + wxFlexGridSizer* fgSizer61; + fgSizer61 = new wxFlexGridSizer( 0, 2, 5, 5 ); + fgSizer61->SetFlexibleDirection( wxBOTH ); + fgSizer61->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_bitmapIgnoreErrors = new wxStaticBitmap( m_panelComparisonSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer61->Add( m_bitmapIgnoreErrors, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapIgnoreErrors = new wxStaticBitmap( m_panelComparisonSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer61->Add( m_bitmapIgnoreErrors, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_checkBoxIgnoreErrors = new wxCheckBox( m_panelComparisonSettings, wxID_ANY, _("Ignore errors"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - fgSizer61->Add( m_checkBoxIgnoreErrors, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + m_checkBoxIgnoreErrors = new wxCheckBox( m_panelComparisonSettings, wxID_ANY, _("Ignore errors"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + fgSizer61->Add( m_checkBoxIgnoreErrors, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - m_bitmapRetryErrors = new wxStaticBitmap( m_panelComparisonSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer61->Add( m_bitmapRetryErrors, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bitmapRetryErrors = new wxStaticBitmap( m_panelComparisonSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer61->Add( m_bitmapRetryErrors, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_checkBoxAutoRetry = new wxCheckBox( m_panelComparisonSettings, wxID_ANY, _("Automatic retry"), wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer61->Add( m_checkBoxAutoRetry, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + m_checkBoxAutoRetry = new wxCheckBox( m_panelComparisonSettings, wxID_ANY, _("Automatic retry"), wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer61->Add( m_checkBoxAutoRetry, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - bSizer2781->Add( fgSizer61, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + bSizer2781->Add( fgSizer61, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - fgSizerAutoRetry = new wxFlexGridSizer( 0, 2, 5, 10 ); - fgSizerAutoRetry->SetFlexibleDirection( wxBOTH ); - fgSizerAutoRetry->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + fgSizerAutoRetry = new wxFlexGridSizer( 0, 2, 5, 10 ); + fgSizerAutoRetry->SetFlexibleDirection( wxBOTH ); + fgSizerAutoRetry->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_staticText96 = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("Retry count:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText96->Wrap( -1 ); - fgSizerAutoRetry->Add( m_staticText96, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticText96 = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("Retry count:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText96->Wrap( -1 ); + fgSizerAutoRetry->Add( m_staticText96, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticTextAutoRetryDelay = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("Delay (in seconds):"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextAutoRetryDelay->Wrap( -1 ); - fgSizerAutoRetry->Add( m_staticTextAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticTextAutoRetryDelay = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("Delay (in seconds):"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextAutoRetryDelay->Wrap( -1 ); + fgSizerAutoRetry->Add( m_staticTextAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_spinCtrlAutoRetryCount = new wxSpinCtrl( m_panelComparisonSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); - fgSizerAutoRetry->Add( m_spinCtrlAutoRetryCount, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_spinCtrlAutoRetryCount = new wxSpinCtrl( m_panelComparisonSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); + fgSizerAutoRetry->Add( m_spinCtrlAutoRetryCount, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_spinCtrlAutoRetryDelay = new wxSpinCtrl( m_panelComparisonSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - fgSizerAutoRetry->Add( m_spinCtrlAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_spinCtrlAutoRetryDelay = new wxSpinCtrl( m_panelComparisonSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + fgSizerAutoRetry->Add( m_spinCtrlAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer2781->Add( fgSizerAutoRetry, 0, wxTOP|wxBOTTOM|wxRIGHT|wxALIGN_CENTER_VERTICAL, 10 ); + bSizer2781->Add( fgSizerAutoRetry, 0, wxTOP|wxBOTTOM|wxRIGHT|wxALIGN_CENTER_VERTICAL, 10 ); - bSizerCompMisc->Add( bSizer2781, 0, wxEXPAND, 5 ); + bSizerCompMisc->Add( bSizer2781, 0, wxEXPAND, 5 ); - m_staticline3311 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerCompMisc->Add( m_staticline3311, 0, wxEXPAND, 5 ); + m_staticline3311 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerCompMisc->Add( m_staticline3311, 0, wxEXPAND, 5 ); - bSizer159->Add( bSizerCompMisc, 0, wxEXPAND, 5 ); + bSizer159->Add( bSizerCompMisc, 0, wxEXPAND, 5 ); - bSizer2561->Add( bSizer159, 0, wxEXPAND, 5 ); + bSizer2561->Add( bSizer159, 0, wxEXPAND, 5 ); - m_staticline751 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer2561->Add( m_staticline751, 0, wxEXPAND, 5 ); + m_staticline751 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer2561->Add( m_staticline751, 0, wxEXPAND, 5 ); - bSizerPerformance = new wxBoxSizer( wxVERTICAL ); + bSizerPerformance = new wxBoxSizer( wxVERTICAL ); - m_panel57 = new wxPanel( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel57->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + m_panel57 = new wxPanel( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel57->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer2191; - bSizer2191 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer2191; + bSizer2191 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapPerf = new wxStaticBitmap( m_panel57, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer2191->Add( m_bitmapPerf, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_bitmapPerf = new wxStaticBitmap( m_panel57, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer2191->Add( m_bitmapPerf, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_staticText13611 = new wxStaticText( m_panel57, wxID_ANY, _("Performance improvements:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText13611->Wrap( -1 ); - bSizer2191->Add( m_staticText13611, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); + m_staticText13611 = new wxStaticText( m_panel57, wxID_ANY, _("Performance improvements:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText13611->Wrap( -1 ); + bSizer2191->Add( m_staticText13611, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); - m_panel57->SetSizer( bSizer2191 ); - m_panel57->Layout(); - bSizer2191->Fit( m_panel57 ); - bSizerPerformance->Add( m_panel57, 0, wxEXPAND, 5 ); + m_panel57->SetSizer( bSizer2191 ); + m_panel57->Layout(); + bSizer2191->Fit( m_panel57 ); + bSizerPerformance->Add( m_panel57, 0, wxEXPAND, 5 ); - wxStaticLine* m_staticline75; - m_staticline75 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerPerformance->Add( m_staticline75, 0, wxEXPAND, 5 ); + wxStaticLine* m_staticline75; + m_staticline75 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerPerformance->Add( m_staticline75, 0, wxEXPAND, 5 ); - m_hyperlinkPerfDeRequired = new wxHyperlinkCtrl( m_panelComparisonSettings, wxID_ANY, _("Requires FreeFileSync Donation Edition"), wxT("https://freefilesync.org/faq.php#donation-edition"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlinkPerfDeRequired->SetToolTip( _("https://freefilesync.org/faq.php#donation-edition") ); + m_hyperlinkPerfDeRequired = new wxHyperlinkCtrl( m_panelComparisonSettings, wxID_ANY, _("Requires FreeFileSync Donation Edition"), wxT("https://freefilesync.org/faq.php#donation-edition"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlinkPerfDeRequired->SetToolTip( _("https://freefilesync.org/faq.php#donation-edition") ); - bSizerPerformance->Add( m_hyperlinkPerfDeRequired, 0, wxALL, 10 ); + bSizerPerformance->Add( m_hyperlinkPerfDeRequired, 0, wxALL, 10 ); - bSizer260 = new wxBoxSizer( wxVERTICAL ); + bSizer260 = new wxBoxSizer( wxVERTICAL ); - m_staticTextPerfParallelOps = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("Parallel file operations:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextPerfParallelOps->Wrap( -1 ); - bSizer260->Add( m_staticTextPerfParallelOps, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + m_staticTextPerfParallelOps = new wxStaticText( m_panelComparisonSettings, wxID_ANY, _("Parallel file operations:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPerfParallelOps->Wrap( -1 ); + bSizer260->Add( m_staticTextPerfParallelOps, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - m_scrolledWindowPerf = new wxScrolledWindow( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_scrolledWindowPerf->SetScrollRate( 5, 5 ); - m_scrolledWindowPerf->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_scrolledWindowPerf = new wxScrolledWindow( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_scrolledWindowPerf->SetScrollRate( 5, 5 ); + m_scrolledWindowPerf->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - fgSizerPerf = new wxFlexGridSizer( 0, 2, 5, 5 ); - fgSizerPerf->SetFlexibleDirection( wxBOTH ); - fgSizerPerf->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + fgSizerPerf = new wxFlexGridSizer( 0, 2, 5, 5 ); + fgSizerPerf->SetFlexibleDirection( wxBOTH ); + fgSizerPerf->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_scrolledWindowPerf->SetSizer( fgSizerPerf ); - m_scrolledWindowPerf->Layout(); - fgSizerPerf->Fit( m_scrolledWindowPerf ); - bSizer260->Add( m_scrolledWindowPerf, 1, wxALL|wxEXPAND, 5 ); + m_scrolledWindowPerf->SetSizer( fgSizerPerf ); + m_scrolledWindowPerf->Layout(); + fgSizerPerf->Fit( m_scrolledWindowPerf ); + bSizer260->Add( m_scrolledWindowPerf, 1, wxALL|wxEXPAND, 5 ); - bSizerPerformance->Add( bSizer260, 1, wxALL|wxEXPAND, 5 ); + bSizerPerformance->Add( bSizer260, 1, wxALL|wxEXPAND, 5 ); - m_hyperlink1711 = new wxHyperlinkCtrl( m_panelComparisonSettings, wxID_ANY, _("How to get best performance?"), wxT("https://freefilesync.org/manual.php?topic=performance"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink1711->SetToolTip( _("https://freefilesync.org/manual.php?topic=performance") ); + m_hyperlink1711 = new wxHyperlinkCtrl( m_panelComparisonSettings, wxID_ANY, _("How to get best performance?"), wxT("https://freefilesync.org/manual.php?topic=performance"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink1711->SetToolTip( _("https://freefilesync.org/manual.php?topic=performance") ); - bSizerPerformance->Add( m_hyperlink1711, 0, wxBOTTOM|wxRIGHT|wxLEFT, 10 ); + bSizerPerformance->Add( m_hyperlink1711, 0, wxBOTTOM|wxRIGHT|wxLEFT, 10 ); - bSizer2561->Add( bSizerPerformance, 1, wxEXPAND, 5 ); + bSizer2561->Add( bSizerPerformance, 1, wxEXPAND, 5 ); - m_panelComparisonSettings->SetSizer( bSizer2561 ); - m_panelComparisonSettings->Layout(); - bSizer2561->Fit( m_panelComparisonSettings ); - bSizer275->Add( m_panelComparisonSettings, 1, wxEXPAND, 5 ); + m_panelComparisonSettings->SetSizer( bSizer2561 ); + m_panelComparisonSettings->Layout(); + bSizer2561->Fit( m_panelComparisonSettings ); + bSizer275->Add( m_panelComparisonSettings, 1, wxEXPAND, 5 ); - m_panelCompSettingsTab->SetSizer( bSizer275 ); - m_panelCompSettingsTab->Layout(); - bSizer275->Fit( m_panelCompSettingsTab ); - m_notebook->AddPage( m_panelCompSettingsTab, _("dummy"), false ); - m_panelFilterSettingsTab = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelFilterSettingsTab->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelCompSettingsTab->SetSizer( bSizer275 ); + m_panelCompSettingsTab->Layout(); + bSizer275->Fit( m_panelCompSettingsTab ); + m_notebook->AddPage( m_panelCompSettingsTab, _("dummy"), false ); + m_panelFilterSettingsTab = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelFilterSettingsTab->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer278; - bSizer278 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer278; + bSizer278 = new wxBoxSizer( wxVERTICAL ); - bSizerHeaderFilterSettings = new wxBoxSizer( wxVERTICAL ); + bSizerHeaderFilterSettings = new wxBoxSizer( wxVERTICAL ); - m_staticTextMainFilterSettings = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Main settings:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextMainFilterSettings->Wrap( -1 ); - bSizerHeaderFilterSettings->Add( m_staticTextMainFilterSettings, 0, wxALL, 10 ); + m_staticTextMainFilterSettings = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Main settings:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextMainFilterSettings->Wrap( -1 ); + bSizerHeaderFilterSettings->Add( m_staticTextMainFilterSettings, 0, wxALL, 10 ); - m_staticTextLocalFilterSettings = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Local settings:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextLocalFilterSettings->Wrap( -1 ); - bSizerHeaderFilterSettings->Add( m_staticTextLocalFilterSettings, 0, wxALL, 10 ); + m_staticTextLocalFilterSettings = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Local settings:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextLocalFilterSettings->Wrap( -1 ); + bSizerHeaderFilterSettings->Add( m_staticTextLocalFilterSettings, 0, wxALL, 10 ); - m_staticlineFilterHeader = new wxStaticLine( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerHeaderFilterSettings->Add( m_staticlineFilterHeader, 0, wxEXPAND, 5 ); + m_staticlineFilterHeader = new wxStaticLine( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerHeaderFilterSettings->Add( m_staticlineFilterHeader, 0, wxEXPAND, 5 ); - bSizer278->Add( bSizerHeaderFilterSettings, 0, wxEXPAND, 5 ); + bSizer278->Add( bSizerHeaderFilterSettings, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer301; - bSizer301 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer301; + bSizer301 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer166; - bSizer166 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer166; + bSizer166 = new wxBoxSizer( wxVERTICAL ); - bSizer166->Add( 0, 10, 0, 0, 5 ); + bSizer166->Add( 0, 10, 0, 0, 5 ); - wxBoxSizer* bSizer1661; - bSizer1661 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer1661; + bSizer1661 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapInclude = new wxStaticBitmap( m_panelFilterSettingsTab, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer1661->Add( m_bitmapInclude, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + m_bitmapInclude = new wxStaticBitmap( m_panelFilterSettingsTab, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer1661->Add( m_bitmapInclude, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - wxBoxSizer* bSizer1731; - bSizer1731 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer1731; + bSizer1731 = new wxBoxSizer( wxVERTICAL ); - m_staticText78 = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Include:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText78->Wrap( -1 ); - bSizer1731->Add( m_staticText78, 0, 0, 5 ); + m_staticText78 = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Include:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText78->Wrap( -1 ); + bSizer1731->Add( m_staticText78, 0, 0, 5 ); - m_textCtrlInclude = new wxTextCtrl( m_panelFilterSettingsTab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); - bSizer1731->Add( m_textCtrlInclude, 1, wxEXPAND|wxTOP, 5 ); + m_textCtrlInclude = new wxTextCtrl( m_panelFilterSettingsTab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxTE_MULTILINE ); + bSizer1731->Add( m_textCtrlInclude, 1, wxEXPAND|wxTOP, 5 ); - bSizer1661->Add( bSizer1731, 1, wxEXPAND, 5 ); + bSizer1661->Add( bSizer1731, 1, wxEXPAND, 5 ); - bSizer166->Add( bSizer1661, 3, wxEXPAND|wxLEFT, 5 ); + bSizer166->Add( bSizer1661, 3, wxEXPAND|wxLEFT, 5 ); - bSizer166->Add( 0, 10, 0, 0, 5 ); + bSizer166->Add( 0, 10, 0, 0, 5 ); - wxBoxSizer* bSizer1651; - bSizer1651 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer1651; + bSizer1651 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapExclude = new wxStaticBitmap( m_panelFilterSettingsTab, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer1651->Add( m_bitmapExclude, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_bitmapExclude = new wxStaticBitmap( m_panelFilterSettingsTab, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer1651->Add( m_bitmapExclude, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - wxBoxSizer* bSizer1742; - bSizer1742 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer1742; + bSizer1742 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer189; - bSizer189 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer189; + bSizer189 = new wxBoxSizer( wxHORIZONTAL ); - m_staticText77 = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Exclude:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText77->Wrap( -1 ); - bSizer189->Add( m_staticText77, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticText77 = new wxStaticText( m_panelFilterSettingsTab, 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 ); + bSizer189->Add( 0, 0, 1, wxEXPAND, 5 ); - m_hyperlink171 = new wxHyperlinkCtrl( m_panelFilterSettingsTab, wxID_ANY, _("Show examples"), wxT("https://freefilesync.org/manual.php?topic=exclude-files"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink171->SetToolTip( _("https://freefilesync.org/manual.php?topic=exclude-files") ); + m_hyperlink171 = new wxHyperlinkCtrl( m_panelFilterSettingsTab, wxID_ANY, _("Show examples"), wxT("https://freefilesync.org/manual.php?topic=exclude-files"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink171->SetToolTip( _("https://freefilesync.org/manual.php?topic=exclude-files") ); - bSizer189->Add( m_hyperlink171, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + bSizer189->Add( m_hyperlink171, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - bSizer1742->Add( bSizer189, 0, wxEXPAND, 5 ); + bSizer1742->Add( bSizer189, 0, wxEXPAND, 5 ); - m_textCtrlExclude = new wxTextCtrl( m_panelFilterSettingsTab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); - bSizer1742->Add( m_textCtrlExclude, 1, wxEXPAND|wxTOP, 5 ); + m_textCtrlExclude = new wxTextCtrl( m_panelFilterSettingsTab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxTE_MULTILINE ); + bSizer1742->Add( m_textCtrlExclude, 1, wxEXPAND|wxTOP, 5 ); - bSizer1651->Add( bSizer1742, 1, wxEXPAND, 5 ); + bSizer1651->Add( bSizer1742, 1, wxEXPAND, 5 ); - bSizer166->Add( bSizer1651, 5, wxEXPAND|wxLEFT, 5 ); + bSizer166->Add( bSizer1651, 5, wxEXPAND|wxLEFT, 5 ); - bSizer301->Add( bSizer166, 1, wxEXPAND, 5 ); + bSizer301->Add( bSizer166, 1, wxEXPAND, 5 ); - m_staticline24 = new wxStaticLine( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer301->Add( m_staticline24, 0, wxEXPAND, 5 ); + m_staticline24 = new wxStaticLine( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer301->Add( m_staticline24, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer160; + bSizer160 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer168; - bSizer168 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer168; + bSizer168 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapFilterSize = new wxStaticBitmap( m_panelFilterSettingsTab, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer168->Add( m_bitmapFilterSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + m_bitmapFilterSize = new wxStaticBitmap( m_panelFilterSettingsTab, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer168->Add( m_bitmapFilterSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - wxBoxSizer* bSizer158; - bSizer158 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer158; + bSizer158 = new wxBoxSizer( wxVERTICAL ); - m_staticText80 = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("File size:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText80->Wrap( -1 ); - bSizer158->Add( m_staticText80, 0, wxBOTTOM, 5 ); + m_staticText80 = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("File size:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText80->Wrap( -1 ); + bSizer158->Add( m_staticText80, 0, wxBOTTOM, 5 ); - wxBoxSizer* bSizer162; - bSizer162 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer162; + bSizer162 = new wxBoxSizer( wxVERTICAL ); - m_staticText101 = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Minimum:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText101->Wrap( -1 ); - bSizer162->Add( m_staticText101, 0, wxBOTTOM, 2 ); + m_staticText101 = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Minimum:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText101->Wrap( -1 ); + bSizer162->Add( m_staticText101, 0, wxBOTTOM, 2 ); - m_spinCtrlMinSize = new wxSpinCtrl( m_panelFilterSettingsTab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer162->Add( m_spinCtrlMinSize, 0, wxEXPAND, 5 ); + m_spinCtrlMinSize = new wxSpinCtrl( m_panelFilterSettingsTab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + bSizer162->Add( m_spinCtrlMinSize, 0, wxEXPAND, 5 ); - wxArrayString m_choiceUnitMinSizeChoices; - m_choiceUnitMinSize = new wxChoice( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMinSizeChoices, 0 ); - m_choiceUnitMinSize->SetSelection( 0 ); - bSizer162->Add( m_choiceUnitMinSize, 0, wxEXPAND, 5 ); + wxArrayString m_choiceUnitMinSizeChoices; + m_choiceUnitMinSize = new wxChoice( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMinSizeChoices, 0 ); + m_choiceUnitMinSize->SetSelection( 0 ); + bSizer162->Add( m_choiceUnitMinSize, 0, wxEXPAND, 5 ); - bSizer158->Add( bSizer162, 0, wxBOTTOM|wxEXPAND, 5 ); + bSizer158->Add( bSizer162, 0, wxBOTTOM|wxEXPAND, 5 ); - wxBoxSizer* bSizer163; - bSizer163 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer163; + bSizer163 = new wxBoxSizer( wxVERTICAL ); - m_staticText102 = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Maximum:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText102->Wrap( -1 ); - bSizer163->Add( m_staticText102, 0, wxBOTTOM, 2 ); + m_staticText102 = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Maximum:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText102->Wrap( -1 ); + bSizer163->Add( m_staticText102, 0, wxBOTTOM, 2 ); - m_spinCtrlMaxSize = new wxSpinCtrl( m_panelFilterSettingsTab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer163->Add( m_spinCtrlMaxSize, 0, wxEXPAND, 5 ); + m_spinCtrlMaxSize = new wxSpinCtrl( m_panelFilterSettingsTab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + bSizer163->Add( m_spinCtrlMaxSize, 0, wxEXPAND, 5 ); - wxArrayString m_choiceUnitMaxSizeChoices; - m_choiceUnitMaxSize = new wxChoice( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMaxSizeChoices, 0 ); - m_choiceUnitMaxSize->SetSelection( 0 ); - bSizer163->Add( m_choiceUnitMaxSize, 0, wxEXPAND, 5 ); + wxArrayString m_choiceUnitMaxSizeChoices; + m_choiceUnitMaxSize = new wxChoice( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMaxSizeChoices, 0 ); + m_choiceUnitMaxSize->SetSelection( 0 ); + bSizer163->Add( m_choiceUnitMaxSize, 0, wxEXPAND, 5 ); - bSizer158->Add( bSizer163, 0, wxEXPAND, 5 ); + bSizer158->Add( bSizer163, 0, wxEXPAND, 5 ); - bSizer168->Add( bSizer158, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + bSizer168->Add( bSizer158, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer160->Add( bSizer168, 2, wxEXPAND|wxALL, 5 ); + bSizer160->Add( bSizer168, 2, wxEXPAND|wxALL, 5 ); - m_staticline23 = new wxStaticLine( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer160->Add( m_staticline23, 0, wxEXPAND, 5 ); + m_staticline23 = new wxStaticLine( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer160->Add( m_staticline23, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer167; - bSizer167 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer167; + bSizer167 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapFilterDate = new wxStaticBitmap( m_panelFilterSettingsTab, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer167->Add( m_bitmapFilterDate, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_bitmapFilterDate = new wxStaticBitmap( m_panelFilterSettingsTab, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer167->Add( m_bitmapFilterDate, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - wxBoxSizer* bSizer165; - bSizer165 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer165; + bSizer165 = new wxBoxSizer( wxVERTICAL ); - m_staticText79 = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Time span:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText79->Wrap( -1 ); - bSizer165->Add( m_staticText79, 0, wxBOTTOM, 5 ); + m_staticText79 = new wxStaticText( m_panelFilterSettingsTab, wxID_ANY, _("Time span:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText79->Wrap( -1 ); + bSizer165->Add( m_staticText79, 0, wxBOTTOM, 5 ); - wxArrayString m_choiceUnitTimespanChoices; - m_choiceUnitTimespan = new wxChoice( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitTimespanChoices, 0 ); - m_choiceUnitTimespan->SetSelection( 0 ); - bSizer165->Add( m_choiceUnitTimespan, 0, wxEXPAND, 5 ); + wxArrayString m_choiceUnitTimespanChoices; + m_choiceUnitTimespan = new wxChoice( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitTimespanChoices, 0 ); + m_choiceUnitTimespan->SetSelection( 0 ); + bSizer165->Add( m_choiceUnitTimespan, 0, wxEXPAND, 5 ); - m_spinCtrlTimespan = new wxSpinCtrl( m_panelFilterSettingsTab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer165->Add( m_spinCtrlTimespan, 0, wxEXPAND, 5 ); + m_spinCtrlTimespan = new wxSpinCtrl( m_panelFilterSettingsTab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + bSizer165->Add( m_spinCtrlTimespan, 0, wxEXPAND, 5 ); - bSizer167->Add( bSizer165, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + bSizer167->Add( bSizer165, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer160->Add( bSizer167, 1, wxEXPAND|wxALL, 5 ); + bSizer160->Add( bSizer167, 1, wxEXPAND|wxALL, 5 ); - m_staticline231 = new wxStaticLine( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer160->Add( m_staticline231, 0, wxEXPAND, 5 ); + m_staticline231 = new wxStaticLine( m_panelFilterSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer160->Add( m_staticline231, 0, wxEXPAND, 5 ); - bSizer301->Add( bSizer160, 0, wxEXPAND, 5 ); + bSizer301->Add( bSizer160, 0, wxEXPAND, 5 ); - bSizer278->Add( bSizer301, 1, wxEXPAND, 5 ); + bSizer278->Add( bSizer301, 1, wxEXPAND, 5 ); - wxBoxSizer* bSizer302; - bSizer302 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer302; + bSizer302 = new wxBoxSizer( wxHORIZONTAL ); - m_staticTextFilterDescr = new wxStaticText( m_panelFilterSettingsTab, 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_staticTextFilterDescr->Wrap( -1 ); - m_staticTextFilterDescr->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticTextFilterDescr = new wxStaticText( m_panelFilterSettingsTab, 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_staticTextFilterDescr->Wrap( -1 ); + m_staticTextFilterDescr->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer302->Add( m_staticTextFilterDescr, 1, wxALL|wxALIGN_CENTER_VERTICAL, 10 ); + bSizer302->Add( m_staticTextFilterDescr, 1, wxALL|wxALIGN_CENTER_VERTICAL, 10 ); - wxBoxSizer* bSizer303; - bSizer303 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer303; + bSizer303 = new wxBoxSizer( wxHORIZONTAL ); - m_buttonDefault = new wxButton( m_panelFilterSettingsTab, wxID_ANY, _("&Default"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer303->Add( m_buttonDefault, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_buttonDefault = new wxButton( m_panelFilterSettingsTab, wxID_ANY, _("&Default"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer303->Add( m_buttonDefault, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_bpButtonDefaultContext = new wxBitmapButton( m_panelFilterSettingsTab, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer303->Add( m_bpButtonDefaultContext, 0, wxEXPAND, 5 ); + m_bpButtonDefaultContext = new wxBitmapButton( m_panelFilterSettingsTab, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer303->Add( m_bpButtonDefaultContext, 0, wxEXPAND, 5 ); - bSizer302->Add( bSizer303, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 10 ); + bSizer302->Add( bSizer303, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 10 ); - m_buttonClear = new wxButton( m_panelFilterSettingsTab, wxID_ANY, _("C&lear"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer302->Add( m_buttonClear, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 ); + m_buttonClear = new wxButton( m_panelFilterSettingsTab, wxID_ANY, _("C&lear"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer302->Add( m_buttonClear, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 ); - bSizer278->Add( bSizer302, 0, wxEXPAND, 5 ); + bSizer278->Add( bSizer302, 0, wxEXPAND, 5 ); - m_panelFilterSettingsTab->SetSizer( bSizer278 ); - m_panelFilterSettingsTab->Layout(); - bSizer278->Fit( m_panelFilterSettingsTab ); - m_notebook->AddPage( m_panelFilterSettingsTab, _("dummy"), true ); - m_panelSyncSettingsTab = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelSyncSettingsTab->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelFilterSettingsTab->SetSizer( bSizer278 ); + m_panelFilterSettingsTab->Layout(); + bSizer278->Fit( m_panelFilterSettingsTab ); + m_notebook->AddPage( m_panelFilterSettingsTab, _("dummy"), true ); + m_panelSyncSettingsTab = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelSyncSettingsTab->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer276; - bSizer276 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer276; + bSizer276 = new wxBoxSizer( wxVERTICAL ); - bSizerHeaderSyncSettings = new wxBoxSizer( wxVERTICAL ); + bSizerHeaderSyncSettings = new wxBoxSizer( wxVERTICAL ); - m_staticTextMainSyncSettings = new wxStaticText( m_panelSyncSettingsTab, wxID_ANY, _("Main settings:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextMainSyncSettings->Wrap( -1 ); - bSizerHeaderSyncSettings->Add( m_staticTextMainSyncSettings, 0, wxALL, 10 ); + m_staticTextMainSyncSettings = new wxStaticText( m_panelSyncSettingsTab, wxID_ANY, _("Main settings:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextMainSyncSettings->Wrap( -1 ); + bSizerHeaderSyncSettings->Add( m_staticTextMainSyncSettings, 0, wxALL, 10 ); - m_checkBoxUseLocalSyncOptions = new wxCheckBox( m_panelSyncSettingsTab, wxID_ANY, _("Use local settings:"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizerHeaderSyncSettings->Add( m_checkBoxUseLocalSyncOptions, 0, wxALL|wxEXPAND, 10 ); + m_checkBoxUseLocalSyncOptions = new wxCheckBox( m_panelSyncSettingsTab, wxID_ANY, _("Use local settings:"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerHeaderSyncSettings->Add( m_checkBoxUseLocalSyncOptions, 0, wxALL|wxEXPAND, 10 ); - m_staticlineSyncHeader = new wxStaticLine( m_panelSyncSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerHeaderSyncSettings->Add( m_staticlineSyncHeader, 0, wxEXPAND, 5 ); + m_staticlineSyncHeader = new wxStaticLine( m_panelSyncSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerHeaderSyncSettings->Add( m_staticlineSyncHeader, 0, wxEXPAND, 5 ); - bSizer276->Add( bSizerHeaderSyncSettings, 0, wxEXPAND, 5 ); + bSizer276->Add( bSizerHeaderSyncSettings, 0, wxEXPAND, 5 ); - m_panelSyncSettings = new wxPanel( m_panelSyncSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelSyncSettings->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelSyncSettings = new wxPanel( m_panelSyncSettingsTab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelSyncSettings->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer232; - bSizer232 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer232; + bSizer232 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer237; - bSizer237 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer237; + bSizer237 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer235; - bSizer235 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer235; + bSizer235 = new wxBoxSizer( wxVERTICAL ); - m_staticText86 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Select a variant:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText86->Wrap( -1 ); - bSizer235->Add( m_staticText86, 0, wxALL, 5 ); + m_staticText86 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Select a variant:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText86->Wrap( -1 ); + bSizer235->Add( m_staticText86, 0, wxALL, 5 ); - wxGridSizer* gSizer1; - gSizer1 = new wxGridSizer( 0, 1, 0, 0 ); + wxGridSizer* gSizer1; + gSizer1 = new wxGridSizer( 0, 1, 0, 0 ); - m_buttonTwoWay = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("Two way"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonTwoWay = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("Two way"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonTwoWay->SetDefault(); - m_buttonTwoWay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - m_buttonTwoWay->SetToolTip( _("dummy") ); + m_buttonTwoWay->SetDefault(); + m_buttonTwoWay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonTwoWay->SetToolTip( _("dummy") ); - gSizer1->Add( m_buttonTwoWay, 0, wxEXPAND, 5 ); + gSizer1->Add( m_buttonTwoWay, 0, wxEXPAND, 5 ); - m_buttonMirror = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("Mirror"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonMirror = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("Mirror"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonMirror->SetDefault(); - m_buttonMirror->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - m_buttonMirror->SetToolTip( _("dummy") ); + m_buttonMirror->SetDefault(); + m_buttonMirror->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonMirror->SetToolTip( _("dummy") ); - gSizer1->Add( m_buttonMirror, 0, wxEXPAND, 5 ); + gSizer1->Add( m_buttonMirror, 0, wxEXPAND, 5 ); - m_buttonUpdate = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("Update"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonUpdate = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("Update"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonUpdate->SetDefault(); - m_buttonUpdate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - m_buttonUpdate->SetToolTip( _("dummy") ); + m_buttonUpdate->SetDefault(); + m_buttonUpdate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonUpdate->SetToolTip( _("dummy") ); - gSizer1->Add( m_buttonUpdate, 0, wxEXPAND, 5 ); + gSizer1->Add( m_buttonUpdate, 0, wxEXPAND, 5 ); - m_buttonCustom = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("Custom"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonCustom = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("Custom"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonCustom->SetDefault(); - m_buttonCustom->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - m_buttonCustom->SetToolTip( _("dummy") ); + m_buttonCustom->SetDefault(); + m_buttonCustom->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonCustom->SetToolTip( _("dummy") ); - gSizer1->Add( m_buttonCustom, 0, wxEXPAND, 5 ); + gSizer1->Add( m_buttonCustom, 0, wxEXPAND, 5 ); - bSizer235->Add( gSizer1, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer235->Add( gSizer1, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - bSizer237->Add( bSizer235, 0, wxALL, 5 ); + bSizer237->Add( bSizer235, 0, wxALL, 5 ); - bSizer237->Add( 10, 0, 0, 0, 5 ); + bSizer237->Add( 10, 0, 0, 0, 5 ); - wxBoxSizer* bSizer238; - bSizer238 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer238; + bSizer238 = new wxBoxSizer( wxVERTICAL ); - bSizer238->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizer238->Add( 0, 0, 1, wxEXPAND, 5 ); - bSizerSyncDirHolder = new wxBoxSizer( wxHORIZONTAL ); + bSizerSyncDirHolder = new wxBoxSizer( wxHORIZONTAL ); - bSizerSyncDirections = new wxBoxSizer( wxVERTICAL ); + bSizerSyncDirections = new wxBoxSizer( wxVERTICAL ); - m_staticText184 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Difference"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText184->Wrap( -1 ); - bSizerSyncDirections->Add( m_staticText184, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + m_staticText184 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Difference"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText184->Wrap( -1 ); + bSizerSyncDirections->Add( m_staticText184, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - ffgSizer11 = new wxFlexGridSizer( 2, 0, 5, 5 ); - ffgSizer11->SetFlexibleDirection( wxBOTH ); - ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer11 = new wxFlexGridSizer( 2, 0, 5, 5 ); + ffgSizer11->SetFlexibleDirection( wxBOTH ); + ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_bitmapLeftOnly = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmapLeftOnly->SetToolTip( _("Item exists on left side only") ); + m_bitmapLeftOnly = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_bitmapLeftOnly->SetToolTip( _("Item exists on left side only") ); - ffgSizer11->Add( m_bitmapLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + ffgSizer11->Add( m_bitmapLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bitmapLeftNewer = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmapLeftNewer->SetToolTip( _("Left side is newer") ); + m_bitmapLeftNewer = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_bitmapLeftNewer->SetToolTip( _("Left side is newer") ); - ffgSizer11->Add( m_bitmapLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + ffgSizer11->Add( m_bitmapLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bitmapDifferent = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmapDifferent->SetToolTip( _("Items have different content") ); + m_bitmapDifferent = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_bitmapDifferent->SetToolTip( _("Items have different content") ); - ffgSizer11->Add( m_bitmapDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + ffgSizer11->Add( m_bitmapDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bitmapConflict = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmapConflict->SetToolTip( _("Conflict/item cannot be categorized") ); + m_bitmapConflict = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_bitmapConflict->SetToolTip( _("Conflict/item cannot be categorized") ); - ffgSizer11->Add( m_bitmapConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + ffgSizer11->Add( m_bitmapConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bitmapRightNewer = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmapRightNewer->SetToolTip( _("Right side is newer") ); + m_bitmapRightNewer = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_bitmapRightNewer->SetToolTip( _("Right side is newer") ); - ffgSizer11->Add( m_bitmapRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + ffgSizer11->Add( m_bitmapRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bitmapRightOnly = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmapRightOnly->SetToolTip( _("Item exists on right side only") ); + m_bitmapRightOnly = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_bitmapRightOnly->SetToolTip( _("Item exists on right side only") ); - ffgSizer11->Add( m_bitmapRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + ffgSizer11->Add( m_bitmapRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bpButtonLeftOnly = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - ffgSizer11->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + m_bpButtonLeftOnly = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + ffgSizer11->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bpButtonLeftNewer = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - ffgSizer11->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + m_bpButtonLeftNewer = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + ffgSizer11->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bpButtonDifferent = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - ffgSizer11->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + m_bpButtonDifferent = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + ffgSizer11->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bpButtonConflict = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - ffgSizer11->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + m_bpButtonConflict = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + ffgSizer11->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bpButtonRightNewer = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - ffgSizer11->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + m_bpButtonRightNewer = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + ffgSizer11->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bpButtonRightOnly = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - ffgSizer11->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + m_bpButtonRightOnly = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + ffgSizer11->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizerSyncDirections->Add( ffgSizer11, 0, 0, 5 ); + bSizerSyncDirections->Add( ffgSizer11, 0, 0, 5 ); - m_staticText120 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText120->Wrap( -1 ); - bSizerSyncDirections->Add( m_staticText120, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 5 ); + m_staticText120 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText120->Wrap( -1 ); + bSizerSyncDirections->Add( m_staticText120, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 5 ); - bSizerSyncDirHolder->Add( bSizerSyncDirections, 0, 0, 5 ); + bSizerSyncDirHolder->Add( bSizerSyncDirections, 0, 0, 5 ); - bSizerDatabase = new wxBoxSizer( wxVERTICAL ); + bSizerDatabase = new wxBoxSizer( wxVERTICAL ); - m_bitmapDatabase = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerDatabase->Add( m_bitmapDatabase, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bitmapDatabase = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerDatabase->Add( m_bitmapDatabase, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizerDatabase->Add( 0, 3, 0, 0, 5 ); + bSizerDatabase->Add( 0, 3, 0, 0, 5 ); - m_staticText145 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("sync.ffs_db"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText145->Wrap( -1 ); - m_staticText145->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_SWISS, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL, false, wxT("Arial") ) ); - m_staticText145->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticText145 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("sync.ffs_db"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText145->Wrap( -1 ); + m_staticText145->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_SWISS, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL, false, wxT("Arial") ) ); + m_staticText145->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizerDatabase->Add( m_staticText145, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizerDatabase->Add( m_staticText145, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizerSyncDirHolder->Add( bSizerDatabase, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + bSizerSyncDirHolder->Add( bSizerDatabase, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticTextSyncVarDescription = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextSyncVarDescription->Wrap( -1 ); - m_staticTextSyncVarDescription->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticTextSyncVarDescription = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_staticTextSyncVarDescription->Wrap( -1 ); + m_staticTextSyncVarDescription->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizerSyncDirHolder->Add( m_staticTextSyncVarDescription, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 ); + bSizerSyncDirHolder->Add( m_staticTextSyncVarDescription, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 ); - bSizer238->Add( bSizerSyncDirHolder, 0, wxTOP|wxBOTTOM|wxRIGHT, 10 ); + bSizer238->Add( bSizerSyncDirHolder, 0, wxTOP|wxBOTTOM|wxRIGHT, 10 ); - bSizer238->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizer238->Add( 0, 0, 1, wxEXPAND, 5 ); - m_staticline431 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer238->Add( m_staticline431, 0, wxEXPAND, 5 ); + m_staticline431 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer238->Add( m_staticline431, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer201; - bSizer201 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer201; + bSizer201 = new wxBoxSizer( wxHORIZONTAL ); - m_staticline72 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer201->Add( m_staticline72, 0, wxEXPAND, 5 ); + m_staticline72 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer201->Add( m_staticline72, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer249; - bSizer249 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer249; + bSizer249 = new wxBoxSizer( wxHORIZONTAL ); - m_checkBoxDetectMove = new wxCheckBox( m_panelSyncSettings, wxID_ANY, _("Detect moved files"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxDetectMove->SetToolTip( _("- Not supported by all file systems\n- Requires and creates database files\n- Detection not available for first sync") ); + m_checkBoxDetectMove = new wxCheckBox( m_panelSyncSettings, wxID_ANY, _("Detect moved files"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxDetectMove->SetToolTip( _("- Not supported by all file systems\n- Requires and creates database files\n- Detection not available for first sync") ); - bSizer249->Add( m_checkBoxDetectMove, 0, wxALL|wxEXPAND, 5 ); + bSizer249->Add( m_checkBoxDetectMove, 0, wxALL|wxEXPAND, 5 ); - m_hyperlink242 = new wxHyperlinkCtrl( m_panelSyncSettings, wxID_ANY, _("More information"), wxT("https://freefilesync.org/manual.php?topic=synchronization-settings"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink242->SetToolTip( _("https://freefilesync.org/manual.php?topic=synchronization-settings") ); + m_hyperlink242 = new wxHyperlinkCtrl( m_panelSyncSettings, wxID_ANY, _("More information"), wxT("https://freefilesync.org/manual.php?topic=synchronization-settings"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink242->SetToolTip( _("https://freefilesync.org/manual.php?topic=synchronization-settings") ); - bSizer249->Add( m_hyperlink242, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 ); + bSizer249->Add( m_hyperlink242, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer201->Add( bSizer249, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer201->Add( bSizer249, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer238->Add( bSizer201, 0, 0, 5 ); + bSizer238->Add( bSizer201, 0, 0, 5 ); - bSizer237->Add( bSizer238, 1, wxEXPAND, 5 ); + bSizer237->Add( bSizer238, 1, wxEXPAND, 5 ); - bSizer232->Add( bSizer237, 0, wxEXPAND, 5 ); + bSizer232->Add( bSizer237, 0, wxEXPAND, 5 ); - m_staticline54 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer232->Add( m_staticline54, 0, wxEXPAND, 5 ); + m_staticline54 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer232->Add( m_staticline54, 0, wxEXPAND, 5 ); - bSizer2361 = new wxBoxSizer( wxHORIZONTAL ); + bSizer2361 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer202; - bSizer202 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer202; + bSizer202 = new wxBoxSizer( wxVERTICAL ); - m_staticText87 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Delete files:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText87->Wrap( -1 ); - bSizer202->Add( m_staticText87, 0, wxALL, 5 ); + m_staticText87 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Delete files:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText87->Wrap( -1 ); + bSizer202->Add( m_staticText87, 0, wxALL, 5 ); - wxBoxSizer* bSizer234; - bSizer234 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer234; + bSizer234 = new wxBoxSizer( wxVERTICAL ); - m_buttonRecycler = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("&Recycle bin"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonRecycler = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("&Recycle bin"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonRecycler->SetDefault(); - m_buttonRecycler->SetToolTip( _("dummy") ); + m_buttonRecycler->SetDefault(); + m_buttonRecycler->SetToolTip( _("dummy") ); - bSizer234->Add( m_buttonRecycler, 0, wxEXPAND, 5 ); + bSizer234->Add( m_buttonRecycler, 0, wxEXPAND, 5 ); - m_buttonPermanent = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("&Permanent"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonPermanent = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("&Permanent"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonPermanent->SetDefault(); - m_buttonPermanent->SetToolTip( _("dummy") ); + m_buttonPermanent->SetDefault(); + m_buttonPermanent->SetToolTip( _("dummy") ); - bSizer234->Add( m_buttonPermanent, 0, wxEXPAND, 5 ); + bSizer234->Add( m_buttonPermanent, 0, wxEXPAND, 5 ); - m_buttonVersioning = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("&Versioning"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonVersioning = new zen::ToggleButton( m_panelSyncSettings, wxID_ANY, _("&Versioning"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonVersioning->SetDefault(); - m_buttonVersioning->SetToolTip( _("dummy") ); + m_buttonVersioning->SetDefault(); + m_buttonVersioning->SetToolTip( _("dummy") ); - bSizer234->Add( m_buttonVersioning, 0, wxEXPAND, 5 ); + bSizer234->Add( m_buttonVersioning, 0, wxEXPAND, 5 ); - bSizer202->Add( bSizer234, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer202->Add( bSizer234, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - bSizer2361->Add( bSizer202, 0, wxALL, 5 ); + bSizer2361->Add( bSizer202, 0, wxALL, 5 ); - bSizerVersioningHolder = new wxBoxSizer( wxVERTICAL ); + bSizerVersioningHolder = new wxBoxSizer( wxVERTICAL ); - bSizerVersioningHolder->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizerVersioningHolder->Add( 0, 0, 1, wxEXPAND, 5 ); - wxBoxSizer* bSizer2331; - bSizer2331 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer2331; + bSizer2331 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapDeletionType = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer2331->Add( m_bitmapDeletionType, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_bitmapDeletionType = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer2331->Add( m_bitmapDeletionType, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_staticTextDeletionTypeDescription = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeletionTypeDescription->Wrap( -1 ); - m_staticTextDeletionTypeDescription->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticTextDeletionTypeDescription = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeletionTypeDescription->Wrap( -1 ); + m_staticTextDeletionTypeDescription->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer2331->Add( m_staticTextDeletionTypeDescription, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + bSizer2331->Add( m_staticTextDeletionTypeDescription, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - bSizerVersioningHolder->Add( bSizer2331, 0, wxALL|wxEXPAND, 5 ); + bSizerVersioningHolder->Add( bSizer2331, 0, wxALL|wxEXPAND, 5 ); - m_panelVersioning = new wxPanel( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelVersioning->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelVersioning = new wxPanel( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelVersioning->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer191; - bSizer191 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer191; + bSizer191 = new wxBoxSizer( wxVERTICAL ); - bSizer191->Add( 0, 5, 0, 0, 5 ); + bSizer191->Add( 0, 5, 0, 0, 5 ); - wxBoxSizer* bSizer252; - bSizer252 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer252; + bSizer252 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapVersioning = new wxStaticBitmap( m_panelVersioning, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer252->Add( m_bitmapVersioning, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_bitmapVersioning = new wxStaticBitmap( m_panelVersioning, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer252->Add( m_bitmapVersioning, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - wxBoxSizer* bSizer253; - bSizer253 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer253; + bSizer253 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer254; - bSizer254 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer254; + bSizer254 = new wxBoxSizer( wxHORIZONTAL ); - m_staticText155 = new wxStaticText( m_panelVersioning, wxID_ANY, _("Move files to a user-defined folder"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText155->Wrap( -1 ); - m_staticText155->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticText155 = new wxStaticText( m_panelVersioning, wxID_ANY, _("Move files to a user-defined folder"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText155->Wrap( -1 ); + m_staticText155->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer254->Add( m_staticText155, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + bSizer254->Add( m_staticText155, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizer254->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizer254->Add( 0, 0, 1, wxEXPAND, 5 ); - m_hyperlink243 = new wxHyperlinkCtrl( m_panelVersioning, wxID_ANY, _("Show examples"), wxT("https://freefilesync.org/manual.php?topic=versioning"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink243->SetToolTip( _("https://freefilesync.org/manual.php?topic=versioning") ); + m_hyperlink243 = new wxHyperlinkCtrl( m_panelVersioning, wxID_ANY, _("Show examples"), wxT("https://freefilesync.org/manual.php?topic=versioning"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink243->SetToolTip( _("https://freefilesync.org/manual.php?topic=versioning") ); - bSizer254->Add( m_hyperlink243, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + bSizer254->Add( m_hyperlink243, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - bSizer253->Add( bSizer254, 0, wxEXPAND|wxBOTTOM, 5 ); + bSizer253->Add( bSizer254, 0, wxEXPAND|wxBOTTOM, 5 ); - wxBoxSizer* bSizer156; - bSizer156 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer156; + bSizer156 = new wxBoxSizer( wxHORIZONTAL ); - m_versioningFolderPath = new fff::FolderHistoryBox( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer156->Add( m_versioningFolderPath, 1, wxALIGN_CENTER_VERTICAL, 5 ); + m_versioningFolderPath = new fff::FolderHistoryBox( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer156->Add( m_versioningFolderPath, 1, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonSelectVersioningFolder = new wxButton( m_panelVersioning, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectVersioningFolder->SetToolTip( _("Select a folder") ); + m_buttonSelectVersioningFolder = new wxButton( m_panelVersioning, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectVersioningFolder->SetToolTip( _("Select a folder") ); - bSizer156->Add( m_buttonSelectVersioningFolder, 0, wxEXPAND, 5 ); + bSizer156->Add( m_buttonSelectVersioningFolder, 0, wxEXPAND, 5 ); - m_bpButtonSelectVersioningAltFolder = new wxBitmapButton( m_panelVersioning, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonSelectVersioningAltFolder->SetToolTip( _("Access online storage") ); + m_bpButtonSelectVersioningAltFolder = new wxBitmapButton( m_panelVersioning, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonSelectVersioningAltFolder->SetToolTip( _("Access online storage") ); - bSizer156->Add( m_bpButtonSelectVersioningAltFolder, 0, wxEXPAND, 5 ); + bSizer156->Add( m_bpButtonSelectVersioningAltFolder, 0, wxEXPAND, 5 ); - bSizer253->Add( bSizer156, 0, wxEXPAND, 5 ); + bSizer253->Add( bSizer156, 0, wxEXPAND, 5 ); - bSizer252->Add( bSizer253, 1, wxRIGHT, 5 ); + bSizer252->Add( bSizer253, 1, wxRIGHT, 5 ); - bSizer191->Add( bSizer252, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + bSizer191->Add( bSizer252, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - wxBoxSizer* bSizer198; - bSizer198 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer198; + bSizer198 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer255; - bSizer255 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer255; + bSizer255 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer256; - bSizer256 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer256; + bSizer256 = new wxBoxSizer( wxHORIZONTAL ); - m_staticText93 = new wxStaticText( m_panelVersioning, wxID_ANY, _("Naming convention:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText93->Wrap( -1 ); - bSizer256->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_staticText93 = new wxStaticText( m_panelVersioning, wxID_ANY, _("Naming convention:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText93->Wrap( -1 ); + bSizer256->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 ); - bSizer256->Add( m_choiceVersioningStyle, 0, wxALIGN_CENTER_VERTICAL, 5 ); + wxArrayString m_choiceVersioningStyleChoices; + m_choiceVersioningStyle = new wxChoice( m_panelVersioning, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceVersioningStyleChoices, 0 ); + m_choiceVersioningStyle->SetSelection( 0 ); + bSizer256->Add( m_choiceVersioningStyle, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer255->Add( bSizer256, 0, wxALL, 5 ); + bSizer255->Add( bSizer256, 0, wxALL, 5 ); - wxBoxSizer* bSizer257; - bSizer257 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer257; + bSizer257 = new wxBoxSizer( wxHORIZONTAL ); - m_staticTextNamingCvtPart1 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextNamingCvtPart1->Wrap( -1 ); - m_staticTextNamingCvtPart1->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticTextNamingCvtPart1 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextNamingCvtPart1->Wrap( -1 ); + m_staticTextNamingCvtPart1->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer257->Add( m_staticTextNamingCvtPart1, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer257->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(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - m_staticTextNamingCvtPart2Bold->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticTextNamingCvtPart2Bold = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextNamingCvtPart2Bold->Wrap( -1 ); + m_staticTextNamingCvtPart2Bold->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextNamingCvtPart2Bold->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer257->Add( m_staticTextNamingCvtPart2Bold, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer257->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 ) ); + m_staticTextNamingCvtPart3 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextNamingCvtPart3->Wrap( -1 ); + m_staticTextNamingCvtPart3->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer257->Add( m_staticTextNamingCvtPart3, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer257->Add( m_staticTextNamingCvtPart3, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer255->Add( bSizer257, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer255->Add( bSizer257, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - bSizer198->Add( bSizer255, 0, wxALL, 5 ); + bSizer198->Add( bSizer255, 0, wxALL, 5 ); - m_staticline69 = new wxStaticLine( m_panelVersioning, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer198->Add( m_staticline69, 0, wxEXPAND, 5 ); + m_staticline69 = new wxStaticLine( m_panelVersioning, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer198->Add( m_staticline69, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer258; - bSizer258 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer258; + bSizer258 = new wxBoxSizer( wxVERTICAL ); - m_staticTextLimitVersions = new wxStaticText( m_panelVersioning, wxID_ANY, _("Limit file versions:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextLimitVersions->Wrap( -1 ); - bSizer258->Add( m_staticTextLimitVersions, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + m_staticTextLimitVersions = new wxStaticText( m_panelVersioning, wxID_ANY, _("Limit file versions:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextLimitVersions->Wrap( -1 ); + bSizer258->Add( m_staticTextLimitVersions, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - fgSizer15 = new wxFlexGridSizer( 0, 3, 5, 10 ); - fgSizer15->SetFlexibleDirection( wxBOTH ); - fgSizer15->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + fgSizer15 = new wxFlexGridSizer( 0, 3, 5, 10 ); + fgSizer15->SetFlexibleDirection( wxBOTH ); + fgSizer15->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_checkBoxVersionMaxDays = new wxCheckBox( m_panelVersioning, wxID_ANY, _("Last x days:"), wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer15->Add( m_checkBoxVersionMaxDays, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_checkBoxVersionMaxDays = new wxCheckBox( m_panelVersioning, wxID_ANY, _("Last x days:"), wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer15->Add( m_checkBoxVersionMaxDays, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_checkBoxVersionCountMin = new wxCheckBox( m_panelVersioning, wxID_ANY, _("Minimum:"), wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer15->Add( m_checkBoxVersionCountMin, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_checkBoxVersionCountMin = new wxCheckBox( m_panelVersioning, wxID_ANY, _("Minimum:"), wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer15->Add( m_checkBoxVersionCountMin, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_checkBoxVersionCountMax = new wxCheckBox( m_panelVersioning, wxID_ANY, _("Maximum:"), wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer15->Add( m_checkBoxVersionCountMax, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_checkBoxVersionCountMax = new wxCheckBox( m_panelVersioning, wxID_ANY, _("Maximum:"), wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer15->Add( m_checkBoxVersionCountMax, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_spinCtrlVersionMaxDays = new wxSpinCtrl( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); - fgSizer15->Add( m_spinCtrlVersionMaxDays, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_spinCtrlVersionMaxDays = new wxSpinCtrl( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); + fgSizer15->Add( m_spinCtrlVersionMaxDays, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_spinCtrlVersionCountMin = new wxSpinCtrl( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); - fgSizer15->Add( m_spinCtrlVersionCountMin, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_spinCtrlVersionCountMin = new wxSpinCtrl( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); + fgSizer15->Add( m_spinCtrlVersionCountMin, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_spinCtrlVersionCountMax = new wxSpinCtrl( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 2000000000, 1 ); - fgSizer15->Add( m_spinCtrlVersionCountMax, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_spinCtrlVersionCountMax = new wxSpinCtrl( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 2000000000, 1 ); + fgSizer15->Add( m_spinCtrlVersionCountMax, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer258->Add( fgSizer15, 0, wxALL, 5 ); + bSizer258->Add( fgSizer15, 0, wxALL, 5 ); - bSizer198->Add( bSizer258, 0, wxALL, 5 ); + bSizer198->Add( bSizer258, 0, wxALL, 5 ); - bSizer191->Add( bSizer198, 0, wxEXPAND, 5 ); + bSizer191->Add( bSizer198, 0, wxEXPAND, 5 ); - m_panelVersioning->SetSizer( bSizer191 ); - m_panelVersioning->Layout(); - bSizer191->Fit( m_panelVersioning ); - bSizerVersioningHolder->Add( m_panelVersioning, 0, wxEXPAND, 5 ); + m_panelVersioning->SetSizer( bSizer191 ); + m_panelVersioning->Layout(); + bSizer191->Fit( m_panelVersioning ); + bSizerVersioningHolder->Add( m_panelVersioning, 0, wxEXPAND, 5 ); - bSizerVersioningHolder->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizerVersioningHolder->Add( 0, 0, 1, wxEXPAND, 5 ); - bSizer2361->Add( bSizerVersioningHolder, 1, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer2361->Add( bSizerVersioningHolder, 1, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer232->Add( bSizer2361, 0, wxEXPAND, 5 ); + bSizer232->Add( bSizer2361, 0, wxEXPAND, 5 ); - m_staticline582 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer232->Add( m_staticline582, 0, wxEXPAND, 5 ); + m_staticline582 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer232->Add( m_staticline582, 0, wxEXPAND, 5 ); - bSizerSyncMisc = new wxBoxSizer( wxHORIZONTAL ); + bSizerSyncMisc = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer292; - bSizer292 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer292; + bSizer292 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer287; - bSizer287 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer287; + bSizer287 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer290; - bSizer290 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer290; + bSizer290 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer291; - bSizer291 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer291; + bSizer291 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapEmail = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer291->Add( m_bitmapEmail, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapEmail = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer291->Add( m_bitmapEmail, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_checkBoxSendEmail = new wxCheckBox( m_panelSyncSettings, wxID_ANY, _("Send email notification:"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer291->Add( m_checkBoxSendEmail, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + m_checkBoxSendEmail = new wxCheckBox( m_panelSyncSettings, wxID_ANY, _("Send email notification:"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer291->Add( m_checkBoxSendEmail, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - bSizer290->Add( bSizer291, 0, 0, 5 ); + bSizer290->Add( bSizer291, 0, 0, 5 ); - m_comboBoxEmail = new fff::CommandBox( m_panelSyncSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer290->Add( m_comboBoxEmail, 0, wxEXPAND|wxTOP, 5 ); + m_comboBoxEmail = new fff::CommandBox( m_panelSyncSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer290->Add( m_comboBoxEmail, 0, wxEXPAND|wxTOP, 5 ); - bSizer287->Add( bSizer290, 1, wxRIGHT, 5 ); + bSizer287->Add( bSizer290, 1, wxRIGHT, 5 ); - wxBoxSizer* bSizer289; - bSizer289 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer289; + bSizer289 = new wxBoxSizer( wxVERTICAL ); - m_bpButtonEmailAlways = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); - bSizer289->Add( m_bpButtonEmailAlways, 0, 0, 5 ); + m_bpButtonEmailAlways = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + bSizer289->Add( m_bpButtonEmailAlways, 0, 0, 5 ); - m_bpButtonEmailErrorWarning = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); - bSizer289->Add( m_bpButtonEmailErrorWarning, 0, 0, 5 ); + m_bpButtonEmailErrorWarning = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + bSizer289->Add( m_bpButtonEmailErrorWarning, 0, 0, 5 ); - m_bpButtonEmailErrorOnly = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); - bSizer289->Add( m_bpButtonEmailErrorOnly, 0, 0, 5 ); + m_bpButtonEmailErrorOnly = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + bSizer289->Add( m_bpButtonEmailErrorOnly, 0, 0, 5 ); - bSizer287->Add( bSizer289, 0, wxLEFT, 5 ); + bSizer287->Add( bSizer289, 0, wxLEFT, 5 ); - bSizer292->Add( bSizer287, 0, wxEXPAND, 5 ); + bSizer292->Add( bSizer287, 0, wxEXPAND, 5 ); - m_hyperlinkPerfDeRequired2 = new wxHyperlinkCtrl( m_panelSyncSettings, wxID_ANY, _("Requires FreeFileSync Donation Edition"), wxT("https://freefilesync.org/faq.php#donation-edition"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlinkPerfDeRequired2->SetToolTip( _("https://freefilesync.org/faq.php#donation-edition") ); + m_hyperlinkPerfDeRequired2 = new wxHyperlinkCtrl( m_panelSyncSettings, wxID_ANY, _("Requires FreeFileSync Donation Edition"), wxT("https://freefilesync.org/faq.php#donation-edition"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlinkPerfDeRequired2->SetToolTip( _("https://freefilesync.org/faq.php#donation-edition") ); - bSizer292->Add( m_hyperlinkPerfDeRequired2, 0, wxALL, 5 ); + bSizer292->Add( m_hyperlinkPerfDeRequired2, 0, wxALL, 5 ); - bSizerSyncMisc->Add( bSizer292, 0, wxEXPAND|wxALL, 10 ); + bSizerSyncMisc->Add( bSizer292, 0, wxEXPAND|wxALL, 10 ); - m_staticline57 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizerSyncMisc->Add( m_staticline57, 0, wxEXPAND, 5 ); + m_staticline57 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizerSyncMisc->Add( m_staticline57, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer293; - bSizer293 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer293; + bSizer293 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer2372; - bSizer2372 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer2372; + bSizer2372 = new wxBoxSizer( wxHORIZONTAL ); - m_panelLogfile = new wxPanel( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelLogfile->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelLogfile = new wxPanel( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelLogfile->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer1912; - bSizer1912 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer1912; + bSizer1912 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer279; - bSizer279 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer279; + bSizer279 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapLogFile = new wxStaticBitmap( m_panelLogfile, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer279->Add( m_bitmapLogFile, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapLogFile = new wxStaticBitmap( m_panelLogfile, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer279->Add( m_bitmapLogFile, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_checkBoxOverrideLogPath = new wxCheckBox( m_panelLogfile, wxID_ANY, _("&Override default log path:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxOverrideLogPath->SetValue(true); - bSizer279->Add( m_checkBoxOverrideLogPath, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + m_checkBoxOverrideLogPath = new wxCheckBox( m_panelLogfile, wxID_ANY, _("&Override default log path:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxOverrideLogPath->SetValue(true); + bSizer279->Add( m_checkBoxOverrideLogPath, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - m_buttonSelectLogFolder = new wxButton( m_panelLogfile, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectLogFolder->SetToolTip( _("Select a folder") ); + m_buttonSelectLogFolder = new wxButton( m_panelLogfile, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectLogFolder->SetToolTip( _("Select a folder") ); - bSizer279->Add( m_buttonSelectLogFolder, 0, wxEXPAND, 5 ); + bSizer279->Add( m_buttonSelectLogFolder, 0, wxEXPAND, 5 ); - m_bpButtonSelectAltLogFolder = new wxBitmapButton( m_panelLogfile, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonSelectAltLogFolder->SetToolTip( _("Access online storage") ); + m_bpButtonSelectAltLogFolder = new wxBitmapButton( m_panelLogfile, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonSelectAltLogFolder->SetToolTip( _("Access online storage") ); - bSizer279->Add( m_bpButtonSelectAltLogFolder, 0, wxEXPAND, 5 ); + bSizer279->Add( m_bpButtonSelectAltLogFolder, 0, wxEXPAND, 5 ); - bSizer1912->Add( bSizer279, 0, wxEXPAND, 5 ); + bSizer1912->Add( bSizer279, 0, wxEXPAND, 5 ); - m_logFolderPath = new fff::FolderHistoryBox( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer1912->Add( m_logFolderPath, 0, wxEXPAND|wxTOP, 5 ); + m_logFolderPath = new fff::FolderHistoryBox( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer1912->Add( m_logFolderPath, 0, wxEXPAND|wxTOP, 5 ); - m_panelLogfile->SetSizer( bSizer1912 ); - m_panelLogfile->Layout(); - bSizer1912->Fit( m_panelLogfile ); - bSizer2372->Add( m_panelLogfile, 1, 0, 5 ); + m_panelLogfile->SetSizer( bSizer1912 ); + m_panelLogfile->Layout(); + bSizer1912->Fit( m_panelLogfile ); + bSizer2372->Add( m_panelLogfile, 1, 0, 5 ); - bSizer293->Add( bSizer2372, 0, wxALL|wxEXPAND, 10 ); + bSizer293->Add( bSizer2372, 0, wxALL|wxEXPAND, 10 ); - m_staticline80 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer293->Add( m_staticline80, 0, wxEXPAND, 5 ); + m_staticline80 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer293->Add( m_staticline80, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer247; - bSizer247 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer247; + bSizer247 = new wxBoxSizer( wxHORIZONTAL ); - m_staticTextPostSync = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Run a command:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextPostSync->Wrap( -1 ); - bSizer247->Add( m_staticTextPostSync, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + m_staticTextPostSync = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Run a command:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPostSync->Wrap( -1 ); + bSizer247->Add( m_staticTextPostSync, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - wxArrayString m_choicePostSyncConditionChoices; - m_choicePostSyncCondition = new wxChoice( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choicePostSyncConditionChoices, 0 ); - m_choicePostSyncCondition->SetSelection( 0 ); - bSizer247->Add( m_choicePostSyncCondition, 0, wxALIGN_CENTER_VERTICAL, 5 ); + wxArrayString m_choicePostSyncConditionChoices; + m_choicePostSyncCondition = new wxChoice( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choicePostSyncConditionChoices, 0 ); + m_choicePostSyncCondition->SetSelection( 0 ); + bSizer247->Add( m_choicePostSyncCondition, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_comboBoxPostSyncCommand = new fff::CommandBox( m_panelSyncSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer247->Add( m_comboBoxPostSyncCommand, 1, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + m_comboBoxPostSyncCommand = new fff::CommandBox( m_panelSyncSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer247->Add( m_comboBoxPostSyncCommand, 1, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer293->Add( bSizer247, 0, wxALL|wxEXPAND, 10 ); + bSizer293->Add( bSizer247, 0, wxALL|wxEXPAND, 10 ); - bSizerSyncMisc->Add( bSizer293, 1, 0, 5 ); + bSizerSyncMisc->Add( bSizer293, 1, 0, 5 ); - bSizer232->Add( bSizerSyncMisc, 1, wxEXPAND, 5 ); + bSizer232->Add( bSizerSyncMisc, 1, wxEXPAND, 5 ); - m_panelSyncSettings->SetSizer( bSizer232 ); - m_panelSyncSettings->Layout(); - bSizer232->Fit( m_panelSyncSettings ); - bSizer276->Add( m_panelSyncSettings, 1, wxEXPAND, 5 ); + m_panelSyncSettings->SetSizer( bSizer232 ); + m_panelSyncSettings->Layout(); + bSizer232->Fit( m_panelSyncSettings ); + bSizer276->Add( m_panelSyncSettings, 1, wxEXPAND, 5 ); - m_panelSyncSettingsTab->SetSizer( bSizer276 ); - m_panelSyncSettingsTab->Layout(); - bSizer276->Fit( m_panelSyncSettingsTab ); - m_notebook->AddPage( m_panelSyncSettingsTab, _("dummy"), false ); + m_panelSyncSettingsTab->SetSizer( bSizer276 ); + m_panelSyncSettingsTab->Layout(); + bSizer276->Fit( m_panelSyncSettingsTab ); + m_notebook->AddPage( m_panelSyncSettingsTab, _("dummy"), false ); - bSizer190->Add( m_notebook, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + bSizer190->Add( m_notebook, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - bSizer7->Add( bSizer190, 1, wxEXPAND, 5 ); + bSizer7->Add( bSizer190, 1, wxEXPAND, 5 ); - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer7->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + bSizer7->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - this->SetSizer( bSizer7 ); - this->Layout(); - bSizer7->Fit( this ); + this->SetSizer( bSizer7 ); + this->Layout(); + bSizer7->Fit( this ); - this->Centre( wxBOTH ); + this->Centre( wxBOTH ); - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ConfigDlgGenerated::onClose ) ); - m_listBoxFolderPair->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( ConfigDlgGenerated::onListBoxKeyEvent ), NULL, this ); - m_listBoxFolderPair->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( ConfigDlgGenerated::onSelectFolderPair ), NULL, this ); - m_checkBoxUseLocalCmpOptions->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleLocalCompSettings ), NULL, this ); - m_buttonByTimeSize->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onCompByTimeSize ), NULL, this ); - m_buttonByTimeSize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onCompByTimeSizeDouble ), NULL, this ); - m_buttonByContent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onCompByContent ), NULL, this ); - m_buttonByContent->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onCompByContentDouble ), NULL, this ); - m_buttonBySize->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onCompBySize ), NULL, this ); - m_buttonBySize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onCompBySizeDouble ), NULL, this ); - m_checkBoxSymlinksInclude->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onChangeCompOption ), NULL, this ); - m_checkBoxIgnoreErrors->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleIgnoreErrors ), NULL, this ); - m_checkBoxAutoRetry->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleAutoRetry ), NULL, this ); - m_textCtrlInclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( ConfigDlgGenerated::onChangeFilterOption ), NULL, this ); - m_textCtrlExclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( ConfigDlgGenerated::onChangeFilterOption ), NULL, this ); - m_choiceUnitMinSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( ConfigDlgGenerated::onChangeFilterOption ), NULL, this ); - m_choiceUnitMaxSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( ConfigDlgGenerated::onChangeFilterOption ), NULL, this ); - m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( ConfigDlgGenerated::onChangeFilterOption ), NULL, this ); - m_buttonDefault->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onFilterDefault ), NULL, this ); - m_buttonDefault->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( ConfigDlgGenerated::onFilterDefaultContextMouse ), NULL, this ); - m_bpButtonDefaultContext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onFilterDefaultContext ), NULL, this ); - m_bpButtonDefaultContext->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( ConfigDlgGenerated::onFilterDefaultContextMouse ), NULL, this ); - m_buttonClear->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onFilterClear ), NULL, this ); - m_checkBoxUseLocalSyncOptions->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleLocalSyncSettings ), NULL, this ); - m_buttonTwoWay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onSyncTwoWay ), NULL, this ); - m_buttonTwoWay->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onSyncTwoWayDouble ), NULL, this ); - m_buttonMirror->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onSyncMirror ), NULL, this ); - m_buttonMirror->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onSyncMirrorDouble ), NULL, this ); - m_buttonUpdate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onSyncUpdate ), NULL, this ); - m_buttonUpdate->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onSyncUpdateDouble ), NULL, this ); - m_buttonCustom->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onSyncCustom ), NULL, this ); - m_buttonCustom->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onSyncCustomDouble ), NULL, this ); - m_bpButtonLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onExLeftSideOnly ), NULL, this ); - m_bpButtonLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onLeftNewer ), NULL, this ); - m_bpButtonDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onDifferent ), NULL, this ); - m_bpButtonConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onConflict ), NULL, this ); - m_bpButtonRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onRightNewer ), NULL, this ); - m_bpButtonRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onExRightSideOnly ), NULL, this ); - m_checkBoxDetectMove->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleDetectMovedFiles ), NULL, this ); - m_buttonRecycler->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onDeletionRecycler ), NULL, this ); - m_buttonPermanent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onDeletionPermanent ), NULL, this ); - m_buttonVersioning->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onDeletionVersioning ), NULL, this ); - m_choiceVersioningStyle->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( ConfigDlgGenerated::onChanegVersioningStyle ), NULL, this ); - m_checkBoxVersionMaxDays->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleVersioningLimit ), NULL, this ); - m_checkBoxVersionCountMin->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleVersioningLimit ), NULL, this ); - m_checkBoxVersionCountMax->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleVersioningLimit ), NULL, this ); - m_checkBoxSendEmail->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleMiscEmail ), NULL, this ); - m_bpButtonEmailAlways->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onEmailAlways ), NULL, this ); - m_bpButtonEmailErrorWarning->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onEmailErrorWarning ), NULL, this ); - m_bpButtonEmailErrorOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onEmailErrorOnly ), NULL, this ); - m_checkBoxOverrideLogPath->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleMiscOption ), NULL, this ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onCancel ), NULL, this ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ConfigDlgGenerated::onClose ) ); + m_listBoxFolderPair->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( ConfigDlgGenerated::onListBoxKeyEvent ), NULL, this ); + m_listBoxFolderPair->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( ConfigDlgGenerated::onSelectFolderPair ), NULL, this ); + m_checkBoxUseLocalCmpOptions->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleLocalCompSettings ), NULL, this ); + m_buttonByTimeSize->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onCompByTimeSize ), NULL, this ); + m_buttonByTimeSize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onCompByTimeSizeDouble ), NULL, this ); + m_buttonByContent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onCompByContent ), NULL, this ); + m_buttonByContent->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onCompByContentDouble ), NULL, this ); + m_buttonBySize->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onCompBySize ), NULL, this ); + m_buttonBySize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onCompBySizeDouble ), NULL, this ); + m_checkBoxSymlinksInclude->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onChangeCompOption ), NULL, this ); + m_checkBoxIgnoreErrors->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleIgnoreErrors ), NULL, this ); + m_checkBoxAutoRetry->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleAutoRetry ), NULL, this ); + m_textCtrlInclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( ConfigDlgGenerated::onChangeFilterOption ), NULL, this ); + m_textCtrlExclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( ConfigDlgGenerated::onChangeFilterOption ), NULL, this ); + m_choiceUnitMinSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( ConfigDlgGenerated::onChangeFilterOption ), NULL, this ); + m_choiceUnitMaxSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( ConfigDlgGenerated::onChangeFilterOption ), NULL, this ); + m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( ConfigDlgGenerated::onChangeFilterOption ), NULL, this ); + m_buttonDefault->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onFilterDefault ), NULL, this ); + m_buttonDefault->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( ConfigDlgGenerated::onFilterDefaultContextMouse ), NULL, this ); + m_bpButtonDefaultContext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onFilterDefaultContext ), NULL, this ); + m_bpButtonDefaultContext->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( ConfigDlgGenerated::onFilterDefaultContextMouse ), NULL, this ); + m_buttonClear->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onFilterClear ), NULL, this ); + m_checkBoxUseLocalSyncOptions->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleLocalSyncSettings ), NULL, this ); + m_buttonTwoWay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onSyncTwoWay ), NULL, this ); + m_buttonTwoWay->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onSyncTwoWayDouble ), NULL, this ); + m_buttonMirror->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onSyncMirror ), NULL, this ); + m_buttonMirror->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onSyncMirrorDouble ), NULL, this ); + m_buttonUpdate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onSyncUpdate ), NULL, this ); + m_buttonUpdate->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onSyncUpdateDouble ), NULL, this ); + m_buttonCustom->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onSyncCustom ), NULL, this ); + m_buttonCustom->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::onSyncCustomDouble ), NULL, this ); + m_bpButtonLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onExLeftSideOnly ), NULL, this ); + m_bpButtonLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onLeftNewer ), NULL, this ); + m_bpButtonDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onDifferent ), NULL, this ); + m_bpButtonConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onConflict ), NULL, this ); + m_bpButtonRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onRightNewer ), NULL, this ); + m_bpButtonRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onExRightSideOnly ), NULL, this ); + m_checkBoxDetectMove->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleDetectMovedFiles ), NULL, this ); + m_buttonRecycler->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onDeletionRecycler ), NULL, this ); + m_buttonPermanent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onDeletionPermanent ), NULL, this ); + m_buttonVersioning->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onDeletionVersioning ), NULL, this ); + m_choiceVersioningStyle->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( ConfigDlgGenerated::onChanegVersioningStyle ), NULL, this ); + m_checkBoxVersionMaxDays->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleVersioningLimit ), NULL, this ); + m_checkBoxVersionCountMin->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleVersioningLimit ), NULL, this ); + m_checkBoxVersionCountMax->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleVersioningLimit ), NULL, this ); + m_checkBoxSendEmail->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleMiscEmail ), NULL, this ); + m_bpButtonEmailAlways->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onEmailAlways ), NULL, this ); + m_bpButtonEmailErrorWarning->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onEmailErrorWarning ), NULL, this ); + m_bpButtonEmailErrorOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onEmailErrorOnly ), NULL, this ); + m_checkBoxOverrideLogPath->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onToggleMiscOption ), NULL, this ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::onCancel ), NULL, this ); } ConfigDlgGenerated::~ConfigDlgGenerated() @@ -2567,537 +2566,537 @@ ConfigDlgGenerated::~ConfigDlgGenerated() CloudSetupDlgGenerated::CloudSetupDlgGenerated( 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 ) ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer134; - bSizer134 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer134; + bSizer134 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapCloud = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer72->Add( m_bitmapCloud, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + m_bitmapCloud = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer72->Add( m_bitmapCloud, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); - wxBoxSizer* bSizer272; - bSizer272 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer272; + bSizer272 = new wxBoxSizer( wxVERTICAL ); - m_staticText136 = new wxStaticText( this, wxID_ANY, _("Connection type:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText136->Wrap( -1 ); - bSizer272->Add( m_staticText136, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + m_staticText136 = new wxStaticText( this, wxID_ANY, _("Connection type:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText136->Wrap( -1 ); + bSizer272->Add( m_staticText136, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - wxBoxSizer* bSizer231; - bSizer231 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer231; + bSizer231 = new wxBoxSizer( wxHORIZONTAL ); - m_toggleBtnGdrive = new wxToggleButton( this, wxID_ANY, _("Google Drive"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnGdrive->SetValue( true ); - m_toggleBtnGdrive->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_toggleBtnGdrive = new wxToggleButton( this, wxID_ANY, _("Google Drive"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnGdrive->SetValue( true ); + m_toggleBtnGdrive->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer231->Add( m_toggleBtnGdrive, 0, wxTOP|wxBOTTOM|wxLEFT|wxEXPAND, 5 ); + bSizer231->Add( m_toggleBtnGdrive, 0, wxTOP|wxBOTTOM|wxLEFT|wxEXPAND, 5 ); - m_toggleBtnSftp = new wxToggleButton( this, wxID_ANY, _("SFTP"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_toggleBtnSftp->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_toggleBtnSftp = new wxToggleButton( this, wxID_ANY, _("SFTP"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_toggleBtnSftp->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer231->Add( m_toggleBtnSftp, 0, wxTOP|wxBOTTOM|wxLEFT|wxEXPAND, 5 ); + bSizer231->Add( m_toggleBtnSftp, 0, wxTOP|wxBOTTOM|wxLEFT|wxEXPAND, 5 ); - m_toggleBtnFtp = new wxToggleButton( this, wxID_ANY, _("FTP"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_toggleBtnFtp->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_toggleBtnFtp = new wxToggleButton( this, wxID_ANY, _("FTP"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_toggleBtnFtp->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer231->Add( m_toggleBtnFtp, 0, wxALL|wxEXPAND, 5 ); + bSizer231->Add( m_toggleBtnFtp, 0, wxALL|wxEXPAND, 5 ); - bSizer272->Add( bSizer231, 0, 0, 5 ); + bSizer272->Add( bSizer231, 0, 0, 5 ); - bSizer72->Add( bSizer272, 0, wxALL, 5 ); + bSizer72->Add( bSizer272, 0, wxALL, 5 ); - bSizer134->Add( bSizer72, 0, wxEXPAND, 5 ); + bSizer134->Add( bSizer72, 0, wxEXPAND, 5 ); - m_staticline371 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxLI_HORIZONTAL ); - bSizer134->Add( m_staticline371, 0, wxEXPAND, 5 ); + m_staticline371 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxSize( -1, -1 ), wxLI_HORIZONTAL ); + bSizer134->Add( m_staticline371, 0, wxEXPAND, 5 ); - m_panel41 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel41->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panel41 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel41->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer185; - bSizer185 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer185; + bSizer185 = new wxBoxSizer( wxVERTICAL ); - bSizerGdrive = new wxBoxSizer( wxVERTICAL ); + bSizerGdrive = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer284; - bSizer284 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer284; + bSizer284 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer307; - bSizer307 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer307; + bSizer307 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer306; - bSizer306 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer306; + bSizer306 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapGdriveUser = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer306->Add( m_bitmapGdriveUser, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_bitmapGdriveUser = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer306->Add( m_bitmapGdriveUser, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - m_staticText166 = new wxStaticText( m_panel41, wxID_ANY, _("Connected user accounts:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText166->Wrap( -1 ); - bSizer306->Add( m_staticText166, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticText166 = new wxStaticText( m_panel41, wxID_ANY, _("Connected user accounts:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText166->Wrap( -1 ); + bSizer306->Add( m_staticText166, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer307->Add( bSizer306, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer307->Add( bSizer306, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_listBoxGdriveUsers = new wxListBox( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_NEEDED_SB|wxLB_SINGLE|wxLB_SORT ); - bSizer307->Add( m_listBoxGdriveUsers, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + m_listBoxGdriveUsers = new wxListBox( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_NEEDED_SB|wxLB_SINGLE|wxLB_SORT ); + bSizer307->Add( m_listBoxGdriveUsers, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - wxBoxSizer* bSizer3002; - bSizer3002 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer3002; + bSizer3002 = new wxBoxSizer( wxHORIZONTAL ); - m_buttonGdriveAddUser = new zen::BitmapTextButton( m_panel41, wxID_ANY, _("&Add connection"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer3002->Add( m_buttonGdriveAddUser, 1, wxALIGN_CENTER_VERTICAL, 5 ); + m_buttonGdriveAddUser = new zen::BitmapTextButton( m_panel41, wxID_ANY, _("&Add connection"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer3002->Add( m_buttonGdriveAddUser, 1, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonGdriveRemoveUser = new zen::BitmapTextButton( m_panel41, wxID_ANY, _("&Disconnect"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer3002->Add( m_buttonGdriveRemoveUser, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + m_buttonGdriveRemoveUser = new zen::BitmapTextButton( m_panel41, wxID_ANY, _("&Disconnect"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer3002->Add( m_buttonGdriveRemoveUser, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - bSizer307->Add( bSizer3002, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer307->Add( bSizer3002, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizer284->Add( bSizer307, 0, wxALL|wxEXPAND, 5 ); + bSizer284->Add( bSizer307, 0, wxALL|wxEXPAND, 5 ); - m_staticline841 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer284->Add( m_staticline841, 0, wxEXPAND, 5 ); + m_staticline841 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer284->Add( m_staticline841, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer3041; - bSizer3041 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer3041; + bSizer3041 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer305; - bSizer305 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer305; + bSizer305 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapGdriveDrive = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer305->Add( m_bitmapGdriveDrive, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapGdriveDrive = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer305->Add( m_bitmapGdriveDrive, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText186 = new wxStaticText( m_panel41, wxID_ANY, _("Select drive:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText186->Wrap( -1 ); - bSizer305->Add( m_staticText186, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticText186 = new wxStaticText( m_panel41, wxID_ANY, _("Select drive:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText186->Wrap( -1 ); + bSizer305->Add( m_staticText186, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer3041->Add( bSizer305, 0, wxALL, 5 ); + bSizer3041->Add( bSizer305, 0, wxALL, 5 ); - m_listBoxGdriveDrives = new wxListBox( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_NEEDED_SB|wxLB_SINGLE ); - bSizer3041->Add( m_listBoxGdriveDrives, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + m_listBoxGdriveDrives = new wxListBox( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_NEEDED_SB|wxLB_SINGLE ); + bSizer3041->Add( m_listBoxGdriveDrives, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - bSizer284->Add( bSizer3041, 1, wxALL|wxEXPAND, 5 ); + bSizer284->Add( bSizer3041, 1, wxALL|wxEXPAND, 5 ); - bSizerGdrive->Add( bSizer284, 1, wxEXPAND, 5 ); + bSizerGdrive->Add( bSizer284, 1, wxEXPAND, 5 ); - m_staticline73 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerGdrive->Add( m_staticline73, 0, wxEXPAND, 5 ); + m_staticline73 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerGdrive->Add( m_staticline73, 0, wxEXPAND, 5 ); - bSizer185->Add( bSizerGdrive, 1, wxEXPAND, 5 ); + bSizer185->Add( bSizerGdrive, 1, wxEXPAND, 5 ); - bSizerServer = new wxBoxSizer( wxVERTICAL ); + bSizerServer = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer276; - bSizer276 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer276; + bSizer276 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapServer = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer276->Add( m_bitmapServer, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapServer = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer276->Add( m_bitmapServer, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText12311 = new wxStaticText( m_panel41, wxID_ANY, _("Server name or IP address:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText12311->Wrap( -1 ); - bSizer276->Add( m_staticText12311, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + m_staticText12311 = new wxStaticText( m_panel41, wxID_ANY, _("Server name or IP address:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText12311->Wrap( -1 ); + bSizer276->Add( m_staticText12311, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - m_textCtrlServer = new wxTextCtrl( m_panel41, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer276->Add( m_textCtrlServer, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + m_textCtrlServer = new wxTextCtrl( m_panel41, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer276->Add( m_textCtrlServer, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText1233 = new wxStaticText( m_panel41, wxID_ANY, _("Port:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText1233->Wrap( -1 ); - bSizer276->Add( m_staticText1233, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + m_staticText1233 = new wxStaticText( m_panel41, wxID_ANY, _("Port:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText1233->Wrap( -1 ); + bSizer276->Add( m_staticText1233, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - m_textCtrlPort = new wxTextCtrl( m_panel41, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer276->Add( m_textCtrlPort, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + m_textCtrlPort = new wxTextCtrl( m_panel41, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer276->Add( m_textCtrlPort, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizerServer->Add( bSizer276, 0, wxALL|wxEXPAND, 5 ); + bSizerServer->Add( bSizer276, 0, wxALL|wxEXPAND, 5 ); - m_staticline58 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerServer->Add( m_staticline58, 0, wxEXPAND, 5 ); + m_staticline58 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerServer->Add( m_staticline58, 0, wxEXPAND, 5 ); - bSizer185->Add( bSizerServer, 0, wxEXPAND, 5 ); + bSizer185->Add( bSizerServer, 0, wxEXPAND, 5 ); - bSizerAuth = new wxBoxSizer( wxVERTICAL ); + bSizerAuth = new wxBoxSizer( wxVERTICAL ); - bSizerAuthInner = new wxBoxSizer( wxHORIZONTAL ); + bSizerAuthInner = new wxBoxSizer( wxHORIZONTAL ); - bSizerFtpEncrypt = new wxBoxSizer( wxHORIZONTAL ); + bSizerFtpEncrypt = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer2181; - bSizer2181 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer2181; + bSizer2181 = new wxBoxSizer( wxVERTICAL ); - m_staticText1251 = new wxStaticText( m_panel41, wxID_ANY, _("Encryption:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText1251->Wrap( -1 ); - bSizer2181->Add( m_staticText1251, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + m_staticText1251 = new wxStaticText( m_panel41, wxID_ANY, _("Encryption:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText1251->Wrap( -1 ); + bSizer2181->Add( m_staticText1251, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - m_radioBtnEncryptNone = new wxRadioButton( m_panel41, wxID_ANY, _("&Disabled"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); - m_radioBtnEncryptNone->SetValue( true ); - bSizer2181->Add( m_radioBtnEncryptNone, 0, wxEXPAND|wxALL, 5 ); + m_radioBtnEncryptNone = new wxRadioButton( m_panel41, wxID_ANY, _("&Disabled"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); + m_radioBtnEncryptNone->SetValue( true ); + bSizer2181->Add( m_radioBtnEncryptNone, 0, wxEXPAND|wxALL, 5 ); - m_radioBtnEncryptSsl = new wxRadioButton( m_panel41, wxID_ANY, _("&Explicit SSL/TLS"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer2181->Add( m_radioBtnEncryptSsl, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + m_radioBtnEncryptSsl = new wxRadioButton( m_panel41, wxID_ANY, _("&Explicit SSL/TLS"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer2181->Add( m_radioBtnEncryptSsl, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - bSizerFtpEncrypt->Add( bSizer2181, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizerFtpEncrypt->Add( bSizer2181, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticline5721 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizerFtpEncrypt->Add( m_staticline5721, 0, wxEXPAND, 5 ); + m_staticline5721 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizerFtpEncrypt->Add( m_staticline5721, 0, wxEXPAND, 5 ); - bSizerAuthInner->Add( bSizerFtpEncrypt, 0, wxEXPAND, 5 ); + bSizerAuthInner->Add( bSizerFtpEncrypt, 0, wxEXPAND, 5 ); - bSizerSftpAuth = new wxBoxSizer( wxHORIZONTAL ); + bSizerSftpAuth = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer218; - bSizer218 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer218; + bSizer218 = new wxBoxSizer( wxVERTICAL ); - m_staticText125 = new wxStaticText( m_panel41, wxID_ANY, _("Authentication:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText125->Wrap( -1 ); - bSizer218->Add( m_staticText125, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + m_staticText125 = new wxStaticText( m_panel41, wxID_ANY, _("Authentication:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText125->Wrap( -1 ); + bSizer218->Add( m_staticText125, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - m_radioBtnPassword = new wxRadioButton( m_panel41, wxID_ANY, _("&Password"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); - m_radioBtnPassword->SetValue( true ); - bSizer218->Add( m_radioBtnPassword, 0, wxEXPAND|wxALL, 5 ); + m_radioBtnPassword = new wxRadioButton( m_panel41, wxID_ANY, _("&Password"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); + m_radioBtnPassword->SetValue( true ); + bSizer218->Add( m_radioBtnPassword, 0, wxEXPAND|wxALL, 5 ); - m_radioBtnKeyfile = new wxRadioButton( m_panel41, wxID_ANY, _("&Key file"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer218->Add( m_radioBtnKeyfile, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + m_radioBtnKeyfile = new wxRadioButton( m_panel41, wxID_ANY, _("&Key file"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer218->Add( m_radioBtnKeyfile, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_radioBtnAgent = new wxRadioButton( m_panel41, wxID_ANY, _("&SSH agent"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer218->Add( m_radioBtnAgent, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + m_radioBtnAgent = new wxRadioButton( m_panel41, wxID_ANY, _("&SSH agent"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer218->Add( m_radioBtnAgent, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - bSizerSftpAuth->Add( bSizer218, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizerSftpAuth->Add( bSizer218, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticline572 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizerSftpAuth->Add( m_staticline572, 0, wxEXPAND, 5 ); + m_staticline572 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizerSftpAuth->Add( m_staticline572, 0, wxEXPAND, 5 ); - bSizerAuthInner->Add( bSizerSftpAuth, 0, wxEXPAND, 5 ); + bSizerAuthInner->Add( bSizerSftpAuth, 0, wxEXPAND, 5 ); - m_panelAuth = new wxPanel( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelAuth->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelAuth = new wxPanel( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelAuth->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer221; - bSizer221 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer221; + bSizer221 = new wxBoxSizer( wxVERTICAL ); - wxFlexGridSizer* fgSizer161; - fgSizer161 = new wxFlexGridSizer( 0, 2, 0, 0 ); - fgSizer161->AddGrowableCol( 1 ); - fgSizer161->SetFlexibleDirection( wxBOTH ); - fgSizer161->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + wxFlexGridSizer* fgSizer161; + fgSizer161 = new wxFlexGridSizer( 0, 2, 0, 0 ); + fgSizer161->AddGrowableCol( 1 ); + fgSizer161->SetFlexibleDirection( wxBOTH ); + fgSizer161->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_staticText123 = new wxStaticText( m_panelAuth, wxID_ANY, _("User name:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText123->Wrap( -1 ); - fgSizer161->Add( m_staticText123, 0, wxALIGN_RIGHT|wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + m_staticText123 = new wxStaticText( m_panelAuth, wxID_ANY, _("User name:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText123->Wrap( -1 ); + fgSizer161->Add( m_staticText123, 0, wxALIGN_RIGHT|wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_textCtrlUserName = new wxTextCtrl( m_panelAuth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer161->Add( m_textCtrlUserName, 0, wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + m_textCtrlUserName = new wxTextCtrl( m_panelAuth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer161->Add( m_textCtrlUserName, 0, wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticTextKeyfile = new wxStaticText( m_panelAuth, wxID_ANY, _("Private key file:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextKeyfile->Wrap( -1 ); - fgSizer161->Add( m_staticTextKeyfile, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + m_staticTextKeyfile = new wxStaticText( m_panelAuth, wxID_ANY, _("Private key file:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextKeyfile->Wrap( -1 ); + fgSizer161->Add( m_staticTextKeyfile, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - bSizerKeyFile = new wxBoxSizer( wxHORIZONTAL ); + bSizerKeyFile = new wxBoxSizer( wxHORIZONTAL ); - m_textCtrlKeyfilePath = new wxTextCtrl( m_panelAuth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerKeyFile->Add( m_textCtrlKeyfilePath, 1, wxALIGN_CENTER_VERTICAL, 5 ); + m_textCtrlKeyfilePath = new wxTextCtrl( m_panelAuth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerKeyFile->Add( m_textCtrlKeyfilePath, 1, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonSelectKeyfile = new wxButton( m_panelAuth, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectKeyfile->SetToolTip( _("Select a folder") ); + m_buttonSelectKeyfile = new wxButton( m_panelAuth, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectKeyfile->SetToolTip( _("Select a folder") ); - bSizerKeyFile->Add( m_buttonSelectKeyfile, 0, wxEXPAND, 5 ); + bSizerKeyFile->Add( m_buttonSelectKeyfile, 0, wxEXPAND, 5 ); - fgSizer161->Add( bSizerKeyFile, 0, wxALL|wxEXPAND, 5 ); + fgSizer161->Add( bSizerKeyFile, 0, wxALL|wxEXPAND, 5 ); - m_staticTextPassword = new wxStaticText( m_panelAuth, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextPassword->Wrap( -1 ); - fgSizer161->Add( m_staticTextPassword, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + m_staticTextPassword = new wxStaticText( m_panelAuth, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPassword->Wrap( -1 ); + fgSizer161->Add( m_staticTextPassword, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - bSizerPassword = new wxBoxSizer( wxHORIZONTAL ); + bSizerPassword = new wxBoxSizer( wxHORIZONTAL ); - m_textCtrlPasswordVisible = new wxTextCtrl( m_panelAuth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerPassword->Add( m_textCtrlPasswordVisible, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + m_textCtrlPasswordVisible = new wxTextCtrl( m_panelAuth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerPassword->Add( m_textCtrlPasswordVisible, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - m_textCtrlPasswordHidden = new wxTextCtrl( m_panelAuth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD ); - bSizerPassword->Add( m_textCtrlPasswordHidden, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + m_textCtrlPasswordHidden = new wxTextCtrl( m_panelAuth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD ); + bSizerPassword->Add( m_textCtrlPasswordHidden, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - m_checkBoxShowPassword = new wxCheckBox( m_panelAuth, wxID_ANY, _("&Show password"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizerPassword->Add( m_checkBoxShowPassword, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_checkBoxShowPassword = new wxCheckBox( m_panelAuth, wxID_ANY, _("&Show password"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerPassword->Add( m_checkBoxShowPassword, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - fgSizer161->Add( bSizerPassword, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + fgSizer161->Add( bSizerPassword, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - bSizer221->Add( fgSizer161, 0, wxALL|wxEXPAND, 5 ); + bSizer221->Add( fgSizer161, 0, wxALL|wxEXPAND, 5 ); - m_panelAuth->SetSizer( bSizer221 ); - m_panelAuth->Layout(); - bSizer221->Fit( m_panelAuth ); - bSizerAuthInner->Add( m_panelAuth, 1, wxALIGN_CENTER_VERTICAL, 5 ); + m_panelAuth->SetSizer( bSizer221 ); + m_panelAuth->Layout(); + bSizer221->Fit( m_panelAuth ); + bSizerAuthInner->Add( m_panelAuth, 1, wxALIGN_CENTER_VERTICAL, 5 ); - bSizerAuth->Add( bSizerAuthInner, 0, wxEXPAND, 5 ); + bSizerAuth->Add( bSizerAuthInner, 0, wxEXPAND, 5 ); - m_staticline581 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerAuth->Add( m_staticline581, 0, wxEXPAND, 5 ); + m_staticline581 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerAuth->Add( m_staticline581, 0, wxEXPAND, 5 ); - bSizer185->Add( bSizerAuth, 0, wxEXPAND, 5 ); + bSizer185->Add( bSizerAuth, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer269; - bSizer269 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer269; + bSizer269 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer3051; - bSizer3051 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer3051; + bSizer3051 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer270; - bSizer270 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer270; + bSizer270 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapServerDir = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer270->Add( m_bitmapServerDir, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapServerDir = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer270->Add( m_bitmapServerDir, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText1232 = new wxStaticText( m_panel41, wxID_ANY, _("Directory on server:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText1232->Wrap( -1 ); - bSizer270->Add( m_staticText1232, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + m_staticText1232 = new wxStaticText( m_panel41, wxID_ANY, _("Directory on server:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText1232->Wrap( -1 ); + bSizer270->Add( m_staticText1232, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer3051->Add( bSizer270, 0, wxTOP|wxRIGHT|wxLEFT|wxALIGN_BOTTOM, 5 ); + bSizer3051->Add( bSizer270, 0, wxTOP|wxRIGHT|wxLEFT|wxALIGN_BOTTOM, 5 ); - bSizer3051->Add( 0, 0, 1, 0, 5 ); + bSizer3051->Add( 0, 0, 1, 0, 5 ); - wxBoxSizer* bSizer3031; - bSizer3031 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer3031; + bSizer3031 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer303; - bSizer303 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer303; + bSizer303 = new wxBoxSizer( wxHORIZONTAL ); - m_staticline83 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer303->Add( m_staticline83, 0, wxEXPAND, 5 ); + m_staticline83 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer303->Add( m_staticline83, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer3042; - bSizer3042 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer3042; + bSizer3042 = new wxBoxSizer( wxHORIZONTAL ); - m_staticTextTimeout = new wxStaticText( m_panel41, wxID_ANY, _("Access timeout (in seconds):"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeout->Wrap( -1 ); - bSizer3042->Add( m_staticTextTimeout, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + m_staticTextTimeout = new wxStaticText( m_panel41, wxID_ANY, _("Access timeout (in seconds):"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeout->Wrap( -1 ); + bSizer3042->Add( m_staticTextTimeout, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - m_spinCtrlTimeout = new wxSpinCtrl( m_panel41, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); - bSizer3042->Add( m_spinCtrlTimeout, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + m_spinCtrlTimeout = new wxSpinCtrl( m_panel41, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); + bSizer3042->Add( m_spinCtrlTimeout, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer303->Add( bSizer3042, 0, wxALL, 5 ); + bSizer303->Add( bSizer3042, 0, wxALL, 5 ); - bSizer3031->Add( bSizer303, 0, wxALIGN_RIGHT, 5 ); + bSizer3031->Add( bSizer303, 0, wxALIGN_RIGHT, 5 ); - m_staticline82 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer3031->Add( m_staticline82, 0, wxEXPAND, 5 ); + m_staticline82 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer3031->Add( m_staticline82, 0, wxEXPAND, 5 ); - bSizer3051->Add( bSizer3031, 0, wxBOTTOM, 10 ); + bSizer3051->Add( bSizer3031, 0, wxBOTTOM, 10 ); - bSizer269->Add( bSizer3051, 0, wxEXPAND, 5 ); + bSizer269->Add( bSizer3051, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer217; - bSizer217 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer217; + bSizer217 = new wxBoxSizer( wxHORIZONTAL ); - m_textCtrlServerPath = new wxTextCtrl( m_panel41, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer217->Add( m_textCtrlServerPath, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + m_textCtrlServerPath = new wxTextCtrl( m_panel41, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer217->Add( m_textCtrlServerPath, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - m_buttonSelectFolder = new wxButton( m_panel41, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectFolder->SetToolTip( _("Select a folder") ); + m_buttonSelectFolder = new wxButton( m_panel41, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectFolder->SetToolTip( _("Select a folder") ); - bSizer217->Add( m_buttonSelectFolder, 0, wxRIGHT|wxEXPAND, 5 ); + bSizer217->Add( m_buttonSelectFolder, 0, wxRIGHT|wxEXPAND, 5 ); - bSizer269->Add( bSizer217, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + bSizer269->Add( bSizer217, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - bSizer269->Add( 0, 10, 0, 0, 5 ); + bSizer269->Add( 0, 10, 0, 0, 5 ); - bSizer185->Add( bSizer269, 0, wxEXPAND, 5 ); + bSizer185->Add( bSizer269, 0, wxEXPAND, 5 ); - m_panel41->SetSizer( bSizer185 ); - m_panel41->Layout(); - bSizer185->Fit( m_panel41 ); - bSizer134->Add( m_panel41, 1, wxEXPAND, 5 ); + m_panel41->SetSizer( bSizer185 ); + m_panel41->Layout(); + bSizer185->Fit( m_panel41 ); + bSizer134->Add( m_panel41, 1, wxEXPAND, 5 ); - m_staticline571 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer134->Add( m_staticline571, 0, wxEXPAND, 5 ); + m_staticline571 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer134->Add( m_staticline571, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer219; - bSizer219 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer219; + bSizer219 = new wxBoxSizer( wxHORIZONTAL ); - bSizer219->Add( 5, 0, 0, 0, 5 ); + bSizer219->Add( 5, 0, 0, 0, 5 ); - m_bitmapPerf = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer219->Add( m_bitmapPerf, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_bitmapPerf = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer219->Add( m_bitmapPerf, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_staticText1361 = new wxStaticText( this, wxID_ANY, _("Performance improvements:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText1361->Wrap( -1 ); - bSizer219->Add( m_staticText1361, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); + m_staticText1361 = new wxStaticText( this, wxID_ANY, _("Performance improvements:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText1361->Wrap( -1 ); + bSizer219->Add( m_staticText1361, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); - bSizer219->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizer219->Add( 0, 0, 1, wxEXPAND, 5 ); - m_hyperlink171 = new wxHyperlinkCtrl( this, wxID_ANY, _("How to get best performance?"), wxT("https://freefilesync.org/manual.php?topic=ftp-setup"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink171->SetToolTip( _("https://freefilesync.org/manual.php?topic=ftp-setup") ); + m_hyperlink171 = new wxHyperlinkCtrl( this, wxID_ANY, _("How to get best performance?"), wxT("https://freefilesync.org/manual.php?topic=ftp-setup"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink171->SetToolTip( _("https://freefilesync.org/manual.php?topic=ftp-setup") ); - bSizer219->Add( m_hyperlink171, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 ); + bSizer219->Add( m_hyperlink171, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 ); - bSizer134->Add( bSizer219, 0, wxEXPAND, 5 ); + bSizer134->Add( bSizer219, 0, wxEXPAND, 5 ); - m_staticline57 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer134->Add( m_staticline57, 0, wxEXPAND, 5 ); + m_staticline57 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer134->Add( m_staticline57, 0, wxEXPAND, 5 ); - m_panel411 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel411->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panel411 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel411->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer1851; - bSizer1851 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer1851; + bSizer1851 = new wxBoxSizer( wxVERTICAL ); - wxFlexGridSizer* fgSizer1611; - fgSizer1611 = new wxFlexGridSizer( 0, 2, 0, 0 ); - fgSizer1611->AddGrowableCol( 1 ); - fgSizer1611->SetFlexibleDirection( wxBOTH ); - fgSizer1611->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + wxFlexGridSizer* fgSizer1611; + fgSizer1611 = new wxFlexGridSizer( 0, 2, 0, 0 ); + fgSizer1611->AddGrowableCol( 1 ); + fgSizer1611->SetFlexibleDirection( wxBOTH ); + fgSizer1611->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - bSizerConnectionsLabel = new wxBoxSizer( wxVERTICAL ); + bSizerConnectionsLabel = new wxBoxSizer( wxVERTICAL ); - m_staticTextConnectionsLabel = new wxStaticText( m_panel411, wxID_ANY, _("Parallel file operations:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextConnectionsLabel->Wrap( -1 ); - bSizerConnectionsLabel->Add( m_staticTextConnectionsLabel, 0, 0, 5 ); + m_staticTextConnectionsLabel = new wxStaticText( m_panel411, wxID_ANY, _("Parallel file operations:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextConnectionsLabel->Wrap( -1 ); + bSizerConnectionsLabel->Add( m_staticTextConnectionsLabel, 0, 0, 5 ); - m_staticTextConnectionsLabelSub = new wxStaticText( m_panel411, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextConnectionsLabelSub->Wrap( -1 ); - bSizerConnectionsLabel->Add( m_staticTextConnectionsLabelSub, 0, wxALIGN_RIGHT, 5 ); + m_staticTextConnectionsLabelSub = new wxStaticText( m_panel411, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextConnectionsLabelSub->Wrap( -1 ); + bSizerConnectionsLabel->Add( m_staticTextConnectionsLabelSub, 0, wxALIGN_RIGHT, 5 ); - fgSizer1611->Add( bSizerConnectionsLabel, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer1611->Add( bSizerConnectionsLabel, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - wxBoxSizer* bSizer300; - bSizer300 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer300; + bSizer300 = new wxBoxSizer( wxHORIZONTAL ); - m_spinCtrlConnectionCount = new wxSpinCtrl( m_panel411, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); - bSizer300->Add( m_spinCtrlConnectionCount, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + m_spinCtrlConnectionCount = new wxSpinCtrl( m_panel411, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); + bSizer300->Add( m_spinCtrlConnectionCount, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticTextConnectionCountDescr = new wxStaticText( m_panel411, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextConnectionCountDescr->Wrap( -1 ); - m_staticTextConnectionCountDescr->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticTextConnectionCountDescr = new wxStaticText( m_panel411, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextConnectionCountDescr->Wrap( -1 ); + m_staticTextConnectionCountDescr->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer300->Add( m_staticTextConnectionCountDescr, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + bSizer300->Add( m_staticTextConnectionCountDescr, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_hyperlinkDeRequired = new wxHyperlinkCtrl( m_panel411, wxID_ANY, _("Requires FreeFileSync Donation Edition"), wxT("https://freefilesync.org/faq.php#donation-edition"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlinkDeRequired->SetToolTip( _("https://freefilesync.org/faq.php#donation-edition") ); + m_hyperlinkDeRequired = new wxHyperlinkCtrl( m_panel411, wxID_ANY, _("Requires FreeFileSync Donation Edition"), wxT("https://freefilesync.org/faq.php#donation-edition"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlinkDeRequired->SetToolTip( _("https://freefilesync.org/faq.php#donation-edition") ); - bSizer300->Add( m_hyperlinkDeRequired, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer300->Add( m_hyperlinkDeRequired, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - fgSizer1611->Add( bSizer300, 0, wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer1611->Add( bSizer300, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticTextChannelCountSftp = new wxStaticText( m_panel411, wxID_ANY, _("SFTP channels per connection:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextChannelCountSftp->Wrap( -1 ); - fgSizer1611->Add( m_staticTextChannelCountSftp, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxTOP|wxBOTTOM|wxLEFT, 5 ); + m_staticTextChannelCountSftp = new wxStaticText( m_panel411, wxID_ANY, _("SFTP channels per connection:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextChannelCountSftp->Wrap( -1 ); + fgSizer1611->Add( m_staticTextChannelCountSftp, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxTOP|wxBOTTOM|wxLEFT, 5 ); - wxBoxSizer* bSizer3001; - bSizer3001 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer3001; + bSizer3001 = new wxBoxSizer( wxHORIZONTAL ); - m_spinCtrlChannelCountSftp = new wxSpinCtrl( m_panel411, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); - bSizer3001->Add( m_spinCtrlChannelCountSftp, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + m_spinCtrlChannelCountSftp = new wxSpinCtrl( m_panel411, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); + bSizer3001->Add( m_spinCtrlChannelCountSftp, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonChannelCountSftp = new wxButton( m_panel411, wxID_ANY, _("Detect server limit"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer3001->Add( m_buttonChannelCountSftp, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_buttonChannelCountSftp = new wxButton( m_panel411, wxID_ANY, _("Detect server limit"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer3001->Add( m_buttonChannelCountSftp, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - fgSizer1611->Add( bSizer3001, 0, wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer1611->Add( bSizer3001, 0, wxALIGN_CENTER_VERTICAL, 5 ); - fgSizer1611->Add( 0, 0, 0, 0, 5 ); + fgSizer1611->Add( 0, 0, 0, 0, 5 ); - wxBoxSizer* bSizer304; - bSizer304 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer304; + bSizer304 = new wxBoxSizer( wxHORIZONTAL ); - m_checkBoxAllowZlib = new wxCheckBox( m_panel411, wxID_ANY, _("Enable &compression"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer304->Add( m_checkBoxAllowZlib, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_checkBoxAllowZlib = new wxCheckBox( m_panel411, wxID_ANY, _("Enable &compression"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer304->Add( m_checkBoxAllowZlib, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_staticTextZlibDescr = new wxStaticText( m_panel411, wxID_ANY, _("(zlib)"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextZlibDescr->Wrap( -1 ); - m_staticTextZlibDescr->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticTextZlibDescr = new wxStaticText( m_panel411, wxID_ANY, _("(zlib)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextZlibDescr->Wrap( -1 ); + m_staticTextZlibDescr->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer304->Add( m_staticTextZlibDescr, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + bSizer304->Add( m_staticTextZlibDescr, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - fgSizer1611->Add( bSizer304, 0, wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer1611->Add( bSizer304, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer1851->Add( fgSizer1611, 0, wxALL, 5 ); + bSizer1851->Add( fgSizer1611, 0, wxALL, 5 ); - m_panel411->SetSizer( bSizer1851 ); - m_panel411->Layout(); - bSizer1851->Fit( m_panel411 ); - bSizer134->Add( m_panel411, 0, wxEXPAND, 5 ); + m_panel411->SetSizer( bSizer1851 ); + m_panel411->Layout(); + bSizer1851->Fit( m_panel411 ); + bSizer134->Add( m_panel411, 0, wxEXPAND, 5 ); - m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 ); + m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 ); - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizerStdButtons->Add( m_buttonOkay, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizerStdButtons->Add( m_buttonOkay, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer134->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + bSizer134->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - this->SetSizer( bSizer134 ); - this->Layout(); - bSizer134->Fit( this ); + this->SetSizer( bSizer134 ); + this->Layout(); + bSizer134->Fit( this ); - this->Centre( wxBOTH ); + this->Centre( wxBOTH ); - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CloudSetupDlgGenerated::onClose ) ); - m_toggleBtnGdrive->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onConnectionGdrive ), NULL, this ); - m_toggleBtnSftp->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onConnectionSftp ), NULL, this ); - m_toggleBtnFtp->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onConnectionFtp ), NULL, this ); - m_listBoxGdriveUsers->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( CloudSetupDlgGenerated::onGdriveUserSelect ), NULL, this ); - m_buttonGdriveAddUser->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onGdriveUserAdd ), NULL, this ); - m_buttonGdriveRemoveUser->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onGdriveUserRemove ), NULL, this ); - m_radioBtnPassword->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CloudSetupDlgGenerated::onAuthPassword ), NULL, this ); - m_radioBtnKeyfile->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CloudSetupDlgGenerated::onAuthKeyfile ), NULL, this ); - m_radioBtnAgent->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CloudSetupDlgGenerated::onAuthAgent ), NULL, this ); - m_buttonSelectKeyfile->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onSelectKeyfile ), NULL, this ); - m_checkBoxShowPassword->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onToggleShowPassword ), NULL, this ); - m_buttonSelectFolder->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onBrowseCloudFolder ), NULL, this ); - m_buttonChannelCountSftp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onDetectServerChannelLimit ), NULL, this ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onCancel ), NULL, this ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CloudSetupDlgGenerated::onClose ) ); + m_toggleBtnGdrive->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onConnectionGdrive ), NULL, this ); + m_toggleBtnSftp->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onConnectionSftp ), NULL, this ); + m_toggleBtnFtp->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onConnectionFtp ), NULL, this ); + m_listBoxGdriveUsers->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( CloudSetupDlgGenerated::onGdriveUserSelect ), NULL, this ); + m_buttonGdriveAddUser->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onGdriveUserAdd ), NULL, this ); + m_buttonGdriveRemoveUser->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onGdriveUserRemove ), NULL, this ); + m_radioBtnPassword->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CloudSetupDlgGenerated::onAuthPassword ), NULL, this ); + m_radioBtnKeyfile->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CloudSetupDlgGenerated::onAuthKeyfile ), NULL, this ); + m_radioBtnAgent->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( CloudSetupDlgGenerated::onAuthAgent ), NULL, this ); + m_buttonSelectKeyfile->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onSelectKeyfile ), NULL, this ); + m_checkBoxShowPassword->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onToggleShowPassword ), NULL, this ); + m_buttonSelectFolder->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onBrowseCloudFolder ), NULL, this ); + m_buttonChannelCountSftp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onDetectServerChannelLimit ), NULL, this ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CloudSetupDlgGenerated::onCancel ), NULL, this ); } CloudSetupDlgGenerated::~CloudSetupDlgGenerated() @@ -3106,61 +3105,61 @@ CloudSetupDlgGenerated::~CloudSetupDlgGenerated() AbstractFolderPickerGenerated::AbstractFolderPickerGenerated( 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 ) ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer134; - bSizer134 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer134; + bSizer134 = new wxBoxSizer( wxVERTICAL ); - m_panel41 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel41->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panel41 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel41->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer185; - bSizer185 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer185; + bSizer185 = new wxBoxSizer( wxVERTICAL ); - m_staticTextStatus = new wxStaticText( m_panel41, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatus->Wrap( -1 ); - bSizer185->Add( m_staticTextStatus, 0, wxALL, 5 ); + m_staticTextStatus = new wxStaticText( m_panel41, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatus->Wrap( -1 ); + bSizer185->Add( m_staticTextStatus, 0, wxALL, 5 ); - m_treeCtrlFileSystem = new wxTreeCtrl( m_panel41, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxTR_FULL_ROW_HIGHLIGHT|wxTR_HAS_BUTTONS|wxTR_LINES_AT_ROOT|wxTR_NO_LINES|wxBORDER_NONE ); - bSizer185->Add( m_treeCtrlFileSystem, 1, wxEXPAND, 5 ); + m_treeCtrlFileSystem = new wxTreeCtrl( m_panel41, wxID_ANY, wxDefaultPosition, wxSize( -1, -1 ), wxTR_FULL_ROW_HIGHLIGHT|wxTR_HAS_BUTTONS|wxTR_LINES_AT_ROOT|wxTR_NO_LINES|wxBORDER_NONE ); + bSizer185->Add( m_treeCtrlFileSystem, 1, wxEXPAND, 5 ); - m_panel41->SetSizer( bSizer185 ); - m_panel41->Layout(); - bSizer185->Fit( m_panel41 ); - bSizer134->Add( m_panel41, 1, wxEXPAND, 5 ); + m_panel41->SetSizer( bSizer185 ); + m_panel41->Layout(); + bSizer185->Fit( m_panel41 ); + bSizer134->Add( m_panel41, 1, wxEXPAND, 5 ); - m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 ); + m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 ); - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - m_buttonOkay = new wxButton( this, wxID_OK, _("Select Folder"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonOkay = new wxButton( this, wxID_OK, _("Select Folder"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizerStdButtons->Add( m_buttonOkay, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizerStdButtons->Add( m_buttonOkay, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer134->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + bSizer134->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - this->SetSizer( bSizer134 ); - this->Layout(); - bSizer134->Fit( this ); + this->SetSizer( bSizer134 ); + this->Layout(); + bSizer134->Fit( this ); - this->Centre( wxBOTH ); + this->Centre( wxBOTH ); - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AbstractFolderPickerGenerated::onClose ) ); - m_treeCtrlFileSystem->Connect( wxEVT_COMMAND_TREE_ITEM_EXPANDING, wxTreeEventHandler( AbstractFolderPickerGenerated::onExpandNode ), NULL, this ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AbstractFolderPickerGenerated::onOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AbstractFolderPickerGenerated::onCancel ), NULL, this ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AbstractFolderPickerGenerated::onClose ) ); + m_treeCtrlFileSystem->Connect( wxEVT_COMMAND_TREE_ITEM_EXPANDING, wxTreeEventHandler( AbstractFolderPickerGenerated::onExpandNode ), NULL, this ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AbstractFolderPickerGenerated::onOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AbstractFolderPickerGenerated::onCancel ), NULL, this ); } AbstractFolderPickerGenerated::~AbstractFolderPickerGenerated() @@ -3169,225 +3168,225 @@ AbstractFolderPickerGenerated::~AbstractFolderPickerGenerated() 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 ) ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer134; - bSizer134 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer134; + bSizer134 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + 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_bitmapSync = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer72->Add( m_bitmapSync, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); - m_staticTextCaption = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCaption->Wrap( -1 ); - bSizer72->Add( m_staticTextCaption, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + m_staticTextCaption = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCaption->Wrap( -1 ); + bSizer72->Add( m_staticTextCaption, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - bSizer134->Add( bSizer72, 0, 0, 5 ); + 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_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 ) ); + m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer185; - bSizer185 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer185; + bSizer185 = new wxBoxSizer( wxHORIZONTAL ); - bSizer185->Add( 40, 0, 0, 0, 5 ); + bSizer185->Add( 40, 0, 0, 0, 5 ); - bSizer185->Add( 0, 0, 1, 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 ); + 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* bSizer162; + bSizer162 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer182; - bSizer182 = new wxBoxSizer( wxHORIZONTAL ); + 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 ); + 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 ); + bSizer182->Add( 0, 0, 1, wxEXPAND, 5 ); - m_staticTextSyncVar = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextSyncVar->Wrap( -1 ); - m_staticTextSyncVar->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextSyncVar = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextSyncVar->Wrap( -1 ); + m_staticTextSyncVar->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer182->Add( m_staticTextSyncVar, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + bSizer182->Add( m_staticTextSyncVar, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_bitmapSyncVar = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer182->Add( m_bitmapSyncVar, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_bitmapSyncVar = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer182->Add( m_bitmapSyncVar, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer182->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizer182->Add( 0, 0, 1, wxEXPAND, 5 ); - bSizer162->Add( bSizer182, 0, wxALL|wxEXPAND, 5 ); + bSizer162->Add( bSizer182, 0, wxALL|wxEXPAND, 5 ); - m_staticline14 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer162->Add( m_staticline14, 0, wxEXPAND, 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 ); + 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 ); + 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 ); + wxFlexGridSizer* fgSizer11; + fgSizer11 = new wxFlexGridSizer( 2, 7, 2, 5 ); + fgSizer11->SetFlexibleDirection( wxBOTH ); + fgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + 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 ); + fgSizer11->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be updated") ); + m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be updated") ); - fgSizer11->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer11->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + 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 ); + fgSizer11->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapData->SetToolTip( _("Total bytes to copy") ); + 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 ); + fgSizer11->Add( m_bitmapData, 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") ); + 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 ); + fgSizer11->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateRight->SetToolTip( _("Number of files that will be updated") ); + m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateRight->SetToolTip( _("Number of files that will be updated") ); - fgSizer11->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + fgSizer11->Add( m_bitmapUpdateRight, 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") ); + 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 ); + fgSizer11->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 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") ); + 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 ); + fgSizer11->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 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 updated") ); + 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 updated") ); - fgSizer11->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + fgSizer11->Add( m_staticTextUpdateLeft, 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") ); + 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 ); + fgSizer11->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextData->Wrap( -1 ); - m_staticTextData->SetToolTip( _("Total bytes to copy") ); + 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 ); + fgSizer11->Add( m_staticTextData, 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") ); + 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 ); + fgSizer11->Add( m_staticTextCreateRight, 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 updated") ); + 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 updated") ); - fgSizer11->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer11->Add( m_staticTextUpdateRight, 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") ); + 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 ); + fgSizer11->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer181->Add( fgSizer11, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + bSizer181->Add( fgSizer11, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - bSizer162->Add( bSizer181, 0, wxEXPAND|wxALL, 5 ); + bSizer162->Add( bSizer181, 0, wxEXPAND|wxALL, 5 ); - bSizer185->Add( bSizer162, 0, 0, 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 ); + 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( 0, 0, 1, 0, 5 ); - bSizer185->Add( 40, 0, 0, 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_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 ); + m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer164; - bSizer164 = new wxBoxSizer( wxVERTICAL ); + 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|wxALL, 5 ); + m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("&Don't show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer164->Add( m_checkBoxDontShowAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - m_buttonStartSync = new wxButton( this, wxID_OK, _("Start"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonStartSync = new wxButton( this, wxID_OK, _("Start"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonStartSync->SetDefault(); - m_buttonStartSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonStartSync->SetDefault(); + m_buttonStartSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizerStdButtons->Add( m_buttonStartSync, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizerStdButtons->Add( m_buttonStartSync, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 ); + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 ); - bSizer164->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + bSizer164->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - bSizer134->Add( bSizer164, 1, wxEXPAND, 5 ); + bSizer134->Add( bSizer164, 1, wxEXPAND, 5 ); - this->SetSizer( bSizer134 ); - this->Layout(); - bSizer134->Fit( this ); + this->SetSizer( bSizer134 ); + this->Layout(); + bSizer134->Fit( this ); - this->Centre( wxBOTH ); + 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 ); + // 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() @@ -3396,198 +3395,198 @@ SyncConfirmationDlgGenerated::~SyncConfirmationDlgGenerated() CompareProgressDlgGenerated::CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name ) { - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer1811; - bSizer1811 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer1811; + bSizer1811 = new wxBoxSizer( wxVERTICAL ); - bSizer1811->Add( 0, 0, 1, 0, 5 ); + bSizer1811->Add( 0, 0, 1, 0, 5 ); - m_staticTextStatus = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatus->Wrap( -1 ); - bSizer1811->Add( m_staticTextStatus, 0, wxTOP|wxRIGHT|wxLEFT, 10 ); + m_staticTextStatus = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatus->Wrap( -1 ); + bSizer1811->Add( m_staticTextStatus, 0, wxTOP|wxRIGHT|wxLEFT, 10 ); - wxBoxSizer* bSizer199; - bSizer199 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer199; + bSizer199 = new wxBoxSizer( wxHORIZONTAL ); - bSizer199->Add( 10, 0, 0, 0, 5 ); + bSizer199->Add( 10, 0, 0, 0, 5 ); - ffgSizer11 = new wxFlexGridSizer( 2, 0, 5, 5 ); - ffgSizer11->SetFlexibleDirection( wxBOTH ); - ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer11 = new wxFlexGridSizer( 2, 0, 5, 5 ); + ffgSizer11->SetFlexibleDirection( wxBOTH ); + ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_staticTextProcessed = new wxStaticText( this, wxID_ANY, _("Processed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextProcessed->Wrap( -1 ); - ffgSizer11->Add( m_staticTextProcessed, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT, 5 ); + m_staticTextProcessed = new wxStaticText( this, wxID_ANY, _("Processed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextProcessed->Wrap( -1 ); + ffgSizer11->Add( m_staticTextProcessed, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT, 5 ); - m_staticTextRemaining = new wxStaticText( this, wxID_ANY, _("Remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextRemaining->Wrap( -1 ); - ffgSizer11->Add( m_staticTextRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_staticTextRemaining = new wxStaticText( this, wxID_ANY, _("Remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRemaining->Wrap( -1 ); + ffgSizer11->Add( m_staticTextRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizer199->Add( ffgSizer11, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 10 ); + bSizer199->Add( ffgSizer11, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 10 ); - m_panelItemStats = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelItemStats->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + m_panelItemStats = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelItemStats->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer291; - bSizer291 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer291; + bSizer291 = new wxBoxSizer( wxVERTICAL ); - ffgSizer111 = new wxFlexGridSizer( 0, 2, 5, 5 ); - ffgSizer111->SetFlexibleDirection( wxBOTH ); - ffgSizer111->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer111 = new wxFlexGridSizer( 0, 2, 5, 5 ); + ffgSizer111->SetFlexibleDirection( wxBOTH ); + ffgSizer111->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - wxBoxSizer* bSizer293; - bSizer293 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer293; + bSizer293 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapItemStat = new wxStaticBitmap( m_panelItemStats, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer293->Add( m_bitmapItemStat, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_bitmapItemStat = new wxStaticBitmap( m_panelItemStats, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer293->Add( m_bitmapItemStat, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizer293->Add( 0, 0, 1, 0, 5 ); + bSizer293->Add( 0, 0, 1, 0, 5 ); - m_staticTextItemsProcessed = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextItemsProcessed->Wrap( -1 ); - m_staticTextItemsProcessed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextItemsProcessed = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_staticTextItemsProcessed->Wrap( -1 ); + m_staticTextItemsProcessed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer293->Add( m_staticTextItemsProcessed, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer293->Add( m_staticTextItemsProcessed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - ffgSizer111->Add( bSizer293, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + ffgSizer111->Add( bSizer293, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - m_staticTextBytesProcessed = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextBytesProcessed->Wrap( -1 ); - ffgSizer111->Add( m_staticTextBytesProcessed, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + m_staticTextBytesProcessed = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextBytesProcessed->Wrap( -1 ); + ffgSizer111->Add( m_staticTextBytesProcessed, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_staticTextItemsRemaining = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextItemsRemaining->Wrap( -1 ); - m_staticTextItemsRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextItemsRemaining = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_staticTextItemsRemaining->Wrap( -1 ); + m_staticTextItemsRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - ffgSizer111->Add( m_staticTextItemsRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + ffgSizer111->Add( m_staticTextItemsRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticTextBytesRemaining = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextBytesRemaining->Wrap( -1 ); - ffgSizer111->Add( m_staticTextBytesRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + m_staticTextBytesRemaining = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextBytesRemaining->Wrap( -1 ); + ffgSizer111->Add( m_staticTextBytesRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer291->Add( ffgSizer111, 0, wxALL, 5 ); + bSizer291->Add( ffgSizer111, 0, wxALL, 5 ); - m_panelItemStats->SetSizer( bSizer291 ); - m_panelItemStats->Layout(); - bSizer291->Fit( m_panelItemStats ); - bSizer199->Add( m_panelItemStats, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); + m_panelItemStats->SetSizer( bSizer291 ); + m_panelItemStats->Layout(); + bSizer291->Fit( m_panelItemStats ); + bSizer199->Add( m_panelItemStats, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); - m_panelTimeStats = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelTimeStats->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + m_panelTimeStats = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelTimeStats->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer292; - bSizer292 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer292; + bSizer292 = new wxBoxSizer( wxVERTICAL ); - ffgSizer112 = new wxFlexGridSizer( 0, 1, 5, 5 ); - ffgSizer112->SetFlexibleDirection( wxBOTH ); - ffgSizer112->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer112 = new wxFlexGridSizer( 0, 1, 5, 5 ); + ffgSizer112->SetFlexibleDirection( wxBOTH ); + ffgSizer112->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - wxBoxSizer* bSizer294; - bSizer294 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer294; + bSizer294 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapTimeStat = new wxStaticBitmap( m_panelTimeStats, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer294->Add( m_bitmapTimeStat, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_bitmapTimeStat = new wxStaticBitmap( m_panelTimeStats, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer294->Add( m_bitmapTimeStat, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizer294->Add( 0, 0, 1, 0, 5 ); + bSizer294->Add( 0, 0, 1, 0, 5 ); - m_staticTextTimeElapsed = new wxStaticText( m_panelTimeStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeElapsed->Wrap( -1 ); - m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextTimeElapsed = new wxStaticText( m_panelTimeStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeElapsed->Wrap( -1 ); + m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer294->Add( m_staticTextTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer294->Add( m_staticTextTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - ffgSizer112->Add( bSizer294, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + ffgSizer112->Add( bSizer294, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - m_staticTextTimeRemaining = new wxStaticText( m_panelTimeStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeRemaining->Wrap( -1 ); - m_staticTextTimeRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextTimeRemaining = new wxStaticText( m_panelTimeStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeRemaining->Wrap( -1 ); + m_staticTextTimeRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - ffgSizer112->Add( m_staticTextTimeRemaining, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + ffgSizer112->Add( m_staticTextTimeRemaining, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - bSizer292->Add( ffgSizer112, 0, wxALL, 5 ); + bSizer292->Add( ffgSizer112, 0, wxALL, 5 ); - m_panelTimeStats->SetSizer( bSizer292 ); - m_panelTimeStats->Layout(); - bSizer292->Fit( m_panelTimeStats ); - bSizer199->Add( m_panelTimeStats, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); + m_panelTimeStats->SetSizer( bSizer292 ); + m_panelTimeStats->Layout(); + bSizer292->Fit( m_panelTimeStats ); + bSizer199->Add( m_panelTimeStats, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); - bSizerErrorsRetry = new wxBoxSizer( wxHORIZONTAL ); + bSizerErrorsRetry = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapRetryErrors = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerErrorsRetry->Add( m_bitmapRetryErrors, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapRetryErrors = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerErrorsRetry->Add( m_bitmapRetryErrors, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText1461 = new wxStaticText( this, wxID_ANY, _("Automatic retry"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText1461->Wrap( -1 ); - bSizerErrorsRetry->Add( m_staticText1461, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + m_staticText1461 = new wxStaticText( this, wxID_ANY, _("Automatic retry"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText1461->Wrap( -1 ); + bSizerErrorsRetry->Add( m_staticText1461, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - m_staticTextRetryCount = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextRetryCount->Wrap( -1 ); - bSizerErrorsRetry->Add( m_staticTextRetryCount, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticTextRetryCount = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRetryCount->Wrap( -1 ); + bSizerErrorsRetry->Add( m_staticTextRetryCount, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer199->Add( bSizerErrorsRetry, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); + bSizer199->Add( bSizerErrorsRetry, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); - bSizerErrorsIgnore = new wxBoxSizer( wxHORIZONTAL ); + bSizerErrorsIgnore = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapIgnoreErrors = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerErrorsIgnore->Add( m_bitmapIgnoreErrors, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapIgnoreErrors = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerErrorsIgnore->Add( m_bitmapIgnoreErrors, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText146 = new wxStaticText( this, wxID_ANY, _("Ignore errors"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText146->Wrap( -1 ); - bSizerErrorsIgnore->Add( m_staticText146, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + m_staticText146 = new wxStaticText( this, wxID_ANY, _("Ignore errors"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText146->Wrap( -1 ); + bSizerErrorsIgnore->Add( m_staticText146, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - bSizer199->Add( bSizerErrorsIgnore, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); + bSizer199->Add( bSizerErrorsIgnore, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); - bSizerProgressGraph = new wxBoxSizer( wxHORIZONTAL ); + bSizerProgressGraph = new wxBoxSizer( wxHORIZONTAL ); - ffgSizer113 = new wxFlexGridSizer( 2, 0, 5, 5 ); - ffgSizer113->SetFlexibleDirection( wxBOTH ); - ffgSizer113->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer113 = new wxFlexGridSizer( 2, 0, 5, 5 ); + ffgSizer113->SetFlexibleDirection( wxBOTH ); + ffgSizer113->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - wxStaticText* m_staticText99; - m_staticText99 = new wxStaticText( this, wxID_ANY, _("Bytes:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText99->Wrap( -1 ); - ffgSizer113->Add( m_staticText99, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + wxStaticText* m_staticText99; + m_staticText99 = new wxStaticText( this, wxID_ANY, _("Bytes:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText99->Wrap( -1 ); + ffgSizer113->Add( m_staticText99, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - wxStaticText* m_staticText100; - m_staticText100 = new wxStaticText( this, wxID_ANY, _("Items:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText100->Wrap( -1 ); - ffgSizer113->Add( m_staticText100, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + wxStaticText* m_staticText100; + m_staticText100 = new wxStaticText( this, wxID_ANY, _("Items:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText100->Wrap( -1 ); + ffgSizer113->Add( m_staticText100, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - bSizerProgressGraph->Add( ffgSizer113, 0, wxALL, 5 ); + bSizerProgressGraph->Add( ffgSizer113, 0, wxALL, 5 ); - m_panelProgressGraph = new zen::Graph2D( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_panelProgressGraph->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + m_panelProgressGraph = new zen::Graph2D( this, wxID_ANY, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_panelProgressGraph->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - bSizerProgressGraph->Add( m_panelProgressGraph, 1, wxEXPAND, 5 ); + bSizerProgressGraph->Add( m_panelProgressGraph, 1, wxEXPAND, 5 ); - bSizer199->Add( bSizerProgressGraph, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); + bSizer199->Add( bSizerProgressGraph, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 10 ); - bSizer1811->Add( bSizer199, 0, wxEXPAND, 5 ); + bSizer1811->Add( bSizer199, 0, wxEXPAND, 5 ); - bSizer1811->Add( 0, 0, 1, 0, 5 ); + bSizer1811->Add( 0, 0, 1, 0, 5 ); - this->SetSizer( bSizer1811 ); - this->Layout(); - bSizer1811->Fit( this ); + this->SetSizer( bSizer1811 ); + this->Layout(); + bSizer1811->Fit( this ); } CompareProgressDlgGenerated::~CompareProgressDlgGenerated() @@ -3596,336 +3595,336 @@ CompareProgressDlgGenerated::~CompareProgressDlgGenerated() SyncProgressPanelGenerated::SyncProgressPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name ) { - bSizerRoot = new wxBoxSizer( wxVERTICAL ); + bSizerRoot = new wxBoxSizer( wxVERTICAL ); - m_panel53 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel53->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panel53 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel53->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer301; - bSizer301 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer301; + bSizer301 = new wxBoxSizer( wxVERTICAL ); - bSizer42 = new wxBoxSizer( wxHORIZONTAL ); + bSizer42 = new wxBoxSizer( wxHORIZONTAL ); - bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); - m_bitmapStatus = new wxStaticBitmap( m_panel53, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer42->Add( m_bitmapStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); + m_bitmapStatus = new wxStaticBitmap( m_panel53, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer42->Add( m_bitmapStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); - m_staticTextPhase = new wxStaticText( m_panel53, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextPhase->Wrap( -1 ); - m_staticTextPhase->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextPhase = new wxStaticText( m_panel53, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextPhase->Wrap( -1 ); + m_staticTextPhase->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer42->Add( m_staticTextPhase, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + bSizer42->Add( m_staticTextPhase, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - wxBoxSizer* bSizer247; - bSizer247 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer247; + bSizer247 = new wxBoxSizer( wxHORIZONTAL ); - bSizer247->Add( 0, 0, 1, 0, 5 ); + bSizer247->Add( 0, 0, 1, 0, 5 ); - m_bpButtonMinimizeToTray = new wxBitmapButton( m_panel53, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonMinimizeToTray->SetToolTip( _("Minimize to notification area") ); + m_bpButtonMinimizeToTray = new wxBitmapButton( m_panel53, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonMinimizeToTray->SetToolTip( _("Minimize to notification area") ); - bSizer247->Add( m_bpButtonMinimizeToTray, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); + bSizer247->Add( m_bpButtonMinimizeToTray, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); - bSizer42->Add( bSizer247, 1, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer42->Add( bSizer247, 1, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer301->Add( bSizer42, 0, wxEXPAND, 5 ); + bSizer301->Add( bSizer42, 0, wxEXPAND, 5 ); - bSizerStatusText = new wxBoxSizer( wxVERTICAL ); + bSizerStatusText = new wxBoxSizer( wxVERTICAL ); - m_staticTextStatus = new wxStaticText( m_panel53, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatus->Wrap( -1 ); - bSizerStatusText->Add( m_staticTextStatus, 0, wxEXPAND|wxLEFT, 15 ); + m_staticTextStatus = new wxStaticText( m_panel53, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatus->Wrap( -1 ); + bSizerStatusText->Add( m_staticTextStatus, 0, wxEXPAND|wxLEFT, 15 ); - bSizerStatusText->Add( 0, 10, 0, 0, 5 ); + bSizerStatusText->Add( 0, 10, 0, 0, 5 ); - bSizer301->Add( bSizerStatusText, 0, wxEXPAND, 5 ); + bSizer301->Add( bSizerStatusText, 0, wxEXPAND, 5 ); - m_panel53->SetSizer( bSizer301 ); - m_panel53->Layout(); - bSizer301->Fit( m_panel53 ); - bSizerRoot->Add( m_panel53, 0, wxEXPAND, 5 ); + m_panel53->SetSizer( bSizer301 ); + m_panel53->Layout(); + bSizer301->Fit( m_panel53 ); + bSizerRoot->Add( m_panel53, 0, wxEXPAND, 5 ); - m_panelProgress = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelProgress->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panelProgress = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelProgress->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer173; - bSizer173 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer173; + bSizer173 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer161; - bSizer161 = new wxBoxSizer( wxVERTICAL ); + 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 ) ); + 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, wxEXPAND|wxLEFT, 10 ); + bSizer161->Add( m_panelGraphBytes, 1, wxEXPAND|wxLEFT, 10 ); - wxBoxSizer* bSizer232; - bSizer232 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer232; + bSizer232 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer233; - bSizer233 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer233; + bSizer233 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer175; - bSizer175 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer175; + bSizer175 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapGraphKeyBytes = new wxStaticBitmap( m_panelProgress, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer175->Add( m_bitmapGraphKeyBytes, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_bitmapGraphKeyBytes = new wxStaticBitmap( m_panelProgress, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer175->Add( m_bitmapGraphKeyBytes, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - wxStaticText* m_staticText99; - m_staticText99 = new wxStaticText( m_panelProgress, wxID_ANY, _("Bytes"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText99->Wrap( -1 ); - bSizer175->Add( m_staticText99, 0, wxALIGN_CENTER_VERTICAL, 5 ); + wxStaticText* m_staticText99; + m_staticText99 = new wxStaticText( m_panelProgress, wxID_ANY, _("Bytes"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText99->Wrap( -1 ); + bSizer175->Add( m_staticText99, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer233->Add( bSizer175, 0, wxALL, 5 ); + bSizer233->Add( bSizer175, 0, wxALL, 5 ); - bSizer233->Add( 0, 0, 1, 0, 5 ); + bSizer233->Add( 0, 0, 1, 0, 5 ); - wxBoxSizer* bSizer174; - bSizer174 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer174; + bSizer174 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapGraphKeyItems = new wxStaticBitmap( m_panelProgress, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer174->Add( m_bitmapGraphKeyItems, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_bitmapGraphKeyItems = new wxStaticBitmap( m_panelProgress, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer174->Add( m_bitmapGraphKeyItems, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - wxStaticText* m_staticText100; - m_staticText100 = new wxStaticText( m_panelProgress, wxID_ANY, _("Items"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText100->Wrap( -1 ); - bSizer174->Add( m_staticText100, 0, wxALIGN_CENTER_VERTICAL, 5 ); + wxStaticText* m_staticText100; + m_staticText100 = new wxStaticText( m_panelProgress, wxID_ANY, _("Items"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText100->Wrap( -1 ); + bSizer174->Add( m_staticText100, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer233->Add( bSizer174, 0, wxALL, 5 ); + bSizer233->Add( bSizer174, 0, wxALL, 5 ); - bSizer232->Add( bSizer233, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + bSizer232->Add( bSizer233, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - ffgSizer11 = new wxFlexGridSizer( 2, 0, 5, 5 ); - ffgSizer11->SetFlexibleDirection( wxBOTH ); - ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer11 = new wxFlexGridSizer( 2, 0, 5, 5 ); + ffgSizer11->SetFlexibleDirection( wxBOTH ); + ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_staticTextProcessed = new wxStaticText( m_panelProgress, wxID_ANY, _("Processed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextProcessed->Wrap( -1 ); - ffgSizer11->Add( m_staticTextProcessed, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT, 5 ); + m_staticTextProcessed = new wxStaticText( m_panelProgress, wxID_ANY, _("Processed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextProcessed->Wrap( -1 ); + ffgSizer11->Add( m_staticTextProcessed, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT, 5 ); - m_staticTextRemaining = new wxStaticText( m_panelProgress, wxID_ANY, _("Remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextRemaining->Wrap( -1 ); - ffgSizer11->Add( m_staticTextRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_staticTextRemaining = new wxStaticText( m_panelProgress, wxID_ANY, _("Remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRemaining->Wrap( -1 ); + ffgSizer11->Add( m_staticTextRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizer232->Add( ffgSizer11, 0, wxTOP|wxBOTTOM|wxALIGN_CENTER_VERTICAL, 10 ); + bSizer232->Add( ffgSizer11, 0, wxTOP|wxBOTTOM|wxALIGN_CENTER_VERTICAL, 10 ); - m_panelItemStats = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelItemStats->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + m_panelItemStats = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelItemStats->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer291; - bSizer291 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer291; + bSizer291 = new wxBoxSizer( wxVERTICAL ); - ffgSizer111 = new wxFlexGridSizer( 2, 0, 5, 5 ); - ffgSizer111->SetFlexibleDirection( wxBOTH ); - ffgSizer111->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer111 = new wxFlexGridSizer( 2, 0, 5, 5 ); + ffgSizer111->SetFlexibleDirection( wxBOTH ); + ffgSizer111->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - wxBoxSizer* bSizer293; - bSizer293 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer293; + bSizer293 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapItemStat = new wxStaticBitmap( m_panelItemStats, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer293->Add( m_bitmapItemStat, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_bitmapItemStat = new wxStaticBitmap( m_panelItemStats, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer293->Add( m_bitmapItemStat, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizer293->Add( 0, 0, 1, 0, 5 ); + bSizer293->Add( 0, 0, 1, 0, 5 ); - m_staticTextItemsProcessed = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextItemsProcessed->Wrap( -1 ); - m_staticTextItemsProcessed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextItemsProcessed = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_staticTextItemsProcessed->Wrap( -1 ); + m_staticTextItemsProcessed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer293->Add( m_staticTextItemsProcessed, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer293->Add( m_staticTextItemsProcessed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - ffgSizer111->Add( bSizer293, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + ffgSizer111->Add( bSizer293, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - m_staticTextBytesProcessed = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextBytesProcessed->Wrap( -1 ); - ffgSizer111->Add( m_staticTextBytesProcessed, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + m_staticTextBytesProcessed = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextBytesProcessed->Wrap( -1 ); + ffgSizer111->Add( m_staticTextBytesProcessed, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_staticTextItemsRemaining = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextItemsRemaining->Wrap( -1 ); - m_staticTextItemsRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextItemsRemaining = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_staticTextItemsRemaining->Wrap( -1 ); + m_staticTextItemsRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - ffgSizer111->Add( m_staticTextItemsRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + ffgSizer111->Add( m_staticTextItemsRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticTextBytesRemaining = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextBytesRemaining->Wrap( -1 ); - ffgSizer111->Add( m_staticTextBytesRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + m_staticTextBytesRemaining = new wxStaticText( m_panelItemStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextBytesRemaining->Wrap( -1 ); + ffgSizer111->Add( m_staticTextBytesRemaining, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer291->Add( ffgSizer111, 0, wxALL, 5 ); + bSizer291->Add( ffgSizer111, 0, wxALL, 5 ); - m_panelItemStats->SetSizer( bSizer291 ); - m_panelItemStats->Layout(); - bSizer291->Fit( m_panelItemStats ); - bSizer232->Add( m_panelItemStats, 0, wxTOP|wxBOTTOM|wxRIGHT|wxALIGN_CENTER_VERTICAL, 10 ); + m_panelItemStats->SetSizer( bSizer291 ); + m_panelItemStats->Layout(); + bSizer291->Fit( m_panelItemStats ); + bSizer232->Add( m_panelItemStats, 0, wxTOP|wxBOTTOM|wxRIGHT|wxALIGN_CENTER_VERTICAL, 10 ); - m_panelTimeStats = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelTimeStats->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + m_panelTimeStats = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_panelTimeStats->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer292; - bSizer292 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer292; + bSizer292 = new wxBoxSizer( wxVERTICAL ); - ffgSizer112 = new wxFlexGridSizer( 2, 0, 5, 5 ); - ffgSizer112->SetFlexibleDirection( wxBOTH ); - ffgSizer112->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer112 = new wxFlexGridSizer( 2, 0, 5, 5 ); + ffgSizer112->SetFlexibleDirection( wxBOTH ); + ffgSizer112->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - wxBoxSizer* bSizer294; - bSizer294 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer294; + bSizer294 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapTimeStat = new wxStaticBitmap( m_panelTimeStats, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer294->Add( m_bitmapTimeStat, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_bitmapTimeStat = new wxStaticBitmap( m_panelTimeStats, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer294->Add( m_bitmapTimeStat, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizer294->Add( 0, 0, 1, 0, 5 ); + bSizer294->Add( 0, 0, 1, 0, 5 ); - m_staticTextTimeElapsed = new wxStaticText( m_panelTimeStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeElapsed->Wrap( -1 ); - m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextTimeElapsed = new wxStaticText( m_panelTimeStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeElapsed->Wrap( -1 ); + m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer294->Add( m_staticTextTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer294->Add( m_staticTextTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - ffgSizer112->Add( bSizer294, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + ffgSizer112->Add( bSizer294, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - m_staticTextTimeRemaining = new wxStaticText( m_panelTimeStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeRemaining->Wrap( -1 ); - m_staticTextTimeRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_staticTextTimeRemaining = new wxStaticText( m_panelTimeStats, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeRemaining->Wrap( -1 ); + m_staticTextTimeRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - ffgSizer112->Add( m_staticTextTimeRemaining, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + ffgSizer112->Add( m_staticTextTimeRemaining, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - bSizer292->Add( ffgSizer112, 0, wxALL, 5 ); + bSizer292->Add( ffgSizer112, 0, wxALL, 5 ); - m_panelTimeStats->SetSizer( bSizer292 ); - m_panelTimeStats->Layout(); - bSizer292->Fit( m_panelTimeStats ); - bSizer232->Add( m_panelTimeStats, 0, wxTOP|wxBOTTOM|wxRIGHT|wxALIGN_CENTER_VERTICAL, 10 ); + m_panelTimeStats->SetSizer( bSizer292 ); + m_panelTimeStats->Layout(); + bSizer292->Fit( m_panelTimeStats ); + bSizer232->Add( m_panelTimeStats, 0, wxTOP|wxBOTTOM|wxRIGHT|wxALIGN_CENTER_VERTICAL, 10 ); - bSizer232->Add( 0, 0, 1, 0, 5 ); + bSizer232->Add( 0, 0, 1, 0, 5 ); - bSizerDynSpace = new wxBoxSizer( wxVERTICAL ); + bSizerDynSpace = new wxBoxSizer( wxVERTICAL ); - bSizerDynSpace->Add( 0, 0, 0, 0, 5 ); + bSizerDynSpace->Add( 0, 0, 0, 0, 5 ); - bSizer232->Add( bSizerDynSpace, 0, 0, 5 ); + bSizer232->Add( bSizerDynSpace, 0, 0, 5 ); - bSizer161->Add( bSizer232, 0, wxEXPAND, 5 ); + bSizer161->Add( bSizer232, 0, wxEXPAND, 5 ); - m_panelGraphItems = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_panelGraphItems->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + 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|wxLEFT, 10 ); + bSizer161->Add( m_panelGraphItems, 1, wxEXPAND|wxLEFT, 10 ); - bSizerProgressFooter = new wxBoxSizer( wxHORIZONTAL ); + bSizerProgressFooter = new wxBoxSizer( wxHORIZONTAL ); - bSizerErrorsRetry = new wxBoxSizer( wxHORIZONTAL ); + bSizerErrorsRetry = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapRetryErrors = new wxStaticBitmap( m_panelProgress, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerErrorsRetry->Add( m_bitmapRetryErrors, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapRetryErrors = new wxStaticBitmap( m_panelProgress, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerErrorsRetry->Add( m_bitmapRetryErrors, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText1461 = new wxStaticText( m_panelProgress, wxID_ANY, _("Automatic retry"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText1461->Wrap( -1 ); - bSizerErrorsRetry->Add( m_staticText1461, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + m_staticText1461 = new wxStaticText( m_panelProgress, wxID_ANY, _("Automatic retry"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText1461->Wrap( -1 ); + bSizerErrorsRetry->Add( m_staticText1461, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - m_staticTextRetryCount = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextRetryCount->Wrap( -1 ); - bSizerErrorsRetry->Add( m_staticTextRetryCount, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_staticTextRetryCount = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRetryCount->Wrap( -1 ); + bSizerErrorsRetry->Add( m_staticTextRetryCount, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizerProgressFooter->Add( bSizerErrorsRetry, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + bSizerProgressFooter->Add( bSizerErrorsRetry, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizerErrorsIgnore = new wxBoxSizer( wxHORIZONTAL ); + bSizerErrorsIgnore = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapIgnoreErrors = new wxStaticBitmap( m_panelProgress, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerErrorsIgnore->Add( m_bitmapIgnoreErrors, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapIgnoreErrors = new wxStaticBitmap( m_panelProgress, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizerErrorsIgnore->Add( m_bitmapIgnoreErrors, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText146 = new wxStaticText( m_panelProgress, wxID_ANY, _("Ignore errors"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText146->Wrap( -1 ); - bSizerErrorsIgnore->Add( m_staticText146, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + m_staticText146 = new wxStaticText( m_panelProgress, wxID_ANY, _("Ignore errors"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText146->Wrap( -1 ); + bSizerErrorsIgnore->Add( m_staticText146, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - bSizerProgressFooter->Add( bSizerErrorsIgnore, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + bSizerProgressFooter->Add( bSizerErrorsIgnore, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizerProgressFooter->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizerProgressFooter->Add( 0, 0, 1, wxEXPAND, 5 ); - m_staticText137 = new wxStaticText( m_panelProgress, wxID_ANY, _("When finished:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText137->Wrap( -1 ); - bSizerProgressFooter->Add( m_staticText137, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_staticText137 = new wxStaticText( m_panelProgress, wxID_ANY, _("When finished:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText137->Wrap( -1 ); + bSizerProgressFooter->Add( m_staticText137, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - wxArrayString m_choicePostSyncActionChoices; - m_choicePostSyncAction = new wxChoice( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choicePostSyncActionChoices, 0 ); - m_choicePostSyncAction->SetSelection( 0 ); - bSizerProgressFooter->Add( m_choicePostSyncAction, 0, wxALIGN_CENTER_VERTICAL, 5 ); + wxArrayString m_choicePostSyncActionChoices; + m_choicePostSyncAction = new wxChoice( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choicePostSyncActionChoices, 0 ); + m_choicePostSyncAction->SetSelection( 0 ); + bSizerProgressFooter->Add( m_choicePostSyncAction, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer161->Add( bSizerProgressFooter, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 10 ); + bSizer161->Add( bSizerProgressFooter, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 10 ); - bSizer173->Add( bSizer161, 1, wxEXPAND|wxLEFT, 5 ); + bSizer173->Add( bSizer161, 1, wxEXPAND|wxLEFT, 5 ); - m_panelProgress->SetSizer( bSizer173 ); - m_panelProgress->Layout(); - bSizer173->Fit( m_panelProgress ); - bSizerRoot->Add( m_panelProgress, 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 ); - m_notebookResult->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_notebookResult = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_FIXEDWIDTH ); + m_notebookResult->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - bSizerRoot->Add( m_notebookResult, 1, wxEXPAND, 5 ); + 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 ); + m_staticlineFooter = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerRoot->Add( m_staticlineFooter, 0, wxEXPAND, 5 ); - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - bSizerStdButtons->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizerStdButtons->Add( 0, 0, 1, wxEXPAND, 5 ); - m_checkBoxAutoClose = new wxCheckBox( this, wxID_ANY, _("Auto-close"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizerStdButtons->Add( m_checkBoxAutoClose, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + m_checkBoxAutoClose = new wxCheckBox( this, wxID_ANY, _("Auto-close"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerStdButtons->Add( m_checkBoxAutoClose, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonClose->SetDefault(); - m_buttonClose->Enable( false ); + m_buttonClose->SetDefault(); + m_buttonClose->Enable( false ); - bSizerStdButtons->Add( m_buttonClose, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + bSizerStdButtons->Add( m_buttonClose, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - m_buttonPause = new wxButton( this, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerStdButtons->Add( m_buttonPause, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_buttonPause = new wxButton( this, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonPause, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - m_buttonStop = new wxButton( this, wxID_CANCEL, _("Stop"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerStdButtons->Add( m_buttonStop, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_buttonStop = new wxButton( this, wxID_CANCEL, _("Stop"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonStop, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizerRoot->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); + bSizerRoot->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); - this->SetSizer( bSizerRoot ); - this->Layout(); - bSizerRoot->Fit( this ); + this->SetSizer( bSizerRoot ); + this->Layout(); + bSizerRoot->Fit( this ); } SyncProgressPanelGenerated::~SyncProgressPanelGenerated() @@ -3934,42 +3933,42 @@ SyncProgressPanelGenerated::~SyncProgressPanelGenerated() LogPanelGenerated::LogPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name ) { - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer153; - bSizer153 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer153; + bSizer153 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer154; - bSizer154 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer154; + bSizer154 = new wxBoxSizer( wxVERTICAL ); - m_bpButtonErrors = new zen::ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer154->Add( m_bpButtonErrors, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonErrors = new zen::ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer154->Add( m_bpButtonErrors, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonWarnings = new zen::ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer154->Add( m_bpButtonWarnings, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonWarnings = new zen::ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer154->Add( m_bpButtonWarnings, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - m_bpButtonInfo = new zen::ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer154->Add( m_bpButtonInfo, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + m_bpButtonInfo = new zen::ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer154->Add( m_bpButtonInfo, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizer153->Add( bSizer154, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 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_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, 5 ); + m_gridMessages = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_gridMessages->SetScrollRate( 5, 5 ); + bSizer153->Add( m_gridMessages, 1, wxEXPAND, 5 ); - this->SetSizer( bSizer153 ); - this->Layout(); - bSizer153->Fit( this ); + this->SetSizer( bSizer153 ); + this->Layout(); + bSizer153->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 ); + // 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() @@ -3978,173 +3977,173 @@ 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 ) ); + this->SetSizeHints( wxSize( -1, -1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer54; - bSizer54 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer54; + bSizer54 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + 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_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_staticTextHeader = 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_staticTextHeader->Wrap( -1 ); - bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + m_staticTextHeader = 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_staticTextHeader->Wrap( -1 ); + bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - bSizer54->Add( bSizer72, 0, 0, 5 ); + 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_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 ) ); + 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* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer180; - bSizer180 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer180; + bSizer180 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer2361; - bSizer2361 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer2361; + bSizer2361 = new wxBoxSizer( wxVERTICAL ); - m_staticText146 = new wxStaticText( m_panel35, wxID_ANY, _("Progress dialog:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText146->Wrap( -1 ); - bSizer2361->Add( m_staticText146, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + m_staticText146 = new wxStaticText( m_panel35, wxID_ANY, _("Progress dialog:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText146->Wrap( -1 ); + bSizer2361->Add( m_staticText146, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - ffgSizer11 = new wxFlexGridSizer( 0, 2, 5, 5 ); - ffgSizer11->SetFlexibleDirection( wxBOTH ); - ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer11 = new wxFlexGridSizer( 0, 2, 5, 5 ); + ffgSizer11->SetFlexibleDirection( wxBOTH ); + ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_bitmapMinimizeToTray = new wxStaticBitmap( m_panel35, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - ffgSizer11->Add( m_bitmapMinimizeToTray, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapMinimizeToTray = new wxStaticBitmap( m_panel35, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + ffgSizer11->Add( m_bitmapMinimizeToTray, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_checkBoxRunMinimized = new wxCheckBox( m_panel35, wxID_ANY, _("Run minimized"), wxDefaultPosition, wxDefaultSize, 0 ); - ffgSizer11->Add( m_checkBoxRunMinimized, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + m_checkBoxRunMinimized = new wxCheckBox( m_panel35, wxID_ANY, _("Run minimized"), wxDefaultPosition, wxDefaultSize, 0 ); + ffgSizer11->Add( m_checkBoxRunMinimized, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - ffgSizer11->Add( 0, 0, 1, wxEXPAND, 5 ); + ffgSizer11->Add( 0, 0, 1, wxEXPAND, 5 ); - m_checkBoxAutoClose = new wxCheckBox( m_panel35, wxID_ANY, _("Auto-close"), wxDefaultPosition, wxDefaultSize, 0 ); - ffgSizer11->Add( m_checkBoxAutoClose, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + m_checkBoxAutoClose = new wxCheckBox( m_panel35, wxID_ANY, _("Auto-close"), wxDefaultPosition, wxDefaultSize, 0 ); + ffgSizer11->Add( m_checkBoxAutoClose, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - bSizer2361->Add( ffgSizer11, 0, wxEXPAND|wxALL, 5 ); + bSizer2361->Add( ffgSizer11, 0, wxEXPAND|wxALL, 5 ); - bSizer180->Add( bSizer2361, 0, wxALL, 5 ); + bSizer180->Add( bSizer2361, 0, wxALL, 5 ); - m_staticline26 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer180->Add( m_staticline26, 0, wxEXPAND, 5 ); + m_staticline26 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer180->Add( m_staticline26, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer242; - bSizer242 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer242; + bSizer242 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer243; - bSizer243 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer243; + bSizer243 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapIgnoreErrors = new wxStaticBitmap( m_panel35, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer243->Add( m_bitmapIgnoreErrors, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapIgnoreErrors = new wxStaticBitmap( m_panel35, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer243->Add( m_bitmapIgnoreErrors, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_checkBoxIgnoreErrors = new wxCheckBox( m_panel35, wxID_ANY, _("Ignore errors"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer243->Add( m_checkBoxIgnoreErrors, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + m_checkBoxIgnoreErrors = new wxCheckBox( m_panel35, wxID_ANY, _("Ignore errors"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer243->Add( m_checkBoxIgnoreErrors, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - bSizer242->Add( bSizer243, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + bSizer242->Add( bSizer243, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - wxBoxSizer* bSizer246; - bSizer246 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer246; + bSizer246 = new wxBoxSizer( wxVERTICAL ); - m_radioBtnErrorDialogShow = new wxRadioButton( m_panel35, wxID_ANY, _("&Show error message"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); - m_radioBtnErrorDialogShow->SetValue( true ); - m_radioBtnErrorDialogShow->SetToolTip( _("Show pop-up on errors or warnings") ); + m_radioBtnErrorDialogShow = new wxRadioButton( m_panel35, wxID_ANY, _("&Show error message"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); + m_radioBtnErrorDialogShow->SetValue( true ); + m_radioBtnErrorDialogShow->SetToolTip( _("Show pop-up on errors or warnings") ); - bSizer246->Add( m_radioBtnErrorDialogShow, 0, wxALL|wxEXPAND, 5 ); + bSizer246->Add( m_radioBtnErrorDialogShow, 0, wxALL|wxEXPAND, 5 ); - m_radioBtnErrorDialogCancel = new wxRadioButton( m_panel35, wxID_ANY, _("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); - m_radioBtnErrorDialogCancel->SetToolTip( _("Stop synchronization at first error") ); + m_radioBtnErrorDialogCancel = new wxRadioButton( m_panel35, wxID_ANY, _("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); + m_radioBtnErrorDialogCancel->SetToolTip( _("Stop synchronization at first error") ); - bSizer246->Add( m_radioBtnErrorDialogCancel, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + bSizer246->Add( m_radioBtnErrorDialogCancel, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - bSizer242->Add( bSizer246, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT, 15 ); + bSizer242->Add( bSizer246, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT, 15 ); - bSizer180->Add( bSizer242, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer180->Add( bSizer242, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticline261 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer180->Add( m_staticline261, 0, wxEXPAND, 5 ); + m_staticline261 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer180->Add( m_staticline261, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer247; - bSizer247 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer247; + bSizer247 = new wxBoxSizer( wxVERTICAL ); - m_staticText137 = new wxStaticText( m_panel35, wxID_ANY, _("When finished:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText137->Wrap( -1 ); - bSizer247->Add( m_staticText137, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + m_staticText137 = new wxStaticText( m_panel35, wxID_ANY, _("When finished:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText137->Wrap( -1 ); + bSizer247->Add( m_staticText137, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - wxArrayString m_choicePostSyncActionChoices; - m_choicePostSyncAction = new wxChoice( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choicePostSyncActionChoices, 0 ); - m_choicePostSyncAction->SetSelection( 0 ); - bSizer247->Add( m_choicePostSyncAction, 0, wxALL, 5 ); + wxArrayString m_choicePostSyncActionChoices; + m_choicePostSyncAction = new wxChoice( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choicePostSyncActionChoices, 0 ); + m_choicePostSyncAction->SetSelection( 0 ); + bSizer247->Add( m_choicePostSyncAction, 0, wxALL, 5 ); - bSizer180->Add( bSizer247, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer180->Add( bSizer247, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticline262 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer180->Add( m_staticline262, 0, wxEXPAND, 5 ); + m_staticline262 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer180->Add( m_staticline262, 0, wxEXPAND, 5 ); - bSizer172->Add( bSizer180, 0, 0, 5 ); + bSizer172->Add( bSizer180, 0, 0, 5 ); - m_staticline25 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer172->Add( m_staticline25, 0, wxEXPAND, 5 ); + m_staticline25 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer172->Add( m_staticline25, 0, wxEXPAND, 5 ); - m_hyperlink17 = new wxHyperlinkCtrl( m_panel35, wxID_ANY, _("How can I schedule a batch job?"), wxT("https://freefilesync.org/manual.php?topic=schedule-a-batch-job"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink17->SetToolTip( _("https://freefilesync.org/manual.php?topic=schedule-a-batch-job") ); + m_hyperlink17 = new wxHyperlinkCtrl( m_panel35, wxID_ANY, _("How can I schedule a batch job?"), wxT("https://freefilesync.org/manual.php?topic=schedule-a-batch-job"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink17->SetToolTip( _("https://freefilesync.org/manual.php?topic=schedule-a-batch-job") ); - bSizer172->Add( m_hyperlink17, 0, wxALL, 10 ); + bSizer172->Add( m_hyperlink17, 0, wxALL, 10 ); - m_panel35->SetSizer( bSizer172 ); - m_panel35->Layout(); - bSizer172->Fit( m_panel35 ); - bSizer54->Add( m_panel35, 1, wxEXPAND, 5 ); + m_panel35->SetSizer( bSizer172 ); + m_panel35->Layout(); + bSizer172->Fit( m_panel35 ); + bSizer54->Add( m_panel35, 1, wxEXPAND, 5 ); - m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer54->Add( m_staticline13, 0, 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 = new wxBoxSizer( wxHORIZONTAL ); - m_buttonSaveAs = new wxButton( this, wxID_SAVE, _("Save &as..."), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonSaveAs = new wxButton( this, wxID_SAVE, _("Save &as..."), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonSaveAs->SetDefault(); - m_buttonSaveAs->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonSaveAs->SetDefault(); + m_buttonSaveAs->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizerStdButtons->Add( m_buttonSaveAs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + bSizerStdButtons->Add( m_buttonSaveAs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer54->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + bSizer54->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - this->SetSizer( bSizer54 ); - this->Layout(); - bSizer54->Fit( this ); + this->SetSizer( bSizer54 ); + this->Layout(); + bSizer54->Fit( this ); - this->Centre( wxBOTH ); + this->Centre( wxBOTH ); - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::onClose ) ); - m_checkBoxRunMinimized->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::onToggleRunMinimized ), NULL, this ); - m_checkBoxIgnoreErrors->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::onToggleIgnoreErrors ), 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 ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::onClose ) ); + m_checkBoxRunMinimized->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::onToggleRunMinimized ), NULL, this ); + m_checkBoxIgnoreErrors->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::onToggleIgnoreErrors ), 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() @@ -4153,85 +4152,85 @@ 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 ) ); + this->SetSizeHints( wxSize( -1, -1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer24; - bSizer24 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer24; + bSizer24 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + 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_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 ); - m_staticTextHeader->Wrap( -1 ); - bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextHeader->Wrap( -1 ); + bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - bSizer24->Add( bSizer72, 0, 0, 5 ); + 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_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 ) ); + 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 ); + wxBoxSizer* bSizer185; + bSizer185 = new wxBoxSizer( wxHORIZONTAL ); - bSizer185->Add( 60, 0, 0, 0, 5 ); + 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_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( -1,-1 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY|wxBORDER_NONE ); - bSizer185->Add( m_textCtrlFileList, 1, wxEXPAND, 5 ); + m_textCtrlFileList = new wxTextCtrl( m_panel31, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY|wxBORDER_NONE ); + bSizer185->Add( m_textCtrlFileList, 1, wxEXPAND, 5 ); - m_panel31->SetSizer( bSizer185 ); - m_panel31->Layout(); - bSizer185->Fit( m_panel31 ); - bSizer24->Add( m_panel31, 1, wxEXPAND, 5 ); + m_panel31->SetSizer( bSizer185 ); + m_panel31->Layout(); + bSizer185->Fit( m_panel31 ); + bSizer24->Add( m_panel31, 1, wxEXPAND, 5 ); - m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 ); + m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 ); - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - m_checkBoxUseRecycler = new wxCheckBox( this, wxID_ANY, _("&Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizerStdButtons->Add( m_checkBoxUseRecycler, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_checkBoxUseRecycler = new wxCheckBox( this, wxID_ANY, _("&Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerStdButtons->Add( m_checkBoxUseRecycler, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - bSizerStdButtons->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizerStdButtons->Add( 0, 0, 1, wxEXPAND, 5 ); - m_buttonOK = new wxButton( this, wxID_OK, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonOK = new wxButton( this, wxID_OK, _("dummy"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonOK->SetDefault(); - m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonOK->SetDefault(); + m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer24->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); + bSizer24->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); - this->SetSizer( bSizer24 ); - this->Layout(); - bSizer24->Fit( this ); + this->SetSizer( bSizer24 ); + this->Layout(); + bSizer24->Fit( this ); - this->Centre( wxBOTH ); + 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_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::onOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::onCancel ), NULL, this ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::onClose ) ); + m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::onUseRecycler ), NULL, this ); + m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::onOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::onCancel ), NULL, this ); } DeleteDlgGenerated::~DeleteDlgGenerated() @@ -4240,120 +4239,120 @@ DeleteDlgGenerated::~DeleteDlgGenerated() CopyToDlgGenerated::CopyToDlgGenerated( 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 ) ); + this->SetSizeHints( wxSize( -1, -1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer24; - bSizer24 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer24; + bSizer24 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapCopyTo = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer72->Add( m_bitmapCopyTo, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + m_bitmapCopyTo = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer72->Add( m_bitmapCopyTo, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); - m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextHeader->Wrap( -1 ); - bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextHeader->Wrap( -1 ); + bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - bSizer24->Add( bSizer72, 0, 0, 5 ); + 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_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 ) ); + m_panel31 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel31->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer242; - bSizer242 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer242; + bSizer242 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer185; - bSizer185 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer185; + bSizer185 = new wxBoxSizer( wxHORIZONTAL ); - bSizer185->Add( 60, 0, 0, 0, 5 ); + 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_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( -1,-1 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY|wxBORDER_NONE ); - bSizer185->Add( m_textCtrlFileList, 1, wxEXPAND, 5 ); + m_textCtrlFileList = new wxTextCtrl( m_panel31, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY|wxBORDER_NONE ); + bSizer185->Add( m_textCtrlFileList, 1, wxEXPAND, 5 ); - bSizer242->Add( bSizer185, 1, wxEXPAND, 5 ); + bSizer242->Add( bSizer185, 1, wxEXPAND, 5 ); - wxBoxSizer* bSizer182; - bSizer182 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer182; + bSizer182 = new wxBoxSizer( wxHORIZONTAL ); - m_targetFolderPath = new fff::FolderHistoryBox( m_panel31, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer182->Add( m_targetFolderPath, 1, wxALIGN_CENTER_VERTICAL, 5 ); + m_targetFolderPath = new fff::FolderHistoryBox( m_panel31, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer182->Add( m_targetFolderPath, 1, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonSelectTargetFolder = new wxButton( m_panel31, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectTargetFolder->SetToolTip( _("Select a folder") ); + m_buttonSelectTargetFolder = new wxButton( m_panel31, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectTargetFolder->SetToolTip( _("Select a folder") ); - bSizer182->Add( m_buttonSelectTargetFolder, 0, wxEXPAND, 5 ); + bSizer182->Add( m_buttonSelectTargetFolder, 0, wxEXPAND, 5 ); - m_bpButtonSelectAltTargetFolder = new wxBitmapButton( m_panel31, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - m_bpButtonSelectAltTargetFolder->SetToolTip( _("Access online storage") ); + m_bpButtonSelectAltTargetFolder = new wxBitmapButton( m_panel31, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + m_bpButtonSelectAltTargetFolder->SetToolTip( _("Access online storage") ); - bSizer182->Add( m_bpButtonSelectAltTargetFolder, 0, wxEXPAND, 5 ); + bSizer182->Add( m_bpButtonSelectAltTargetFolder, 0, wxEXPAND, 5 ); - bSizer242->Add( bSizer182, 0, wxALL|wxEXPAND, 10 ); + bSizer242->Add( bSizer182, 0, wxALL|wxEXPAND, 10 ); - m_panel31->SetSizer( bSizer242 ); - m_panel31->Layout(); - bSizer242->Fit( m_panel31 ); - bSizer24->Add( m_panel31, 1, wxEXPAND, 5 ); + m_panel31->SetSizer( bSizer242 ); + m_panel31->Layout(); + bSizer242->Fit( m_panel31 ); + bSizer24->Add( m_panel31, 1, wxEXPAND, 5 ); - m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 ); + m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 ); - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer189; - bSizer189 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer189; + bSizer189 = new wxBoxSizer( wxVERTICAL ); - m_checkBoxKeepRelPath = new wxCheckBox( this, wxID_ANY, _("&Keep relative paths"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxKeepRelPath->SetValue(true); - bSizer189->Add( m_checkBoxKeepRelPath, 0, wxALL|wxEXPAND, 5 ); + m_checkBoxKeepRelPath = new wxCheckBox( this, wxID_ANY, _("&Keep relative paths"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxKeepRelPath->SetValue(true); + bSizer189->Add( m_checkBoxKeepRelPath, 0, wxALL|wxEXPAND, 5 ); - m_checkBoxOverwriteIfExists = new wxCheckBox( this, wxID_ANY, _("&Overwrite existing files"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxOverwriteIfExists->SetValue(true); - bSizer189->Add( m_checkBoxOverwriteIfExists, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + m_checkBoxOverwriteIfExists = new wxCheckBox( this, wxID_ANY, _("&Overwrite existing files"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxOverwriteIfExists->SetValue(true); + bSizer189->Add( m_checkBoxOverwriteIfExists, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - bSizerStdButtons->Add( bSizer189, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizerStdButtons->Add( bSizer189, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizerStdButtons->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizerStdButtons->Add( 0, 0, 1, wxEXPAND, 5 ); - m_buttonOK = new wxButton( this, wxID_OK, _("Copy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonOK = new wxButton( this, wxID_OK, _("Copy"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonOK->SetDefault(); - m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonOK->SetDefault(); + m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + bSizerStdButtons->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer24->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); + bSizer24->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); - this->SetSizer( bSizer24 ); - this->Layout(); - bSizer24->Fit( this ); + this->SetSizer( bSizer24 ); + this->Layout(); + bSizer24->Fit( this ); - this->Centre( wxBOTH ); + this->Centre( wxBOTH ); - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CopyToDlgGenerated::onClose ) ); - m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CopyToDlgGenerated::onOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CopyToDlgGenerated::onCancel ), NULL, this ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CopyToDlgGenerated::onClose ) ); + m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CopyToDlgGenerated::onOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CopyToDlgGenerated::onCancel ), NULL, this ); } CopyToDlgGenerated::~CopyToDlgGenerated() @@ -4362,585 +4361,553 @@ CopyToDlgGenerated::~CopyToDlgGenerated() OptionsDlgGenerated::OptionsDlgGenerated( 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 ) ); + this->SetSizeHints( wxSize( -1, -1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer95; - bSizer95 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer95; + bSizer95 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + 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_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( -1 ); - bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 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( -1 ); + bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - bSizer95->Add( bSizer72, 0, 0, 5 ); + 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_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 ) ); + 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* bSizer166; + bSizer166 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer186; - bSizer186 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer186; + bSizer186 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer160; + bSizer160 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer176; - bSizer176 = new wxBoxSizer( wxHORIZONTAL ); + 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.") ); + 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 ); + bSizer176->Add( m_checkBoxFailSafe, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText911 = new wxStaticText( m_panel39, wxID_ANY, _("("), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText911->Wrap( -1 ); - m_staticText911->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticText911 = new wxStaticText( m_panel39, wxID_ANY, _("("), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText911->Wrap( -1 ); + m_staticText911->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer176->Add( m_staticText911, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); + bSizer176->Add( m_staticText911, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 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 ) ); + 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, 5 ); + bSizer176->Add( m_staticText91, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); - m_staticText9111 = new wxStaticText( m_panel39, wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText9111->Wrap( -1 ); - m_staticText9111->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticText9111 = new wxStaticText( m_panel39, wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText9111->Wrap( -1 ); + m_staticText9111->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer176->Add( m_staticText9111, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + bSizer176->Add( m_staticText9111, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer160->Add( bSizer176, 0, wxEXPAND, 5 ); + bSizer160->Add( bSizer176, 0, wxEXPAND, 5 ); - bSizerLockedFiles = new wxBoxSizer( wxHORIZONTAL ); + 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.") ); + 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 ); + bSizerLockedFiles->Add( m_checkBoxCopyLocked, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText921 = new wxStaticText( m_panel39, wxID_ANY, _("("), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText921->Wrap( -1 ); - m_staticText921->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticText921 = new wxStaticText( m_panel39, wxID_ANY, _("("), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText921->Wrap( -1 ); + m_staticText921->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizerLockedFiles->Add( m_staticText921, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); + bSizerLockedFiles->Add( m_staticText921, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 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 ) ); + 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, 5 ); + bSizerLockedFiles->Add( m_staticText92, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); - m_staticText922 = new wxStaticText( m_panel39, wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText922->Wrap( -1 ); - m_staticText922->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticText922 = new wxStaticText( m_panel39, wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText922->Wrap( -1 ); + m_staticText922->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizerLockedFiles->Add( m_staticText922, 0, wxTOP|wxBOTTOM|wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + bSizerLockedFiles->Add( m_staticText922, 0, wxTOP|wxBOTTOM|wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer160->Add( bSizerLockedFiles, 0, wxEXPAND, 5 ); + bSizer160->Add( bSizerLockedFiles, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer178; - bSizer178 = new wxBoxSizer( wxHORIZONTAL ); + 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.") ); + 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 ); + bSizer178->Add( m_checkBoxCopyPermissions, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_staticText931 = new wxStaticText( m_panel39, wxID_ANY, _("("), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText931->Wrap( -1 ); - m_staticText931->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticText931 = new wxStaticText( m_panel39, wxID_ANY, _("("), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText931->Wrap( -1 ); + m_staticText931->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer178->Add( m_staticText931, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); + bSizer178->Add( m_staticText931, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 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 ) ); + 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, 5 ); + bSizer178->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); - m_staticText932 = new wxStaticText( m_panel39, wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText932->Wrap( -1 ); - m_staticText932->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_staticText932 = new wxStaticText( m_panel39, wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText932->Wrap( -1 ); + m_staticText932->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer178->Add( m_staticText932, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + bSizer178->Add( m_staticText932, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer160->Add( bSizer178, 0, wxEXPAND, 5 ); + bSizer160->Add( bSizer178, 0, wxEXPAND, 5 ); - bSizer186->Add( bSizer160, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + bSizer186->Add( bSizer160, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_staticline39 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer186->Add( m_staticline39, 0, wxEXPAND, 5 ); + m_staticline39 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer186->Add( m_staticline39, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer293; - bSizer293 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapWarnings = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer293->Add( m_bitmapWarnings, 0, wxALL, 5 ); + bSizer166->Add( bSizer186, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer1881; - bSizer1881 = new wxBoxSizer( wxVERTICAL ); + m_staticline191 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer166->Add( m_staticline191, 0, wxEXPAND, 5 ); - m_staticTextResetDialogs = new wxStaticText( m_panel39, wxID_ANY, _("Show all permanently hidden dialogs and warning messages again"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextResetDialogs->Wrap( -1 ); - m_staticTextResetDialogs->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + wxBoxSizer* bSizer292; + bSizer292 = new wxBoxSizer( wxHORIZONTAL ); - bSizer1881->Add( m_staticTextResetDialogs, 0, 0, 5 ); + m_bitmapWarnings = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer292->Add( m_bitmapWarnings, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - wxBoxSizer* bSizer292; - bSizer292 = new wxBoxSizer( wxHORIZONTAL ); + m_staticText182 = new wxStaticText( m_panel39, wxID_ANY, _("Show hidden dialogs and warning messages again:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText182->Wrap( -1 ); + bSizer292->Add( m_staticText182, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonRestoreDialogs = new wxButton( m_panel39, wxID_ANY, _("&Restore"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer292->Add( m_buttonRestoreDialogs, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticTextHiddenDialogsCount = new wxStaticText( m_panel39, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextHiddenDialogsCount->Wrap( -1 ); + m_staticTextHiddenDialogsCount->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - m_staticTextAllDialogsShown = new wxStaticText( m_panel39, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextAllDialogsShown->Wrap( -1 ); - bSizer292->Add( m_staticTextAllDialogsShown, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + bSizer292->Add( m_staticTextHiddenDialogsCount, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + m_buttonShowHiddenDialogs = new wxButton( m_panel39, wxID_ANY, _("&Show details"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer292->Add( m_buttonShowHiddenDialogs, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - bSizer1881->Add( bSizer292, 0, wxTOP, 5 ); + bSizer166->Add( bSizer292, 0, wxALL, 10 ); - bSizer293->Add( bSizer1881, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 ); + wxArrayString m_checkListHiddenDialogsChoices; + m_checkListHiddenDialogs = new wxCheckListBox( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_checkListHiddenDialogsChoices, wxLB_EXTENDED ); + bSizer166->Add( m_checkListHiddenDialogs, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 10 ); + m_staticline1911 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer166->Add( m_staticline1911, 0, wxEXPAND, 5 ); - bSizer186->Add( bSizer293, 0, wxALL, 5 ); + wxFlexGridSizer* fgSizer25111; + fgSizer25111 = new wxFlexGridSizer( 0, 2, 0, 0 ); + fgSizer25111->AddGrowableCol( 0 ); + fgSizer25111->AddGrowableRow( 0 ); + fgSizer25111->SetFlexibleDirection( wxBOTH ); + fgSizer25111->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + m_bitmapLogFile = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer25111->Add( m_bitmapLogFile, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer166->Add( bSizer186, 0, wxEXPAND, 5 ); + wxBoxSizer* bSizer307; + bSizer307 = new wxBoxSizer( wxHORIZONTAL ); - m_staticline191 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer166->Add( m_staticline191, 0, wxEXPAND, 5 ); + m_staticText163 = new wxStaticText( m_panel39, wxID_ANY, _("Default log path:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText163->Wrap( -1 ); + bSizer307->Add( m_staticText163, 0, wxALIGN_CENTER_VERTICAL, 5 ); - wxBoxSizer* bSizer259; - bSizer259 = new wxBoxSizer( wxVERTICAL ); + m_hyperlinkLogFolder = new wxHyperlinkCtrl( m_panel39, wxID_ANY, _("dummy"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_ALIGN_CENTRE|wxBORDER_NONE ); + bSizer307->Add( m_hyperlinkLogFolder, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - wxBoxSizer* bSizer258; - bSizer258 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapLogFile = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer258->Add( m_bitmapLogFile, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + fgSizer25111->Add( bSizer307, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText163 = new wxStaticText( m_panel39, wxID_ANY, _("Default log path:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText163->Wrap( -1 ); - bSizer258->Add( m_staticText163, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - m_hyperlinkLogFolder = new wxHyperlinkCtrl( m_panel39, wxID_ANY, _("dummy"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_ALIGN_CENTRE|wxBORDER_NONE ); - bSizer258->Add( m_hyperlinkLogFolder, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + fgSizer25111->Add( 0, 0, 0, 0, 5 ); + wxBoxSizer* bSizer297; + bSizer297 = new wxBoxSizer( wxHORIZONTAL ); - bSizer259->Add( bSizer258, 0, wxALL, 5 ); + m_checkBoxLogFilesMaxAge = new wxCheckBox( m_panel39, wxID_ANY, _("&Delete logs after x days:"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer297->Add( m_checkBoxLogFilesMaxAge, 0, wxALIGN_CENTER_VERTICAL, 5 ); - wxBoxSizer* bSizer299; - bSizer299 = new wxBoxSizer( wxVERTICAL ); + m_spinCtrlLogFilesMaxAge = new wxSpinCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxSP_ARROW_KEYS, 1, 2000000000, 5 ); + bSizer297->Add( m_spinCtrlLogFilesMaxAge, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - m_staticline83 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer299->Add( m_staticline83, 0, wxEXPAND, 5 ); + m_staticline81 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer297->Add( m_staticline81, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - wxBoxSizer* bSizer297; - bSizer297 = new wxBoxSizer( wxHORIZONTAL ); + m_staticText184 = new wxStaticText( m_panel39, wxID_ANY, _("Log file format:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText184->Wrap( -1 ); + bSizer297->Add( m_staticText184, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - m_staticline82 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer297->Add( m_staticline82, 0, wxEXPAND, 5 ); + wxFlexGridSizer* fgSizer251; + fgSizer251 = new wxFlexGridSizer( 0, 1, 5, 0 ); + fgSizer251->SetFlexibleDirection( wxBOTH ); + fgSizer251->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - wxBoxSizer* bSizer282; - bSizer282 = new wxBoxSizer( wxHORIZONTAL ); + m_radioBtnLogHtml = new wxRadioButton( m_panel39, wxID_ANY, _("&HTML"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); + m_radioBtnLogHtml->SetValue( true ); + fgSizer251->Add( m_radioBtnLogHtml, 0, wxEXPAND, 5 ); - m_checkBoxLogFilesMaxAge = new wxCheckBox( m_panel39, wxID_ANY, _("&Delete logs after x days:"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer282->Add( m_checkBoxLogFilesMaxAge, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_radioBtnLogText = new wxRadioButton( m_panel39, wxID_ANY, _("&Plain text"), wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer251->Add( m_radioBtnLogText, 0, wxEXPAND, 5 ); - m_spinCtrlLogFilesMaxAge = new wxSpinCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); - bSizer282->Add( m_spinCtrlLogFilesMaxAge, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + bSizer297->Add( fgSizer251, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer297->Add( bSizer282, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_staticline81 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer297->Add( m_staticline81, 0, wxEXPAND, 5 ); + fgSizer25111->Add( bSizer297, 0, wxTOP, 5 ); - wxBoxSizer* bSizer296; - bSizer296 = new wxBoxSizer( wxHORIZONTAL ); - m_staticText184 = new wxStaticText( m_panel39, wxID_ANY, _("Log file format:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText184->Wrap( -1 ); - bSizer296->Add( m_staticText184, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + bSizer166->Add( fgSizer25111, 0, wxALL, 10 ); - wxFlexGridSizer* fgSizer251; - fgSizer251 = new wxFlexGridSizer( 0, 1, 5, 0 ); - fgSizer251->SetFlexibleDirection( wxBOTH ); - fgSizer251->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + m_staticline361 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer166->Add( m_staticline361, 0, wxEXPAND, 5 ); - m_radioBtnLogHtml = new wxRadioButton( m_panel39, wxID_ANY, _("&HTML"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); - m_radioBtnLogHtml->SetValue( true ); - fgSizer251->Add( m_radioBtnLogHtml, 0, wxEXPAND, 5 ); + wxFlexGridSizer* fgSizer251111; + fgSizer251111 = new wxFlexGridSizer( 0, 2, 0, 0 ); + fgSizer251111->AddGrowableCol( 1 ); + fgSizer251111->AddGrowableRow( 0 ); + fgSizer251111->SetFlexibleDirection( wxBOTH ); + fgSizer251111->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_radioBtnLogText = new wxRadioButton( m_panel39, wxID_ANY, _("&Plain text"), wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer251->Add( m_radioBtnLogText, 0, wxEXPAND, 5 ); + m_bitmapNotificationSounds = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer251111->Add( m_bitmapNotificationSounds, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + m_staticText851 = new wxStaticText( m_panel39, wxID_ANY, _("Notification sounds:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText851->Wrap( -1 ); + fgSizer251111->Add( m_staticText851, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer296->Add( fgSizer251, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 ); + fgSizer251111->Add( 0, 0, 0, 0, 5 ); - bSizer297->Add( bSizer296, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + ffgSizer11 = new wxFlexGridSizer( 0, 3, 0, 10 ); + ffgSizer11->AddGrowableCol( 2 ); + ffgSizer11->SetFlexibleDirection( wxBOTH ); + ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + m_staticText171 = new wxStaticText( m_panel39, wxID_ANY, _("Comparison finished:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText171->Wrap( -1 ); + m_staticText171->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer299->Add( bSizer297, 0, 0, 5 ); + ffgSizer11->Add( m_staticText171, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapCompareDone = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + ffgSizer11->Add( m_bitmapCompareDone, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer259->Add( bSizer299, 0, wxALIGN_RIGHT|wxLEFT, 15 ); + wxBoxSizer* bSizer290; + bSizer290 = new wxBoxSizer( wxHORIZONTAL ); + m_bpButtonPlayCompareDone = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + bSizer290->Add( m_bpButtonPlayCompareDone, 0, wxEXPAND, 5 ); - bSizer166->Add( bSizer259, 0, wxEXPAND, 5 ); + m_textCtrlSoundPathCompareDone = new wxTextCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer290->Add( m_textCtrlSoundPathCompareDone, 1, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticline361 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer166->Add( m_staticline361, 0, wxEXPAND, 5 ); + m_buttonSelectSoundCompareDone = new wxButton( m_panel39, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectSoundCompareDone->SetToolTip( _("Select a folder") ); - wxBoxSizer* bSizer288; - bSizer288 = new wxBoxSizer( wxVERTICAL ); + bSizer290->Add( m_buttonSelectSoundCompareDone, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer300; - bSizer300 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapNotificationSounds = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer300->Add( m_bitmapNotificationSounds, 0, wxALIGN_CENTER_VERTICAL, 5 ); + ffgSizer11->Add( bSizer290, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - m_staticText851 = new wxStaticText( m_panel39, wxID_ANY, _("Notification sounds:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText851->Wrap( -1 ); - bSizer300->Add( m_staticText851, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + m_staticText1711 = new wxStaticText( m_panel39, wxID_ANY, _("Synchronization finished:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText1711->Wrap( -1 ); + m_staticText1711->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + ffgSizer11->Add( m_staticText1711, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer288->Add( bSizer300, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + m_bitmapSyncDone = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + ffgSizer11->Add( m_bitmapSyncDone, 0, wxALIGN_CENTER_VERTICAL, 5 ); - wxBoxSizer* bSizer301; - bSizer301 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer2901; + bSizer2901 = new wxBoxSizer( wxHORIZONTAL ); + m_bpButtonPlaySyncDone = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + bSizer2901->Add( m_bpButtonPlaySyncDone, 0, wxEXPAND, 5 ); - bSizer301->Add( 15, 0, 0, 0, 5 ); + m_textCtrlSoundPathSyncDone = new wxTextCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer2901->Add( m_textCtrlSoundPathSyncDone, 1, wxALIGN_CENTER_VERTICAL, 5 ); - ffgSizer11 = new wxFlexGridSizer( 0, 3, 0, 5 ); - ffgSizer11->AddGrowableCol( 2 ); - ffgSizer11->SetFlexibleDirection( wxBOTH ); - ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + m_buttonSelectSoundSyncDone = new wxButton( m_panel39, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectSoundSyncDone->SetToolTip( _("Select a folder") ); - m_bitmapCompareDone = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - ffgSizer11->Add( m_bitmapCompareDone, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer2901->Add( m_buttonSelectSoundSyncDone, 0, wxEXPAND, 5 ); - m_staticText171 = new wxStaticText( m_panel39, wxID_ANY, _("Comparison finished:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText171->Wrap( -1 ); - m_staticText171->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - ffgSizer11->Add( m_staticText171, 0, wxALIGN_CENTER_VERTICAL, 5 ); + ffgSizer11->Add( bSizer2901, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - wxBoxSizer* bSizer290; - bSizer290 = new wxBoxSizer( wxHORIZONTAL ); + m_staticText17111 = new wxStaticText( m_panel39, wxID_ANY, _("Unattended error message:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText17111->Wrap( -1 ); + m_staticText17111->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - m_bpButtonPlayCompareDone = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); - bSizer290->Add( m_bpButtonPlayCompareDone, 0, wxEXPAND, 5 ); + ffgSizer11->Add( m_staticText17111, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_textCtrlSoundPathCompareDone = new wxTextCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer290->Add( m_textCtrlSoundPathCompareDone, 1, wxALIGN_CENTER_VERTICAL, 5 ); + m_bitmapAlertPending = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + ffgSizer11->Add( m_bitmapAlertPending, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonSelectSoundCompareDone = new wxButton( m_panel39, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectSoundCompareDone->SetToolTip( _("Select a folder") ); + wxBoxSizer* bSizer29011; + bSizer29011 = new wxBoxSizer( wxHORIZONTAL ); - bSizer290->Add( m_buttonSelectSoundCompareDone, 0, wxEXPAND, 5 ); + m_bpButtonPlayAlertPending = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + bSizer29011->Add( m_bpButtonPlayAlertPending, 0, wxEXPAND, 5 ); + m_textCtrlSoundPathAlertPending = new wxTextCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer29011->Add( m_textCtrlSoundPathAlertPending, 1, wxALIGN_CENTER_VERTICAL, 5 ); - ffgSizer11->Add( bSizer290, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + m_buttonSelectSoundAlertPending = new wxButton( m_panel39, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectSoundAlertPending->SetToolTip( _("Select a folder") ); - m_bitmapSyncDone = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - ffgSizer11->Add( m_bitmapSyncDone, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer29011->Add( m_buttonSelectSoundAlertPending, 0, wxEXPAND, 5 ); - m_staticText1711 = new wxStaticText( m_panel39, wxID_ANY, _("Synchronization finished:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText1711->Wrap( -1 ); - m_staticText1711->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - ffgSizer11->Add( m_staticText1711, 0, wxALIGN_CENTER_VERTICAL, 5 ); + ffgSizer11->Add( bSizer29011, 1, wxEXPAND, 5 ); - wxBoxSizer* bSizer2901; - bSizer2901 = new wxBoxSizer( wxHORIZONTAL ); - m_bpButtonPlaySyncDone = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); - bSizer2901->Add( m_bpButtonPlaySyncDone, 0, wxEXPAND, 5 ); + fgSizer251111->Add( ffgSizer11, 0, wxEXPAND|wxTOP, 5 ); - m_textCtrlSoundPathSyncDone = new wxTextCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer2901->Add( m_textCtrlSoundPathSyncDone, 1, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonSelectSoundSyncDone = new wxButton( m_panel39, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectSoundSyncDone->SetToolTip( _("Select a folder") ); + bSizer166->Add( fgSizer251111, 0, wxALL|wxEXPAND, 10 ); - bSizer2901->Add( m_buttonSelectSoundSyncDone, 0, wxEXPAND, 5 ); + m_staticline3611 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer166->Add( m_staticline3611, 0, wxEXPAND, 5 ); + wxBoxSizer* bSizer2971; + bSizer2971 = new wxBoxSizer( wxHORIZONTAL ); - ffgSizer11->Add( bSizer2901, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + m_bitmapConsole = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer2971->Add( m_bitmapConsole, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_bitmapAlertPending = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - ffgSizer11->Add( m_bitmapAlertPending, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticText85 = new wxStaticText( m_panel39, wxID_ANY, _("Customize context menu:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText85->Wrap( -1 ); + bSizer2971->Add( m_staticText85, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - m_staticText17111 = new wxStaticText( m_panel39, wxID_ANY, _("Unattended error message:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText17111->Wrap( -1 ); - m_staticText17111->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + m_buttonShowCtxCustomize = new wxButton( m_panel39, wxID_ANY, _("&Show details"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer2971->Add( m_buttonShowCtxCustomize, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - ffgSizer11->Add( m_staticText17111, 0, wxALIGN_CENTER_VERTICAL, 5 ); - wxBoxSizer* bSizer29011; - bSizer29011 = new wxBoxSizer( wxHORIZONTAL ); + bSizer166->Add( bSizer2971, 0, wxALL, 10 ); - m_bpButtonPlayAlertPending = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); - bSizer29011->Add( m_bpButtonPlayAlertPending, 0, wxEXPAND, 5 ); + bSizerContextCustomize = new wxBoxSizer( wxVERTICAL ); - m_textCtrlSoundPathAlertPending = new wxTextCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer29011->Add( m_textCtrlSoundPathAlertPending, 1, wxALIGN_CENTER_VERTICAL, 5 ); + wxBoxSizer* bSizer181; + bSizer181 = new wxBoxSizer( wxHORIZONTAL ); - m_buttonSelectSoundAlertPending = new wxButton( m_panel39, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectSoundAlertPending->SetToolTip( _("Select a folder") ); + wxBoxSizer* bSizer2991; + bSizer2991 = new wxBoxSizer( wxVERTICAL ); - bSizer29011->Add( m_buttonSelectSoundAlertPending, 0, wxEXPAND, 5 ); + bSizer2991->Add( 0, 0, 1, 0, 5 ); - ffgSizer11->Add( bSizer29011, 1, wxEXPAND, 5 ); + wxBoxSizer* bSizer193; + bSizer193 = new wxBoxSizer( wxHORIZONTAL ); + m_bpButtonAddRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer193->Add( m_bpButtonAddRow, 0, wxALIGN_BOTTOM, 5 ); - bSizer301->Add( ffgSizer11, 1, wxALL, 5 ); + m_bpButtonRemoveRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), wxBU_AUTODRAW|0 ); + bSizer193->Add( m_bpButtonRemoveRow, 0, wxALIGN_BOTTOM, 5 ); - bSizer288->Add( bSizer301, 0, wxEXPAND, 5 ); + bSizer2991->Add( bSizer193, 0, 0, 5 ); - bSizer166->Add( bSizer288, 0, wxEXPAND|wxALL, 5 ); + bSizer181->Add( bSizer2991, 1, wxEXPAND, 5 ); - m_staticline3611 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer166->Add( m_staticline3611, 0, wxEXPAND, 5 ); + wxFlexGridSizer* fgSizer37; + fgSizer37 = new wxFlexGridSizer( 0, 2, 0, 10 ); + fgSizer37->SetFlexibleDirection( wxBOTH ); + fgSizer37->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - wxBoxSizer* bSizer181; - bSizer181 = new wxBoxSizer( wxVERTICAL ); + m_staticText174 = new wxStaticText( m_panel39, wxID_ANY, _("%item_path%"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText174->Wrap( -1 ); + m_staticText174->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); + m_staticText174->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - wxBoxSizer* bSizer289; - bSizer289 = new wxBoxSizer( wxHORIZONTAL ); + fgSizer37->Add( m_staticText174, 0, wxALIGN_CENTER_VERTICAL, 5 ); - wxBoxSizer* bSizer2991; - bSizer2991 = new wxBoxSizer( wxVERTICAL ); + m_staticText175 = new wxStaticText( m_panel39, wxID_ANY, _("Full file or folder path"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText175->Wrap( -1 ); + m_staticText175->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - wxBoxSizer* bSizer2971; - bSizer2971 = new wxBoxSizer( wxHORIZONTAL ); + fgSizer37->Add( m_staticText175, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_bitmapConsole = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer2971->Add( m_bitmapConsole, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticText178 = new wxStaticText( m_panel39, wxID_ANY, _("%local_path%"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText178->Wrap( -1 ); + m_staticText178->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); + m_staticText178->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - m_staticText85 = new wxStaticText( m_panel39, wxID_ANY, _("Customize context menu:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText85->Wrap( -1 ); - bSizer2971->Add( m_staticText85, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + fgSizer37->Add( m_staticText178, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticText179 = new wxStaticText( m_panel39, wxID_ANY, _("Temporary local copy for SFTP and MTP storage"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText179->Wrap( -1 ); + m_staticText179->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer2991->Add( bSizer2971, 0, 0, 5 ); + fgSizer37->Add( m_staticText179, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticText189 = new wxStaticText( m_panel39, wxID_ANY, _("%item_name%"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText189->Wrap( -1 ); + m_staticText189->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); + m_staticText189->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer2991->Add( 0, 0, 1, wxEXPAND, 5 ); + fgSizer37->Add( m_staticText189, 0, wxALIGN_CENTER_VERTICAL, 5 ); - wxBoxSizer* bSizer193; - bSizer193 = new wxBoxSizer( wxHORIZONTAL ); + m_staticText190 = new wxStaticText( m_panel39, wxID_ANY, _("File or folder name"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText190->Wrap( -1 ); + m_staticText190->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - m_bpButtonAddRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer193->Add( m_bpButtonAddRow, 0, wxALIGN_BOTTOM, 5 ); + fgSizer37->Add( m_staticText190, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_bpButtonRemoveRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); - bSizer193->Add( m_bpButtonRemoveRow, 0, wxALIGN_BOTTOM, 5 ); + m_staticText176 = new wxStaticText( m_panel39, wxID_ANY, _("%parent_path%"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText176->Wrap( -1 ); + m_staticText176->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); + m_staticText176->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + fgSizer37->Add( m_staticText176, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer2991->Add( bSizer193, 0, 0, 5 ); + wxBoxSizer* bSizer298; + bSizer298 = new wxBoxSizer( wxHORIZONTAL ); + m_staticText177 = new wxStaticText( m_panel39, wxID_ANY, _("Parent folder path"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText177->Wrap( -1 ); + m_staticText177->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer289->Add( bSizer2991, 1, wxEXPAND, 5 ); + bSizer298->Add( m_staticText177, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - wxFlexGridSizer* fgSizer25; - fgSizer25 = new wxFlexGridSizer( 0, 2, 0, 10 ); - fgSizer25->SetFlexibleDirection( wxBOTH ); - fgSizer25->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_staticText174 = new wxStaticText( m_panel39, wxID_ANY, _("%item_path%"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText174->Wrap( -1 ); - m_staticText174->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); - m_staticText174->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + bSizer298->Add( 0, 0, 1, 0, 5 ); - fgSizer25->Add( m_staticText174, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_hyperlink17 = new wxHyperlinkCtrl( m_panel39, wxID_ANY, _("Show examples"), wxT("https://freefilesync.org/manual.php?topic=external-applications"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink17->SetToolTip( _("https://freefilesync.org/manual.php?topic=external-applications") ); - m_staticText175 = new wxStaticText( m_panel39, wxID_ANY, _("Full file or folder path"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText175->Wrap( -1 ); - m_staticText175->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + bSizer298->Add( m_hyperlink17, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - fgSizer25->Add( m_staticText175, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText178 = new wxStaticText( m_panel39, wxID_ANY, _("%local_path%"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText178->Wrap( -1 ); - m_staticText178->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); - m_staticText178->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + fgSizer37->Add( bSizer298, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - fgSizer25->Add( m_staticText178, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText179 = new wxStaticText( m_panel39, wxID_ANY, _("Temporary local copy for SFTP and MTP storage"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText179->Wrap( -1 ); - m_staticText179->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + bSizer181->Add( fgSizer37, 0, wxBOTTOM|wxLEFT, 10 ); - fgSizer25->Add( m_staticText179, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText189 = new wxStaticText( m_panel39, wxID_ANY, _("%item_name%"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText189->Wrap( -1 ); - m_staticText189->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); - m_staticText189->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + bSizerContextCustomize->Add( bSizer181, 0, wxEXPAND, 5 ); - fgSizer25->Add( m_staticText189, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_gridCustomCommand = new wxGrid( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText190 = new wxStaticText( m_panel39, wxID_ANY, _("File or folder name"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText190->Wrap( -1 ); - m_staticText190->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + // Grid + m_gridCustomCommand->CreateGrid( 3, 2 ); + m_gridCustomCommand->EnableEditing( true ); + m_gridCustomCommand->EnableGridLines( true ); + m_gridCustomCommand->EnableDragGridSize( false ); + m_gridCustomCommand->SetMargins( 0, 0 ); - fgSizer25->Add( m_staticText190, 0, wxALIGN_CENTER_VERTICAL, 5 ); + // Columns + m_gridCustomCommand->EnableDragColMove( false ); + m_gridCustomCommand->EnableDragColSize( false ); + m_gridCustomCommand->SetColLabelValue( 0, _("Description") ); + m_gridCustomCommand->SetColLabelValue( 1, _("Command line") ); + m_gridCustomCommand->SetColLabelSize( -1 ); + m_gridCustomCommand->SetColLabelAlignment( wxALIGN_CENTER, wxALIGN_CENTER ); - m_staticText176 = new wxStaticText( m_panel39, wxID_ANY, _("%parent_path%"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText176->Wrap( -1 ); - m_staticText176->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); - m_staticText176->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + // Rows + m_gridCustomCommand->EnableDragRowSize( false ); + m_gridCustomCommand->SetRowLabelSize( 1 ); + m_gridCustomCommand->SetRowLabelAlignment( wxALIGN_CENTER, wxALIGN_CENTER ); - fgSizer25->Add( m_staticText176, 0, wxALIGN_CENTER_VERTICAL, 5 ); + // Label Appearance - wxBoxSizer* bSizer298; - bSizer298 = new wxBoxSizer( wxHORIZONTAL ); + // Cell Defaults + m_gridCustomCommand->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP ); + bSizerContextCustomize->Add( m_gridCustomCommand, 1, wxEXPAND, 5 ); - m_staticText177 = new wxStaticText( m_panel39, wxID_ANY, _("Parent folder path"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText177->Wrap( -1 ); - m_staticText177->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer298->Add( m_staticText177, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer166->Add( bSizerContextCustomize, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 10 ); - bSizer298->Add( 0, 0, 1, 0, 5 ); + m_panel39->SetSizer( bSizer166 ); + m_panel39->Layout(); + bSizer166->Fit( m_panel39 ); + bSizer95->Add( m_panel39, 1, wxEXPAND, 5 ); - m_hyperlink17 = new wxHyperlinkCtrl( m_panel39, wxID_ANY, _("Show examples"), wxT("https://freefilesync.org/manual.php?topic=external-applications"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink17->SetToolTip( _("https://freefilesync.org/manual.php?topic=external-applications") ); + m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer95->Add( m_staticline36, 0, wxEXPAND, 5 ); - bSizer298->Add( m_hyperlink17, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + m_buttonDefault = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonDefault, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - fgSizer25->Add( bSizer298, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + bSizerStdButtons->Add( 0, 0, 1, 0, 5 ); - fgSizer25->Add( 0, 10, 0, 0, 5 ); + m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - fgSizer25->Add( 0, 0, 0, 0, 5 ); + bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer289->Add( fgSizer25, 0, wxLEFT, 5 ); + bSizer95->Add( bSizerStdButtons, 0, wxEXPAND, 5 ); - bSizer181->Add( bSizer289, 0, wxEXPAND, 5 ); - m_gridCustomCommand = new wxGrid( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + this->SetSizer( bSizer95 ); + this->Layout(); + bSizer95->Fit( this ); - // Grid - m_gridCustomCommand->CreateGrid( 3, 2 ); - m_gridCustomCommand->EnableEditing( true ); - m_gridCustomCommand->EnableGridLines( true ); - m_gridCustomCommand->EnableDragGridSize( false ); - m_gridCustomCommand->SetMargins( 0, 0 ); + this->Centre( wxBOTH ); - // Columns - m_gridCustomCommand->EnableDragColMove( false ); - m_gridCustomCommand->EnableDragColSize( true ); - m_gridCustomCommand->SetColLabelValue( 0, _("Description") ); - m_gridCustomCommand->SetColLabelValue( 1, _("Command line") ); - m_gridCustomCommand->SetColLabelSize( -1 ); - m_gridCustomCommand->SetColLabelAlignment( wxALIGN_CENTER, wxALIGN_CENTER ); - - // Rows - m_gridCustomCommand->EnableDragRowSize( false ); - m_gridCustomCommand->SetRowLabelSize( 1 ); - m_gridCustomCommand->SetRowLabelAlignment( wxALIGN_CENTER, wxALIGN_CENTER ); - - // Label Appearance - - // Cell Defaults - m_gridCustomCommand->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP ); - bSizer181->Add( m_gridCustomCommand, 1, wxEXPAND, 5 ); - - - bSizer166->Add( bSizer181, 1, wxEXPAND|wxALL, 10 ); - - - m_panel39->SetSizer( bSizer166 ); - m_panel39->Layout(); - bSizer166->Fit( m_panel39 ); - bSizer95->Add( m_panel39, 1, 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,-1 ), 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,-1 ), 0 ); - - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - - bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 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( OptionsDlgGenerated::onClose ) ); - m_buttonRestoreDialogs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onRestoreDialogs ), NULL, this ); - m_hyperlinkLogFolder->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( OptionsDlgGenerated::onShowLogFolder ), NULL, this ); - m_checkBoxLogFilesMaxAge->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onToggleLogfilesLimit ), NULL, this ); - m_bpButtonPlayCompareDone->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onPlayCompareDone ), NULL, this ); - m_textCtrlSoundPathCompareDone->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( OptionsDlgGenerated::onChangeSoundFilePath ), NULL, this ); - m_buttonSelectSoundCompareDone->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onSelectSoundCompareDone ), NULL, this ); - m_bpButtonPlaySyncDone->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onPlaySyncDone ), NULL, this ); - m_textCtrlSoundPathSyncDone->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( OptionsDlgGenerated::onChangeSoundFilePath ), NULL, this ); - m_buttonSelectSoundSyncDone->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onSelectSoundSyncDone ), NULL, this ); - m_bpButtonPlayAlertPending->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onPlayAlertPending ), NULL, this ); - m_textCtrlSoundPathAlertPending->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( OptionsDlgGenerated::onChangeSoundFilePath ), NULL, this ); - m_buttonSelectSoundAlertPending->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onSelectSoundAlertPending ), NULL, this ); - m_bpButtonAddRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onAddRow ), NULL, this ); - m_bpButtonRemoveRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onRemoveRow ), NULL, this ); - m_buttonDefault->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onDefault ), NULL, this ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onCancel ), NULL, this ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( OptionsDlgGenerated::onClose ) ); + m_buttonShowHiddenDialogs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onShowHiddenDialogs ), NULL, this ); + m_checkListHiddenDialogs->Connect( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, wxCommandEventHandler( OptionsDlgGenerated::onToggleHiddenDialog ), NULL, this ); + m_hyperlinkLogFolder->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( OptionsDlgGenerated::onShowLogFolder ), NULL, this ); + m_checkBoxLogFilesMaxAge->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onToggleLogfilesLimit ), NULL, this ); + m_bpButtonPlayCompareDone->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onPlayCompareDone ), NULL, this ); + m_textCtrlSoundPathCompareDone->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( OptionsDlgGenerated::onChangeSoundFilePath ), NULL, this ); + m_buttonSelectSoundCompareDone->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onSelectSoundCompareDone ), NULL, this ); + m_bpButtonPlaySyncDone->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onPlaySyncDone ), NULL, this ); + m_textCtrlSoundPathSyncDone->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( OptionsDlgGenerated::onChangeSoundFilePath ), NULL, this ); + m_buttonSelectSoundSyncDone->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onSelectSoundSyncDone ), NULL, this ); + m_bpButtonPlayAlertPending->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onPlayAlertPending ), NULL, this ); + m_textCtrlSoundPathAlertPending->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( OptionsDlgGenerated::onChangeSoundFilePath ), NULL, this ); + m_buttonSelectSoundAlertPending->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onSelectSoundAlertPending ), NULL, this ); + m_buttonShowCtxCustomize->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onShowContextCustomize ), NULL, this ); + m_bpButtonAddRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onAddRow ), NULL, this ); + m_bpButtonRemoveRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onRemoveRow ), NULL, this ); + m_buttonDefault->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onDefault ), NULL, this ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::onCancel ), NULL, this ); } OptionsDlgGenerated::~OptionsDlgGenerated() @@ -4949,22 +4916,22 @@ OptionsDlgGenerated::~OptionsDlgGenerated() TooltipDlgGenerated::TooltipDlgGenerated( 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->SetSizeHints( wxDefaultSize, wxDefaultSize ); - wxBoxSizer* bSizer158; - bSizer158 = new wxBoxSizer( wxHORIZONTAL ); + 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_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 ); + 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->SetSizer( bSizer158 ); + this->Layout(); + bSizer158->Fit( this ); } TooltipDlgGenerated::~TooltipDlgGenerated() @@ -4973,61 +4940,61 @@ TooltipDlgGenerated::~TooltipDlgGenerated() 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 ) ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer96; - bSizer96 = new wxBoxSizer( wxVERTICAL ); + 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 ) ); + 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 ); + wxBoxSizer* bSizer98; + bSizer98 = new wxBoxSizer( wxHORIZONTAL ); - m_calendarFrom = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxCAL_SHOW_SURROUNDING_WEEKS|wxBORDER_NONE ); - bSizer98->Add( m_calendarFrom, 0, wxTOP|wxBOTTOM|wxLEFT, 10 ); + m_calendarFrom = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxCAL_SHOW_SURROUNDING_WEEKS|wxBORDER_NONE ); + bSizer98->Add( m_calendarFrom, 0, wxTOP|wxBOTTOM|wxLEFT, 10 ); - m_calendarTo = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxCAL_SHOW_SURROUNDING_WEEKS|wxBORDER_NONE ); - bSizer98->Add( m_calendarTo, 0, wxALL, 10 ); + m_calendarTo = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxCAL_SHOW_SURROUNDING_WEEKS|wxBORDER_NONE ); + bSizer98->Add( m_calendarTo, 0, wxALL, 10 ); - m_panel35->SetSizer( bSizer98 ); - m_panel35->Layout(); - bSizer98->Fit( m_panel35 ); - bSizer96->Add( m_panel35, 0, wxEXPAND, 5 ); + m_panel35->SetSizer( bSizer98 ); + m_panel35->Layout(); + bSizer98->Fit( m_panel35 ); + bSizer96->Add( m_panel35, 0, wxEXPAND, 5 ); - m_staticline21 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer96->Add( m_staticline21, 0, wxEXPAND, 5 ); + m_staticline21 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer96->Add( m_staticline21, 0, wxEXPAND, 5 ); - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer96->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + bSizer96->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - this->SetSizer( bSizer96 ); - this->Layout(); - bSizer96->Fit( this ); + this->SetSizer( bSizer96 ); + this->Layout(); + bSizer96->Fit( this ); - this->Centre( wxBOTH ); + 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 ); + // 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() @@ -5036,265 +5003,265 @@ 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 ) ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer31; - bSizer31 = new wxBoxSizer( wxVERTICAL ); + 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 ) ); + m_panel41 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel41->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer174; - bSizer174 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer174; + bSizer174 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapLogoLeft = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer174->Add( m_bitmapLogoLeft, 0, wxBOTTOM, 5 ); + m_bitmapLogoLeft = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer174->Add( m_bitmapLogoLeft, 0, wxBOTTOM, 5 ); - m_staticline81 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer174->Add( m_staticline81, 0, wxEXPAND, 5 ); + m_staticline81 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer174->Add( m_staticline81, 0, wxEXPAND, 5 ); - bSizerMainSection = new wxBoxSizer( wxVERTICAL ); + bSizerMainSection = new wxBoxSizer( wxVERTICAL ); - m_staticline82 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerMainSection->Add( m_staticline82, 0, wxEXPAND, 5 ); + m_staticline82 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerMainSection->Add( m_staticline82, 0, wxEXPAND, 5 ); - m_bitmapLogo = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerMainSection->Add( m_bitmapLogo, 0, 0, 5 ); + m_bitmapLogo = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerMainSection->Add( m_bitmapLogo, 0, 0, 5 ); - m_staticline341 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerMainSection->Add( m_staticline341, 0, wxEXPAND, 5 ); + m_staticline341 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerMainSection->Add( m_staticline341, 0, wxEXPAND, 5 ); - m_staticTextVersion = new wxStaticText( m_panel41, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextVersion->Wrap( -1 ); - bSizerMainSection->Add( m_staticTextVersion, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + m_staticTextVersion = new wxStaticText( m_panel41, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextVersion->Wrap( -1 ); + bSizerMainSection->Add( m_staticTextVersion, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - m_staticline3411 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerMainSection->Add( m_staticline3411, 0, wxEXPAND, 5 ); + m_staticline3411 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerMainSection->Add( m_staticline3411, 0, wxEXPAND, 5 ); - m_panelDonate = new wxPanel( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelDonate->SetBackgroundColour( wxColour( 153, 170, 187 ) ); + 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 ); + wxBoxSizer* bSizer183; + bSizer183 = new wxBoxSizer( wxVERTICAL ); - m_panel39 = new wxPanel( m_panelDonate, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel39->SetBackgroundColour( wxColour( 248, 248, 248 ) ); + m_panel39 = new wxPanel( m_panelDonate, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel39->SetBackgroundColour( wxColour( 248, 248, 248 ) ); - wxBoxSizer* bSizer184; - bSizer184 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer184; + bSizer184 = new wxBoxSizer( wxHORIZONTAL ); - bSizer184->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizer184->Add( 0, 0, 1, wxEXPAND, 5 ); - m_bitmapDonate = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer184->Add( m_bitmapDonate, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + m_bitmapDonate = new wxStaticBitmap( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer184->Add( m_bitmapDonate, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - wxBoxSizer* bSizer178; - bSizer178 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer178; + bSizer178 = new wxBoxSizer( wxVERTICAL ); - m_staticTextDonate = new wxStaticText( m_panel39, wxID_ANY, _("If you like FreeFileSync:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDonate->Wrap( -1 ); - m_staticTextDonate->SetForegroundColour( wxColour( 0, 0, 0 ) ); + m_staticTextDonate = new wxStaticText( m_panel39, wxID_ANY, _("If you like FreeFileSync:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDonate->Wrap( -1 ); + m_staticTextDonate->SetForegroundColour( wxColour( 0, 0, 0 ) ); - bSizer178->Add( m_staticTextDonate, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer178->Add( m_staticTextDonate, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_buttonDonate = new wxButton( m_panel39, wxID_ANY, _("Support with a donation"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonDonate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - m_buttonDonate->SetToolTip( _("https://freefilesync.org/donate") ); + m_buttonDonate = new wxButton( m_panel39, wxID_ANY, _("Support with a donation"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonDonate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonDonate->SetToolTip( _("https://freefilesync.org/donate") ); - bSizer178->Add( m_buttonDonate, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer178->Add( m_buttonDonate, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizer184->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + bSizer184->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - bSizer184->Add( 0, 0, 1, wxEXPAND, 5 ); + bSizer184->Add( 0, 0, 1, wxEXPAND, 5 ); - m_panel39->SetSizer( bSizer184 ); - m_panel39->Layout(); - bSizer184->Fit( m_panel39 ); - bSizer183->Add( m_panel39, 0, wxALL|wxEXPAND, 5 ); + m_panel39->SetSizer( bSizer184 ); + m_panel39->Layout(); + bSizer184->Fit( m_panel39 ); + bSizer183->Add( m_panel39, 0, wxALL|wxEXPAND, 5 ); - m_panelDonate->SetSizer( bSizer183 ); - m_panelDonate->Layout(); - bSizer183->Fit( m_panelDonate ); - bSizerMainSection->Add( m_panelDonate, 0, wxEXPAND|wxALL, 10 ); + m_panelDonate->SetSizer( bSizer183 ); + m_panelDonate->Layout(); + bSizer183->Fit( m_panelDonate ); + bSizerMainSection->Add( m_panelDonate, 0, wxEXPAND|wxALL, 10 ); - m_panelThankYou = new wxPanel( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelThankYou->SetBackgroundColour( wxColour( 153, 170, 187 ) ); + m_panelThankYou = new wxPanel( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelThankYou->SetBackgroundColour( wxColour( 153, 170, 187 ) ); - wxBoxSizer* bSizer1831; - bSizer1831 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer1831; + bSizer1831 = new wxBoxSizer( wxVERTICAL ); - m_panel391 = new wxPanel( m_panelThankYou, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel391->SetBackgroundColour( wxColour( 248, 248, 248 ) ); + m_panel391 = new wxPanel( m_panelThankYou, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel391->SetBackgroundColour( wxColour( 248, 248, 248 ) ); - wxBoxSizer* bSizer243; - bSizer243 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer243; + bSizer243 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer1841; - bSizer1841 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer1841; + bSizer1841 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapThanks = new wxStaticBitmap( m_panel391, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer1841->Add( m_bitmapThanks, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + m_bitmapThanks = new wxStaticBitmap( m_panel391, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer1841->Add( m_bitmapThanks, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - m_staticTextThanks = new wxStaticText( m_panel391, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextThanks->Wrap( -1 ); - m_staticTextThanks->SetForegroundColour( wxColour( 0, 0, 0 ) ); + m_staticTextThanks = new wxStaticText( m_panel391, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextThanks->Wrap( -1 ); + m_staticTextThanks->SetForegroundColour( wxColour( 0, 0, 0 ) ); - bSizer1841->Add( m_staticTextThanks, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer1841->Add( m_staticTextThanks, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer243->Add( bSizer1841, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 ); + bSizer243->Add( bSizer1841, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 ); - m_staticTextNoAutoUpdate = new wxStaticText( m_panel391, wxID_ANY, _("The auto updater was disabled by the administrator."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextNoAutoUpdate->Wrap( -1 ); - m_staticTextNoAutoUpdate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); + m_staticTextNoAutoUpdate = new wxStaticText( m_panel391, wxID_ANY, _("The auto updater was disabled by the administrator."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextNoAutoUpdate->Wrap( -1 ); + m_staticTextNoAutoUpdate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); - bSizer243->Add( m_staticTextNoAutoUpdate, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer243->Add( m_staticTextNoAutoUpdate, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - m_buttonShowDonationDetails = new wxButton( m_panel391, wxID_ANY, _("Donation details"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer243->Add( m_buttonShowDonationDetails, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + m_buttonShowDonationDetails = new wxButton( m_panel391, wxID_ANY, _("Donation details"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer243->Add( m_buttonShowDonationDetails, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_panel391->SetSizer( bSizer243 ); - m_panel391->Layout(); - bSizer243->Fit( m_panel391 ); - bSizer1831->Add( m_panel391, 0, wxEXPAND|wxALL, 5 ); + m_panel391->SetSizer( bSizer243 ); + m_panel391->Layout(); + bSizer243->Fit( m_panel391 ); + bSizer1831->Add( m_panel391, 0, wxEXPAND|wxALL, 5 ); - m_panelThankYou->SetSizer( bSizer1831 ); - m_panelThankYou->Layout(); - bSizer1831->Fit( m_panelThankYou ); - bSizerMainSection->Add( m_panelThankYou, 0, wxEXPAND|wxALL, 10 ); + m_panelThankYou->SetSizer( bSizer1831 ); + m_panelThankYou->Layout(); + bSizer1831->Fit( m_panelThankYou ); + bSizerMainSection->Add( m_panelThankYou, 0, wxEXPAND|wxALL, 10 ); - m_staticline3412 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerMainSection->Add( m_staticline3412, 0, wxEXPAND, 5 ); + m_staticline3412 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerMainSection->Add( m_staticline3412, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer186; - bSizer186 = new wxBoxSizer( wxVERTICAL ); + 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, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 ); + 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, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 ); - wxBoxSizer* bSizer289; - bSizer289 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer289; + bSizer289 = new wxBoxSizer( wxHORIZONTAL ); - m_bpButtonForum = new wxBitmapButton( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); - m_bpButtonForum->SetToolTip( _("https://freefilesync.org/forum/") ); + m_bpButtonForum = new wxBitmapButton( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + m_bpButtonForum->SetToolTip( _("https://freefilesync.org/forum/") ); - bSizer289->Add( m_bpButtonForum, 0, wxALL|wxEXPAND, 5 ); + bSizer289->Add( m_bpButtonForum, 0, wxALL|wxEXPAND, 5 ); - wxBoxSizer* bSizer290; - bSizer290 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer290; + bSizer290 = new wxBoxSizer( wxVERTICAL ); - m_bpButtonHomepage = new wxBitmapButton( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); - m_bpButtonHomepage->SetToolTip( _("https://freefilesync.org") ); + m_bpButtonHomepage = new wxBitmapButton( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + m_bpButtonHomepage->SetToolTip( _("https://freefilesync.org") ); - bSizer290->Add( m_bpButtonHomepage, 1, wxTOP|wxRIGHT|wxEXPAND, 5 ); + bSizer290->Add( m_bpButtonHomepage, 1, wxTOP|wxRIGHT|wxEXPAND, 5 ); - bSizer290->Add( 0, 5, 0, 0, 5 ); + bSizer290->Add( 0, 5, 0, 0, 5 ); - m_bpButtonEmail = new wxBitmapButton( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); - bSizer290->Add( m_bpButtonEmail, 1, wxEXPAND|wxBOTTOM|wxRIGHT, 5 ); + m_bpButtonEmail = new wxBitmapButton( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + bSizer290->Add( m_bpButtonEmail, 1, wxEXPAND|wxBOTTOM|wxRIGHT, 5 ); - bSizer289->Add( bSizer290, 0, wxEXPAND, 5 ); + bSizer289->Add( bSizer290, 0, wxEXPAND, 5 ); - bSizer186->Add( bSizer289, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer186->Add( bSizer289, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizerMainSection->Add( bSizer186, 0, wxALL|wxEXPAND, 5 ); + bSizerMainSection->Add( bSizer186, 0, wxALL|wxEXPAND, 5 ); - m_staticline34 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerMainSection->Add( m_staticline34, 0, wxEXPAND, 5 ); + m_staticline34 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerMainSection->Add( m_staticline34, 0, wxEXPAND, 5 ); - wxBoxSizer* bSizer185; - bSizer185 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer185; + bSizer185 = new wxBoxSizer( wxHORIZONTAL ); - m_staticTextGpl = new wxStaticText( m_panel41, wxID_ANY, _("Published under the GNU General Public License:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextGpl->Wrap( -1 ); - bSizer185->Add( m_staticTextGpl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_staticTextGpl = new wxStaticText( m_panel41, wxID_ANY, _("Published under the GNU General Public License:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextGpl->Wrap( -1 ); + bSizer185->Add( m_staticTextGpl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_bpButtonGpl = new wxBitmapButton( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); - m_bpButtonGpl->SetToolTip( _("https://www.gnu.org/licenses/gpl-3.0") ); + m_bpButtonGpl = new wxBitmapButton( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); + m_bpButtonGpl->SetToolTip( _("https://www.gnu.org/licenses/gpl-3.0") ); - bSizer185->Add( m_bpButtonGpl, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + bSizer185->Add( m_bpButtonGpl, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizerMainSection->Add( bSizer185, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizerMainSection->Add( bSizer185, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizer174->Add( bSizerMainSection, 0, 0, 5 ); + bSizer174->Add( bSizerMainSection, 0, 0, 5 ); - m_staticline37 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer174->Add( m_staticline37, 0, wxEXPAND, 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 ); + wxBoxSizer* bSizer177; + bSizer177 = new wxBoxSizer( wxVERTICAL ); - m_staticTextThanksForLoc = new wxStaticText( m_panel41, wxID_ANY, _("Many thanks for localization:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextThanksForLoc->Wrap( -1 ); - bSizer177->Add( m_staticTextThanksForLoc, 0, wxALL, 5 ); + m_staticTextThanksForLoc = new wxStaticText( m_panel41, wxID_ANY, _("Many thanks for localization:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextThanksForLoc->Wrap( -1 ); + bSizer177->Add( m_staticTextThanksForLoc, 0, wxALL, 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 = new wxScrolledWindow( m_panel41, wxID_ANY, wxDefaultPosition, wxSize( -1, -1 ), wxVSCROLL ); + m_scrolledWindowTranslators->SetScrollRate( 10, 10 ); + m_scrolledWindowTranslators->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - fgSizerTranslators = new wxFlexGridSizer( 0, 2, 2, 10 ); - fgSizerTranslators->SetFlexibleDirection( wxBOTH ); - fgSizerTranslators->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + 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, wxEXPAND|wxLEFT, 5 ); + m_scrolledWindowTranslators->SetSizer( fgSizerTranslators ); + m_scrolledWindowTranslators->Layout(); + fgSizerTranslators->Fit( m_scrolledWindowTranslators ); + bSizer177->Add( m_scrolledWindowTranslators, 1, wxEXPAND|wxLEFT, 5 ); - bSizer174->Add( bSizer177, 0, wxEXPAND|wxLEFT, 5 ); + bSizer174->Add( bSizer177, 0, wxEXPAND|wxLEFT, 5 ); - m_panel41->SetSizer( bSizer174 ); - m_panel41->Layout(); - bSizer174->Fit( m_panel41 ); - bSizer31->Add( m_panel41, 0, wxEXPAND, 5 ); + m_panel41->SetSizer( bSizer174 ); + m_panel41->Layout(); + bSizer174->Fit( m_panel41 ); + bSizer31->Add( m_panel41, 0, wxEXPAND, 5 ); - m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer31->Add( m_staticline36, 0, wxEXPAND, 5 ); + m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer31->Add( m_staticline36, 0, wxEXPAND, 5 ); - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonClose->SetDefault(); - bSizerStdButtons->Add( m_buttonClose, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + m_buttonClose->SetDefault(); + bSizerStdButtons->Add( m_buttonClose, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - bSizer31->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + bSizer31->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - this->SetSizer( bSizer31 ); - this->Layout(); - bSizer31->Fit( this ); + this->SetSizer( bSizer31 ); + this->Layout(); + bSizer31->Fit( this ); - this->Centre( wxBOTH ); + 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_buttonShowDonationDetails->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onShowDonationDetails ), NULL, this ); - m_bpButtonForum->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onOpenForum ), NULL, this ); - m_bpButtonHomepage->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onOpenHomepage ), NULL, this ); - m_bpButtonEmail->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onSendEmail ), NULL, this ); - m_bpButtonGpl->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onShowGpl ), NULL, this ); - m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onOkay ), NULL, this ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::onClose ) ); + m_buttonDonate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onDonate ), NULL, this ); + m_buttonShowDonationDetails->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onShowDonationDetails ), NULL, this ); + m_bpButtonForum->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onOpenForum ), NULL, this ); + m_bpButtonHomepage->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onOpenHomepage ), NULL, this ); + m_bpButtonEmail->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onSendEmail ), NULL, this ); + m_bpButtonGpl->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onShowGpl ), NULL, this ); + m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::onOkay ), NULL, this ); } AboutDlgGenerated::~AboutDlgGenerated() @@ -5303,61 +5270,61 @@ AboutDlgGenerated::~AboutDlgGenerated() DownloadProgressDlgGenerated::DownloadProgressDlgGenerated( 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->SetSizeHints( wxDefaultSize, wxDefaultSize ); - wxBoxSizer* bSizer24; - bSizer24 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer24; + bSizer24 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapDownloading = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer72->Add( m_bitmapDownloading, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + m_bitmapDownloading = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer72->Add( m_bitmapDownloading, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); - m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextHeader->Wrap( -1 ); - bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextHeader->Wrap( -1 ); + bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - bSizer72->Add( 20, 0, 0, 0, 5 ); + bSizer72->Add( 20, 0, 0, 0, 5 ); - bSizer24->Add( bSizer72, 0, 0, 5 ); + bSizer24->Add( bSizer72, 0, 0, 5 ); - wxBoxSizer* bSizer212; - bSizer212 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer212; + bSizer212 = new wxBoxSizer( wxVERTICAL ); - m_gaugeProgress = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL ); - m_gaugeProgress->SetValue( 0 ); - bSizer212->Add( m_gaugeProgress, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + m_gaugeProgress = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL ); + m_gaugeProgress->SetValue( 0 ); + bSizer212->Add( m_gaugeProgress, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - m_staticTextDetails = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDetails->Wrap( -1 ); - bSizer212->Add( m_staticTextDetails, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + m_staticTextDetails = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDetails->Wrap( -1 ); + bSizer212->Add( m_staticTextDetails, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - bSizer24->Add( bSizer212, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizer24->Add( bSizer212, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 ); + m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 ); - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonCancel->SetDefault(); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_buttonCancel->SetDefault(); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - bSizer24->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + bSizer24->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - this->SetSizer( bSizer24 ); - this->Layout(); - bSizer24->Fit( this ); + this->SetSizer( bSizer24 ); + this->Layout(); + bSizer24->Fit( this ); - // Connect Events - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DownloadProgressDlgGenerated::onCancel ), NULL, this ); + // Connect Events + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DownloadProgressDlgGenerated::onCancel ), NULL, this ); } DownloadProgressDlgGenerated::~DownloadProgressDlgGenerated() @@ -5366,178 +5333,178 @@ DownloadProgressDlgGenerated::~DownloadProgressDlgGenerated() ActivationDlgGenerated::ActivationDlgGenerated( 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 ) ); + this->SetSizeHints( wxSize( -1, -1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer54; - bSizer54 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer54; + bSizer54 = new wxBoxSizer( wxVERTICAL ); - m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + 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* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer165; - bSizer165 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer165; + bSizer165 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapActivation = new wxStaticBitmap( m_panel35, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer165->Add( m_bitmapActivation, 0, wxALL, 10 ); + m_bitmapActivation = new wxStaticBitmap( m_panel35, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer165->Add( m_bitmapActivation, 0, wxALL, 10 ); - wxBoxSizer* bSizer16; - bSizer16 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer16; + bSizer16 = new wxBoxSizer( wxVERTICAL ); - bSizer16->Add( 0, 10, 0, 0, 5 ); + bSizer16->Add( 0, 10, 0, 0, 5 ); - m_richTextLastError = new wxRichTextCtrl( m_panel35, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxBORDER_NONE|wxVSCROLL|wxWANTS_CHARS ); - bSizer16->Add( m_richTextLastError, 1, wxEXPAND, 5 ); + m_richTextLastError = new wxRichTextCtrl( m_panel35, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxBORDER_NONE|wxVSCROLL|wxWANTS_CHARS ); + bSizer16->Add( m_richTextLastError, 1, wxEXPAND, 5 ); - bSizer165->Add( bSizer16, 1, wxEXPAND, 5 ); + bSizer165->Add( bSizer16, 1, wxEXPAND, 5 ); - bSizer172->Add( bSizer165, 1, wxEXPAND, 5 ); + bSizer172->Add( bSizer165, 1, wxEXPAND, 5 ); - m_staticline82 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer172->Add( m_staticline82, 0, wxEXPAND, 5 ); + m_staticline82 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer172->Add( m_staticline82, 0, wxEXPAND, 5 ); - m_staticTextMain = new wxStaticText( m_panel35, wxID_ANY, _("Activate the FreeFileSync Donation Edition by one of the following methods:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextMain->Wrap( -1 ); - bSizer172->Add( m_staticTextMain, 0, wxALL, 10 ); + m_staticTextMain = new wxStaticText( m_panel35, wxID_ANY, _("Activate the FreeFileSync Donation Edition by one of the following methods:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextMain->Wrap( -1 ); + bSizer172->Add( m_staticTextMain, 0, wxALL, 10 ); - m_panel35->SetSizer( bSizer172 ); - m_panel35->Layout(); - bSizer172->Fit( m_panel35 ); - bSizer54->Add( m_panel35, 1, wxEXPAND, 5 ); + m_panel35->SetSizer( bSizer172 ); + m_panel35->Layout(); + bSizer172->Fit( m_panel35 ); + bSizer54->Add( m_panel35, 1, wxEXPAND, 5 ); - m_staticline181 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer54->Add( m_staticline181, 0, wxEXPAND|wxBOTTOM, 5 ); + m_staticline181 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer54->Add( m_staticline181, 0, wxEXPAND|wxBOTTOM, 5 ); - m_staticline18111 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer54->Add( m_staticline18111, 0, wxEXPAND|wxTOP, 5 ); + m_staticline18111 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer54->Add( m_staticline18111, 0, wxEXPAND|wxTOP, 5 ); - m_panel3511 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel3511->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panel3511 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel3511->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer263; - bSizer263 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer263; + bSizer263 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer234; - bSizer234 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer234; + bSizer234 = new wxBoxSizer( wxHORIZONTAL ); - m_staticTextMain1 = new wxStaticText( m_panel3511, wxID_ANY, _("1."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextMain1->Wrap( -1 ); - bSizer234->Add( m_staticTextMain1, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + m_staticTextMain1 = new wxStaticText( m_panel3511, wxID_ANY, _("1."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextMain1->Wrap( -1 ); + bSizer234->Add( m_staticTextMain1, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText136 = new wxStaticText( m_panel3511, wxID_ANY, _("Activate via internet now:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText136->Wrap( -1 ); - bSizer234->Add( m_staticText136, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_staticText136 = new wxStaticText( m_panel3511, wxID_ANY, _("Activate via internet now:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText136->Wrap( -1 ); + bSizer234->Add( m_staticText136, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - m_buttonActivateOnline = new wxButton( m_panel3511, wxID_ANY, _("Activate online"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonActivateOnline = new wxButton( m_panel3511, wxID_ANY, _("Activate online"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonActivateOnline->SetDefault(); - m_buttonActivateOnline->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonActivateOnline->SetDefault(); + m_buttonActivateOnline->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer234->Add( m_buttonActivateOnline, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer234->Add( m_buttonActivateOnline, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer263->Add( bSizer234, 0, wxEXPAND|wxALL, 10 ); + bSizer263->Add( bSizer234, 0, wxEXPAND|wxALL, 10 ); - m_panel3511->SetSizer( bSizer263 ); - m_panel3511->Layout(); - bSizer263->Fit( m_panel3511 ); - bSizer54->Add( m_panel3511, 0, wxEXPAND, 5 ); + m_panel3511->SetSizer( bSizer263 ); + m_panel3511->Layout(); + bSizer263->Fit( m_panel3511 ); + bSizer54->Add( m_panel3511, 0, wxEXPAND, 5 ); - m_staticline181111 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer54->Add( m_staticline181111, 0, wxEXPAND|wxBOTTOM, 5 ); + m_staticline181111 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer54->Add( m_staticline181111, 0, wxEXPAND|wxBOTTOM, 5 ); - m_staticline181112 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer54->Add( m_staticline181112, 0, wxEXPAND|wxTOP, 5 ); + m_staticline181112 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer54->Add( m_staticline181112, 0, wxEXPAND|wxTOP, 5 ); - m_panel351 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel351->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panel351 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel351->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer266; - bSizer266 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer266; + bSizer266 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer237; - bSizer237 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer237; + bSizer237 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer236; - bSizer236 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer236; + bSizer236 = new wxBoxSizer( wxHORIZONTAL ); - m_staticText175 = new wxStaticText( m_panel351, wxID_ANY, _("2."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText175->Wrap( -1 ); - bSizer236->Add( m_staticText175, 0, wxRIGHT|wxALIGN_BOTTOM, 5 ); + m_staticText175 = new wxStaticText( m_panel351, wxID_ANY, _("2."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText175->Wrap( -1 ); + bSizer236->Add( m_staticText175, 0, wxRIGHT|wxALIGN_BOTTOM, 5 ); - m_staticText1361 = new wxStaticText( m_panel351, wxID_ANY, _("Retrieve an offline activation key from the following URL:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText1361->Wrap( -1 ); - bSizer236->Add( m_staticText1361, 1, wxRIGHT|wxALIGN_BOTTOM, 5 ); + m_staticText1361 = new wxStaticText( m_panel351, wxID_ANY, _("Retrieve an offline activation key from the following URL:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText1361->Wrap( -1 ); + bSizer236->Add( m_staticText1361, 1, wxRIGHT|wxALIGN_BOTTOM, 5 ); - m_buttonCopyUrl = new wxButton( m_panel351, wxID_ANY, _("&Copy to clipboard"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer236->Add( m_buttonCopyUrl, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_buttonCopyUrl = new wxButton( m_panel351, wxID_ANY, _("&Copy to clipboard"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizer236->Add( m_buttonCopyUrl, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer237->Add( bSizer236, 0, wxEXPAND|wxBOTTOM, 5 ); + bSizer237->Add( bSizer236, 0, wxEXPAND|wxBOTTOM, 5 ); - m_richTextManualActivationUrl = new wxRichTextCtrl( m_panel351, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxBORDER_NONE|wxVSCROLL|wxWANTS_CHARS ); - bSizer237->Add( m_richTextManualActivationUrl, 0, wxEXPAND|wxBOTTOM, 5 ); + m_richTextManualActivationUrl = new wxRichTextCtrl( m_panel351, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxBORDER_NONE|wxVSCROLL|wxWANTS_CHARS ); + bSizer237->Add( m_richTextManualActivationUrl, 0, wxEXPAND|wxBOTTOM, 5 ); - wxBoxSizer* bSizer235; - bSizer235 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer235; + bSizer235 = new wxBoxSizer( wxHORIZONTAL ); - m_staticText13611 = new wxStaticText( m_panel351, wxID_ANY, _("Enter activation key:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText13611->Wrap( -1 ); - bSizer235->Add( m_staticText13611, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_staticText13611 = new wxStaticText( m_panel351, wxID_ANY, _("Enter activation key:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText13611->Wrap( -1 ); + bSizer235->Add( m_staticText13611, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - m_textCtrlOfflineActivationKey = new wxTextCtrl( m_panel351, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_PROCESS_ENTER ); - bSizer235->Add( m_textCtrlOfflineActivationKey, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + m_textCtrlOfflineActivationKey = new wxTextCtrl( m_panel351, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxTE_PROCESS_ENTER ); + bSizer235->Add( m_textCtrlOfflineActivationKey, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - m_buttonActivateOffline = new wxButton( m_panel351, wxID_ANY, _("Activate offline"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_buttonActivateOffline->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonActivateOffline = new wxButton( m_panel351, wxID_ANY, _("Activate offline"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_buttonActivateOffline->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizer235->Add( m_buttonActivateOffline, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer235->Add( m_buttonActivateOffline, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer237->Add( bSizer235, 0, wxEXPAND|wxTOP, 5 ); + bSizer237->Add( bSizer235, 0, wxEXPAND|wxTOP, 5 ); - bSizer266->Add( bSizer237, 0, wxALL|wxEXPAND, 10 ); + bSizer266->Add( bSizer237, 0, wxALL|wxEXPAND, 10 ); - m_panel351->SetSizer( bSizer266 ); - m_panel351->Layout(); - bSizer266->Fit( m_panel351 ); - bSizer54->Add( m_panel351, 0, wxEXPAND, 5 ); + m_panel351->SetSizer( bSizer266 ); + m_panel351->Layout(); + bSizer266->Fit( m_panel351 ); + bSizer54->Add( m_panel351, 0, wxEXPAND, 5 ); - m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer54->Add( m_staticline13, 0, 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 = new wxBoxSizer( wxHORIZONTAL ); - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer54->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + bSizer54->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - this->SetSizer( bSizer54 ); - this->Layout(); - bSizer54->Fit( this ); + this->SetSizer( bSizer54 ); + this->Layout(); + bSizer54->Fit( this ); - this->Centre( wxBOTH ); + this->Centre( wxBOTH ); - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ActivationDlgGenerated::onClose ) ); - m_buttonActivateOnline->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ActivationDlgGenerated::onActivateOnline ), NULL, this ); - m_buttonCopyUrl->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ActivationDlgGenerated::onCopyUrl ), NULL, this ); - m_textCtrlOfflineActivationKey->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( ActivationDlgGenerated::onOfflineActivationEnter ), NULL, this ); - m_buttonActivateOffline->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ActivationDlgGenerated::onActivateOffline ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ActivationDlgGenerated::onCancel ), NULL, this ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ActivationDlgGenerated::onClose ) ); + m_buttonActivateOnline->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ActivationDlgGenerated::onActivateOnline ), NULL, this ); + m_buttonCopyUrl->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ActivationDlgGenerated::onCopyUrl ), NULL, this ); + m_textCtrlOfflineActivationKey->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( ActivationDlgGenerated::onOfflineActivationEnter ), NULL, this ); + m_buttonActivateOffline->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ActivationDlgGenerated::onActivateOffline ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ActivationDlgGenerated::onCancel ), NULL, this ); } ActivationDlgGenerated::~ActivationDlgGenerated() @@ -5546,66 +5513,66 @@ ActivationDlgGenerated::~ActivationDlgGenerated() CfgHighlightDlgGenerated::CfgHighlightDlgGenerated( 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 ) ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer96; - bSizer96 = new wxBoxSizer( wxVERTICAL ); + 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 ) ); + 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 ); + wxBoxSizer* bSizer98; + bSizer98 = new wxBoxSizer( wxHORIZONTAL ); - wxBoxSizer* bSizer238; - bSizer238 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer238; + bSizer238 = new wxBoxSizer( wxVERTICAL ); - m_staticTextHighlight = new wxStaticText( m_panel35, wxID_ANY, _("Highlight configurations that have not been run for more than the following number of days:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextHighlight->Wrap( -1 ); - bSizer238->Add( m_staticTextHighlight, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + m_staticTextHighlight = new wxStaticText( m_panel35, wxID_ANY, _("Highlight configurations that have not been run for more than the following number of days:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextHighlight->Wrap( -1 ); + bSizer238->Add( m_staticTextHighlight, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - m_spinCtrlOverdueDays = new wxSpinCtrl( m_panel35, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer238->Add( m_spinCtrlOverdueDays, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_spinCtrlOverdueDays = new wxSpinCtrl( m_panel35, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1, -1 ), wxSP_ARROW_KEYS, 0, 2000000000, 0 ); + bSizer238->Add( m_spinCtrlOverdueDays, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizer98->Add( bSizer238, 1, wxALL|wxEXPAND, 5 ); + bSizer98->Add( bSizer238, 1, wxALL|wxEXPAND, 5 ); - m_panel35->SetSizer( bSizer98 ); - m_panel35->Layout(); - bSizer98->Fit( m_panel35 ); - bSizer96->Add( m_panel35, 0, 0, 5 ); + m_panel35->SetSizer( bSizer98 ); + m_panel35->Layout(); + bSizer98->Fit( m_panel35 ); + bSizer96->Add( m_panel35, 0, 0, 5 ); - m_staticline21 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer96->Add( m_staticline21, 0, wxEXPAND, 5 ); + m_staticline21 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer96->Add( m_staticline21, 0, wxEXPAND, 5 ); - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) ); - bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - bSizer96->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + bSizer96->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - this->SetSizer( bSizer96 ); - this->Layout(); - bSizer96->Fit( this ); + this->SetSizer( bSizer96 ); + this->Layout(); + bSizer96->Fit( this ); - this->Centre( wxBOTH ); + this->Centre( wxBOTH ); - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CfgHighlightDlgGenerated::onClose ) ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CfgHighlightDlgGenerated::onOkay ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CfgHighlightDlgGenerated::onCancel ), NULL, this ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CfgHighlightDlgGenerated::onClose ) ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CfgHighlightDlgGenerated::onOkay ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CfgHighlightDlgGenerated::onCancel ), NULL, this ); } CfgHighlightDlgGenerated::~CfgHighlightDlgGenerated() @@ -5614,106 +5581,106 @@ CfgHighlightDlgGenerated::~CfgHighlightDlgGenerated() WarnAccessRightsMissingDlgGenerated::WarnAccessRightsMissingDlgGenerated( 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 ) ); + this->SetSizeHints( wxSize( -1, -1 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - wxBoxSizer* bSizer330; - bSizer330 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer330; + bSizer330 = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapGrantAccess = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - bSizer330->Add( m_bitmapGrantAccess, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); + m_bitmapGrantAccess = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + bSizer330->Add( m_bitmapGrantAccess, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 ); - wxBoxSizer* bSizer95; - bSizer95 = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* bSizer95; + bSizer95 = new wxBoxSizer( wxVERTICAL ); - m_staticTextDescr = new wxStaticText( this, wxID_ANY, _("FreeFileSync requires access rights to avoid \"Operation not permitted\" errors when synchronizing your data (e.g. Mail, Messages, Calendars)."), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextDescr->Wrap( -1 ); - bSizer95->Add( m_staticTextDescr, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); + m_staticTextDescr = new wxStaticText( this, wxID_ANY, _("FreeFileSync requires access rights to avoid \"Operation not permitted\" errors when synchronizing your data (e.g. Mail, Messages, Calendars)."), wxDefaultPosition, wxSize( -1, -1 ), 0 ); + m_staticTextDescr->Wrap( -1 ); + bSizer95->Add( m_staticTextDescr, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 ); - m_staticline20 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer95->Add( m_staticline20, 0, wxEXPAND, 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 ) ); + 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* bSizer166; + bSizer166 = new wxBoxSizer( wxVERTICAL ); - ffgSizer11 = new wxFlexGridSizer( 0, 2, 5, 5 ); - ffgSizer11->SetFlexibleDirection( wxBOTH ); - ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + ffgSizer11 = new wxFlexGridSizer( 0, 2, 5, 5 ); + ffgSizer11->SetFlexibleDirection( wxBOTH ); + ffgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_staticTextStep1 = new wxStaticText( m_panel39, wxID_ANY, _("1."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStep1->Wrap( -1 ); - ffgSizer11->Add( m_staticTextStep1, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_staticTextStep1 = new wxStaticText( m_panel39, wxID_ANY, _("1."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStep1->Wrap( -1 ); + ffgSizer11->Add( m_staticTextStep1, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_buttonLocateBundle = new wxButton( m_panel39, wxID_ANY, _("Locate the FreeFileSync app"), wxDefaultPosition, wxDefaultSize, 0 ); - ffgSizer11->Add( m_buttonLocateBundle, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + m_buttonLocateBundle = new wxButton( m_panel39, wxID_ANY, _("Locate the FreeFileSync app"), wxDefaultPosition, wxDefaultSize, 0 ); + ffgSizer11->Add( m_buttonLocateBundle, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - m_staticTextStep2 = new wxStaticText( m_panel39, wxID_ANY, _("2."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStep2->Wrap( -1 ); - ffgSizer11->Add( m_staticTextStep2, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_staticTextStep2 = new wxStaticText( m_panel39, wxID_ANY, _("2."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStep2->Wrap( -1 ); + ffgSizer11->Add( m_staticTextStep2, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_buttonOpenSecurity = new wxButton( m_panel39, wxID_ANY, _("Open Security && Privacy"), wxDefaultPosition, wxDefaultSize, 0 ); - ffgSizer11->Add( m_buttonOpenSecurity, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + m_buttonOpenSecurity = new wxButton( m_panel39, wxID_ANY, _("Open Security && Privacy"), wxDefaultPosition, wxDefaultSize, 0 ); + ffgSizer11->Add( m_buttonOpenSecurity, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - m_staticTextStep3 = new wxStaticText( m_panel39, wxID_ANY, _("3."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStep3->Wrap( -1 ); - ffgSizer11->Add( m_staticTextStep3, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_staticTextStep3 = new wxStaticText( m_panel39, wxID_ANY, _("3."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStep3->Wrap( -1 ); + ffgSizer11->Add( m_staticTextStep3, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_staticTextAllowChanges = new wxStaticText( m_panel39, wxID_ANY, _("Click the lock to allow changes."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextAllowChanges->Wrap( -1 ); - ffgSizer11->Add( m_staticTextAllowChanges, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticTextAllowChanges = new wxStaticText( m_panel39, wxID_ANY, _("Click the lock to allow changes."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextAllowChanges->Wrap( -1 ); + ffgSizer11->Add( m_staticTextAllowChanges, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticTextStep4 = new wxStaticText( m_panel39, wxID_ANY, _("4."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStep4->Wrap( -1 ); - ffgSizer11->Add( m_staticTextStep4, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + m_staticTextStep4 = new wxStaticText( m_panel39, wxID_ANY, _("4."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStep4->Wrap( -1 ); + ffgSizer11->Add( m_staticTextStep4, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - m_staticTextGrantAccess = new wxStaticText( m_panel39, wxID_ANY, _("Drag FreeFileSync into the panel."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextGrantAccess->Wrap( -1 ); - ffgSizer11->Add( m_staticTextGrantAccess, 0, wxALIGN_CENTER_VERTICAL, 5 ); + m_staticTextGrantAccess = new wxStaticText( m_panel39, wxID_ANY, _("Drag FreeFileSync into the panel."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextGrantAccess->Wrap( -1 ); + ffgSizer11->Add( m_staticTextGrantAccess, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer166->Add( ffgSizer11, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 10 ); + bSizer166->Add( ffgSizer11, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 10 ); - m_panel39->SetSizer( bSizer166 ); - m_panel39->Layout(); - bSizer166->Fit( m_panel39 ); - bSizer95->Add( m_panel39, 1, wxEXPAND, 5 ); + m_panel39->SetSizer( bSizer166 ); + m_panel39->Layout(); + bSizer166->Fit( m_panel39 ); + bSizer95->Add( m_panel39, 1, wxEXPAND, 5 ); - m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer95->Add( m_staticline36, 0, wxEXPAND, 5 ); + m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer95->Add( m_staticline36, 0, wxEXPAND, 5 ); - m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("&Don't show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer95->Add( m_checkBoxDontShowAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("&Don't show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer95->Add( m_checkBoxDontShowAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); + bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL ); - m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1, -1 ), 0 ); - m_buttonClose->SetDefault(); - bSizerStdButtons->Add( m_buttonClose, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + m_buttonClose->SetDefault(); + bSizerStdButtons->Add( m_buttonClose, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - bSizer95->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); + bSizer95->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 ); - bSizer330->Add( bSizer95, 1, wxEXPAND, 5 ); + bSizer330->Add( bSizer95, 1, wxEXPAND, 5 ); - this->SetSizer( bSizer330 ); - this->Layout(); - bSizer330->Fit( this ); + this->SetSizer( bSizer330 ); + this->Layout(); + bSizer330->Fit( this ); - this->Centre( wxBOTH ); + this->Centre( wxBOTH ); - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( WarnAccessRightsMissingDlgGenerated::onClose ) ); - m_buttonLocateBundle->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarnAccessRightsMissingDlgGenerated::onShowAppBundle ), NULL, this ); - m_buttonOpenSecurity->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarnAccessRightsMissingDlgGenerated::onOpenSecuritySettings ), NULL, this ); - m_checkBoxDontShowAgain->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WarnAccessRightsMissingDlgGenerated::onCheckBoxClick ), NULL, this ); - m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarnAccessRightsMissingDlgGenerated::onOkay ), NULL, this ); + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( WarnAccessRightsMissingDlgGenerated::onClose ) ); + m_buttonLocateBundle->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarnAccessRightsMissingDlgGenerated::onShowAppBundle ), NULL, this ); + m_buttonOpenSecurity->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarnAccessRightsMissingDlgGenerated::onOpenSecuritySettings ), NULL, this ); + m_checkBoxDontShowAgain->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WarnAccessRightsMissingDlgGenerated::onCheckBoxClick ), NULL, this ); + m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WarnAccessRightsMissingDlgGenerated::onOkay ), NULL, this ); } WarnAccessRightsMissingDlgGenerated::~WarnAccessRightsMissingDlgGenerated() diff --git a/FreeFileSync/Source/ui/gui_generated.h b/FreeFileSync/Source/ui/gui_generated.h index a69eaffe..82315ef8 100644 --- a/FreeFileSync/Source/ui/gui_generated.h +++ b/FreeFileSync/Source/ui/gui_generated.h @@ -10,7 +10,7 @@ #include <wx/artprov.h> #include <wx/xrc/xmlres.h> #include <wx/intl.h> -namespace zen{ class BitmapTextButton; } +namespace zen { class BitmapTextButton; } #include "wx+/bitmap_button.h" #include "folder_history_box.h" @@ -49,6 +49,7 @@ namespace zen{ class BitmapTextButton; } #include <wx/dialog.h> #include <wx/tglbtn.h> #include <wx/treectrl.h> +#include <wx/checklst.h> #include <wx/grid.h> #include <wx/calctrl.h> #include <wx/gauge.h> @@ -64,228 +65,227 @@ namespace zen{ class BitmapTextButton; } /////////////////////////////////////////////////////////////////////////////// class MainDialogGenerated : public wxFrame { - private: - - protected: - wxMenuBar* m_menubar; - wxMenu* m_menuFile; - wxMenuItem* m_menuItemNew; - wxMenuItem* m_menuItemLoad; - wxMenuItem* m_menuItemSave; - wxMenuItem* m_menuItemSaveAs; - wxMenuItem* m_menuItemSaveAsBatch; - wxMenuItem* m_menuItemQuit; - wxMenu* m_menuActions; - wxMenuItem* m_menuItemShowLog; - wxMenuItem* m_menuItemCompare; - wxMenuItem* m_menuItemCompSettings; - wxMenuItem* m_menuItemFilter; - wxMenuItem* m_menuItemSyncSettings; - wxMenuItem* m_menuItemSynchronize; - wxMenu* m_menuTools; - wxMenuItem* m_menuItemOptions; - wxMenu* m_menuLanguages; - wxMenuItem* m_menuItemFind; - wxMenuItem* m_menuItemExportList; - wxMenuItem* m_menuItemResetLayout; - wxMenuItem* m_menuItemShowMain; - wxMenuItem* m_menuItemShowFolders; - wxMenuItem* m_menuItemShowViewFilter; - wxMenuItem* m_menuItemShowConfig; - wxMenuItem* m_menuItemShowOverview; - wxMenu* m_menuHelp; - wxMenuItem* m_menuItemHelp; - wxMenuItem* m_menuItemCheckVersionNow; - wxMenuItem* m_menuItemCheckVersionAuto; - wxMenuItem* m_menuItemAbout; - wxBoxSizer* bSizerPanelHolder; - wxPanel* m_panelTopButtons; - wxBoxSizer* bSizerTopButtons; - wxBitmapButton* m_bpButtonCmpConfig; - wxButton* m_buttonCancel; - zen::BitmapTextButton* m_buttonCompare; - wxBitmapButton* m_bpButtonCmpContext; - wxBitmapButton* m_bpButtonFilter; - wxBitmapButton* m_bpButtonFilterContext; - wxBitmapButton* m_bpButtonSyncConfig; - zen::BitmapTextButton* m_buttonSync; - wxBitmapButton* m_bpButtonSyncContext; - wxPanel* m_panelDirectoryPairs; - wxStaticText* m_staticTextResolvedPathL; - wxBitmapButton* m_bpButtonAddPair; - wxButton* m_buttonSelectFolderLeft; - wxPanel* m_panelTopCenter; - wxBitmapButton* m_bpButtonSwapSides; - wxStaticText* m_staticTextResolvedPathR; - wxButton* m_buttonSelectFolderRight; - wxScrolledWindow* m_scrolledWindowFolderPairs; - wxBoxSizer* bSizerAddFolderPairs; - zen::Grid* m_gridOverview; - wxPanel* m_panelCenter; - fff::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_staticTextStatusCenter; - 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_panelLog; - wxBoxSizer* bSizerLog; - wxBoxSizer* bSizer42; - wxFlexGridSizer* ffgSizer11; - wxFlexGridSizer* ffgSizer111; - wxFlexGridSizer* ffgSizer112; - wxStaticLine* m_staticline70; - wxPanel* m_panelConfig; - wxBoxSizer* bSizerConfig; - wxBoxSizer* bSizerCfgHistoryButtons; - wxBitmapButton* m_bpButtonNew; - wxStaticText* m_staticText951; - wxBitmapButton* m_bpButtonOpen; - wxStaticText* m_staticText95; - wxBitmapButton* m_bpButtonSave; - wxStaticText* m_staticText961; - wxBitmapButton* m_bpButtonSaveAs; - wxBitmapButton* m_bpButtonSaveAsBatch; - wxStaticText* m_staticText97; - wxStaticLine* m_staticline81; - zen::Grid* m_gridCfgHistory; - wxPanel* m_panelViewFilter; - wxBoxSizer* bSizerViewFilter; - wxBitmapButton* m_bpButtonToggleLog; - zen::ToggleButton* m_bpButtonViewType; - zen::ToggleButton* m_bpButtonShowExcluded; - zen::ToggleButton* m_bpButtonShowDeleteLeft; - zen::ToggleButton* m_bpButtonShowUpdateLeft; - zen::ToggleButton* m_bpButtonShowCreateLeft; - zen::ToggleButton* m_bpButtonShowLeftOnly; - zen::ToggleButton* m_bpButtonShowLeftNewer; - zen::ToggleButton* m_bpButtonShowEqual; - zen::ToggleButton* m_bpButtonShowDoNothing; - zen::ToggleButton* m_bpButtonShowDifferent; - zen::ToggleButton* m_bpButtonShowRightNewer; - zen::ToggleButton* m_bpButtonShowRightOnly; - zen::ToggleButton* m_bpButtonShowCreateRight; - zen::ToggleButton* m_bpButtonShowUpdateRight; - zen::ToggleButton* m_bpButtonShowDeleteRight; - zen::ToggleButton* m_bpButtonShowConflict; - wxBitmapButton* m_bpButtonViewFilterContext; - wxStaticText* m_staticText96; - wxPanel* m_panelStatistics; - wxBoxSizer* bSizer1801; - wxStaticBitmap* m_bitmapDeleteLeft; - wxStaticText* m_staticTextDeleteLeft; - wxStaticBitmap* m_bitmapUpdateLeft; - wxStaticText* m_staticTextUpdateLeft; - wxStaticBitmap* m_bitmapCreateLeft; - wxStaticText* m_staticTextCreateLeft; - wxStaticBitmap* m_bitmapData; - wxStaticText* m_staticTextData; - wxStaticBitmap* m_bitmapCreateRight; - wxStaticText* m_staticTextCreateRight; - wxStaticBitmap* m_bitmapUpdateRight; - wxStaticText* m_staticTextUpdateRight; - wxStaticBitmap* m_bitmapDeleteRight; - wxStaticText* m_staticTextDeleteRight; - - // Virtual event handlers, override 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 onMenuQuit( wxCommandEvent& event ) { event.Skip(); } - virtual void onToggleLog( wxCommandEvent& event ) { event.Skip(); } - virtual void onCompare( wxCommandEvent& event ) { event.Skip(); } - virtual void onCmpSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void onConfigureFilter( wxCommandEvent& event ) { event.Skip(); } - virtual void onSyncSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void onStartSync( wxCommandEvent& event ) { event.Skip(); } - virtual void onMenuOptions( wxCommandEvent& event ) { event.Skip(); } - virtual void onMenuFindItem( wxCommandEvent& event ) { event.Skip(); } - virtual void onMenuExportFileList( wxCommandEvent& event ) { event.Skip(); } - virtual void onMenuResetLayout( 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 onCompSettingsContextMouse( wxMouseEvent& event ) { event.Skip(); } - virtual void onCompSettingsContext( wxCommandEvent& event ) { event.Skip(); } - virtual void onGlobalFilterContextMouse( wxMouseEvent& event ) { event.Skip(); } - virtual void onGlobalFilterContext( wxCommandEvent& event ) { event.Skip(); } - virtual void onSyncSettingsContextMouse( wxMouseEvent& event ) { event.Skip(); } - virtual void onSyncSettingsContext( wxCommandEvent& event ) { event.Skip(); } - virtual void onTopFolderPairAdd( wxCommandEvent& event ) { event.Skip(); } - virtual void onTopFolderPairRemove( wxCommandEvent& event ) { event.Skip(); } - virtual void onSwapSides( wxCommandEvent& event ) { event.Skip(); } - virtual void onSwapSidesMouse( wxMouseEvent& event ) { event.Skip(); } - virtual void onTopLocalCompCfg( wxCommandEvent& event ) { event.Skip(); } - virtual void onTopLocalFilterCfg( wxCommandEvent& event ) { event.Skip(); } - virtual void onTopLocalSyncCfg( wxCommandEvent& event ) { event.Skip(); } - virtual void onHideSearchPanel( wxCommandEvent& event ) { event.Skip(); } - virtual void onSearchGridEnter( wxCommandEvent& event ) { event.Skip(); } - virtual void onToggleViewType( wxCommandEvent& event ) { event.Skip(); } - virtual void onViewTypeContextMouse( wxMouseEvent& event ) { event.Skip(); } - virtual void onToggleViewButton( wxCommandEvent& event ) { event.Skip(); } - virtual void onViewFilterContextMouse( wxMouseEvent& event ) { event.Skip(); } - virtual void onViewFilterContext( wxCommandEvent& event ) { event.Skip(); } - - - public: - wxPanel* m_panelTopLeft; - wxBitmapButton* m_bpButtonRemovePair; - fff::FolderHistoryBox* m_folderPathLeft; - wxBitmapButton* m_bpButtonSelectAltFolderLeft; - wxBitmapButton* m_bpButtonLocalCompCfg; - wxBitmapButton* m_bpButtonLocalFilter; - wxBitmapButton* m_bpButtonLocalSyncCfg; - wxPanel* m_panelTopRight; - fff::FolderHistoryBox* m_folderPathRight; - wxBitmapButton* m_bpButtonSelectAltFolderRight; - wxStaticBitmap* m_bitmapSyncResult; - wxStaticText* m_staticTextSyncResult; - wxStaticText* m_staticTextProcessed; - wxStaticText* m_staticTextRemaining; - wxPanel* m_panelItemStats; - wxStaticBitmap* m_bitmapItemStat; - wxStaticText* m_staticTextItemsProcessed; - wxStaticText* m_staticTextBytesProcessed; - wxStaticText* m_staticTextItemsRemaining; - wxStaticText* m_staticTextBytesRemaining; - wxPanel* m_panelTimeStats; - wxStaticBitmap* m_bitmapTimeStat; - wxStaticText* m_staticTextTimeElapsed; - wxBoxSizer* bSizerStatistics; - wxBoxSizer* bSizerData; - - MainDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL ); - - ~MainDialogGenerated(); +private: + +protected: + wxMenuBar* m_menubar; + wxMenu* m_menuFile; + wxMenuItem* m_menuItemNew; + wxMenuItem* m_menuItemLoad; + wxMenuItem* m_menuItemSave; + wxMenuItem* m_menuItemSaveAs; + wxMenuItem* m_menuItemSaveAsBatch; + wxMenuItem* m_menuItemQuit; + wxMenu* m_menuActions; + wxMenuItem* m_menuItemShowLog; + wxMenuItem* m_menuItemCompare; + wxMenuItem* m_menuItemCompSettings; + wxMenuItem* m_menuItemFilter; + wxMenuItem* m_menuItemSyncSettings; + wxMenuItem* m_menuItemSynchronize; + wxMenu* m_menuTools; + wxMenuItem* m_menuItemOptions; + wxMenu* m_menuLanguages; + wxMenuItem* m_menuItemFind; + wxMenuItem* m_menuItemExportList; + wxMenuItem* m_menuItemResetLayout; + wxMenuItem* m_menuItemShowMain; + wxMenuItem* m_menuItemShowFolders; + wxMenuItem* m_menuItemShowViewFilter; + wxMenuItem* m_menuItemShowConfig; + wxMenuItem* m_menuItemShowOverview; + wxMenu* m_menuHelp; + wxMenuItem* m_menuItemHelp; + wxMenuItem* m_menuItemCheckVersionNow; + wxMenuItem* m_menuItemCheckVersionAuto; + wxMenuItem* m_menuItemAbout; + wxBoxSizer* bSizerPanelHolder; + wxPanel* m_panelTopButtons; + wxBoxSizer* bSizerTopButtons; + wxBitmapButton* m_bpButtonCmpConfig; + wxButton* m_buttonCancel; + zen::BitmapTextButton* m_buttonCompare; + wxBitmapButton* m_bpButtonCmpContext; + wxBitmapButton* m_bpButtonFilter; + wxBitmapButton* m_bpButtonFilterContext; + wxBitmapButton* m_bpButtonSyncConfig; + zen::BitmapTextButton* m_buttonSync; + wxBitmapButton* m_bpButtonSyncContext; + wxPanel* m_panelDirectoryPairs; + wxStaticText* m_staticTextResolvedPathL; + wxBitmapButton* m_bpButtonAddPair; + wxButton* m_buttonSelectFolderLeft; + wxPanel* m_panelTopCenter; + wxBitmapButton* m_bpButtonSwapSides; + wxStaticText* m_staticTextResolvedPathR; + wxButton* m_buttonSelectFolderRight; + wxScrolledWindow* m_scrolledWindowFolderPairs; + wxBoxSizer* bSizerAddFolderPairs; + zen::Grid* m_gridOverview; + wxPanel* m_panelCenter; + fff::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_staticTextStatusCenter; + 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_panelLog; + wxBoxSizer* bSizerLog; + wxBoxSizer* bSizer42; + wxFlexGridSizer* ffgSizer11; + wxFlexGridSizer* ffgSizer111; + wxFlexGridSizer* ffgSizer112; + wxStaticLine* m_staticline70; + wxPanel* m_panelConfig; + wxBoxSizer* bSizerConfig; + wxBoxSizer* bSizerCfgHistoryButtons; + wxBitmapButton* m_bpButtonNew; + wxStaticText* m_staticText951; + wxBitmapButton* m_bpButtonOpen; + wxStaticText* m_staticText95; + wxBitmapButton* m_bpButtonSave; + wxStaticText* m_staticText961; + wxBitmapButton* m_bpButtonSaveAs; + wxBitmapButton* m_bpButtonSaveAsBatch; + wxStaticText* m_staticText97; + wxStaticLine* m_staticline81; + zen::Grid* m_gridCfgHistory; + wxPanel* m_panelViewFilter; + wxBoxSizer* bSizerViewFilter; + wxBitmapButton* m_bpButtonToggleLog; + zen::ToggleButton* m_bpButtonViewType; + zen::ToggleButton* m_bpButtonShowExcluded; + zen::ToggleButton* m_bpButtonShowDeleteLeft; + zen::ToggleButton* m_bpButtonShowUpdateLeft; + zen::ToggleButton* m_bpButtonShowCreateLeft; + zen::ToggleButton* m_bpButtonShowLeftOnly; + zen::ToggleButton* m_bpButtonShowLeftNewer; + zen::ToggleButton* m_bpButtonShowEqual; + zen::ToggleButton* m_bpButtonShowDoNothing; + zen::ToggleButton* m_bpButtonShowDifferent; + zen::ToggleButton* m_bpButtonShowRightNewer; + zen::ToggleButton* m_bpButtonShowRightOnly; + zen::ToggleButton* m_bpButtonShowCreateRight; + zen::ToggleButton* m_bpButtonShowUpdateRight; + zen::ToggleButton* m_bpButtonShowDeleteRight; + zen::ToggleButton* m_bpButtonShowConflict; + wxBitmapButton* m_bpButtonViewFilterContext; + wxStaticText* m_staticText96; + wxPanel* m_panelStatistics; + wxBoxSizer* bSizer1801; + wxStaticBitmap* m_bitmapDeleteLeft; + wxStaticText* m_staticTextDeleteLeft; + wxStaticBitmap* m_bitmapUpdateLeft; + wxStaticText* m_staticTextUpdateLeft; + wxStaticBitmap* m_bitmapCreateLeft; + wxStaticText* m_staticTextCreateLeft; + wxStaticBitmap* m_bitmapData; + wxStaticText* m_staticTextData; + wxStaticBitmap* m_bitmapCreateRight; + wxStaticText* m_staticTextCreateRight; + wxStaticBitmap* m_bitmapUpdateRight; + wxStaticText* m_staticTextUpdateRight; + wxStaticBitmap* m_bitmapDeleteRight; + wxStaticText* m_staticTextDeleteRight; + + // Virtual event handlers, override 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 onMenuQuit( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleLog( wxCommandEvent& event ) { event.Skip(); } + virtual void onCompare( wxCommandEvent& event ) { event.Skip(); } + virtual void onCmpSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void onConfigureFilter( wxCommandEvent& event ) { event.Skip(); } + virtual void onSyncSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void onStartSync( wxCommandEvent& event ) { event.Skip(); } + virtual void onMenuOptions( wxCommandEvent& event ) { event.Skip(); } + virtual void onMenuFindItem( wxCommandEvent& event ) { event.Skip(); } + virtual void onMenuExportFileList( wxCommandEvent& event ) { event.Skip(); } + virtual void onMenuResetLayout( 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 onCompSettingsContextMouse( wxMouseEvent& event ) { event.Skip(); } + virtual void onCompSettingsContext( wxCommandEvent& event ) { event.Skip(); } + virtual void onGlobalFilterContextMouse( wxMouseEvent& event ) { event.Skip(); } + virtual void onGlobalFilterContext( wxCommandEvent& event ) { event.Skip(); } + virtual void onSyncSettingsContextMouse( wxMouseEvent& event ) { event.Skip(); } + virtual void onSyncSettingsContext( wxCommandEvent& event ) { event.Skip(); } + virtual void onTopFolderPairAdd( wxCommandEvent& event ) { event.Skip(); } + virtual void onTopFolderPairRemove( wxCommandEvent& event ) { event.Skip(); } + virtual void onSwapSides( wxCommandEvent& event ) { event.Skip(); } + virtual void onTopLocalCompCfg( wxCommandEvent& event ) { event.Skip(); } + virtual void onTopLocalFilterCfg( wxCommandEvent& event ) { event.Skip(); } + virtual void onTopLocalSyncCfg( wxCommandEvent& event ) { event.Skip(); } + virtual void onHideSearchPanel( wxCommandEvent& event ) { event.Skip(); } + virtual void onSearchGridEnter( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleViewType( wxCommandEvent& event ) { event.Skip(); } + virtual void onViewTypeContextMouse( wxMouseEvent& event ) { event.Skip(); } + virtual void onToggleViewButton( wxCommandEvent& event ) { event.Skip(); } + virtual void onViewFilterContextMouse( wxMouseEvent& event ) { event.Skip(); } + virtual void onViewFilterContext( wxCommandEvent& event ) { event.Skip(); } + + +public: + wxPanel* m_panelTopLeft; + wxBitmapButton* m_bpButtonRemovePair; + fff::FolderHistoryBox* m_folderPathLeft; + wxBitmapButton* m_bpButtonSelectAltFolderLeft; + wxBitmapButton* m_bpButtonLocalCompCfg; + wxBitmapButton* m_bpButtonLocalFilter; + wxBitmapButton* m_bpButtonLocalSyncCfg; + wxPanel* m_panelTopRight; + fff::FolderHistoryBox* m_folderPathRight; + wxBitmapButton* m_bpButtonSelectAltFolderRight; + wxStaticBitmap* m_bitmapSyncResult; + wxStaticText* m_staticTextSyncResult; + wxStaticText* m_staticTextProcessed; + wxStaticText* m_staticTextRemaining; + wxPanel* m_panelItemStats; + wxStaticBitmap* m_bitmapItemStat; + wxStaticText* m_staticTextItemsProcessed; + wxStaticText* m_staticTextBytesProcessed; + wxStaticText* m_staticTextItemsRemaining; + wxStaticText* m_staticTextBytesRemaining; + wxPanel* m_panelTimeStats; + wxStaticBitmap* m_bitmapTimeStat; + wxStaticText* m_staticTextTimeElapsed; + wxBoxSizer* bSizerStatistics; + wxBoxSizer* bSizerData; + + MainDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1, -1 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL ); + + ~MainDialogGenerated(); }; @@ -294,29 +294,29 @@ class MainDialogGenerated : public wxFrame /////////////////////////////////////////////////////////////////////////////// class FolderPairPanelGenerated : public wxPanel { - private: - - protected: - wxButton* m_buttonSelectFolderLeft; - wxButton* m_buttonSelectFolderRight; - - public: - wxPanel* m_panelLeft; - wxBitmapButton* m_bpButtonFolderPairOptions; - wxBitmapButton* m_bpButtonRemovePair; - fff::FolderHistoryBox* m_folderPathLeft; - wxBitmapButton* m_bpButtonSelectAltFolderLeft; - wxPanel* m_panel20; - wxBitmapButton* m_bpButtonLocalCompCfg; - wxBitmapButton* m_bpButtonLocalFilter; - wxBitmapButton* m_bpButtonLocalSyncCfg; - wxPanel* m_panelRight; - fff::FolderHistoryBox* m_folderPathRight; - wxBitmapButton* m_bpButtonSelectAltFolderRight; - - FolderPairPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 698,67 ), long style = 0, const wxString& name = wxEmptyString ); - - ~FolderPairPanelGenerated(); +private: + +protected: + wxButton* m_buttonSelectFolderLeft; + wxButton* m_buttonSelectFolderRight; + +public: + wxPanel* m_panelLeft; + wxBitmapButton* m_bpButtonFolderPairOptions; + wxBitmapButton* m_bpButtonRemovePair; + fff::FolderHistoryBox* m_folderPathLeft; + wxBitmapButton* m_bpButtonSelectAltFolderLeft; + wxPanel* m_panel20; + wxBitmapButton* m_bpButtonLocalCompCfg; + wxBitmapButton* m_bpButtonLocalFilter; + wxBitmapButton* m_bpButtonLocalSyncCfg; + wxPanel* m_panelRight; + fff::FolderHistoryBox* m_folderPathRight; + wxBitmapButton* m_bpButtonSelectAltFolderRight; + + FolderPairPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 698, 67 ), long style = 0, const wxString& name = wxEmptyString ); + + ~FolderPairPanelGenerated(); }; @@ -325,233 +325,233 @@ class FolderPairPanelGenerated : public wxPanel /////////////////////////////////////////////////////////////////////////////// class ConfigDlgGenerated : public wxDialog { - private: - - protected: - wxStaticText* m_staticTextFolderPairLabel; - wxListBox* m_listBoxFolderPair; - wxNotebook* m_notebook; - wxPanel* m_panelCompSettingsTab; - wxBoxSizer* bSizerHeaderCompSettings; - wxStaticText* m_staticTextMainCompSettings; - wxCheckBox* m_checkBoxUseLocalCmpOptions; - wxStaticLine* m_staticlineCompHeader; - wxPanel* m_panelComparisonSettings; - wxStaticText* m_staticText91; - zen::ToggleButton* m_buttonByTimeSize; - zen::ToggleButton* m_buttonByContent; - zen::ToggleButton* m_buttonBySize; - wxStaticBitmap* m_bitmapCompVariant; - wxStaticText* m_staticTextCompVarDescription; - wxStaticLine* m_staticline33; - wxCheckBox* m_checkBoxSymlinksInclude; - wxRadioButton* m_radioBtnSymlinksFollow; - wxRadioButton* m_radioBtnSymlinksDirect; - wxHyperlinkCtrl* m_hyperlink24; - wxStaticLine* m_staticline44; - wxStaticText* m_staticText112; - wxTextCtrl* m_textCtrlTimeShift; - wxStaticText* m_staticText1381; - wxStaticText* m_staticText13811; - wxHyperlinkCtrl* m_hyperlink241; - wxStaticLine* m_staticline331; - wxBoxSizer* bSizerCompMisc; - wxStaticBitmap* m_bitmapIgnoreErrors; - wxCheckBox* m_checkBoxIgnoreErrors; - wxCheckBox* m_checkBoxAutoRetry; - wxFlexGridSizer* fgSizerAutoRetry; - wxStaticText* m_staticText96; - wxStaticText* m_staticTextAutoRetryDelay; - wxSpinCtrl* m_spinCtrlAutoRetryCount; - wxSpinCtrl* m_spinCtrlAutoRetryDelay; - wxStaticLine* m_staticline3311; - wxStaticLine* m_staticline751; - wxBoxSizer* bSizerPerformance; - wxPanel* m_panel57; - wxStaticBitmap* m_bitmapPerf; - wxStaticText* m_staticText13611; - wxHyperlinkCtrl* m_hyperlinkPerfDeRequired; - wxBoxSizer* bSizer260; - wxStaticText* m_staticTextPerfParallelOps; - wxScrolledWindow* m_scrolledWindowPerf; - wxFlexGridSizer* fgSizerPerf; - wxHyperlinkCtrl* m_hyperlink1711; - wxPanel* m_panelFilterSettingsTab; - wxBoxSizer* bSizerHeaderFilterSettings; - wxStaticText* m_staticTextMainFilterSettings; - wxStaticText* m_staticTextLocalFilterSettings; - wxStaticLine* m_staticlineFilterHeader; - wxStaticBitmap* m_bitmapInclude; - wxStaticText* m_staticText78; - wxTextCtrl* m_textCtrlInclude; - wxStaticBitmap* m_bitmapExclude; - wxStaticText* m_staticText77; - wxHyperlinkCtrl* m_hyperlink171; - wxTextCtrl* m_textCtrlExclude; - wxStaticLine* m_staticline24; - 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_staticline23; - wxStaticBitmap* m_bitmapFilterDate; - wxStaticText* m_staticText79; - wxChoice* m_choiceUnitTimespan; - wxSpinCtrl* m_spinCtrlTimespan; - wxStaticLine* m_staticline231; - wxButton* m_buttonDefault; - wxBitmapButton* m_bpButtonDefaultContext; - wxButton* m_buttonClear; - wxPanel* m_panelSyncSettingsTab; - wxBoxSizer* bSizerHeaderSyncSettings; - wxStaticText* m_staticTextMainSyncSettings; - wxCheckBox* m_checkBoxUseLocalSyncOptions; - wxStaticLine* m_staticlineSyncHeader; - wxPanel* m_panelSyncSettings; - wxStaticText* m_staticText86; - zen::ToggleButton* m_buttonTwoWay; - zen::ToggleButton* m_buttonMirror; - zen::ToggleButton* m_buttonUpdate; - zen::ToggleButton* m_buttonCustom; - wxBoxSizer* bSizerSyncDirHolder; - wxBoxSizer* bSizerSyncDirections; - wxStaticText* m_staticText184; - wxFlexGridSizer* ffgSizer11; - wxStaticBitmap* m_bitmapLeftOnly; - wxStaticBitmap* m_bitmapLeftNewer; - wxStaticBitmap* m_bitmapDifferent; - wxStaticBitmap* m_bitmapConflict; - wxStaticBitmap* m_bitmapRightNewer; - wxStaticBitmap* m_bitmapRightOnly; - wxBitmapButton* m_bpButtonLeftOnly; - wxBitmapButton* m_bpButtonLeftNewer; - wxBitmapButton* m_bpButtonDifferent; - wxBitmapButton* m_bpButtonConflict; - wxBitmapButton* m_bpButtonRightNewer; - wxBitmapButton* m_bpButtonRightOnly; - wxStaticText* m_staticText120; - wxBoxSizer* bSizerDatabase; - wxStaticBitmap* m_bitmapDatabase; - wxStaticText* m_staticText145; - wxStaticText* m_staticTextSyncVarDescription; - wxStaticLine* m_staticline431; - wxStaticLine* m_staticline72; - wxCheckBox* m_checkBoxDetectMove; - wxHyperlinkCtrl* m_hyperlink242; - wxStaticLine* m_staticline54; - wxBoxSizer* bSizer2361; - wxStaticText* m_staticText87; - zen::ToggleButton* m_buttonRecycler; - zen::ToggleButton* m_buttonPermanent; - zen::ToggleButton* m_buttonVersioning; - wxBoxSizer* bSizerVersioningHolder; - wxStaticBitmap* m_bitmapDeletionType; - wxStaticText* m_staticTextDeletionTypeDescription; - wxPanel* m_panelVersioning; - wxStaticBitmap* m_bitmapVersioning; - wxStaticText* m_staticText155; - wxHyperlinkCtrl* m_hyperlink243; - fff::FolderHistoryBox* m_versioningFolderPath; - wxButton* m_buttonSelectVersioningFolder; - wxStaticText* m_staticText93; - wxChoice* m_choiceVersioningStyle; - wxStaticText* m_staticTextNamingCvtPart1; - wxStaticText* m_staticTextNamingCvtPart2Bold; - wxStaticText* m_staticTextNamingCvtPart3; - wxStaticLine* m_staticline69; - wxStaticText* m_staticTextLimitVersions; - wxFlexGridSizer* fgSizer15; - wxCheckBox* m_checkBoxVersionMaxDays; - wxCheckBox* m_checkBoxVersionCountMin; - wxCheckBox* m_checkBoxVersionCountMax; - wxSpinCtrl* m_spinCtrlVersionMaxDays; - wxSpinCtrl* m_spinCtrlVersionCountMin; - wxSpinCtrl* m_spinCtrlVersionCountMax; - wxStaticLine* m_staticline582; - wxBoxSizer* bSizerSyncMisc; - wxStaticBitmap* m_bitmapEmail; - wxCheckBox* m_checkBoxSendEmail; - fff::CommandBox* m_comboBoxEmail; - wxBitmapButton* m_bpButtonEmailAlways; - wxBitmapButton* m_bpButtonEmailErrorWarning; - wxBitmapButton* m_bpButtonEmailErrorOnly; - wxHyperlinkCtrl* m_hyperlinkPerfDeRequired2; - wxStaticLine* m_staticline57; - wxPanel* m_panelLogfile; - wxStaticBitmap* m_bitmapLogFile; - wxCheckBox* m_checkBoxOverrideLogPath; - wxButton* m_buttonSelectLogFolder; - wxStaticLine* m_staticline80; - wxStaticText* m_staticTextPostSync; - fff::CommandBox* m_comboBoxPostSyncCommand; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonOkay; - wxButton* m_buttonCancel; - - // Virtual event handlers, override them in your derived class - virtual void onClose( wxCloseEvent& event ) { event.Skip(); } - virtual void onListBoxKeyEvent( wxKeyEvent& event ) { event.Skip(); } - virtual void onSelectFolderPair( wxCommandEvent& event ) { event.Skip(); } - virtual void onToggleLocalCompSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void onCompByTimeSize( wxCommandEvent& event ) { event.Skip(); } - virtual void onCompByTimeSizeDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void onCompByContent( wxCommandEvent& event ) { event.Skip(); } - virtual void onCompByContentDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void onCompBySize( wxCommandEvent& event ) { event.Skip(); } - virtual void onCompBySizeDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void onChangeCompOption( wxCommandEvent& event ) { event.Skip(); } - virtual void onToggleIgnoreErrors( wxCommandEvent& event ) { event.Skip(); } - virtual void onToggleAutoRetry( wxCommandEvent& event ) { event.Skip(); } - virtual void onChangeFilterOption( wxCommandEvent& event ) { event.Skip(); } - virtual void onFilterDefault( wxCommandEvent& event ) { event.Skip(); } - virtual void onFilterDefaultContextMouse( wxMouseEvent& event ) { event.Skip(); } - virtual void onFilterDefaultContext( wxCommandEvent& event ) { event.Skip(); } - virtual void onFilterClear( wxCommandEvent& event ) { event.Skip(); } - virtual void onToggleLocalSyncSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void onSyncTwoWay( wxCommandEvent& event ) { event.Skip(); } - virtual void onSyncTwoWayDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void onSyncMirror( wxCommandEvent& event ) { event.Skip(); } - virtual void onSyncMirrorDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void onSyncUpdate( wxCommandEvent& event ) { event.Skip(); } - virtual void onSyncUpdateDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void onSyncCustom( wxCommandEvent& event ) { event.Skip(); } - virtual void onSyncCustomDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void onExLeftSideOnly( wxCommandEvent& event ) { event.Skip(); } - virtual void onLeftNewer( wxCommandEvent& event ) { event.Skip(); } - virtual void onDifferent( wxCommandEvent& event ) { event.Skip(); } - virtual void onConflict( wxCommandEvent& event ) { event.Skip(); } - virtual void onRightNewer( wxCommandEvent& event ) { event.Skip(); } - virtual void onExRightSideOnly( wxCommandEvent& event ) { event.Skip(); } - virtual void onToggleDetectMovedFiles( wxCommandEvent& event ) { event.Skip(); } - virtual void onDeletionRecycler( wxCommandEvent& event ) { event.Skip(); } - virtual void onDeletionPermanent( wxCommandEvent& event ) { event.Skip(); } - virtual void onDeletionVersioning( wxCommandEvent& event ) { event.Skip(); } - virtual void onChanegVersioningStyle( wxCommandEvent& event ) { event.Skip(); } - virtual void onToggleVersioningLimit( wxCommandEvent& event ) { event.Skip(); } - virtual void onToggleMiscEmail( wxCommandEvent& event ) { event.Skip(); } - virtual void onEmailAlways( wxCommandEvent& event ) { event.Skip(); } - virtual void onEmailErrorWarning( wxCommandEvent& event ) { event.Skip(); } - virtual void onEmailErrorOnly( wxCommandEvent& event ) { event.Skip(); } - virtual void onToggleMiscOption( wxCommandEvent& event ) { event.Skip(); } - virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - wxStaticBitmap* m_bitmapRetryErrors; - wxStaticText* m_staticTextFilterDescr; - wxBitmapButton* m_bpButtonSelectVersioningAltFolder; - wxBitmapButton* m_bpButtonSelectAltLogFolder; - fff::FolderHistoryBox* m_logFolderPath; - wxChoice* m_choicePostSyncCondition; - - ConfigDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Synchronization Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); - - ~ConfigDlgGenerated(); +private: + +protected: + wxStaticText* m_staticTextFolderPairLabel; + wxListBox* m_listBoxFolderPair; + wxNotebook* m_notebook; + wxPanel* m_panelCompSettingsTab; + wxBoxSizer* bSizerHeaderCompSettings; + wxStaticText* m_staticTextMainCompSettings; + wxCheckBox* m_checkBoxUseLocalCmpOptions; + wxStaticLine* m_staticlineCompHeader; + wxPanel* m_panelComparisonSettings; + wxStaticText* m_staticText91; + zen::ToggleButton* m_buttonByTimeSize; + zen::ToggleButton* m_buttonByContent; + zen::ToggleButton* m_buttonBySize; + wxStaticBitmap* m_bitmapCompVariant; + wxStaticText* m_staticTextCompVarDescription; + wxStaticLine* m_staticline33; + wxCheckBox* m_checkBoxSymlinksInclude; + wxRadioButton* m_radioBtnSymlinksFollow; + wxRadioButton* m_radioBtnSymlinksDirect; + wxHyperlinkCtrl* m_hyperlink24; + wxStaticLine* m_staticline44; + wxStaticText* m_staticText112; + wxTextCtrl* m_textCtrlTimeShift; + wxStaticText* m_staticText1381; + wxStaticText* m_staticText13811; + wxHyperlinkCtrl* m_hyperlink241; + wxStaticLine* m_staticline331; + wxBoxSizer* bSizerCompMisc; + wxStaticBitmap* m_bitmapIgnoreErrors; + wxCheckBox* m_checkBoxIgnoreErrors; + wxCheckBox* m_checkBoxAutoRetry; + wxFlexGridSizer* fgSizerAutoRetry; + wxStaticText* m_staticText96; + wxStaticText* m_staticTextAutoRetryDelay; + wxSpinCtrl* m_spinCtrlAutoRetryCount; + wxSpinCtrl* m_spinCtrlAutoRetryDelay; + wxStaticLine* m_staticline3311; + wxStaticLine* m_staticline751; + wxBoxSizer* bSizerPerformance; + wxPanel* m_panel57; + wxStaticBitmap* m_bitmapPerf; + wxStaticText* m_staticText13611; + wxHyperlinkCtrl* m_hyperlinkPerfDeRequired; + wxBoxSizer* bSizer260; + wxStaticText* m_staticTextPerfParallelOps; + wxScrolledWindow* m_scrolledWindowPerf; + wxFlexGridSizer* fgSizerPerf; + wxHyperlinkCtrl* m_hyperlink1711; + wxPanel* m_panelFilterSettingsTab; + wxBoxSizer* bSizerHeaderFilterSettings; + wxStaticText* m_staticTextMainFilterSettings; + wxStaticText* m_staticTextLocalFilterSettings; + wxStaticLine* m_staticlineFilterHeader; + wxStaticBitmap* m_bitmapInclude; + wxStaticText* m_staticText78; + wxTextCtrl* m_textCtrlInclude; + wxStaticBitmap* m_bitmapExclude; + wxStaticText* m_staticText77; + wxHyperlinkCtrl* m_hyperlink171; + wxTextCtrl* m_textCtrlExclude; + wxStaticLine* m_staticline24; + 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_staticline23; + wxStaticBitmap* m_bitmapFilterDate; + wxStaticText* m_staticText79; + wxChoice* m_choiceUnitTimespan; + wxSpinCtrl* m_spinCtrlTimespan; + wxStaticLine* m_staticline231; + wxButton* m_buttonDefault; + wxBitmapButton* m_bpButtonDefaultContext; + wxButton* m_buttonClear; + wxPanel* m_panelSyncSettingsTab; + wxBoxSizer* bSizerHeaderSyncSettings; + wxStaticText* m_staticTextMainSyncSettings; + wxCheckBox* m_checkBoxUseLocalSyncOptions; + wxStaticLine* m_staticlineSyncHeader; + wxPanel* m_panelSyncSettings; + wxStaticText* m_staticText86; + zen::ToggleButton* m_buttonTwoWay; + zen::ToggleButton* m_buttonMirror; + zen::ToggleButton* m_buttonUpdate; + zen::ToggleButton* m_buttonCustom; + wxBoxSizer* bSizerSyncDirHolder; + wxBoxSizer* bSizerSyncDirections; + wxStaticText* m_staticText184; + wxFlexGridSizer* ffgSizer11; + wxStaticBitmap* m_bitmapLeftOnly; + wxStaticBitmap* m_bitmapLeftNewer; + wxStaticBitmap* m_bitmapDifferent; + wxStaticBitmap* m_bitmapConflict; + wxStaticBitmap* m_bitmapRightNewer; + wxStaticBitmap* m_bitmapRightOnly; + wxBitmapButton* m_bpButtonLeftOnly; + wxBitmapButton* m_bpButtonLeftNewer; + wxBitmapButton* m_bpButtonDifferent; + wxBitmapButton* m_bpButtonConflict; + wxBitmapButton* m_bpButtonRightNewer; + wxBitmapButton* m_bpButtonRightOnly; + wxStaticText* m_staticText120; + wxBoxSizer* bSizerDatabase; + wxStaticBitmap* m_bitmapDatabase; + wxStaticText* m_staticText145; + wxStaticText* m_staticTextSyncVarDescription; + wxStaticLine* m_staticline431; + wxStaticLine* m_staticline72; + wxCheckBox* m_checkBoxDetectMove; + wxHyperlinkCtrl* m_hyperlink242; + wxStaticLine* m_staticline54; + wxBoxSizer* bSizer2361; + wxStaticText* m_staticText87; + zen::ToggleButton* m_buttonRecycler; + zen::ToggleButton* m_buttonPermanent; + zen::ToggleButton* m_buttonVersioning; + wxBoxSizer* bSizerVersioningHolder; + wxStaticBitmap* m_bitmapDeletionType; + wxStaticText* m_staticTextDeletionTypeDescription; + wxPanel* m_panelVersioning; + wxStaticBitmap* m_bitmapVersioning; + wxStaticText* m_staticText155; + wxHyperlinkCtrl* m_hyperlink243; + fff::FolderHistoryBox* m_versioningFolderPath; + wxButton* m_buttonSelectVersioningFolder; + wxStaticText* m_staticText93; + wxChoice* m_choiceVersioningStyle; + wxStaticText* m_staticTextNamingCvtPart1; + wxStaticText* m_staticTextNamingCvtPart2Bold; + wxStaticText* m_staticTextNamingCvtPart3; + wxStaticLine* m_staticline69; + wxStaticText* m_staticTextLimitVersions; + wxFlexGridSizer* fgSizer15; + wxCheckBox* m_checkBoxVersionMaxDays; + wxCheckBox* m_checkBoxVersionCountMin; + wxCheckBox* m_checkBoxVersionCountMax; + wxSpinCtrl* m_spinCtrlVersionMaxDays; + wxSpinCtrl* m_spinCtrlVersionCountMin; + wxSpinCtrl* m_spinCtrlVersionCountMax; + wxStaticLine* m_staticline582; + wxBoxSizer* bSizerSyncMisc; + wxStaticBitmap* m_bitmapEmail; + wxCheckBox* m_checkBoxSendEmail; + fff::CommandBox* m_comboBoxEmail; + wxBitmapButton* m_bpButtonEmailAlways; + wxBitmapButton* m_bpButtonEmailErrorWarning; + wxBitmapButton* m_bpButtonEmailErrorOnly; + wxHyperlinkCtrl* m_hyperlinkPerfDeRequired2; + wxStaticLine* m_staticline57; + wxPanel* m_panelLogfile; + wxStaticBitmap* m_bitmapLogFile; + wxCheckBox* m_checkBoxOverrideLogPath; + wxButton* m_buttonSelectLogFolder; + wxStaticLine* m_staticline80; + wxStaticText* m_staticTextPostSync; + fff::CommandBox* m_comboBoxPostSyncCommand; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonOkay; + wxButton* m_buttonCancel; + + // Virtual event handlers, override them in your derived class + virtual void onClose( wxCloseEvent& event ) { event.Skip(); } + virtual void onListBoxKeyEvent( wxKeyEvent& event ) { event.Skip(); } + virtual void onSelectFolderPair( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleLocalCompSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void onCompByTimeSize( wxCommandEvent& event ) { event.Skip(); } + virtual void onCompByTimeSizeDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void onCompByContent( wxCommandEvent& event ) { event.Skip(); } + virtual void onCompByContentDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void onCompBySize( wxCommandEvent& event ) { event.Skip(); } + virtual void onCompBySizeDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void onChangeCompOption( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleIgnoreErrors( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleAutoRetry( wxCommandEvent& event ) { event.Skip(); } + virtual void onChangeFilterOption( wxCommandEvent& event ) { event.Skip(); } + virtual void onFilterDefault( wxCommandEvent& event ) { event.Skip(); } + virtual void onFilterDefaultContextMouse( wxMouseEvent& event ) { event.Skip(); } + virtual void onFilterDefaultContext( wxCommandEvent& event ) { event.Skip(); } + virtual void onFilterClear( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleLocalSyncSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void onSyncTwoWay( wxCommandEvent& event ) { event.Skip(); } + virtual void onSyncTwoWayDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void onSyncMirror( wxCommandEvent& event ) { event.Skip(); } + virtual void onSyncMirrorDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void onSyncUpdate( wxCommandEvent& event ) { event.Skip(); } + virtual void onSyncUpdateDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void onSyncCustom( wxCommandEvent& event ) { event.Skip(); } + virtual void onSyncCustomDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void onExLeftSideOnly( wxCommandEvent& event ) { event.Skip(); } + virtual void onLeftNewer( wxCommandEvent& event ) { event.Skip(); } + virtual void onDifferent( wxCommandEvent& event ) { event.Skip(); } + virtual void onConflict( wxCommandEvent& event ) { event.Skip(); } + virtual void onRightNewer( wxCommandEvent& event ) { event.Skip(); } + virtual void onExRightSideOnly( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleDetectMovedFiles( wxCommandEvent& event ) { event.Skip(); } + virtual void onDeletionRecycler( wxCommandEvent& event ) { event.Skip(); } + virtual void onDeletionPermanent( wxCommandEvent& event ) { event.Skip(); } + virtual void onDeletionVersioning( wxCommandEvent& event ) { event.Skip(); } + virtual void onChanegVersioningStyle( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleVersioningLimit( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleMiscEmail( wxCommandEvent& event ) { event.Skip(); } + virtual void onEmailAlways( wxCommandEvent& event ) { event.Skip(); } + virtual void onEmailErrorWarning( wxCommandEvent& event ) { event.Skip(); } + virtual void onEmailErrorOnly( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleMiscOption( wxCommandEvent& event ) { event.Skip(); } + virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + wxStaticBitmap* m_bitmapRetryErrors; + wxStaticText* m_staticTextFilterDescr; + wxBitmapButton* m_bpButtonSelectVersioningAltFolder; + wxBitmapButton* m_bpButtonSelectAltLogFolder; + fff::FolderHistoryBox* m_logFolderPath; + wxChoice* m_choicePostSyncCondition; + + ConfigDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Synchronization Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1, -1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); + + ~ConfigDlgGenerated(); }; @@ -560,114 +560,114 @@ class ConfigDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class CloudSetupDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapCloud; - wxStaticText* m_staticText136; - wxToggleButton* m_toggleBtnGdrive; - wxToggleButton* m_toggleBtnSftp; - wxToggleButton* m_toggleBtnFtp; - wxStaticLine* m_staticline371; - wxPanel* m_panel41; - wxBoxSizer* bSizerGdrive; - wxStaticBitmap* m_bitmapGdriveUser; - wxStaticText* m_staticText166; - wxListBox* m_listBoxGdriveUsers; - zen::BitmapTextButton* m_buttonGdriveAddUser; - zen::BitmapTextButton* m_buttonGdriveRemoveUser; - wxStaticLine* m_staticline841; - wxStaticBitmap* m_bitmapGdriveDrive; - wxStaticText* m_staticText186; - wxListBox* m_listBoxGdriveDrives; - wxStaticLine* m_staticline73; - wxBoxSizer* bSizerServer; - wxStaticBitmap* m_bitmapServer; - wxStaticText* m_staticText12311; - wxTextCtrl* m_textCtrlServer; - wxStaticText* m_staticText1233; - wxTextCtrl* m_textCtrlPort; - wxStaticLine* m_staticline58; - wxBoxSizer* bSizerAuth; - wxBoxSizer* bSizerAuthInner; - wxBoxSizer* bSizerFtpEncrypt; - wxStaticText* m_staticText1251; - wxRadioButton* m_radioBtnEncryptNone; - wxRadioButton* m_radioBtnEncryptSsl; - wxStaticLine* m_staticline5721; - wxBoxSizer* bSizerSftpAuth; - wxStaticText* m_staticText125; - wxRadioButton* m_radioBtnPassword; - wxRadioButton* m_radioBtnKeyfile; - wxRadioButton* m_radioBtnAgent; - wxStaticLine* m_staticline572; - wxPanel* m_panelAuth; - wxStaticText* m_staticText123; - wxTextCtrl* m_textCtrlUserName; - wxStaticText* m_staticTextKeyfile; - wxBoxSizer* bSizerKeyFile; - wxTextCtrl* m_textCtrlKeyfilePath; - wxButton* m_buttonSelectKeyfile; - wxStaticText* m_staticTextPassword; - wxBoxSizer* bSizerPassword; - wxTextCtrl* m_textCtrlPasswordVisible; - wxTextCtrl* m_textCtrlPasswordHidden; - wxCheckBox* m_checkBoxShowPassword; - wxStaticLine* m_staticline581; - wxStaticBitmap* m_bitmapServerDir; - wxStaticText* m_staticText1232; - wxStaticLine* m_staticline83; - wxStaticText* m_staticTextTimeout; - wxSpinCtrl* m_spinCtrlTimeout; - wxStaticLine* m_staticline82; - wxTextCtrl* m_textCtrlServerPath; - wxButton* m_buttonSelectFolder; - wxStaticLine* m_staticline571; - wxStaticBitmap* m_bitmapPerf; - wxStaticText* m_staticText1361; - wxHyperlinkCtrl* m_hyperlink171; - wxStaticLine* m_staticline57; - wxPanel* m_panel411; - wxBoxSizer* bSizerConnectionsLabel; - wxStaticText* m_staticTextConnectionsLabel; - wxStaticText* m_staticTextConnectionsLabelSub; - wxSpinCtrl* m_spinCtrlConnectionCount; - wxStaticText* m_staticTextConnectionCountDescr; - wxHyperlinkCtrl* m_hyperlinkDeRequired; - wxStaticText* m_staticTextChannelCountSftp; - wxSpinCtrl* m_spinCtrlChannelCountSftp; - wxButton* m_buttonChannelCountSftp; - wxCheckBox* m_checkBoxAllowZlib; - wxStaticText* m_staticTextZlibDescr; - wxStaticLine* m_staticline12; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonOkay; - wxButton* m_buttonCancel; - - // Virtual event handlers, override them in your derived class - virtual void onClose( wxCloseEvent& event ) { event.Skip(); } - virtual void onConnectionGdrive( wxCommandEvent& event ) { event.Skip(); } - virtual void onConnectionSftp( wxCommandEvent& event ) { event.Skip(); } - virtual void onConnectionFtp( wxCommandEvent& event ) { event.Skip(); } - virtual void onGdriveUserSelect( wxCommandEvent& event ) { event.Skip(); } - virtual void onGdriveUserAdd( wxCommandEvent& event ) { event.Skip(); } - virtual void onGdriveUserRemove( wxCommandEvent& event ) { event.Skip(); } - virtual void onAuthPassword( wxCommandEvent& event ) { event.Skip(); } - virtual void onAuthKeyfile( wxCommandEvent& event ) { event.Skip(); } - virtual void onAuthAgent( wxCommandEvent& event ) { event.Skip(); } - virtual void onSelectKeyfile( wxCommandEvent& event ) { event.Skip(); } - virtual void onToggleShowPassword( wxCommandEvent& event ) { event.Skip(); } - virtual void onBrowseCloudFolder( wxCommandEvent& event ) { event.Skip(); } - virtual void onDetectServerChannelLimit( wxCommandEvent& event ) { event.Skip(); } - virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - CloudSetupDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Access Online Storage"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - - ~CloudSetupDlgGenerated(); +private: + +protected: + wxStaticBitmap* m_bitmapCloud; + wxStaticText* m_staticText136; + wxToggleButton* m_toggleBtnGdrive; + wxToggleButton* m_toggleBtnSftp; + wxToggleButton* m_toggleBtnFtp; + wxStaticLine* m_staticline371; + wxPanel* m_panel41; + wxBoxSizer* bSizerGdrive; + wxStaticBitmap* m_bitmapGdriveUser; + wxStaticText* m_staticText166; + wxListBox* m_listBoxGdriveUsers; + zen::BitmapTextButton* m_buttonGdriveAddUser; + zen::BitmapTextButton* m_buttonGdriveRemoveUser; + wxStaticLine* m_staticline841; + wxStaticBitmap* m_bitmapGdriveDrive; + wxStaticText* m_staticText186; + wxListBox* m_listBoxGdriveDrives; + wxStaticLine* m_staticline73; + wxBoxSizer* bSizerServer; + wxStaticBitmap* m_bitmapServer; + wxStaticText* m_staticText12311; + wxTextCtrl* m_textCtrlServer; + wxStaticText* m_staticText1233; + wxTextCtrl* m_textCtrlPort; + wxStaticLine* m_staticline58; + wxBoxSizer* bSizerAuth; + wxBoxSizer* bSizerAuthInner; + wxBoxSizer* bSizerFtpEncrypt; + wxStaticText* m_staticText1251; + wxRadioButton* m_radioBtnEncryptNone; + wxRadioButton* m_radioBtnEncryptSsl; + wxStaticLine* m_staticline5721; + wxBoxSizer* bSizerSftpAuth; + wxStaticText* m_staticText125; + wxRadioButton* m_radioBtnPassword; + wxRadioButton* m_radioBtnKeyfile; + wxRadioButton* m_radioBtnAgent; + wxStaticLine* m_staticline572; + wxPanel* m_panelAuth; + wxStaticText* m_staticText123; + wxTextCtrl* m_textCtrlUserName; + wxStaticText* m_staticTextKeyfile; + wxBoxSizer* bSizerKeyFile; + wxTextCtrl* m_textCtrlKeyfilePath; + wxButton* m_buttonSelectKeyfile; + wxStaticText* m_staticTextPassword; + wxBoxSizer* bSizerPassword; + wxTextCtrl* m_textCtrlPasswordVisible; + wxTextCtrl* m_textCtrlPasswordHidden; + wxCheckBox* m_checkBoxShowPassword; + wxStaticLine* m_staticline581; + wxStaticBitmap* m_bitmapServerDir; + wxStaticText* m_staticText1232; + wxStaticLine* m_staticline83; + wxStaticText* m_staticTextTimeout; + wxSpinCtrl* m_spinCtrlTimeout; + wxStaticLine* m_staticline82; + wxTextCtrl* m_textCtrlServerPath; + wxButton* m_buttonSelectFolder; + wxStaticLine* m_staticline571; + wxStaticBitmap* m_bitmapPerf; + wxStaticText* m_staticText1361; + wxHyperlinkCtrl* m_hyperlink171; + wxStaticLine* m_staticline57; + wxPanel* m_panel411; + wxBoxSizer* bSizerConnectionsLabel; + wxStaticText* m_staticTextConnectionsLabel; + wxStaticText* m_staticTextConnectionsLabelSub; + wxSpinCtrl* m_spinCtrlConnectionCount; + wxStaticText* m_staticTextConnectionCountDescr; + wxHyperlinkCtrl* m_hyperlinkDeRequired; + wxStaticText* m_staticTextChannelCountSftp; + wxSpinCtrl* m_spinCtrlChannelCountSftp; + wxButton* m_buttonChannelCountSftp; + wxCheckBox* m_checkBoxAllowZlib; + wxStaticText* m_staticTextZlibDescr; + wxStaticLine* m_staticline12; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonOkay; + wxButton* m_buttonCancel; + + // Virtual event handlers, override them in your derived class + virtual void onClose( wxCloseEvent& event ) { event.Skip(); } + virtual void onConnectionGdrive( wxCommandEvent& event ) { event.Skip(); } + virtual void onConnectionSftp( wxCommandEvent& event ) { event.Skip(); } + virtual void onConnectionFtp( wxCommandEvent& event ) { event.Skip(); } + virtual void onGdriveUserSelect( wxCommandEvent& event ) { event.Skip(); } + virtual void onGdriveUserAdd( wxCommandEvent& event ) { event.Skip(); } + virtual void onGdriveUserRemove( wxCommandEvent& event ) { event.Skip(); } + virtual void onAuthPassword( wxCommandEvent& event ) { event.Skip(); } + virtual void onAuthKeyfile( wxCommandEvent& event ) { event.Skip(); } + virtual void onAuthAgent( wxCommandEvent& event ) { event.Skip(); } + virtual void onSelectKeyfile( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleShowPassword( wxCommandEvent& event ) { event.Skip(); } + virtual void onBrowseCloudFolder( wxCommandEvent& event ) { event.Skip(); } + virtual void onDetectServerChannelLimit( wxCommandEvent& event ) { event.Skip(); } + virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + CloudSetupDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Access Online Storage"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1, -1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + + ~CloudSetupDlgGenerated(); }; @@ -676,29 +676,29 @@ class CloudSetupDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class AbstractFolderPickerGenerated : public wxDialog { - private: +private: - protected: - wxPanel* m_panel41; - wxStaticText* m_staticTextStatus; - wxTreeCtrl* m_treeCtrlFileSystem; - wxStaticLine* m_staticline12; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonOkay; - wxButton* m_buttonCancel; +protected: + wxPanel* m_panel41; + wxStaticText* m_staticTextStatus; + wxTreeCtrl* m_treeCtrlFileSystem; + wxStaticLine* m_staticline12; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonOkay; + wxButton* m_buttonCancel; - // Virtual event handlers, override them in your derived class - virtual void onClose( wxCloseEvent& event ) { event.Skip(); } - virtual void onExpandNode( wxTreeEvent& event ) { event.Skip(); } - virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } + // Virtual event handlers, override them in your derived class + virtual void onClose( wxCloseEvent& event ) { event.Skip(); } + virtual void onExpandNode( wxTreeEvent& event ) { event.Skip(); } + virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } - public: +public: - AbstractFolderPickerGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select a folder"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); + AbstractFolderPickerGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select a folder"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1, -1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); - ~AbstractFolderPickerGenerated(); + ~AbstractFolderPickerGenerated(); }; @@ -707,51 +707,51 @@ class AbstractFolderPickerGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class SyncConfirmationDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapSync; - wxStaticText* m_staticTextCaption; - wxStaticLine* m_staticline371; - wxPanel* m_panelStatistics; - wxStaticLine* m_staticline38; - wxStaticText* m_staticText84; - wxStaticText* m_staticTextSyncVar; - wxStaticBitmap* m_bitmapSyncVar; - wxStaticLine* m_staticline14; - wxStaticText* m_staticText83; - wxStaticBitmap* m_bitmapDeleteLeft; - wxStaticBitmap* m_bitmapUpdateLeft; - wxStaticBitmap* m_bitmapCreateLeft; - wxStaticBitmap* m_bitmapData; - wxStaticBitmap* m_bitmapCreateRight; - wxStaticBitmap* m_bitmapUpdateRight; - wxStaticBitmap* m_bitmapDeleteRight; - wxStaticText* m_staticTextDeleteLeft; - wxStaticText* m_staticTextUpdateLeft; - wxStaticText* m_staticTextCreateLeft; - wxStaticText* m_staticTextData; - wxStaticText* m_staticTextCreateRight; - wxStaticText* m_staticTextUpdateRight; - wxStaticText* m_staticTextDeleteRight; - wxStaticLine* m_staticline381; - wxStaticLine* m_staticline12; - wxCheckBox* m_checkBoxDontShowAgain; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonStartSync; - wxButton* m_buttonCancel; - - // Virtual event handlers, override 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 = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - - ~SyncConfirmationDlgGenerated(); +private: + +protected: + wxStaticBitmap* m_bitmapSync; + wxStaticText* m_staticTextCaption; + wxStaticLine* m_staticline371; + wxPanel* m_panelStatistics; + wxStaticLine* m_staticline38; + wxStaticText* m_staticText84; + wxStaticText* m_staticTextSyncVar; + wxStaticBitmap* m_bitmapSyncVar; + wxStaticLine* m_staticline14; + wxStaticText* m_staticText83; + wxStaticBitmap* m_bitmapDeleteLeft; + wxStaticBitmap* m_bitmapUpdateLeft; + wxStaticBitmap* m_bitmapCreateLeft; + wxStaticBitmap* m_bitmapData; + wxStaticBitmap* m_bitmapCreateRight; + wxStaticBitmap* m_bitmapUpdateRight; + wxStaticBitmap* m_bitmapDeleteRight; + wxStaticText* m_staticTextDeleteLeft; + wxStaticText* m_staticTextUpdateLeft; + wxStaticText* m_staticTextCreateLeft; + wxStaticText* m_staticTextData; + wxStaticText* m_staticTextCreateRight; + wxStaticText* m_staticTextUpdateRight; + wxStaticText* m_staticTextDeleteRight; + wxStaticLine* m_staticline381; + wxStaticLine* m_staticline12; + wxCheckBox* m_checkBoxDontShowAgain; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonStartSync; + wxButton* m_buttonCancel; + + // Virtual event handlers, override 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 = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + + ~SyncConfirmationDlgGenerated(); }; @@ -760,41 +760,41 @@ class SyncConfirmationDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class CompareProgressDlgGenerated : public wxPanel { - private: - - protected: - wxStaticText* m_staticTextStatus; - wxFlexGridSizer* ffgSizer11; - wxFlexGridSizer* ffgSizer111; - wxFlexGridSizer* ffgSizer112; - wxStaticText* m_staticText1461; - wxStaticText* m_staticTextRetryCount; - wxStaticText* m_staticText146; - wxBoxSizer* bSizerProgressGraph; - wxFlexGridSizer* ffgSizer113; - zen::Graph2D* m_panelProgressGraph; - - public: - wxStaticText* m_staticTextProcessed; - wxStaticText* m_staticTextRemaining; - wxPanel* m_panelItemStats; - wxStaticBitmap* m_bitmapItemStat; - wxStaticText* m_staticTextItemsProcessed; - wxStaticText* m_staticTextBytesProcessed; - wxStaticText* m_staticTextItemsRemaining; - wxStaticText* m_staticTextBytesRemaining; - wxPanel* m_panelTimeStats; - wxStaticBitmap* m_bitmapTimeStat; - wxStaticText* m_staticTextTimeElapsed; - wxStaticText* m_staticTextTimeRemaining; - wxBoxSizer* bSizerErrorsRetry; - wxStaticBitmap* m_bitmapRetryErrors; - wxBoxSizer* bSizerErrorsIgnore; - wxStaticBitmap* m_bitmapIgnoreErrors; - - CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxBORDER_RAISED, const wxString& name = wxEmptyString ); - - ~CompareProgressDlgGenerated(); +private: + +protected: + wxStaticText* m_staticTextStatus; + wxFlexGridSizer* ffgSizer11; + wxFlexGridSizer* ffgSizer111; + wxFlexGridSizer* ffgSizer112; + wxStaticText* m_staticText1461; + wxStaticText* m_staticTextRetryCount; + wxStaticText* m_staticText146; + wxBoxSizer* bSizerProgressGraph; + wxFlexGridSizer* ffgSizer113; + zen::Graph2D* m_panelProgressGraph; + +public: + wxStaticText* m_staticTextProcessed; + wxStaticText* m_staticTextRemaining; + wxPanel* m_panelItemStats; + wxStaticBitmap* m_bitmapItemStat; + wxStaticText* m_staticTextItemsProcessed; + wxStaticText* m_staticTextBytesProcessed; + wxStaticText* m_staticTextItemsRemaining; + wxStaticText* m_staticTextBytesRemaining; + wxPanel* m_panelTimeStats; + wxStaticBitmap* m_bitmapTimeStat; + wxStaticText* m_staticTextTimeElapsed; + wxStaticText* m_staticTextTimeRemaining; + wxBoxSizer* bSizerErrorsRetry; + wxStaticBitmap* m_bitmapRetryErrors; + wxBoxSizer* bSizerErrorsIgnore; + wxStaticBitmap* m_bitmapIgnoreErrors; + + CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1, -1 ), long style = wxBORDER_RAISED, const wxString& name = wxEmptyString ); + + ~CompareProgressDlgGenerated(); }; @@ -803,61 +803,61 @@ class CompareProgressDlgGenerated : public wxPanel /////////////////////////////////////////////////////////////////////////////// class SyncProgressPanelGenerated : public wxPanel { - private: - - protected: - wxPanel* m_panel53; - wxBoxSizer* bSizer42; - wxFlexGridSizer* ffgSizer11; - wxFlexGridSizer* ffgSizer111; - wxFlexGridSizer* ffgSizer112; - wxStaticText* m_staticText1461; - wxStaticText* m_staticText146; - wxStaticText* m_staticText137; - - public: - wxBoxSizer* bSizerRoot; - wxStaticBitmap* m_bitmapStatus; - wxStaticText* m_staticTextPhase; - wxBitmapButton* m_bpButtonMinimizeToTray; - wxBoxSizer* bSizerStatusText; - wxStaticText* m_staticTextStatus; - wxPanel* m_panelProgress; - zen::Graph2D* m_panelGraphBytes; - wxStaticBitmap* m_bitmapGraphKeyBytes; - wxStaticBitmap* m_bitmapGraphKeyItems; - wxStaticText* m_staticTextProcessed; - wxStaticText* m_staticTextRemaining; - wxPanel* m_panelItemStats; - wxStaticBitmap* m_bitmapItemStat; - wxStaticText* m_staticTextItemsProcessed; - wxStaticText* m_staticTextBytesProcessed; - wxStaticText* m_staticTextItemsRemaining; - wxStaticText* m_staticTextBytesRemaining; - wxPanel* m_panelTimeStats; - wxStaticBitmap* m_bitmapTimeStat; - wxStaticText* m_staticTextTimeElapsed; - wxStaticText* m_staticTextTimeRemaining; - wxBoxSizer* bSizerDynSpace; - zen::Graph2D* m_panelGraphItems; - wxBoxSizer* bSizerProgressFooter; - wxBoxSizer* bSizerErrorsRetry; - wxStaticBitmap* m_bitmapRetryErrors; - wxStaticText* m_staticTextRetryCount; - wxBoxSizer* bSizerErrorsIgnore; - wxStaticBitmap* m_bitmapIgnoreErrors; - wxChoice* m_choicePostSyncAction; - wxNotebook* m_notebookResult; - wxStaticLine* m_staticlineFooter; - wxBoxSizer* bSizerStdButtons; - wxCheckBox* m_checkBoxAutoClose; - 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, const wxString& name = wxEmptyString ); - - ~SyncProgressPanelGenerated(); +private: + +protected: + wxPanel* m_panel53; + wxBoxSizer* bSizer42; + wxFlexGridSizer* ffgSizer11; + wxFlexGridSizer* ffgSizer111; + wxFlexGridSizer* ffgSizer112; + wxStaticText* m_staticText1461; + wxStaticText* m_staticText146; + wxStaticText* m_staticText137; + +public: + wxBoxSizer* bSizerRoot; + wxStaticBitmap* m_bitmapStatus; + wxStaticText* m_staticTextPhase; + wxBitmapButton* m_bpButtonMinimizeToTray; + wxBoxSizer* bSizerStatusText; + wxStaticText* m_staticTextStatus; + wxPanel* m_panelProgress; + zen::Graph2D* m_panelGraphBytes; + wxStaticBitmap* m_bitmapGraphKeyBytes; + wxStaticBitmap* m_bitmapGraphKeyItems; + wxStaticText* m_staticTextProcessed; + wxStaticText* m_staticTextRemaining; + wxPanel* m_panelItemStats; + wxStaticBitmap* m_bitmapItemStat; + wxStaticText* m_staticTextItemsProcessed; + wxStaticText* m_staticTextBytesProcessed; + wxStaticText* m_staticTextItemsRemaining; + wxStaticText* m_staticTextBytesRemaining; + wxPanel* m_panelTimeStats; + wxStaticBitmap* m_bitmapTimeStat; + wxStaticText* m_staticTextTimeElapsed; + wxStaticText* m_staticTextTimeRemaining; + wxBoxSizer* bSizerDynSpace; + zen::Graph2D* m_panelGraphItems; + wxBoxSizer* bSizerProgressFooter; + wxBoxSizer* bSizerErrorsRetry; + wxStaticBitmap* m_bitmapRetryErrors; + wxStaticText* m_staticTextRetryCount; + wxBoxSizer* bSizerErrorsIgnore; + wxStaticBitmap* m_bitmapIgnoreErrors; + wxChoice* m_choicePostSyncAction; + wxNotebook* m_notebookResult; + wxStaticLine* m_staticlineFooter; + wxBoxSizer* bSizerStdButtons; + wxCheckBox* m_checkBoxAutoClose; + 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, const wxString& name = wxEmptyString ); + + ~SyncProgressPanelGenerated(); }; @@ -866,26 +866,26 @@ class SyncProgressPanelGenerated : public wxPanel /////////////////////////////////////////////////////////////////////////////// class LogPanelGenerated : public wxPanel { - private: +private: - protected: - zen::ToggleButton* m_bpButtonErrors; - zen::ToggleButton* m_bpButtonWarnings; - zen::ToggleButton* m_bpButtonInfo; - wxStaticLine* m_staticline13; +protected: + zen::ToggleButton* m_bpButtonErrors; + zen::ToggleButton* m_bpButtonWarnings; + zen::ToggleButton* m_bpButtonInfo; + wxStaticLine* m_staticline13; - // Virtual event handlers, override 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(); } + // Virtual event handlers, override 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: - zen::Grid* m_gridMessages; +public: + zen::Grid* m_gridMessages; - LogPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString ); + LogPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString ); - ~LogPanelGenerated(); + ~LogPanelGenerated(); }; @@ -894,47 +894,47 @@ class LogPanelGenerated : public wxPanel /////////////////////////////////////////////////////////////////////////////// class BatchDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapBatchJob; - wxStaticText* m_staticTextHeader; - wxStaticLine* m_staticline18; - wxPanel* m_panel35; - wxStaticText* m_staticText146; - wxFlexGridSizer* ffgSizer11; - wxStaticBitmap* m_bitmapMinimizeToTray; - wxCheckBox* m_checkBoxRunMinimized; - wxStaticLine* m_staticline26; - wxStaticBitmap* m_bitmapIgnoreErrors; - wxCheckBox* m_checkBoxIgnoreErrors; - wxRadioButton* m_radioBtnErrorDialogShow; - wxRadioButton* m_radioBtnErrorDialogCancel; - wxStaticLine* m_staticline261; - wxStaticText* m_staticText137; - wxStaticLine* m_staticline262; - wxStaticLine* m_staticline25; - wxHyperlinkCtrl* m_hyperlink17; - wxStaticLine* m_staticline13; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonSaveAs; - wxButton* m_buttonCancel; - - // Virtual event handlers, override them in your derived class - virtual void onClose( wxCloseEvent& event ) { event.Skip(); } - virtual void onToggleRunMinimized( wxCommandEvent& event ) { event.Skip(); } - virtual void onToggleIgnoreErrors( wxCommandEvent& event ) { event.Skip(); } - virtual void onSaveBatchJob( wxCommandEvent& event ) { event.Skip(); } - virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - wxCheckBox* m_checkBoxAutoClose; - wxChoice* m_choicePostSyncAction; - - BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Save as a 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_staticTextHeader; + wxStaticLine* m_staticline18; + wxPanel* m_panel35; + wxStaticText* m_staticText146; + wxFlexGridSizer* ffgSizer11; + wxStaticBitmap* m_bitmapMinimizeToTray; + wxCheckBox* m_checkBoxRunMinimized; + wxStaticLine* m_staticline26; + wxStaticBitmap* m_bitmapIgnoreErrors; + wxCheckBox* m_checkBoxIgnoreErrors; + wxRadioButton* m_radioBtnErrorDialogShow; + wxRadioButton* m_radioBtnErrorDialogCancel; + wxStaticLine* m_staticline261; + wxStaticText* m_staticText137; + wxStaticLine* m_staticline262; + wxStaticLine* m_staticline25; + wxHyperlinkCtrl* m_hyperlink17; + wxStaticLine* m_staticline13; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonSaveAs; + wxButton* m_buttonCancel; + + // Virtual event handlers, override them in your derived class + virtual void onClose( wxCloseEvent& event ) { event.Skip(); } + virtual void onToggleRunMinimized( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleIgnoreErrors( wxCommandEvent& event ) { event.Skip(); } + virtual void onSaveBatchJob( wxCommandEvent& event ) { event.Skip(); } + virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + wxCheckBox* m_checkBoxAutoClose; + wxChoice* m_choicePostSyncAction; + + BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Save as a Batch Job"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + + ~BatchDlgGenerated(); }; @@ -943,33 +943,33 @@ class BatchDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class DeleteDlgGenerated : public wxDialog { - private: +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; - wxButton* m_buttonOK; - wxButton* m_buttonCancel; +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; + wxButton* m_buttonOK; + wxButton* m_buttonCancel; - // Virtual event handlers, override them in your derived class - virtual void onClose( wxCloseEvent& event ) { event.Skip(); } - virtual void onUseRecycler( wxCommandEvent& event ) { event.Skip(); } - virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } + // Virtual event handlers, override them in your derived class + virtual void onClose( wxCloseEvent& event ) { event.Skip(); } + virtual void onUseRecycler( wxCommandEvent& event ) { event.Skip(); } + virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } - public: +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( 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(); + ~DeleteDlgGenerated(); }; @@ -978,36 +978,36 @@ class DeleteDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class CopyToDlgGenerated : public wxDialog { - private: +private: - protected: - wxStaticBitmap* m_bitmapCopyTo; - wxStaticText* m_staticTextHeader; - wxStaticLine* m_staticline91; - wxPanel* m_panel31; - wxStaticLine* m_staticline42; - wxTextCtrl* m_textCtrlFileList; - wxButton* m_buttonSelectTargetFolder; - wxStaticLine* m_staticline9; - wxBoxSizer* bSizerStdButtons; - wxCheckBox* m_checkBoxKeepRelPath; - wxCheckBox* m_checkBoxOverwriteIfExists; - wxButton* m_buttonOK; - wxButton* m_buttonCancel; +protected: + wxStaticBitmap* m_bitmapCopyTo; + wxStaticText* m_staticTextHeader; + wxStaticLine* m_staticline91; + wxPanel* m_panel31; + wxStaticLine* m_staticline42; + wxTextCtrl* m_textCtrlFileList; + wxButton* m_buttonSelectTargetFolder; + wxStaticLine* m_staticline9; + wxBoxSizer* bSizerStdButtons; + wxCheckBox* m_checkBoxKeepRelPath; + wxCheckBox* m_checkBoxOverwriteIfExists; + wxButton* m_buttonOK; + wxButton* m_buttonCancel; - // Virtual event handlers, override them in your derived class - virtual void onClose( wxCloseEvent& event ) { event.Skip(); } - virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } + // Virtual event handlers, override them in your derived class + virtual void onClose( wxCloseEvent& event ) { event.Skip(); } + virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } - public: - fff::FolderHistoryBox* m_targetFolderPath; - wxBitmapButton* m_bpButtonSelectAltTargetFolder; +public: + fff::FolderHistoryBox* m_targetFolderPath; + wxBitmapButton* m_bpButtonSelectAltTargetFolder; - CopyToDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Copy Items"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); + CopyToDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Copy Items"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1, -1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER ); - ~CopyToDlgGenerated(); + ~CopyToDlgGenerated(); }; @@ -1016,107 +1016,111 @@ class CopyToDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class OptionsDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapSettings; - wxStaticText* m_staticText44; - wxStaticLine* m_staticline20; - wxPanel* m_panel39; - wxCheckBox* m_checkBoxFailSafe; - wxStaticText* m_staticText911; - wxStaticText* m_staticText91; - wxStaticText* m_staticText9111; - wxBoxSizer* bSizerLockedFiles; - wxCheckBox* m_checkBoxCopyLocked; - wxStaticText* m_staticText921; - wxStaticText* m_staticText92; - wxStaticText* m_staticText922; - wxCheckBox* m_checkBoxCopyPermissions; - wxStaticText* m_staticText931; - wxStaticText* m_staticText93; - wxStaticText* m_staticText932; - wxStaticLine* m_staticline39; - wxStaticBitmap* m_bitmapWarnings; - wxStaticText* m_staticTextResetDialogs; - wxButton* m_buttonRestoreDialogs; - wxStaticText* m_staticTextAllDialogsShown; - wxStaticLine* m_staticline191; - wxStaticBitmap* m_bitmapLogFile; - wxStaticText* m_staticText163; - wxHyperlinkCtrl* m_hyperlinkLogFolder; - wxStaticLine* m_staticline83; - wxStaticLine* m_staticline82; - wxCheckBox* m_checkBoxLogFilesMaxAge; - wxSpinCtrl* m_spinCtrlLogFilesMaxAge; - wxStaticLine* m_staticline81; - wxStaticText* m_staticText184; - wxRadioButton* m_radioBtnLogHtml; - wxRadioButton* m_radioBtnLogText; - wxStaticLine* m_staticline361; - wxStaticBitmap* m_bitmapNotificationSounds; - wxStaticText* m_staticText851; - wxFlexGridSizer* ffgSizer11; - wxStaticBitmap* m_bitmapCompareDone; - wxStaticText* m_staticText171; - wxBitmapButton* m_bpButtonPlayCompareDone; - wxTextCtrl* m_textCtrlSoundPathCompareDone; - wxButton* m_buttonSelectSoundCompareDone; - wxStaticBitmap* m_bitmapSyncDone; - wxStaticText* m_staticText1711; - wxBitmapButton* m_bpButtonPlaySyncDone; - wxTextCtrl* m_textCtrlSoundPathSyncDone; - wxButton* m_buttonSelectSoundSyncDone; - wxStaticBitmap* m_bitmapAlertPending; - wxStaticText* m_staticText17111; - wxBitmapButton* m_bpButtonPlayAlertPending; - wxTextCtrl* m_textCtrlSoundPathAlertPending; - wxButton* m_buttonSelectSoundAlertPending; - wxStaticLine* m_staticline3611; - wxStaticBitmap* m_bitmapConsole; - wxStaticText* m_staticText85; - wxBitmapButton* m_bpButtonAddRow; - wxBitmapButton* m_bpButtonRemoveRow; - wxStaticText* m_staticText174; - wxStaticText* m_staticText175; - wxStaticText* m_staticText178; - wxStaticText* m_staticText179; - wxStaticText* m_staticText189; - wxStaticText* m_staticText190; - wxStaticText* m_staticText176; - wxStaticText* m_staticText177; - wxHyperlinkCtrl* m_hyperlink17; - wxGrid* m_gridCustomCommand; - wxStaticLine* m_staticline36; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonDefault; - wxButton* m_buttonOkay; - wxButton* m_buttonCancel; - - // Virtual event handlers, override them in your derived class - virtual void onClose( wxCloseEvent& event ) { event.Skip(); } - virtual void onRestoreDialogs( wxCommandEvent& event ) { event.Skip(); } - virtual void onShowLogFolder( wxHyperlinkEvent& event ) { event.Skip(); } - virtual void onToggleLogfilesLimit( wxCommandEvent& event ) { event.Skip(); } - virtual void onPlayCompareDone( wxCommandEvent& event ) { event.Skip(); } - virtual void onChangeSoundFilePath( wxCommandEvent& event ) { event.Skip(); } - virtual void onSelectSoundCompareDone( wxCommandEvent& event ) { event.Skip(); } - virtual void onPlaySyncDone( wxCommandEvent& event ) { event.Skip(); } - virtual void onSelectSoundSyncDone( wxCommandEvent& event ) { event.Skip(); } - virtual void onPlayAlertPending( wxCommandEvent& event ) { event.Skip(); } - virtual void onSelectSoundAlertPending( wxCommandEvent& event ) { event.Skip(); } - virtual void onAddRow( wxCommandEvent& event ) { event.Skip(); } - virtual void onRemoveRow( 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: - - OptionsDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - - ~OptionsDlgGenerated(); +private: + +protected: + wxStaticBitmap* m_bitmapSettings; + wxStaticText* m_staticText44; + wxStaticLine* m_staticline20; + wxPanel* m_panel39; + wxCheckBox* m_checkBoxFailSafe; + wxStaticText* m_staticText911; + wxStaticText* m_staticText91; + wxStaticText* m_staticText9111; + wxBoxSizer* bSizerLockedFiles; + wxCheckBox* m_checkBoxCopyLocked; + wxStaticText* m_staticText921; + wxStaticText* m_staticText92; + wxStaticText* m_staticText922; + wxCheckBox* m_checkBoxCopyPermissions; + wxStaticText* m_staticText931; + wxStaticText* m_staticText93; + wxStaticText* m_staticText932; + wxStaticLine* m_staticline39; + wxStaticLine* m_staticline191; + wxStaticBitmap* m_bitmapWarnings; + wxStaticText* m_staticText182; + wxStaticText* m_staticTextHiddenDialogsCount; + wxButton* m_buttonShowHiddenDialogs; + wxCheckListBox* m_checkListHiddenDialogs; + wxStaticLine* m_staticline1911; + wxStaticBitmap* m_bitmapLogFile; + wxStaticText* m_staticText163; + wxHyperlinkCtrl* m_hyperlinkLogFolder; + wxCheckBox* m_checkBoxLogFilesMaxAge; + wxSpinCtrl* m_spinCtrlLogFilesMaxAge; + wxStaticLine* m_staticline81; + wxStaticText* m_staticText184; + wxRadioButton* m_radioBtnLogHtml; + wxRadioButton* m_radioBtnLogText; + wxStaticLine* m_staticline361; + wxStaticBitmap* m_bitmapNotificationSounds; + wxStaticText* m_staticText851; + wxFlexGridSizer* ffgSizer11; + wxStaticText* m_staticText171; + wxStaticBitmap* m_bitmapCompareDone; + wxBitmapButton* m_bpButtonPlayCompareDone; + wxTextCtrl* m_textCtrlSoundPathCompareDone; + wxButton* m_buttonSelectSoundCompareDone; + wxStaticText* m_staticText1711; + wxStaticBitmap* m_bitmapSyncDone; + wxBitmapButton* m_bpButtonPlaySyncDone; + wxTextCtrl* m_textCtrlSoundPathSyncDone; + wxButton* m_buttonSelectSoundSyncDone; + wxStaticText* m_staticText17111; + wxStaticBitmap* m_bitmapAlertPending; + wxBitmapButton* m_bpButtonPlayAlertPending; + wxTextCtrl* m_textCtrlSoundPathAlertPending; + wxButton* m_buttonSelectSoundAlertPending; + wxStaticLine* m_staticline3611; + wxStaticBitmap* m_bitmapConsole; + wxStaticText* m_staticText85; + wxButton* m_buttonShowCtxCustomize; + wxBoxSizer* bSizerContextCustomize; + wxBitmapButton* m_bpButtonAddRow; + wxBitmapButton* m_bpButtonRemoveRow; + wxStaticText* m_staticText174; + wxStaticText* m_staticText175; + wxStaticText* m_staticText178; + wxStaticText* m_staticText179; + wxStaticText* m_staticText189; + wxStaticText* m_staticText190; + wxStaticText* m_staticText176; + wxStaticText* m_staticText177; + wxHyperlinkCtrl* m_hyperlink17; + wxGrid* m_gridCustomCommand; + wxStaticLine* m_staticline36; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonDefault; + wxButton* m_buttonOkay; + wxButton* m_buttonCancel; + + // Virtual event handlers, override them in your derived class + virtual void onClose( wxCloseEvent& event ) { event.Skip(); } + virtual void onShowHiddenDialogs( wxCommandEvent& event ) { event.Skip(); } + virtual void onToggleHiddenDialog( wxCommandEvent& event ) { event.Skip(); } + virtual void onShowLogFolder( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void onToggleLogfilesLimit( wxCommandEvent& event ) { event.Skip(); } + virtual void onPlayCompareDone( wxCommandEvent& event ) { event.Skip(); } + virtual void onChangeSoundFilePath( wxCommandEvent& event ) { event.Skip(); } + virtual void onSelectSoundCompareDone( wxCommandEvent& event ) { event.Skip(); } + virtual void onPlaySyncDone( wxCommandEvent& event ) { event.Skip(); } + virtual void onSelectSoundSyncDone( wxCommandEvent& event ) { event.Skip(); } + virtual void onPlayAlertPending( wxCommandEvent& event ) { event.Skip(); } + virtual void onSelectSoundAlertPending( wxCommandEvent& event ) { event.Skip(); } + virtual void onShowContextCustomize( wxCommandEvent& event ) { event.Skip(); } + virtual void onAddRow( wxCommandEvent& event ) { event.Skip(); } + virtual void onRemoveRow( 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: + + OptionsDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + + ~OptionsDlgGenerated(); }; @@ -1125,17 +1129,17 @@ class OptionsDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class TooltipDlgGenerated : public wxDialog { - private: +private: - protected: +protected: - public: - wxStaticBitmap* m_bitmapLeft; - wxStaticText* m_staticTextMain; +public: + wxStaticBitmap* m_bitmapLeft; + wxStaticText* m_staticTextMain; - TooltipDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + TooltipDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~TooltipDlgGenerated(); + ~TooltipDlgGenerated(); }; @@ -1144,30 +1148,30 @@ class TooltipDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class SelectTimespanDlgGenerated : public wxDialog { - private: +private: - protected: - wxPanel* m_panel35; - wxCalendarCtrl* m_calendarFrom; - wxCalendarCtrl* m_calendarTo; - wxStaticLine* m_staticline21; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonOkay; - wxButton* m_buttonCancel; +protected: + wxPanel* m_panel35; + wxCalendarCtrl* m_calendarFrom; + wxCalendarCtrl* m_calendarTo; + wxStaticLine* m_staticline21; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonOkay; + wxButton* m_buttonCancel; - // Virtual event handlers, override 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(); } + // Virtual event handlers, override 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: +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( 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(); + ~SelectTimespanDlgGenerated(); }; @@ -1176,61 +1180,61 @@ class SelectTimespanDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class AboutDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panel41; - wxStaticBitmap* m_bitmapLogoLeft; - wxStaticLine* m_staticline81; - wxBoxSizer* bSizerMainSection; - wxStaticLine* m_staticline82; - wxStaticBitmap* m_bitmapLogo; - wxStaticLine* m_staticline341; - wxStaticText* m_staticTextVersion; - wxStaticLine* m_staticline3411; - wxPanel* m_panelDonate; - wxPanel* m_panel39; - wxStaticBitmap* m_bitmapDonate; - wxStaticText* m_staticTextDonate; - wxButton* m_buttonDonate; - wxPanel* m_panelThankYou; - wxPanel* m_panel391; - wxStaticBitmap* m_bitmapThanks; - wxStaticText* m_staticTextThanks; - wxStaticText* m_staticTextNoAutoUpdate; - wxButton* m_buttonShowDonationDetails; - wxStaticLine* m_staticline3412; - wxStaticText* m_staticText94; - wxBitmapButton* m_bpButtonForum; - wxBitmapButton* m_bpButtonHomepage; - wxBitmapButton* m_bpButtonEmail; - wxStaticLine* m_staticline34; - wxStaticText* m_staticTextGpl; - wxBitmapButton* m_bpButtonGpl; - wxStaticLine* m_staticline37; - wxStaticText* m_staticTextThanksForLoc; - wxScrolledWindow* m_scrolledWindowTranslators; - wxFlexGridSizer* fgSizerTranslators; - wxStaticLine* m_staticline36; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonClose; - - // Virtual event handlers, override them in your derived class - virtual void onClose( wxCloseEvent& event ) { event.Skip(); } - virtual void onDonate( wxCommandEvent& event ) { event.Skip(); } - virtual void onShowDonationDetails( wxCommandEvent& event ) { event.Skip(); } - virtual void onOpenForum( wxCommandEvent& event ) { event.Skip(); } - virtual void onOpenHomepage( wxCommandEvent& event ) { event.Skip(); } - virtual void onSendEmail( wxCommandEvent& event ) { event.Skip(); } - virtual void onShowGpl( wxCommandEvent& event ) { event.Skip(); } - virtual void onOkay( 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_bitmapLogoLeft; + wxStaticLine* m_staticline81; + wxBoxSizer* bSizerMainSection; + wxStaticLine* m_staticline82; + wxStaticBitmap* m_bitmapLogo; + wxStaticLine* m_staticline341; + wxStaticText* m_staticTextVersion; + wxStaticLine* m_staticline3411; + wxPanel* m_panelDonate; + wxPanel* m_panel39; + wxStaticBitmap* m_bitmapDonate; + wxStaticText* m_staticTextDonate; + wxButton* m_buttonDonate; + wxPanel* m_panelThankYou; + wxPanel* m_panel391; + wxStaticBitmap* m_bitmapThanks; + wxStaticText* m_staticTextThanks; + wxStaticText* m_staticTextNoAutoUpdate; + wxButton* m_buttonShowDonationDetails; + wxStaticLine* m_staticline3412; + wxStaticText* m_staticText94; + wxBitmapButton* m_bpButtonForum; + wxBitmapButton* m_bpButtonHomepage; + wxBitmapButton* m_bpButtonEmail; + wxStaticLine* m_staticline34; + wxStaticText* m_staticTextGpl; + wxBitmapButton* m_bpButtonGpl; + wxStaticLine* m_staticline37; + wxStaticText* m_staticTextThanksForLoc; + wxScrolledWindow* m_scrolledWindowTranslators; + wxFlexGridSizer* fgSizerTranslators; + wxStaticLine* m_staticline36; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonClose; + + // Virtual event handlers, override them in your derived class + virtual void onClose( wxCloseEvent& event ) { event.Skip(); } + virtual void onDonate( wxCommandEvent& event ) { event.Skip(); } + virtual void onShowDonationDetails( wxCommandEvent& event ) { event.Skip(); } + virtual void onOpenForum( wxCommandEvent& event ) { event.Skip(); } + virtual void onOpenHomepage( wxCommandEvent& event ) { event.Skip(); } + virtual void onSendEmail( wxCommandEvent& event ) { event.Skip(); } + virtual void onShowGpl( wxCommandEvent& event ) { event.Skip(); } + virtual void onOkay( 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(); }; @@ -1239,26 +1243,26 @@ class AboutDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class DownloadProgressDlgGenerated : public wxDialog { - private: +private: - protected: - wxStaticBitmap* m_bitmapDownloading; - wxStaticText* m_staticTextHeader; - wxGauge* m_gaugeProgress; - wxStaticText* m_staticTextDetails; - wxStaticLine* m_staticline9; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonCancel; +protected: + wxStaticBitmap* m_bitmapDownloading; + wxStaticText* m_staticTextHeader; + wxGauge* m_gaugeProgress; + wxStaticText* m_staticTextDetails; + wxStaticLine* m_staticline9; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonCancel; - // Virtual event handlers, override them in your derived class - virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } + // Virtual event handlers, override them in your derived class + virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } - public: +public: - DownloadProgressDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0 ); + DownloadProgressDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0 ); - ~DownloadProgressDlgGenerated(); + ~DownloadProgressDlgGenerated(); }; @@ -1267,48 +1271,48 @@ class DownloadProgressDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class ActivationDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panel35; - wxStaticBitmap* m_bitmapActivation; - wxRichTextCtrl* m_richTextLastError; - wxStaticLine* m_staticline82; - wxStaticText* m_staticTextMain; - wxStaticLine* m_staticline181; - wxStaticLine* m_staticline18111; - wxPanel* m_panel3511; - wxStaticText* m_staticTextMain1; - wxStaticText* m_staticText136; - wxButton* m_buttonActivateOnline; - wxStaticLine* m_staticline181111; - wxStaticLine* m_staticline181112; - wxPanel* m_panel351; - wxStaticText* m_staticText175; - wxStaticText* m_staticText1361; - wxButton* m_buttonCopyUrl; - wxRichTextCtrl* m_richTextManualActivationUrl; - wxStaticText* m_staticText13611; - wxTextCtrl* m_textCtrlOfflineActivationKey; - wxButton* m_buttonActivateOffline; - wxStaticLine* m_staticline13; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonCancel; - - // Virtual event handlers, override them in your derived class - virtual void onClose( wxCloseEvent& event ) { event.Skip(); } - virtual void onActivateOnline( wxCommandEvent& event ) { event.Skip(); } - virtual void onCopyUrl( wxCommandEvent& event ) { event.Skip(); } - virtual void onOfflineActivationEnter( wxCommandEvent& event ) { event.Skip(); } - virtual void onActivateOffline( wxCommandEvent& event ) { event.Skip(); } - virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - ActivationDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - - ~ActivationDlgGenerated(); +private: + +protected: + wxPanel* m_panel35; + wxStaticBitmap* m_bitmapActivation; + wxRichTextCtrl* m_richTextLastError; + wxStaticLine* m_staticline82; + wxStaticText* m_staticTextMain; + wxStaticLine* m_staticline181; + wxStaticLine* m_staticline18111; + wxPanel* m_panel3511; + wxStaticText* m_staticTextMain1; + wxStaticText* m_staticText136; + wxButton* m_buttonActivateOnline; + wxStaticLine* m_staticline181111; + wxStaticLine* m_staticline181112; + wxPanel* m_panel351; + wxStaticText* m_staticText175; + wxStaticText* m_staticText1361; + wxButton* m_buttonCopyUrl; + wxRichTextCtrl* m_richTextManualActivationUrl; + wxStaticText* m_staticText13611; + wxTextCtrl* m_textCtrlOfflineActivationKey; + wxButton* m_buttonActivateOffline; + wxStaticLine* m_staticline13; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonCancel; + + // Virtual event handlers, override them in your derived class + virtual void onClose( wxCloseEvent& event ) { event.Skip(); } + virtual void onActivateOnline( wxCommandEvent& event ) { event.Skip(); } + virtual void onCopyUrl( wxCommandEvent& event ) { event.Skip(); } + virtual void onOfflineActivationEnter( wxCommandEvent& event ) { event.Skip(); } + virtual void onActivateOffline( wxCommandEvent& event ) { event.Skip(); } + virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + ActivationDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + + ~ActivationDlgGenerated(); }; @@ -1317,28 +1321,28 @@ class ActivationDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class CfgHighlightDlgGenerated : public wxDialog { - private: +private: - protected: - wxPanel* m_panel35; - wxStaticText* m_staticTextHighlight; - wxSpinCtrl* m_spinCtrlOverdueDays; - wxStaticLine* m_staticline21; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonOkay; - wxButton* m_buttonCancel; +protected: + wxPanel* m_panel35; + wxStaticText* m_staticTextHighlight; + wxSpinCtrl* m_spinCtrlOverdueDays; + wxStaticLine* m_staticline21; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonOkay; + wxButton* m_buttonCancel; - // Virtual event handlers, override them in your derived class - virtual void onClose( wxCloseEvent& event ) { event.Skip(); } - virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } + // Virtual event handlers, override them in your derived class + virtual void onClose( wxCloseEvent& event ) { event.Skip(); } + virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void onCancel( wxCommandEvent& event ) { event.Skip(); } - public: +public: - CfgHighlightDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Highlight Configurations"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + CfgHighlightDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Highlight Configurations"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~CfgHighlightDlgGenerated(); + ~CfgHighlightDlgGenerated(); }; @@ -1347,40 +1351,40 @@ class CfgHighlightDlgGenerated : public wxDialog /////////////////////////////////////////////////////////////////////////////// class WarnAccessRightsMissingDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapGrantAccess; - wxStaticText* m_staticTextDescr; - wxStaticLine* m_staticline20; - wxPanel* m_panel39; - wxFlexGridSizer* ffgSizer11; - wxStaticText* m_staticTextStep1; - wxButton* m_buttonLocateBundle; - wxStaticText* m_staticTextStep2; - wxButton* m_buttonOpenSecurity; - wxStaticText* m_staticTextStep3; - wxStaticText* m_staticTextAllowChanges; - wxStaticText* m_staticTextStep4; - wxStaticText* m_staticTextGrantAccess; - wxStaticLine* m_staticline36; - wxCheckBox* m_checkBoxDontShowAgain; - wxBoxSizer* bSizerStdButtons; - wxButton* m_buttonClose; - - // Virtual event handlers, override them in your derived class - virtual void onClose( wxCloseEvent& event ) { event.Skip(); } - virtual void onShowAppBundle( wxCommandEvent& event ) { event.Skip(); } - virtual void onOpenSecuritySettings( wxCommandEvent& event ) { event.Skip(); } - virtual void onCheckBoxClick( wxCommandEvent& event ) { event.Skip(); } - virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } - - - public: - - WarnAccessRightsMissingDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Grant Full Disk Access"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - - ~WarnAccessRightsMissingDlgGenerated(); +private: + +protected: + wxStaticBitmap* m_bitmapGrantAccess; + wxStaticText* m_staticTextDescr; + wxStaticLine* m_staticline20; + wxPanel* m_panel39; + wxFlexGridSizer* ffgSizer11; + wxStaticText* m_staticTextStep1; + wxButton* m_buttonLocateBundle; + wxStaticText* m_staticTextStep2; + wxButton* m_buttonOpenSecurity; + wxStaticText* m_staticTextStep3; + wxStaticText* m_staticTextAllowChanges; + wxStaticText* m_staticTextStep4; + wxStaticText* m_staticTextGrantAccess; + wxStaticLine* m_staticline36; + wxCheckBox* m_checkBoxDontShowAgain; + wxBoxSizer* bSizerStdButtons; + wxButton* m_buttonClose; + + // Virtual event handlers, override them in your derived class + virtual void onClose( wxCloseEvent& event ) { event.Skip(); } + virtual void onShowAppBundle( wxCommandEvent& event ) { event.Skip(); } + virtual void onOpenSecuritySettings( wxCommandEvent& event ) { event.Skip(); } + virtual void onCheckBoxClick( wxCommandEvent& event ) { event.Skip(); } + virtual void onOkay( wxCommandEvent& event ) { event.Skip(); } + + +public: + + WarnAccessRightsMissingDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Grant Full Disk Access"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + + ~WarnAccessRightsMissingDlgGenerated(); }; diff --git a/FreeFileSync/Source/ui/gui_status_handler.cpp b/FreeFileSync/Source/ui/gui_status_handler.cpp index e87b7c2d..f05e5577 100644 --- a/FreeFileSync/Source/ui/gui_status_handler.cpp +++ b/FreeFileSync/Source/ui/gui_status_handler.cpp @@ -232,20 +232,23 @@ ProcessCallback::Response StatusHandlerTemporaryPanel::reportError(const ErrorIn { PauseTimers dummy(*mainDlg_.compareStatus_); + //log actual fail time (not "now"!) + const time_t failTime = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now() - + std::chrono::duration_cast<std::chrono::system_clock::duration>(std::chrono::steady_clock::now() - errorInfo.failTime)); //auto-retry if (errorInfo.retryNumber < autoRetryCount_) { - errorLog_.logMsg(errorInfo.msg + L"\n-> " + _("Automatic retry"), MSG_TYPE_INFO); + errorLog_.logMsg(errorInfo.msg + L"\n-> " + _("Automatic retry"), MSG_TYPE_INFO, failTime); delayAndCountDown(errorInfo.failTime + autoRetryDelay_, [&, statusPrefix = _("Automatic retry") + - (errorInfo.retryNumber == 0 ? L"" : L' ' + formatNumber(errorInfo.retryNumber + 1)) + L" | ", - statusPostfix = L" | " + _("Error") + L": " + replaceCpy(errorInfo.msg, L'\n', L' ')](const std::wstring& timeRemMsg) + (errorInfo.retryNumber == 0 ? L"" : L' ' + formatNumber(errorInfo.retryNumber + 1)) + SPACED_DASH, + statusPostfix = SPACED_DASH + _("Error") + L": " + replaceCpy(errorInfo.msg, L'\n', L' ')](const std::wstring& timeRemMsg) { this->updateStatus(statusPrefix + timeRemMsg + statusPostfix); }); //throw AbortProcess return ProcessCallback::retry; } //always, except for "retry": - auto guardWriteLog = zen::makeGuard<ScopeGuardRunMode::onExit>([&] { errorLog_.logMsg(errorInfo.msg, MSG_TYPE_ERROR); }); + auto guardWriteLog = makeGuard<ScopeGuardRunMode::onExit>([&] { errorLog_.logMsg(errorInfo.msg, MSG_TYPE_ERROR, failTime); }); if (!mainDlg_.compareStatus_->getOptionIgnoreErrors()) { @@ -266,7 +269,7 @@ ProcessCallback::Response StatusHandlerTemporaryPanel::reportError(const ErrorIn case ConfirmationButton3::decline: //retry guardWriteLog.dismiss(); errorLog_.logMsg(errorInfo.msg + L"\n-> " + _("Retrying operation..."), //explain why there are duplicate "doing operation X" info messages in the log! - MSG_TYPE_INFO); + MSG_TYPE_INFO, failTime); return ProcessCallback::retry; case ConfirmationButton3::cancel: @@ -451,7 +454,7 @@ StatusHandlerFloatingDialog::Result StatusHandlerFloatingDialog::reportResults(c try { sendLogAsEmail(notifyEmail, summary, errorLog_, logFilePath, notifyStatusNoThrow); //throw FileError - errorLog_.logMsg(replaceCpy(_("Sending email notification to %x..."), L"%x", utfTo<std::wstring>(notifyEmail)), MSG_TYPE_INFO); + errorLog_.logMsg(replaceCpy(_("Sending email notification to %x"), L"%x", utfTo<std::wstring>(notifyEmail)), MSG_TYPE_INFO); } catch (const FileError& e) { errorLog_.logMsg(e.toString(), MSG_TYPE_ERROR); } @@ -600,22 +603,23 @@ ProcessCallback::Response StatusHandlerFloatingDialog::reportError(const ErrorIn { PauseTimers dummy(*progressDlg_); + //log actual fail time (not "now"!) + const time_t failTime = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now() - + std::chrono::duration_cast<std::chrono::system_clock::duration>(std::chrono::steady_clock::now() - errorInfo.failTime)); //auto-retry if (errorInfo.retryNumber < autoRetryCount_) { - warn_static("maybe we should consider errorInfo.failTime, and not 'now' when logging the error?") - - errorLog_.logMsg(errorInfo.msg + L"\n-> " + _("Automatic retry"), MSG_TYPE_INFO); + errorLog_.logMsg(errorInfo.msg + L"\n-> " + _("Automatic retry"), MSG_TYPE_INFO, failTime); delayAndCountDown(errorInfo.failTime + autoRetryDelay_, [&, statusPrefix = _("Automatic retry") + - (errorInfo.retryNumber == 0 ? L"" : L' ' + formatNumber(errorInfo.retryNumber + 1)) + L" | ", - statusPostfix = L" | " + _("Error") + L": " + replaceCpy(errorInfo.msg, L'\n', L' ')](const std::wstring& timeRemMsg) + (errorInfo.retryNumber == 0 ? L"" : L' ' + formatNumber(errorInfo.retryNumber + 1)) + SPACED_DASH, + statusPostfix = SPACED_DASH + _("Error") + L": " + replaceCpy(errorInfo.msg, L'\n', L' ')](const std::wstring& timeRemMsg) { this->updateStatus(statusPrefix + timeRemMsg + statusPostfix); }); //throw AbortProcess return ProcessCallback::retry; } //always, except for "retry": - auto guardWriteLog = zen::makeGuard<ScopeGuardRunMode::onExit>([&] { errorLog_.logMsg(errorInfo.msg, MSG_TYPE_ERROR); }); + auto guardWriteLog = makeGuard<ScopeGuardRunMode::onExit>([&] { errorLog_.logMsg(errorInfo.msg, MSG_TYPE_ERROR, failTime); }); if (!progressDlg_->getOptionIgnoreErrors()) { @@ -636,7 +640,7 @@ ProcessCallback::Response StatusHandlerFloatingDialog::reportError(const ErrorIn case ConfirmationButton3::decline: //retry guardWriteLog.dismiss(); errorLog_.logMsg(errorInfo.msg + L"\n-> " + _("Retrying operation..."), //explain why there are duplicate "doing operation X" info messages in the log! - MSG_TYPE_INFO); + MSG_TYPE_INFO, failTime); return ProcessCallback::retry; case ConfirmationButton3::cancel: diff --git a/FreeFileSync/Source/ui/main_dlg.cpp b/FreeFileSync/Source/ui/main_dlg.cpp index f5433a72..c15bfa4c 100644 --- a/FreeFileSync/Source/ui/main_dlg.cpp +++ b/FreeFileSync/Source/ui/main_dlg.cpp @@ -7,7 +7,6 @@ #include "main_dlg.h" #include <zen/format_unit.h> #include <zen/file_access.h> -#include <zen/file_path.h> #include <zen/file_io.h> #include <zen/thread.h> #include <zen/process_exec.h> @@ -88,18 +87,18 @@ bool containsFileItemMacro(const Zstring& commandLinePhrase) } -IconBuffer::IconSize convert(FileIconSize isize) +IconBuffer::IconSize convert(GridIconSize isize) { switch (isize) { - case FileIconSize::small: - return IconBuffer::SIZE_SMALL; - case FileIconSize::medium: - return IconBuffer::SIZE_MEDIUM; - case FileIconSize::large: - return IconBuffer::SIZE_LARGE; + case GridIconSize::small: + return IconBuffer::IconSize::small; + case GridIconSize::medium: + return IconBuffer::IconSize::medium; + case GridIconSize::large: + return IconBuffer::IconSize::large; } - return IconBuffer::SIZE_SMALL; + return IconBuffer::IconSize::small; } @@ -522,8 +521,8 @@ MainDialog::MainDialog(const Zstring& globalConfigFilePath, m_bpButtonShowDifferent ->SetToolTip(_("Show files that are different")); //---------------------------------------------------------------------------------------- - const wxImage& imgFile = IconBuffer::genericFileIcon(IconBuffer::SIZE_SMALL); - const wxImage& imgDir = IconBuffer::genericDirIcon (IconBuffer::SIZE_SMALL); + const wxImage& imgFile = IconBuffer::genericFileIcon(IconBuffer::IconSize::small); + const wxImage& imgDir = IconBuffer::genericDirIcon (IconBuffer::IconSize::small); //init log panel setRelativeFontSize(*m_staticTextSyncResult, 1.5); @@ -867,7 +866,7 @@ MainDialog::MainDialog(const Zstring& globalConfigFilePath, m_gridCfgHistory->makeRowVisible(selectedRows.front()); -onSystemShutdownRegister(onBeforeSystemShutdownCookie_); + onSystemShutdownRegister(onBeforeSystemShutdownCookie_); //start up: user most likely wants to change config, or start comparison by pressing ENTER m_gridCfgHistory->SetFocus(); @@ -940,7 +939,7 @@ onSystemShutdownRegister(onBeforeSystemShutdownCookie_); MainDialog::~MainDialog() { - std::wstring errorMsg; + std::wstring errorMsg; try //LastRun.ffs_gui { writeConfig(getConfig(), lastRunConfigPath_); //throw FileError @@ -1198,7 +1197,7 @@ std::vector<FileSystemObject*> expandSelectionForPartialSync(const std::vector<F std::vector<FileSystemObject*> output; for (FileSystemObject* fsObj : selection) - recursiveObjectVisitor(*fsObj, [&](FolderPair& folder) { output.push_back(&folder); }, + visitFSObjectRecursively(*fsObj, [&](FolderPair& folder) { output.push_back(&folder); }, [&](FilePair& file) { output.push_back(&file); @@ -1239,11 +1238,10 @@ bool selectionIncludesNonEqualItem(const std::vector<FileSystemObject*>& selecti struct ItemFound {}; try { + auto onFsItem = [](FileSystemObject& fsObj) { if (fsObj.getSyncOperation() != SO_EQUAL) throw ItemFound(); }; + for (FileSystemObject* fsObj : selection) - recursiveObjectVisitor(*fsObj, - [](FolderPair& folder) { if (folder .getSyncOperation() != SO_EQUAL) throw ItemFound(); }, - /**/[](FilePair& file) { if (file .getSyncOperation() != SO_EQUAL) throw ItemFound(); }, - /**/[](SymlinkPair& symlink) { if (symlink.getSyncOperation() != SO_EQUAL) throw ItemFound(); }); + visitFSObjectRecursively(*fsObj, onFsItem, onFsItem, onFsItem); return false; } catch (ItemFound&) { return true;} @@ -1547,7 +1545,7 @@ void invokeCommandLine(const Zstring& commandLinePhrase, //throw FileError const std::vector<FileSystemObject*>& selection, const TempFileBuffer& tempFileBuf) { - constexpr SelectSide side2 = OtherSide<side>::value; + constexpr SelectSide side2 = getOtherSide<side>; for (const FileSystemObject* fsObj : selection) //context menu calls this function only if selection is not empty! { @@ -1756,39 +1754,58 @@ void MainDialog::openExternalApplication(const Zstring& commandLinePhrase, bool } - -void MainDialog::flashStatusInformation(const wxString& text) +void MainDialog::setStatusInfo(const wxString& text, bool highlight) { - oldStatusMsgs_.push_back(m_staticTextStatusCenter->GetLabelText()); + if (statusTxts_.empty()) + { + m_staticTextStatusCenter->SetForegroundColour(highlight ? wxColor(31, 57, 226) /*blue*/ : wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); + m_staticTextStatusCenter->SetFont((m_staticTextStatusCenter->GetFont().*(highlight ? &wxFont::Bold : &wxFont::GetBaseFont))()); + + setText(*m_staticTextStatusCenter, text); + m_panelStatusBar->Layout(); + } + else + statusTxts_.front() = text; - m_staticTextStatusCenter->SetLabelText(text); - m_staticTextStatusCenter->SetForegroundColour(wxColor(31, 57, 226)); //highlight color: blue - m_staticTextStatusCenter->SetFont(m_staticTextStatusCenter->GetFont().Bold()); + statusTxtHighlightFirst_ = highlight; +} - m_panelStatusBar->Layout(); - //if (needLayoutUpdate) auiMgr.Update(); -> not needed here, this is called anyway in updateGui() - auto restoreStatusInformation = [this] +void MainDialog::flashStatusInfo(const wxString& text) +{ + if (statusTxts_.empty()) { - if (!oldStatusMsgs_.empty()) - { - wxString oldMsg = oldStatusMsgs_.back(); - oldStatusMsgs_.pop_back(); + statusTxts_.push_back(m_staticTextStatusCenter->GetLabelText()); + statusTxts_.push_back(text); - if (oldStatusMsgs_.empty()) //restore original status text - { - m_staticTextStatusCenter->SetLabelText(oldMsg); - m_staticTextStatusCenter->SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); //reset color + m_staticTextStatusCenter->SetForegroundColour(wxColor(31, 57, 226)); //highlight color: blue + m_staticTextStatusCenter->SetFont(m_staticTextStatusCenter->GetFont().Bold()); + + popStatusInfo(); + } + else + statusTxts_.insert(statusTxts_.begin() + 1, text); +} - wxFont font = m_staticTextStatusCenter->GetFont(); - font.SetWeight(wxFONTWEIGHT_NORMAL); - m_staticTextStatusCenter->SetFont(font); - m_panelStatusBar->Layout(); - } +void MainDialog::popStatusInfo() +{ + assert(!statusTxts_.empty()); + if (!statusTxts_.empty()) + { + const wxString statusTxt = std::move(statusTxts_.back()); + statusTxts_.pop_back(); + + if (statusTxts_.empty()) + setStatusInfo(statusTxt, statusTxtHighlightFirst_); + else + { + guiQueue_.processAsync([] { std::this_thread::sleep_for(std::chrono::seconds(3)); }, [this] { popStatusInfo(); }); + + setText(*m_staticTextStatusCenter, statusTxt); + m_panelStatusBar->Layout(); } - }; - guiQueue_.processAsync([] { std::this_thread::sleep_for(std::chrono::seconds(3)); }, restoreStatusInformation); + } } @@ -2726,7 +2743,7 @@ void MainDialog::onGridLabelContextRim(GridLabelClickEvent& event, bool leftSide addFormatEntry(_("Full path" ), ItemPathFormat::full); //---------------------------------------------------------------------------------------------- - auto setIconSize = [&](FileIconSize sz, bool showIcons) + auto setIconSize = [&](GridIconSize sz, bool showIcons) { globalCfg_.mainDlg.iconSize = sz; globalCfg_.mainDlg.showIcons = showIcons; @@ -2736,13 +2753,13 @@ void MainDialog::onGridLabelContextRim(GridLabelClickEvent& event, bool leftSide menu.addSeparator(); menu.addCheckBox(_("Show icons:"), [&] { setIconSize(globalCfg_.mainDlg.iconSize, !globalCfg_.mainDlg.showIcons); }, globalCfg_.mainDlg.showIcons); - auto addSizeEntry = [&](const wxString& label, FileIconSize sz) + auto addSizeEntry = [&](const wxString& label, GridIconSize sz) { menu.addRadio(label, [sz, &setIconSize] { setIconSize(sz, true /*showIcons*/); }, globalCfg_.mainDlg.iconSize == sz, globalCfg_.mainDlg.showIcons); }; - addSizeEntry(L" " + _("Small" ), FileIconSize::small ); - addSizeEntry(L" " + _("Medium"), FileIconSize::medium); - addSizeEntry(L" " + _("Large" ), FileIconSize::large ); + addSizeEntry(L" " + _("Small" ), GridIconSize::small ); + addSizeEntry(L" " + _("Medium"), GridIconSize::medium); + addSizeEntry(L" " + _("Large" ), GridIconSize::large ); //---------------------------------------------------------------------------------------------- auto setDefault = [&] @@ -2928,7 +2945,7 @@ void MainDialog::cfgHistoryRemoveObsolete(const std::vector<Zstring>& filePaths) { auto getUnavailableCfgFilesAsync = [filePaths] //don't use wxString: NOT thread-safe! (e.g. non-atomic ref-count) { - std::list<std::future<bool>> availableFiles; //check existence of all config files in parallel! + std::vector<std::future<bool>> availableFiles; //check existence of all config files in parallel! for (const Zstring& filePath : filePaths) availableFiles.push_back(runAsync([=] { return fileAvailable(filePath); })); @@ -3096,7 +3113,7 @@ bool MainDialog::trySaveConfig(const Zstring* guiCfgPath) //"false": error/cance writeConfig(guiCfg, cfgFilePath); //throw FileError setLastUsedConfig(guiCfg, {cfgFilePath}); - flashStatusInformation(_("Configuration saved")); + flashStatusInfo(_("Configuration saved")); return true; } catch (const FileError& e) @@ -3178,7 +3195,7 @@ bool MainDialog::trySaveBatchConfig(const Zstring* batchCfgPath) //"false": erro writeConfig(batchCfg, cfgFilePath); //throw FileError setLastUsedConfig(guiCfg, {cfgFilePath}); //[!] behave as if we had saved guiCfg - flashStatusInformation(_("Configuration saved")); + flashStatusInfo(_("Configuration saved")); return true; } catch (const FileError& e) @@ -3341,7 +3358,7 @@ bool MainDialog::loadConfiguration(const std::vector<Zstring>& filePaths, bool i setLastUsedConfig(XmlGuiConfig(), filePaths); //simulate changed config due to parsing errors } - //flashStatusInformation("Configuration loaded"); -> irrelevant!? + //flashStatusInfo("Configuration loaded"); -> irrelevant!? return true; } @@ -3600,8 +3617,8 @@ void MainDialog::onCfgGridContext(GridContextMenuEvent& event) showInFileManager, wxNullImage, !selectedRows.empty()); menu.addSeparator(); //-------------------------------------------------------------------------------------------------------- - menu.addItem(_("Hide configuration") + L"\tDel", [this] { removeSelectedCfgHistoryItems(false /*deleteFromDisk*/); }, wxNullImage, !selectedRows.empty()); - menu.addItem(_("&Delete") + L"\tShift+Del", [this] { removeSelectedCfgHistoryItems(true /*deleteFromDisk*/); }, imgTrashSmall_, !selectedRows.empty()); + menu.addItem(_("&Hide") + L"\tDel", [this] { removeSelectedCfgHistoryItems(false /*deleteFromDisk*/); }, wxNullImage, !selectedRows.empty()); + menu.addItem(_("&Delete") + L"\tShift+Del", [this] { removeSelectedCfgHistoryItems(true /*deleteFromDisk*/); }, imgTrashSmall_, !selectedRows.empty()); //-------------------------------------------------------------------------------------------------------- menu.popup(*m_gridCfgHistory, event.mousePos_); //event.Skip(); @@ -4039,10 +4056,10 @@ void MainDialog::onViewFilterContext(wxEvent& event) saveButtonDefault(*m_bpButtonShowUpdateRight, def.updateRight); saveButtonDefault(*m_bpButtonShowDoNothing, def.doNothing); - flashStatusInformation(_("View settings saved")); + flashStatusInfo(_("View settings saved")); }; - menu.addItem(_("Save as default"), saveDefault, loadImage("cfg_save_sicon")); + menu.addItem(_("&Save as default"), saveDefault, loadImage("cfg_save_sicon")); menu.popup(*m_bpButtonViewFilterContext, {m_bpButtonViewFilterContext->GetSize().x, 0}); } @@ -4157,7 +4174,8 @@ void MainDialog::onCompare(wxCommandEvent& event) st.updateCount() + st.deleteCount() == 0) { - flashStatusInformation(_("No files to synchronize")); + setStatusInfo(_("No files to synchronize"), true /*highlight*/); //don't flashStatusInfo() + updateConfigLastRunStats(std::chrono::system_clock::to_time_t(r.summary.startTime), r.summary.syncResult, getNullPath() /*logFilePath*/); } } @@ -4434,9 +4452,9 @@ void appendInactive(ContainerObject& hierObj, std::vector<FileSystemObject*>& in for (FilePair& file : hierObj.refSubFiles()) if (!file.isActive()) inactiveItems.push_back(&file); - for (SymlinkPair& link : hierObj.refSubLinks()) - if (!link.isActive()) - inactiveItems.push_back(&link); + for (SymlinkPair& symlink : hierObj.refSubLinks()) + if (!symlink.isActive()) + inactiveItems.push_back(&symlink); for (FolderPair& folder : hierObj.refSubFolders()) { if (!folder.isActive()) @@ -4766,22 +4784,10 @@ void MainDialog::onGridLabelLeftClickC(GridLabelClickEvent& event) } -void MainDialog::onSwapSides(wxEvent& event) -{ - ContextMenu menu; - menu.addItem(_("Swap sides") + - L"\tCtrl+Tab", - [&] { swapSides(); }); - - menu.popup(*m_bpButtonSwapSides, {m_bpButtonSwapSides->GetSize().x, 0}); -} - - void MainDialog::swapSides() { - warn_static("fix swap button design mess: https://freefilesync.org/forum/viewtopic.php?t=9204") -#if 0 - if (globalCfg_.confirmDlgs.confirmSwapSides) + if (!folderCmp_.empty() && //require confirmation only *after* comparison + globalCfg_.confirmDlgs.confirmSwapSides) { bool dontWarnAgain = false; switch (showConfirmationDialog(this, DialogInfoType::info, @@ -4797,7 +4803,6 @@ void MainDialog::swapSides() } } //------------------------------------------------------ -#endif //swap directory names: LocalPairConfig lpc1st = firstFolderPair_->getValues(); @@ -4864,7 +4869,7 @@ void MainDialog::swapSides() updateGui(); //e.g. unsaved changes - flashStatusInformation(_("Left and right sides have been swapped")); + flashStatusInfo(_("Left and right sides have been swapped")); } @@ -5065,13 +5070,7 @@ void MainDialog::setStatusBarFileStats(FileView::FileStats statsLeft, replace(statusCenterNew, L"%y", formatNumber(filegrid::getDataView(*m_gridMainC).rowsOnView())); //%x used as plural form placeholder! } - //fill middle text (considering flashStatusInformation()) - if (oldStatusMsgs_.empty()) - setText(*m_staticTextStatusCenter, statusCenterNew); - else - oldStatusMsgs_.front() = statusCenterNew; - - m_panelStatusBar->Layout(); + setStatusInfo(statusCenterNew, false /*highlight*/); } @@ -5657,8 +5656,8 @@ void MainDialog::onMenuExportFileList(wxCommandEvent& event) } const Zstring shortGuid = printNumber<Zstring>(Zstr("%04x"), static_cast<unsigned int>(getCrc16(generateGUID()))); - const Zstring csvFilePath = appendSeparator(tempFileBuf_.getAndCreateFolderPath()) + //throw FileError - title + Zstr("~") + shortGuid + Zstr(".csv"); + const Zstring csvFilePath = appendPath(tempFileBuf_.getAndCreateFolderPath(), //throw FileError + title + Zstr("~") + shortGuid + Zstr(".csv")); TempFileOutput fileOut(csvFilePath, nullptr /*notifyUnbufferedIO*/); //throw FileError @@ -5698,7 +5697,7 @@ void MainDialog::onMenuExportFileList(wxCommandEvent& event) openWithDefaultApp(csvFilePath); //throw FileError - flashStatusInformation(_("File list exported")); + flashStatusInfo(_("File list exported")); } catch (const FileError& e) { @@ -5725,7 +5724,7 @@ void MainDialog::onMenuCheckVersionAutomatically(wxCommandEvent& event) if (shouldRunAutomaticUpdateCheck(globalCfg_.lastUpdateCheck)) { - flashStatusInformation(_("Searching for program updates...")); + flashStatusInfo(_("Searching for program updates...")); //synchronous update check is sufficient here: automaticUpdateCheckEval(*this, globalCfg_.lastUpdateCheck, globalCfg_.lastOnlineVersion, automaticUpdateCheckRunAsync(automaticUpdateCheckPrepare(*this).get()).get()); @@ -5756,7 +5755,7 @@ void MainDialog::onStartupUpdateCheck(wxIdleEvent& event) if (shouldRunAutomaticUpdateCheck(globalCfg_.lastUpdateCheck)) { - flashStatusInformation(_("Searching for program updates...")); + flashStatusInfo(_("Searching for program updates...")); std::shared_ptr<const UpdateCheckResultPrep> resultPrep = automaticUpdateCheckPrepare(*this); //run on main thread: diff --git a/FreeFileSync/Source/ui/main_dlg.h b/FreeFileSync/Source/ui/main_dlg.h index 04a69d1a..ece4d6e5 100644 --- a/FreeFileSync/Source/ui/main_dlg.h +++ b/FreeFileSync/Source/ui/main_dlg.h @@ -128,11 +128,11 @@ private: const std::vector<FileSystemObject*>& selectionL, const std::vector<FileSystemObject*>& selectionR); //selection may be empty - //status bar supports one of the following two states at a time: void setStatusBarFileStats(FileView::FileStats statsLeft, FileView::FileStats statsRight); - //void setStatusBarFullText(const wxString& msg); - void flashStatusInformation(const wxString& msg); //temporarily show different status (only valid for setStatusBarFileStats) + void setStatusInfo(const wxString& text, bool highlight); //(permanently) set status bar center text + void flashStatusInfo(const wxString& text); //temporarily show different status + void popStatusInfo(); //events void onGridKeyEvent(wxKeyEvent& event, zen::Grid& grid, bool leftSide); @@ -209,9 +209,7 @@ private: void onCompare (wxCommandEvent& event) override; void onStartSync (wxCommandEvent& event) override; void onClose (wxCloseEvent& event) override; - void onSwapSides (wxCommandEvent& event) override { onSwapSides(static_cast<wxEvent&>(event)); } - void onSwapSidesMouse (wxMouseEvent& event) override { onSwapSides(static_cast<wxEvent&>(event)); } - void onSwapSides (wxEvent& event); + void onSwapSides (wxCommandEvent& event) override { swapSides(); } void startSyncForSelecction(const std::vector<FileSystemObject*>& selection); @@ -327,8 +325,9 @@ private: //------------------------------------- //*********************************************** - //status information - std::vector<wxString> oldStatusMsgs_; //the first one is the original/non-flash status message + //status bar center text + std::vector<wxString> statusTxts_; //the first one is the original/non-flash status message + bool statusTxtHighlightFirst_ = false; //compare status panel (hidden on start, shown when comparing) std::unique_ptr<CompareProgressPanel> compareStatus_; //always bound @@ -369,7 +368,7 @@ private: const wxImage imgTrashSmall_; - const zen::SharedRef<std::function<void()>> onBeforeSystemShutdownCookie_ = zen::makeSharedRef<std::function<void()>>([this]{ onBeforeSystemShutdown(); }); + const zen::SharedRef<std::function<void()>> onBeforeSystemShutdownCookie_ = zen::makeSharedRef<std::function<void()>>([this] { onBeforeSystemShutdown(); }); }; } diff --git a/FreeFileSync/Source/ui/progress_indicator.cpp b/FreeFileSync/Source/ui/progress_indicator.cpp index 118325d1..da7cdb6d 100644 --- a/FreeFileSync/Source/ui/progress_indicator.cpp +++ b/FreeFileSync/Source/ui/progress_indicator.cpp @@ -190,7 +190,7 @@ CompareProgressPanel::Impl::Impl(wxFrame& parentWindow) : CompareProgressDlgGenerated(&parentWindow), parentWindow_(parentWindow) { - const wxImage& imgFile = IconBuffer::genericFileIcon(IconBuffer::SIZE_SMALL); + const wxImage& imgFile = IconBuffer::genericFileIcon(IconBuffer::IconSize::small); setImage(*m_bitmapItemStat, imgFile); const wxImage imgTime = loadImage("time", -1 /*maxWidth*/, imgFile.GetHeight()); @@ -323,7 +323,7 @@ void CompareProgressPanel::Impl::updateProgressGui() if (!haveTotalStats) { //dialog caption, taskbar - setTitle(formatNumber(itemsCurrent) + L" | " + getDialogPhaseText(*syncStat_, false /*paused*/)); + setTitle(formatNumber(itemsCurrent) + SPACED_DASH + getDialogPhaseText(*syncStat_, false /*paused*/)); //progress indicators //taskbar_ already set to STATUS_INDETERMINATE within initNewPhase() @@ -564,7 +564,7 @@ struct LabelFormatterBytes : public LabelFormatter return 1; //round to next number which is a convenient to read block size - const double k = std::floor(std::log(bytesProposed) / std::log(2.0)); + const double k = std::floor(std::log(bytesProposed) / std::numbers::ln2); const double e = std::pow(2.0, k); if (numeric::isNull(e)) return 0; @@ -837,7 +837,7 @@ dlgSizeBuf_(dlgSize) setImage(*pnl_.m_bpButtonMinimizeToTray, loadImage("minimize_to_tray")); - const wxImage& imgFile = IconBuffer::genericFileIcon(IconBuffer::SIZE_SMALL); + const wxImage& imgFile = IconBuffer::genericFileIcon(IconBuffer::IconSize::small); setImage(*pnl_.m_bitmapItemStat, imgFile); const wxImage imgTime = loadImage("time", -1 /*maxWidth*/, imgFile.GetHeight()); @@ -1017,7 +1017,7 @@ void SyncProgressDialogImpl<TopLevelDialog>::setExternalStatus(const wxString& s //sys tray: order "top-down": jobname, status, progress wxString tooltip = L"FreeFileSync"; if (!jobName_.empty()) - tooltip += L" | " + jobName_; + tooltip += SPACED_DASH + jobName_; tooltip += L'\n' + statusTxt; @@ -1032,7 +1032,7 @@ void SyncProgressDialogImpl<TopLevelDialog>::setExternalStatus(const wxString& s title += statusTxt; if (!jobName_.empty()) - title += L" | " + jobName_; + title += SPACED_DASH + jobName_; const Zchar* format = [&tc = syncStartTime_] { @@ -1043,7 +1043,7 @@ void SyncProgressDialogImpl<TopLevelDialog>::setExternalStatus(const wxString& s return formatTimeTag; return formatDateTimeTag; }(); - title += L" | " + utfTo<std::wstring>(formatTime(format, syncStartTime_)); + title += SPACED_DASH + utfTo<std::wstring>(formatTime(format, syncStartTime_)); //--------------------------------------------------------------------------- @@ -1185,8 +1185,8 @@ void SyncProgressDialogImpl<TopLevelDialog>::updateProgressGui(bool allowYield) const double timeRemainingSec = remTimeSec ? *remTimeSec : 0; const double timeTotalSec = timeElapsedDouble + timeRemainingSec; - //update estimated total time marker only with precision of "15% remaining time" to avoid needless jumping around: - if (numeric::dist(curveBytesEstim_.ref().getTotalTime(), timeTotalSec) > 0.15 * timeRemainingSec) + //update estimated total time marker only with precision of "20% remaining time" to avoid needless jumping around: + if (numeric::dist(curveBytesEstim_.ref().getTotalTime(), timeTotalSec) > 0.2 * timeRemainingSec) { //avoid needless flicker and don't update total time graph too often: static_assert(std::chrono::duration_cast<std::chrono::milliseconds>(GRAPH_TOTAL_TIME_UPDATE_INTERVAL).count() % SPEED_ESTIMATE_UPDATE_INTERVAL.count() == 0); diff --git a/FreeFileSync/Source/ui/search_grid.cpp b/FreeFileSync/Source/ui/search_grid.cpp index c3f459f4..d26eb40e 100644 --- a/FreeFileSync/Source/ui/search_grid.cpp +++ b/FreeFileSync/Source/ui/search_grid.cpp @@ -7,6 +7,7 @@ #include "search_grid.h" #include <zen/zstring.h> #include <zen/utf.h> +//#include <zen/perf.h> using namespace zen; using namespace fff; @@ -24,7 +25,7 @@ void normalizeForSeach<true /*respectCase*/>(std::wstring& str) if (!isAsciiChar(c)) { str = utfTo<std::wstring>(getUnicodeNormalForm(utfTo<Zstring>(str))); - std::replace(str.begin(), str.end(), L'\\', L'/'); + replace(str, L'\\', L'/'); return; } else if (c == L'\\') @@ -38,7 +39,7 @@ void normalizeForSeach<false /*respectCase*/>(std::wstring& str) if (!isAsciiChar(c)) { str = utfTo<std::wstring>(getUpperCase(utfTo<Zstring>(str))); //getUnicodeNormalForm() is implied by getUpperCase() - std::replace(str.begin(), str.end(), L'\\', L'/'); + replace(str, L'\\', L'/'); return; } else if (c == L'\\') diff --git a/FreeFileSync/Source/ui/small_dlgs.cpp b/FreeFileSync/Source/ui/small_dlgs.cpp index 87b3c221..332b5198 100644 --- a/FreeFileSync/Source/ui/small_dlgs.cpp +++ b/FreeFileSync/Source/ui/small_dlgs.cpp @@ -7,10 +7,8 @@ #include "small_dlgs.h" #include <variant> #include <zen/time.h> -#include <zen/file_path.h> #include <zen/format_unit.h> #include <zen/build_info.h> -#include <zen/stl_tools.h> #include <zen/process_exec.h> #include <zen/file_io.h> #include <zen/http.h> @@ -18,7 +16,6 @@ #include <wx/filedlg.h> #include <wx/clipbrd.h> #include <wx/sound.h> -//#include <wx+/bitmap_button.h> #include <wx+/choice_enum.h> #include <wx+/bitmap_button.h> #include <wx+/rtl.h> @@ -263,7 +260,7 @@ CloudSetupDlg::CloudSetupDlg(wxWindow* parent, Zstring& folderPathPhrase, Zstrin setImage(*m_bitmapServer, loadImage("server", fastFromDIP(20))); setImage(*m_bitmapCloud, loadImage("cloud")); setImage(*m_bitmapPerf, loadImage("speed")); - setImage(*m_bitmapServerDir, IconBuffer::genericDirIcon(IconBuffer::SIZE_SMALL)); + setImage(*m_bitmapServerDir, IconBuffer::genericDirIcon(IconBuffer::IconSize::small)); m_checkBoxShowPassword->SetValue(false); m_textCtrlServer->SetHint(_("Example:") + L" website.com 66.198.240.22"); @@ -1136,7 +1133,8 @@ public: private: void onOkay (wxCommandEvent& event) override; - void onRestoreDialogs(wxCommandEvent& event) override; + void onShowHiddenDialogs (wxCommandEvent& event) override { expandConfigArea(ConfigArea::hidden); }; + void onShowContextCustomize(wxCommandEvent& event) override { expandConfigArea(ConfigArea::context); }; void onDefault (wxCommandEvent& event) override; void onCancel (wxCommandEvent& event) override { EndModal(static_cast<int>(ConfirmationButton::cancel)); } void onClose (wxCloseEvent& event) override { EndModal(static_cast<int>(ConfirmationButton::cancel)); } @@ -1144,6 +1142,7 @@ private: void onRemoveRow (wxCommandEvent& event) override; void onShowLogFolder (wxHyperlinkEvent& event) override; void onToggleLogfilesLimit(wxCommandEvent& event) override { updateGui(); } + void onToggleHiddenDialog (wxCommandEvent& event) override { updateGui(); } void onSelectSoundCompareDone (wxCommandEvent& event) override { selectSound(*m_textCtrlSoundPathCompareDone); } void onSelectSoundSyncDone (wxCommandEvent& event) override { selectSound(*m_textCtrlSoundPathSyncDone); } @@ -1157,24 +1156,69 @@ private: void onPlayAlertPending(wxCommandEvent& event) override { playSoundWithDiagnostics(trimCpy(m_textCtrlSoundPathAlertPending->GetValue())); } void playSoundWithDiagnostics(const wxString& filePath); - void onResize(wxSizeEvent& event); + void onGridResize(wxEvent& event); void updateGui(); + enum class ConfigArea + { + hidden, + context + }; + void expandConfigArea(ConfigArea area); + //work around defunct keyboard focus on macOS (or is it wxMac?) => not needed for this dialog! //void onLocalKeyEvent(wxKeyEvent& event); void setExtApp(const std::vector<ExternalApp>& extApp); std::vector<ExternalApp> getExtApp() const; - std::map<std::wstring, std::wstring> descriptionTransToEng_; //"translated description" -> "english" mapping for external application config - - //parameters NOT owned by GUI: - ConfirmationDialogs confirmDlgs_; - WarningDialogs warnDlgs_; - bool autoCloseProgressDialog_; + std::unordered_map<std::wstring, std::wstring> descriptionTransToEng_; //"translated description" -> "english" mapping for external application config const XmlGlobalSettings defaultCfg_; + std::vector<std::tuple<std::function<bool(const XmlGlobalSettings& gs)> /*get dialog shown status*/, + std::function<void(XmlGlobalSettings& gs, bool show)> /*set dialog shown status*/, + wxString /*dialog message*/>> hiddenDialogCfgMapping_ + { + //*INDENT-OFF* + {[](const XmlGlobalSettings& gs){ return gs.confirmDlgs.confirmSyncStart; }, + []( XmlGlobalSettings& gs, bool show){ gs.confirmDlgs.confirmSyncStart = show; }, _("Start synchronization now?")}, + {[](const XmlGlobalSettings& gs){ return gs.confirmDlgs.confirmSaveConfig; }, + []( XmlGlobalSettings& gs, bool show){ gs.confirmDlgs.confirmSaveConfig = show; }, _("Do you want to save changes to %x?")}, + {[](const XmlGlobalSettings& gs){ return !gs.progressDlgAutoClose; }, + []( XmlGlobalSettings& gs, bool show){ gs.progressDlgAutoClose = !show; }, _("Leave progress dialog open after synchronization. (don't auto-close)")}, + {[](const XmlGlobalSettings& gs){ return gs.confirmDlgs.confirmSwapSides; }, + []( XmlGlobalSettings& gs, bool show){ gs.confirmDlgs.confirmSwapSides = show; }, _("Please confirm you want to swap sides.")}, + {[](const XmlGlobalSettings& gs){ return gs.confirmDlgs.confirmCommandMassInvoke; }, + []( XmlGlobalSettings& gs, bool show){ gs.confirmDlgs.confirmCommandMassInvoke = show; }, _P("Do you really want to execute the command %y for one item?", + "Do you really want to execute the command %y for %x items?", 42)}, + {[](const XmlGlobalSettings& gs){ return gs.warnDlgs.warnFolderNotExisting; }, + []( XmlGlobalSettings& gs, bool show){ gs.warnDlgs.warnFolderNotExisting = show; }, _("The following folders do not yet exist:") + L" [...] " + _("The folders are created automatically when needed.")}, + {[](const XmlGlobalSettings& gs){ return gs.warnDlgs.warnFoldersDifferInCase; }, + []( XmlGlobalSettings& gs, bool show){ gs.warnDlgs.warnFoldersDifferInCase = show; }, _("The following folder paths differ in case. Please use a single form in order to avoid duplicate accesses.")}, + {[](const XmlGlobalSettings& gs){ return gs.warnDlgs.warnDependentFolderPair; }, + []( XmlGlobalSettings& gs, bool show){ gs.warnDlgs.warnDependentFolderPair = show; }, _("One base folder of a folder pair is contained in the other one.") + L' ' + _("The folder should be excluded from synchronization via filter.")}, + {[](const XmlGlobalSettings& gs){ return gs.warnDlgs.warnDependentBaseFolders; }, + []( XmlGlobalSettings& gs, bool show){ gs.warnDlgs.warnDependentBaseFolders = show; }, _("Some files will be synchronized as part of multiple base folders.") + L' ' + _("To avoid conflicts, set up exclude filters so that each updated file is included by only one base folder.")}, + {[](const XmlGlobalSettings& gs){ return gs.warnDlgs.warnSignificantDifference; }, + []( XmlGlobalSettings& gs, bool show){ gs.warnDlgs.warnSignificantDifference = show; }, _("The following folders are significantly different. Please check that the correct folders are selected for synchronization.")}, + {[](const XmlGlobalSettings& gs){ return gs.warnDlgs.warnNotEnoughDiskSpace; }, + []( XmlGlobalSettings& gs, bool show){ gs.warnDlgs.warnNotEnoughDiskSpace = show; }, _("Not enough free disk space available in:")}, + {[](const XmlGlobalSettings& gs){ return gs.warnDlgs.warnUnresolvedConflicts; }, + []( XmlGlobalSettings& gs, bool show){ gs.warnDlgs.warnUnresolvedConflicts = show; }, _("The following items have unresolved conflicts and will not be synchronized:")}, + {[](const XmlGlobalSettings& gs){ return gs.warnDlgs.warnModificationTimeError; }, + []( XmlGlobalSettings& gs, bool show){ gs.warnDlgs.warnModificationTimeError = show; }, _("Cannot write modification time of %x.")}, + {[](const XmlGlobalSettings& gs){ return gs.warnDlgs.warnRecyclerMissing; }, + []( XmlGlobalSettings& gs, bool show){ gs.warnDlgs.warnRecyclerMissing = show; }, _("The recycle bin is not supported by the following folders. Deleted or overwritten files will not be able to be restored:")}, + {[](const XmlGlobalSettings& gs){ return gs.warnDlgs.warnInputFieldEmpty; }, + []( XmlGlobalSettings& gs, bool show){ gs.warnDlgs.warnInputFieldEmpty = show; }, _("A folder input field is empty.") + L' ' + _("The corresponding folder will be considered as empty.")}, + {[](const XmlGlobalSettings& gs){ return gs.warnDlgs.warnDirectoryLockFailed; }, + []( XmlGlobalSettings& gs, bool show){ gs.warnDlgs.warnDirectoryLockFailed = show; }, _("Cannot set directory locks for the following folders:")}, + {[](const XmlGlobalSettings& gs){ return gs.warnDlgs.warnVersioningFolderPartOfSync; }, + []( XmlGlobalSettings& gs, bool show){ gs.warnDlgs.warnVersioningFolderPartOfSync = show; }, _("The versioning folder is contained in a base folder.") + L' ' + _("The folder should be excluded from synchronization via filter.")}, + //*INDENT-ON* + }; + //output-only parameters: XmlGlobalSettings& globalCfgOut_; }; @@ -1182,9 +1226,6 @@ private: OptionsDlg::OptionsDlg(wxWindow* parent, XmlGlobalSettings& globalSettings) : OptionsDlgGenerated(parent), - confirmDlgs_(globalSettings.confirmDlgs), - warnDlgs_ (globalSettings.warnDlgs), - autoCloseProgressDialog_(globalSettings.progressDlgAutoClose), globalCfgOut_(globalSettings) { setStandardButtonLayout(*bSizerStdButtons, StdButtons().setAffirmative(m_buttonOkay).setCancel(m_buttonCancel)); @@ -1210,11 +1251,56 @@ OptionsDlg::OptionsDlg(wxWindow* parent, XmlGlobalSettings& globalSettings) : setImage(*m_bpButtonAddRow, loadImage("item_add")); setImage(*m_bpButtonRemoveRow, loadImage("item_remove")); - m_staticTextAllDialogsShown->SetLabelText(L'(' + _("No dialogs hidden") + L')'); + //-------------------------------------------------------------------------------- + m_checkListHiddenDialogs->Hide(); + m_buttonShowCtxCustomize->Hide(); + + //fix wxCheckListBox's stupid "per-item toggle" + m_checkListHiddenDialogs->Bind(wxEVT_KEY_DOWN, [&checklist = *m_checkListHiddenDialogs](wxKeyEvent& event) + { + switch (event.GetKeyCode()) + { + case WXK_SPACE: + case WXK_NUMPAD_SPACE: + assert(checklist.HasMultipleSelection()); + + if (wxArrayInt selection; + checklist.GetSelections(selection), !selection.empty()) + { + const bool checkedNew = !checklist.IsChecked(selection[0]); + + for (const int itemPos : selection) + checklist.Check(itemPos, checkedNew); + + wxCommandEvent chkEvent(wxEVT_CHECKLISTBOX); + chkEvent.SetInt(selection[0]); + if (wxEvtHandler* evtHandler = checklist.GetEventHandler()) + evtHandler->ProcessEvent(chkEvent); + } + return; + } + event.Skip(); + }); + + std::stable_partition(hiddenDialogCfgMapping_.begin(), hiddenDialogCfgMapping_.end(), [&](const auto& item) + { + const auto& [dlgShown, dlgSetShown, msg] = item; + return !dlgShown(globalSettings); //move hidden dialogs to the top + }); + + std::vector<wxString> dialogMessages; + for (const auto& [dlgShown, dlgSetShown, msg] : hiddenDialogCfgMapping_) + dialogMessages.push_back(msg); - m_staticTextResetDialogs->Wrap(std::max(fastFromDIP(250), - m_buttonRestoreDialogs ->GetSize().x + - m_staticTextAllDialogsShown->GetSize().x)); + m_checkListHiddenDialogs->Append(dialogMessages); + + unsigned int itemPos = 0; + for (const auto& [dlgShown, dlgSetShown, msg] : hiddenDialogCfgMapping_) + { + if (dlgShown(globalSettings)) + m_checkListHiddenDialogs->Check(itemPos); + ++itemPos; + } //-------------------------------------------------------------------------------- m_checkBoxFailSafe ->SetValue(globalSettings.failSafeFileCopy); @@ -1242,11 +1328,11 @@ OptionsDlg::OptionsDlg(wxWindow* parent, XmlGlobalSettings& globalSettings) : bSizerLockedFiles->Show(false); m_gridCustomCommand->SetMargins(0, 0); + //automatically fit column width to match total grid width + m_gridCustomCommand->GetGridWindow()->Bind(wxEVT_SIZE, [this](wxSizeEvent& event) { onGridResize(event); }); + //temporarily set dummy value for window height calculations: setExtApp(std::vector<ExternalApp>(globalSettings.externalApps.size() + 1)); - confirmDlgs_ = defaultCfg_.confirmDlgs; // - warnDlgs_ = defaultCfg_.warnDlgs; //make sure m_staticTextAllDialogsShown is shown - autoCloseProgressDialog_ = defaultCfg_.progressDlgAutoClose; // updateGui(); GetSizer()->SetSizeHints(this); //~=Fit() + SetMinSize() @@ -1255,21 +1341,13 @@ OptionsDlg::OptionsDlg(wxWindow* parent, XmlGlobalSettings& globalSettings) : //restore actual value: setExtApp(globalSettings.externalApps); - confirmDlgs_ = globalSettings.confirmDlgs; - warnDlgs_ = globalSettings.warnDlgs; - autoCloseProgressDialog_ = globalSettings.progressDlgAutoClose; updateGui(); - //automatically fit column width to match total grid width - Bind(wxEVT_SIZE, [this](wxSizeEvent& event) { onResize(event); }); - wxSizeEvent dummy; - onResize(dummy); - m_buttonOkay->SetFocus(); } -void OptionsDlg::onResize(wxSizeEvent& event) +void OptionsDlg::onGridResize(wxEvent& event) { const int widthTotal = m_gridCustomCommand->GetGridWindow()->GetClientSize().GetWidth(); assert(m_gridCustomCommand->GetNumberCols() == 2); @@ -1280,35 +1358,41 @@ void OptionsDlg::onResize(wxSizeEvent& event) m_gridCustomCommand->SetColSize(1, w1); m_gridCustomCommand->Refresh(); //required on Ubuntu - event.Skip(); } void OptionsDlg::updateGui() { - const bool haveHiddenDialogs = confirmDlgs_ != defaultCfg_.confirmDlgs || - warnDlgs_ != defaultCfg_.warnDlgs || - autoCloseProgressDialog_ != defaultCfg_.progressDlgAutoClose; - - m_buttonRestoreDialogs->Enable(haveHiddenDialogs); - m_staticTextAllDialogsShown->Show(!haveHiddenDialogs); - Layout(); - m_spinCtrlLogFilesMaxAge->Enable(m_checkBoxLogFilesMaxAge->GetValue()); m_bpButtonPlayCompareDone ->Enable(!trimCpy(m_textCtrlSoundPathCompareDone ->GetValue()).empty()); m_bpButtonPlaySyncDone ->Enable(!trimCpy(m_textCtrlSoundPathSyncDone ->GetValue()).empty()); m_bpButtonPlayAlertPending->Enable(!trimCpy(m_textCtrlSoundPathAlertPending->GetValue()).empty()); + + int hiddenDialogs = 0; + for (unsigned int itemPos = 0; itemPos < static_cast<unsigned int>(hiddenDialogCfgMapping_.size()); ++itemPos) + if (!m_checkListHiddenDialogs->IsChecked(itemPos)) + ++hiddenDialogs; + assert(hiddenDialogCfgMapping_.size() == m_checkListHiddenDialogs->GetCount()); + + m_staticTextHiddenDialogsCount->SetLabelText(L'(' + (hiddenDialogs == 0 ? _("No dialogs hidden") : + _P("1 dialog hidden", "%x dialogs hidden", hiddenDialogs)) + L')'); + Layout(); } -void OptionsDlg::onRestoreDialogs(wxCommandEvent& event) +void OptionsDlg::expandConfigArea(ConfigArea area) { - confirmDlgs_ = defaultCfg_.confirmDlgs; - warnDlgs_ = defaultCfg_.warnDlgs; - autoCloseProgressDialog_ = defaultCfg_.progressDlgAutoClose; - updateGui(); + //only show one expaned area at a time (wxGTK even crashes when showing both: not worth debugging) + m_buttonShowHiddenDialogs->Show(area != ConfigArea::hidden); + m_buttonShowCtxCustomize ->Show(area != ConfigArea::context); + + m_checkListHiddenDialogs->Show(area == ConfigArea::hidden); + bSizerContextCustomize ->Show(area == ConfigArea::context); + + Layout(); + Refresh(); //required on Windows } @@ -1316,7 +1400,7 @@ void OptionsDlg::selectSound(wxTextCtrl& txtCtrl) { std::optional<Zstring> defaultFolderPath = getParentFolderPath(utfTo<Zstring>(txtCtrl.GetValue())); if (!defaultFolderPath) - defaultFolderPath = beforeLast(getResourceDirPf(), FILE_NAME_SEPARATOR, IfNotFoundReturn::all); + defaultFolderPath = getResourceDirPath(); wxFileDialog fileSelector(this, wxString() /*message*/, utfTo<wxString>(*defaultFolderPath), wxString() /*default file name*/, wxString(L"WAVE (*.wav)|*.wav") + L"|" + _("All files") + L" (*.*)|*", @@ -1333,7 +1417,7 @@ void OptionsDlg::playSoundWithDiagnostics(const wxString& filePath) { try { - //::PlaySound() => NO failure indication on Windows! does not set last last error! + //::PlaySound() => NO failure indication on Windows! does not set last error! //wxSound::Play(..., wxSOUND_SYNC) can return false, but does not provide details! //=> check file access manually: [[maybe_unused]] const std::string& stream = getFileContent(utfTo<Zstring>(filePath), nullptr /*notifyUnbufferedIO*/); //throw FileError @@ -1350,6 +1434,10 @@ void OptionsDlg::onDefault(wxCommandEvent& event) m_checkBoxCopyLocked ->SetValue(defaultCfg_.copyLockedFiles); m_checkBoxCopyPermissions->SetValue(defaultCfg_.copyFilePermissions); + unsigned int itemPos = 0; + for (const auto& [dlgShown, dlgSetShown, msg] : hiddenDialogCfgMapping_) + m_checkListHiddenDialogs->Check(itemPos++, dlgShown(defaultCfg_)); + m_checkBoxLogFilesMaxAge->SetValue(defaultCfg_.logfilesMaxAgeDays > 0); m_spinCtrlLogFilesMaxAge->SetValue(defaultCfg_.logfilesMaxAgeDays > 0 ? defaultCfg_.logfilesMaxAgeDays : 14); @@ -1389,9 +1477,9 @@ void OptionsDlg::onOkay(wxCommandEvent& event) globalCfgOut_.externalApps = getExtApp(); - globalCfgOut_.confirmDlgs = confirmDlgs_; - globalCfgOut_.warnDlgs = warnDlgs_; - globalCfgOut_.progressDlgAutoClose = autoCloseProgressDialog_; + unsigned int itemPos = 0; + for (const auto& [dlgShown, dlgSetShown, msg] : hiddenDialogCfgMapping_) + dlgSetShown(globalCfgOut_, m_checkListHiddenDialogs->IsChecked(itemPos++)); EndModal(static_cast<int>(ConfirmationButton::accept)); } @@ -1407,16 +1495,16 @@ void OptionsDlg::setExtApp(const std::vector<ExternalApp>& extApps) else m_gridCustomCommand->DeleteRows(0, -rowDiff); - for (auto it = extApps.begin(); it != extApps.end(); ++it) + int row = 0; + for (const auto& [descriptionEng, cmdLine] : extApps) { - const int row = it - extApps.begin(); - - const std::wstring description = translate(it->description); - if (description != it->description) //remember english description to save in GlobalSettings.xml later rather than hard-code translation - descriptionTransToEng_[description] = it->description; + const std::wstring description = translate(descriptionEng); + //remember english description to save in GlobalSettings.xml later rather than hard-code translation + descriptionTransToEng_[description] = descriptionEng; m_gridCustomCommand->SetCellValue(row, 0, description); - m_gridCustomCommand->SetCellValue(row, 1, utfTo<wxString>(it->cmdLine)); //commandline + m_gridCustomCommand->SetCellValue(row, 1, utfTo<wxString>(cmdLine)); + ++row; } } @@ -1449,9 +1537,6 @@ void OptionsDlg::onAddRow(wxCommandEvent& event) else m_gridCustomCommand->AppendRows(); - wxSizeEvent dummy2; - onResize(dummy2); - m_gridCustomCommand->SetFocus(); //make grid cursor visible } @@ -1466,9 +1551,6 @@ void OptionsDlg::onRemoveRow(wxCommandEvent& event) else m_gridCustomCommand->DeleteRows(m_gridCustomCommand->GetNumberRows() - 1); - wxSizeEvent dummy2; - onResize(dummy2); - m_gridCustomCommand->SetFocus(); //make grid cursor visible } } diff --git a/FreeFileSync/Source/ui/sync_cfg.cpp b/FreeFileSync/Source/ui/sync_cfg.cpp index 3eb0b187..1b4031e2 100644 --- a/FreeFileSync/Source/ui/sync_cfg.cpp +++ b/FreeFileSync/Source/ui/sync_cfg.cpp @@ -1335,7 +1335,7 @@ void ConfigDialog::updateMiscGui() const MiscSyncConfig miscCfg = getMiscSyncOptions(); setImage(*m_bitmapIgnoreErrors, greyScaleIfDisabled(loadImage("error_ignore_active"), miscCfg.ignoreErrors)); - setImage(*m_bitmapRetryErrors , greyScaleIfDisabled(loadImage("error_retry"), miscCfg.autoRetryCount > 0 )); + setImage(*m_bitmapRetryErrors, greyScaleIfDisabled(loadImage("error_retry"), miscCfg.autoRetryCount > 0 )); fgSizerAutoRetry->Show(miscCfg.autoRetryCount > 0); diff --git a/FreeFileSync/Source/ui/tree_grid.cpp b/FreeFileSync/Source/ui/tree_grid.cpp index 13a96295..6658d172 100644 --- a/FreeFileSync/Source/ui/tree_grid.cpp +++ b/FreeFileSync/Source/ui/tree_grid.cpp @@ -686,7 +686,7 @@ class GridDataTree : private wxEvtHandler, public GridData { public: GridDataTree(Grid& grid) : - widthNodeIcon_(IconBuffer::getSize(IconBuffer::SIZE_SMALL)), + widthNodeIcon_(IconBuffer::getSize(IconBuffer::IconSize::small)), widthLevelStep_(widthNodeIcon_), widthNodeStatus_(loadImage("node_expanded").GetWidth()), rootIcon_(loadImage("root_folder", widthNodeIcon_)), @@ -1169,8 +1169,8 @@ private: const int gapSize_ = fastFromDIP(TREE_GRID_GAP_SIZE_DIP); const int percentageBarWidth_ = fastFromDIP(PERCENTAGE_BAR_WIDTH_DIP); - const wxImage fileIcon_ = IconBuffer::genericFileIcon(IconBuffer::SIZE_SMALL); - const wxImage dirIcon_ = IconBuffer::genericDirIcon (IconBuffer::SIZE_SMALL); + const wxImage fileIcon_ = IconBuffer::genericFileIcon(IconBuffer::IconSize::small); + const wxImage dirIcon_ = IconBuffer::genericDirIcon (IconBuffer::IconSize::small); const int widthNodeIcon_; const int widthLevelStep_; @@ -1189,7 +1189,7 @@ void treegrid::init(Grid& grid) grid.setDataProvider(std::make_shared<GridDataTree>(grid)); grid.showRowLabel(false); - const int rowHeight = std::max(IconBuffer::getSize(IconBuffer::SIZE_SMALL) + 2, //1 extra pixel on top/bottom; dearly needed on OS X! + const int rowHeight = std::max(IconBuffer::getSize(IconBuffer::IconSize::small) + 2, //1 extra pixel on top/bottom; dearly needed on OS X! grid.getMainWin().GetCharHeight()); //seems to already include 3 margin pixels on top/bottom (consider percentage area) grid.setRowHeight(rowHeight); } diff --git a/FreeFileSync/Source/ui/version_check.cpp b/FreeFileSync/Source/ui/version_check.cpp index 2a873838..3f077961 100644 --- a/FreeFileSync/Source/ui/version_check.cpp +++ b/FreeFileSync/Source/ui/version_check.cpp @@ -86,13 +86,11 @@ std::wstring getIso639Language() assert(runningOnMainThread()); //this function is not thread-safe: consider wxWidgets usage std::wstring localeName(wxLocale::GetLanguageCanonicalName(wxLocale::GetSystemLanguage())); - localeName = beforeFirst(localeName, L"@", IfNotFoundReturn::all); //the locale may contain an @, e.g. "sr_RS@latin"; see wxLocale::InitLanguagesDB() + localeName = beforeFirst(localeName, L'@', IfNotFoundReturn::all); //the locale may contain an @, e.g. "sr_RS@latin"; see wxLocale::InitLanguagesDB() + assert(beforeFirst(localeName, L'_', IfNotFoundReturn::all).size() == 2); if (!localeName.empty()) - { - assert(beforeFirst(localeName, L"_", IfNotFoundReturn::all).size() == 2); - return beforeFirst(localeName, L"_", IfNotFoundReturn::all); - } + return beforeFirst(localeName, L'_', IfNotFoundReturn::all); assert(false); return L"zz"; } @@ -105,10 +103,10 @@ std::wstring getIso3166Country() assert(runningOnMainThread()); //this function is not thread-safe, consider wxWidgets usage std::wstring localeName(wxLocale::GetLanguageCanonicalName(wxLocale::GetSystemLanguage())); - localeName = beforeFirst(localeName, L"@", IfNotFoundReturn::all); //the locale may contain an @, e.g. "sr_RS@latin"; see wxLocale::InitLanguagesDB() + localeName = beforeFirst(localeName, L'@', IfNotFoundReturn::all); //the locale may contain an @, e.g. "sr_RS@latin"; see wxLocale::InitLanguagesDB() - if (contains(localeName, L"_")) - return afterFirst(localeName, L"_", IfNotFoundReturn::none); + if (contains(localeName, L'_')) + return afterFirst(localeName, L'_', IfNotFoundReturn::none); assert(false); return L"ZZ"; } @@ -128,10 +126,7 @@ std::vector<std::pair<std::string, std::string>> geHttpPostParameters(wxWindow& const OsVersion osv = getOsVersion(); params.emplace_back("os_version", numberTo<std::string>(osv.major) + "." + numberTo<std::string>(osv.minor)); -#ifndef ZEN_BUILD_ARCH -#error include <zen/build_info.h> -#endif - const char* osArch = ZEN_STRINGIZE_NUMBER(ZEN_BUILD_ARCH); + const char* osArch = BuildArch::program == BuildArch::bit32 ? "32" : "64"; params.emplace_back("os_arch", osArch); #if GTK_MAJOR_VERSION == 2 diff --git a/FreeFileSync/Source/version/version.h b/FreeFileSync/Source/version/version.h index 5139a888..3918f5f4 100644 --- a/FreeFileSync/Source/version/version.h +++ b/FreeFileSync/Source/version/version.h @@ -3,7 +3,7 @@ namespace fff { -const char ffsVersion[] = "11.20"; //internal linkage! +const char ffsVersion[] = "11.21"; //internal linkage! const char FFS_VERSION_SEPARATOR = '.'; } diff --git a/libcurl/curl_wrap.cpp b/libcurl/curl_wrap.cpp index 1dc523b9..33723d9e 100644 --- a/libcurl/curl_wrap.cpp +++ b/libcurl/curl_wrap.cpp @@ -9,6 +9,7 @@ #include <zen/http.h> #include <zen/open_ssl.h> #include <zen/thread.h> +#include <zen/file_path.h> #include <fcntl.h> using namespace zen; diff --git a/libcurl/curl_wrap.h b/libcurl/curl_wrap.h index 4c41ade4..35ee54ba 100644 --- a/libcurl/curl_wrap.h +++ b/libcurl/curl_wrap.h @@ -11,7 +11,6 @@ #include <span> #include <functional> #include <zen/sys_error.h> -#include <zen/zstring.h> //------------------------------------------------- diff --git a/wx+/async_task.h b/wx+/async_task.h index 1571c917..a7ce2eb5 100644 --- a/wx+/async_task.h +++ b/wx+/async_task.h @@ -84,7 +84,7 @@ public: std::vector<std::unique_ptr<Task>> readyTasks; //Reentrancy; access to AsyncTasks::add is not protected! => evaluate outside eraseIf - std::erase_if(tasks_, [&](std::unique_ptr<Task>& task) + eraseIf(tasks_, [&](std::unique_ptr<Task>& task) { if (task->resultReady()) { diff --git a/wx+/bitmap_button.h b/wx+/bitmap_button.h index 5ab5411b..32bc68c1 100644 --- a/wx+/bitmap_button.h +++ b/wx+/bitmap_button.h @@ -84,6 +84,7 @@ void setImage(wxAnyButton& button, const wxImage& img) return; } + button.SetBitmapLabel(toBitmapBundle(img)); //wxWidgets excels at screwing up consistently once again: diff --git a/wx+/context_menu.h b/wx+/context_menu.h index 728da173..ef11e37b 100644 --- a/wx+/context_menu.h +++ b/wx+/context_menu.h @@ -14,8 +14,6 @@ #include <wx/app.h> #include "dc.h" -warn_static("remove after test") -#include "image_tools.h" /* A context menu supporting lambda callbacks! @@ -102,7 +100,7 @@ private: ContextMenu& operator=(const ContextMenu&) = delete; std::unique_ptr<wxMenu> menu_ = std::make_unique<wxMenu>(); - std::map<int /*item id*/, std::function<void()> /*command*/> commandList_; + std::unordered_map<int /*item id*/, std::function<void()> /*command*/> commandList_; }; @@ -121,7 +121,7 @@ int getDpiScalePercent() inline wxBitmapBundle toBitmapBundle(const wxImage& img /*expected to be DPI-scaled!*/) { - //return wxBitmap(img, -1 /*depth*/, static_cast<double>(getDPI()) / defaultDpi); not (yet) implemented + //return wxBitmap(img, -1 /*depth*/, static_cast<double>(getDPI()) / defaultDpi); implementation just ignores scale parameter! WTF! wxBitmap bmpScaled(img); bmpScaled.SetScaleFactor(static_cast<double>(getDPI()) / defaultDpi); return bmpScaled; @@ -10,7 +10,7 @@ #include <memory> #include <numeric> #include <optional> -#include <set> +//#include <set> #include <vector> #include <zen/stl_tools.h> #include <wx/scrolwin.h> diff --git a/wx+/image_holder.h b/wx+/image_holder.h index 32f8a863..89021045 100644 --- a/wx+/image_holder.h +++ b/wx+/image_holder.h @@ -56,8 +56,8 @@ struct FileIconHolder //- what about G_IS_FILE_ICON(gicon), G_IS_LOADABLE_ICON(gicon)? => may block! => do NOT convert on main thread! (no big deal: doesn't seem to occur in practice) FileIconHolder() {}; - FileIconHolder(GIcon* gi, int maxSz) : //takes ownership! - gicon(gi), + FileIconHolder(GIcon* icon, int maxSz) : //takes ownership! + gicon(icon), maxSize(maxSz) {} struct GiconFree { void operator()(GIcon* icon) const { ::g_object_unref(icon); } }; diff --git a/wx+/image_resources.cpp b/wx+/image_resources.cpp index c7260c55..0301a082 100644 --- a/wx+/image_resources.cpp +++ b/wx+/image_resources.cpp @@ -7,13 +7,12 @@ #include "image_resources.h" #include <map> #include <zen/utf.h> -#include <zen/perf.h> +//#include <zen/perf.h> #include <zen/thread.h> #include <zen/file_io.h> #include <zen/file_traverser.h> #include <wx/zipstrm.h> #include <wx/mstream.h> -#include <wx/image.h> #include <xBRZ/src/xbrz.h> #include <xBRZ/src/xbrz_tools.h> #include "image_tools.h" diff --git a/wx+/image_resources.h b/wx+/image_resources.h index 6993e6f3..0aa4dce4 100644 --- a/wx+/image_resources.h +++ b/wx+/image_resources.h @@ -7,7 +7,7 @@ #ifndef IMAGE_RESOURCES_H_8740257825342532457 #define IMAGE_RESOURCES_H_8740257825342532457 -#include <wx/animate.h> +#include <wx/image.h> #include <zen/zstring.h> diff --git a/wx+/image_tools.cpp b/wx+/image_tools.cpp index 335cf7b9..ccbd05e2 100644 --- a/wx+/image_tools.cpp +++ b/wx+/image_tools.cpp @@ -6,7 +6,7 @@ #include "image_tools.h" #include <zen/string_tools.h> -#include <zen/zstring.h> +//#include <zen/zstring.h> #include <zen/scope_guard.h> #include <wx/app.h> #include <xBRZ/src/xbrz_tools.h> diff --git a/xBRZ/src/xbrz.cpp b/xBRZ/src/xbrz.cpp index 9cf4b8e9..629a1ce5 100644 --- a/xBRZ/src/xbrz.cpp +++ b/xBRZ/src/xbrz.cpp @@ -1222,7 +1222,7 @@ bool xbrz::equalColorTest2(uint32_t col1, uint32_t col2, ColorFormat colFmt, dou void xbrz::bilinearScale(const uint32_t* src, int srcWidth, int srcHeight, /**/ uint32_t* trg, int trgWidth, int trgHeight) { - const auto imgReader = [src, srcWidth](int x, int y, BytePixel& pix) + const auto pixReader = [src, srcWidth](int x, int y, BytePixel& pix) { static_assert(sizeof(pix) == sizeof(uint32_t)); const uint32_t pixSrc = src[y * srcWidth + x]; @@ -1234,17 +1234,17 @@ void xbrz::bilinearScale(const uint32_t* src, int srcWidth, int srcHeight, pix[3] = xbrz::premultiply(getBlue (pixSrc), a); //b }; - const auto imgWriter = [trg](const xbrz::BytePixel& pix) mutable + const auto pixWriter = [trg](const xbrz::BytePixel& pix) mutable { const unsigned char a = pix[0]; - * trg++ = makePixel(a, + *trg++ = makePixel(a, xbrz::demultiply(pix[1], a), //r xbrz::demultiply(pix[2], a), //g xbrz::demultiply(pix[3], a)); //b }; - bilinearScaleSimple(imgReader, srcWidth, srcHeight, - imgWriter, trgWidth, trgHeight, 0, trgHeight); + bilinearScaleSimple(pixReader, srcWidth, srcHeight, + pixWriter, trgWidth, trgHeight, 0, trgHeight); } diff --git a/xBRZ/src/xbrz_tools.h b/xBRZ/src/xbrz_tools.h index d6e48c0c..32e2090f 100644 --- a/xBRZ/src/xbrz_tools.h +++ b/xBRZ/src/xbrz_tools.h @@ -19,6 +19,7 @@ #define XBRZ_TOOLS_H_825480175091875 #include <cassert> +#include <vector> #include <algorithm> #include <type_traits> diff --git a/zen/base64.h b/zen/base64.h index f03a1433..48cf2230 100644 --- a/zen/base64.h +++ b/zen/base64.h @@ -7,6 +7,7 @@ #ifndef BASE64_H_08473021856321840873021487213453214 #define BASE64_H_08473021856321840873021487213453214 +#include <cassert> #include <iterator> #include "type_traits.h" @@ -55,7 +56,7 @@ constexpr signed char DECODING_MIME[] = -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; //"=" +const unsigned char INDEX_PAD = 64; //index of "=" } @@ -64,8 +65,8 @@ OutputIterator encodeBase64(InputIterator first, InputIterator last, OutputItera { using namespace impl; static_assert(sizeof(typename std::iterator_traits<InputIterator>::value_type) == 1); - static_assert(arraySize(ENCODING_MIME) == 64 + 1 + 1); - static_assert(arrayAccumulate<int>(ENCODING_MIME) + INDEX_PAD == 5602); + static_assert(std::size(ENCODING_MIME) == 64 + 1 + 1); + static_assert(arrayHash(ENCODING_MIME) == 1616767125); while (first != last) { @@ -101,8 +102,8 @@ OutputIterator decodeBase64(InputIterator first, InputIterator last, OutputItera { using namespace impl; static_assert(sizeof(typename std::iterator_traits<InputIterator>::value_type) == 1); - static_assert(arraySize(DECODING_MIME) == 128); - static_assert(arrayAccumulate<int>(DECODING_MIME) + INDEX_PAD == 2081); + static_assert(std::size(DECODING_MIME) == 128); + static_assert(arrayHash(DECODING_MIME)== 1169145114); const unsigned char INDEX_END = INDEX_PAD + 1; @@ -114,7 +115,7 @@ OutputIterator decodeBase64(InputIterator first, InputIterator last, OutputItera return INDEX_END; const unsigned char ch = static_cast<unsigned char>(*first++); - if (ch < arraySize(DECODING_MIME)) //we're in lower ASCII table half + if (ch < std::size(DECODING_MIME)) //we're in lower ASCII table half { const int index = DECODING_MIME[ch]; if (0 <= index && index <= static_cast<int>(INDEX_PAD)) //skip all unknown characters (including carriage return, line-break, tab) diff --git a/zen/basic_math.h b/zen/basic_math.h index 944a0f53..c8a06b78 100644 --- a/zen/basic_math.h +++ b/zen/basic_math.h @@ -8,7 +8,6 @@ #define BASIC_MATH_H_3472639843265675 #include <cassert> -#include <algorithm> #include <cmath> #include <numbers> #include "type_traits.h" @@ -152,10 +151,10 @@ template <class N, class D> inline auto intDivRound(N num, D den) { using namespace zen; - static_assert(IsIntegerV<N>&& IsIntegerV<D>); - static_assert(IsSignedIntV<N> == IsSignedIntV<D>); //until further + static_assert(isInteger<N>&& isInteger<D>); + static_assert(isSignedInt<N> == isSignedInt<D>); //until further assert(den != 0); - if constexpr (IsSignedIntV<N>) + if constexpr (isSignedInt<N>) { if ((num < 0) != (den < 0)) return (num - den / 2) / den; @@ -168,10 +167,10 @@ template <class N, class D> inline auto intDivCeil(N num, D den) { using namespace zen; - static_assert(IsIntegerV<N>&& IsIntegerV<D>); - static_assert(IsSignedIntV<N> == IsSignedIntV<D>); //until further + static_assert(isInteger<N>&& isInteger<D>); + static_assert(isSignedInt<N> == isSignedInt<D>); //until further assert(den != 0); - if constexpr (IsSignedIntV<N>) + if constexpr (isSignedInt<N>) { if ((num < 0) != (den < 0)) return num / den; @@ -187,10 +186,10 @@ template <class N, class D> inline auto intDivFloor(N num, D den) { using namespace zen; - static_assert(IsIntegerV<N>&& IsIntegerV<D>); - static_assert(IsSignedIntV<N> == IsSignedIntV<D>); //until further + static_assert(isInteger<N>&& isInteger<D>); + static_assert(isSignedInt<N> == isSignedInt<D>); //until further assert(den != 0); - if constexpr (IsSignedIntV<N>) + if constexpr (isSignedInt<N>) { if ((num < 0) != (den < 0)) { diff --git a/zen/build_info.h b/zen/build_info.h index 5a1d1635..b06c1302 100644 --- a/zen/build_info.h +++ b/zen/build_info.h @@ -8,25 +8,25 @@ #define BUILD_INFO_H_5928539285603428657 -#define ZEN_ARCH_32BIT 32 -#define ZEN_ARCH_64BIT 64 - #ifdef __LP64__ - #define ZEN_BUILD_ARCH ZEN_ARCH_64BIT - #else - #define ZEN_BUILD_ARCH ZEN_ARCH_32BIT - #endif +namespace zen +{ +enum class BuildArch +{ + bit32, + bit64, -static_assert(ZEN_BUILD_ARCH == sizeof(void*) * 8); +#ifdef __LP64__ + program = bit64 +#else + program = bit32 +#endif +}; +static_assert((BuildArch::program == BuildArch::bit32 ? 32 : 64) == sizeof(void*) * 8); -namespace zen -{ - #if ZEN_BUILD_ARCH == ZEN_ARCH_32BIT - const char cpuArchName[] = "i686"; - #else - const char cpuArchName[] = "x86-64"; - #endif + +constexpr const char* cpuArchName = BuildArch::program == BuildArch::bit32 ? "i686": "x86-64"; } @@ -52,7 +52,9 @@ uint16_t getCrc16(ByteIterator first, ByteIterator last) //http://www.sunshine2k 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040 }; - static_assert(arraySize(crcTable) == 256 && arrayAccumulate<uint32_t>(crcTable) == 8380544); + static_assert(std::size(crcTable) == 256); + static_assert(arrayHash(crcTable) == 728085957); + crc = (crc >> 8) ^ crcTable[(crc ^ b) & 0xFF]; }); return crc; @@ -96,7 +98,8 @@ uint32_t getCrc32(ByteIterator first, ByteIterator last) //https://en.wikipedia. 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; - static_assert(arraySize(crcTable) == 256 && arrayAccumulate<uint64_t>(crcTable) == 549755813760); + static_assert(std::size(crcTable) == 256); + static_assert(arrayHash(crcTable) == 2988069445); crc = (crc >> 8) ^ crcTable[(crc ^ b) & 0xFF]; }); diff --git a/zen/dir_watcher.cpp b/zen/dir_watcher.cpp index 191ffd64..c48928a3 100644 --- a/zen/dir_watcher.cpp +++ b/zen/dir_watcher.cpp @@ -24,7 +24,7 @@ using namespace zen; struct DirWatcher::Impl { int notifDescr = 0; - std::map<int, Zstring> watchedPaths; //watch descriptor and (sub-)directory paths -> owned by "notifDescr" + std::unordered_map<int, Zstring> watchedPaths; //watch descriptor and (sub-)directory paths -> owned by "notifDescr" }; @@ -133,7 +133,7 @@ std::vector<DirWatcher::Change> DirWatcher::fetchChanges(const std::function<voi { //Note: evt.len is NOT the size of the evt.name c-string, but the array size including all padding 0 characters! //It may be even 0 in which case evt.name must not be used! - const Zstring itemPath = appendSeparator(it->second) + evt.name; + const Zstring itemPath = appendPath(it->second, evt.name); if ((evt.mask & IN_CREATE) || (evt.mask & IN_MOVED_TO)) diff --git a/zen/dir_watcher.h b/zen/dir_watcher.h index bf71fda9..a4a061e8 100644 --- a/zen/dir_watcher.h +++ b/zen/dir_watcher.h @@ -8,7 +8,7 @@ #define DIR_WATCHER_348577025748023458 #include <vector> -#include <memory> +//#include <memory> #include <chrono> #include <functional> #include "file_error.h" diff --git a/zen/error_log.h b/zen/error_log.h index a24dfe5a..357232f3 100644 --- a/zen/error_log.h +++ b/zen/error_log.h @@ -11,7 +11,6 @@ #include <vector> #include "time.h" #include "i18n.h" -#include "utf.h" #include "zstring.h" @@ -37,7 +36,7 @@ std::string formatMessage(const LogEntry& entry); class ErrorLog { public: - void logMsg(const std::wstring& msg, MessageType type); + void logMsg(const std::wstring& msg, MessageType type, time_t time = std::time(nullptr)); struct Stats { @@ -66,9 +65,9 @@ private: //######################## implementation ########################## inline -void ErrorLog::logMsg(const std::wstring& msg, MessageType type) +void ErrorLog::logMsg(const std::wstring& msg, MessageType type, time_t time) { - entries_.push_back({std::time(nullptr), type, utfTo<Zstringc>(msg)}); + entries_.push_back({time, type, utfTo<Zstringc>(msg)}); } @@ -119,14 +118,13 @@ std::string formatMessage(const LogEntry& entry) const size_t prefixLen = unicodeLength(msgFmt); //consider Unicode! const Zstringc msg = trimCpy(entry.message); - static_assert(std::is_same_v<decltype(msg), const Zstringc>, "don't worry about copying as long as we're using a ref-counted string!"); + static_assert(std::is_same_v<decltype(msg), const Zstringc>, "no worries about copying as long as we're using a ref-counted string!"); for (auto it = msg.begin(); it != msg.end(); ) if (*it == '\n') { - msgFmt += '\n'; + msgFmt += *it++; msgFmt.append(prefixLen, ' '); - ++it; //skip duplicate newlines for (; it != msg.end() && *it == '\n'; ++it) ; diff --git a/zen/file_access.cpp b/zen/file_access.cpp index 2fbcf803..6a62f671 100644 --- a/zen/file_access.cpp +++ b/zen/file_access.cpp @@ -7,7 +7,6 @@ #include "file_access.h" #include <map> #include <algorithm> -#include <stdexcept> #include <chrono> #include "file_traverser.h" #include "scope_guard.h" @@ -17,7 +16,6 @@ #include "guid.h" #include <sys/vfs.h> //statfs - //#include <sys/time.h> //lutimes #ifdef HAVE_SELINUX #include <selinux/selinux.h> #endif diff --git a/zen/file_access.h b/zen/file_access.h index 691a8df9..17c47731 100644 --- a/zen/file_access.h +++ b/zen/file_access.h @@ -8,7 +8,7 @@ #define FILE_ACCESS_H_8017341345614857 #include <functional> -#include "zstring.h" +#include "file_path.h" #include "file_error.h" #include "serialize.h" //IoCallback #include <sys/stat.h> diff --git a/zen/file_error.h b/zen/file_error.h index b9ce9419..168ea806 100644 --- a/zen/file_error.h +++ b/zen/file_error.h @@ -7,7 +7,6 @@ #ifndef FILE_ERROR_H_839567308565656789 #define FILE_ERROR_H_839567308565656789 -#include "zstring.h" #include "sys_error.h" //we'll need this later anyway! diff --git a/zen/file_io.h b/zen/file_io.h index 3d1dfee7..f1e4200d 100644 --- a/zen/file_io.h +++ b/zen/file_io.h @@ -7,9 +7,8 @@ #ifndef FILE_IO_H_89578342758342572345 #define FILE_IO_H_89578342758342572345 -#include "file_error.h" #include "file_access.h" -#include "serialize.h" +//#include "serialize.h" #include "crc.h" #include "guid.h" diff --git a/zen/file_path.cpp b/zen/file_path.cpp index d846e804..926b5c89 100644 --- a/zen/file_path.cpp +++ b/zen/file_path.cpp @@ -13,18 +13,18 @@ std::optional<PathComponents> zen::parsePathComponents(const Zstring& itemPath) { auto doParse = [&](int sepCountVolumeRoot, bool rootWithSep) -> std::optional<PathComponents> { - const Zstring itemPathFmt = appendSeparator(itemPath); //simplify analysis of root without separator, e.g. \\server-name\share + const Zstring itemPathPf = appendSeparator(itemPath); //simplify analysis of root without separator, e.g. \\server-name\share int sepCount = 0; - for (auto it = itemPathFmt.begin(); it != itemPathFmt.end(); ++it) + for (auto it = itemPathPf.begin(); it != itemPathPf.end(); ++it) if (*it == FILE_NAME_SEPARATOR) if (++sepCount == sepCountVolumeRoot) { - Zstring rootPath(itemPathFmt.begin(), rootWithSep ? it + 1 : it); + Zstring rootPath(itemPathPf.begin(), rootWithSep ? it + 1 : it); - Zstring relPath(it + 1, itemPathFmt.end()); + Zstring relPath(it + 1, itemPathPf.end()); trim(relPath, true, true, [](Zchar c) { return c == FILE_NAME_SEPARATOR; }); - return PathComponents({rootPath, relPath}); + return PathComponents{std::move(rootPath), std::move(relPath)}; } return {}; }; @@ -62,18 +62,103 @@ std::optional<PathComponents> zen::parsePathComponents(const Zstring& itemPath) std::optional<Zstring> zen::getParentFolderPath(const Zstring& itemPath) { - if (const std::optional<PathComponents> comp = parsePathComponents(itemPath)) + if (const std::optional<PathComponents> pc = parsePathComponents(itemPath)) { - if (comp->relPath.empty()) + if (pc->relPath.empty()) return std::nullopt; - const Zstring parentRelPath = beforeLast(comp->relPath, FILE_NAME_SEPARATOR, IfNotFoundReturn::none); - if (parentRelPath.empty()) - return comp->rootPath; - return appendSeparator(comp->rootPath) + parentRelPath; + return appendPath(pc->rootPath, beforeLast(pc->relPath, FILE_NAME_SEPARATOR, IfNotFoundReturn::none)); } assert(false); return std::nullopt; } +Zstring zen::appendSeparator(Zstring path) //support rvalue references! +{ + if (!endsWith(path, FILE_NAME_SEPARATOR)) + path += FILE_NAME_SEPARATOR; + return path; //returning a by-value parameter => RVO if possible, r-value otherwise! +} + + +bool zen::isValidRelPath(const Zstring& relPath) +{ + //relPath is expected to use FILE_NAME_SEPARATOR! + if constexpr (FILE_NAME_SEPARATOR != Zstr('/' )) if (contains(relPath, Zstr('/' ))) return false; + if constexpr (FILE_NAME_SEPARATOR != Zstr('\\')) if (contains(relPath, Zstr('\\'))) return false; + + const Zchar doubleSep[] = {FILE_NAME_SEPARATOR, FILE_NAME_SEPARATOR, 0}; + return !startsWith(relPath, FILE_NAME_SEPARATOR)&& !endsWith(relPath, FILE_NAME_SEPARATOR)&& + !contains(relPath, doubleSep); +} + + +Zstring zen::appendPath(const Zstring& basePath, const Zstring& relPath) +{ + assert(isValidRelPath(relPath)); + if (relPath.empty()) + return basePath; //with or without path separator, e.g. C:\ or C:\folder + + if (basePath.empty()) //basePath might be a relative path, too! + return relPath; + + if (endsWith(basePath, FILE_NAME_SEPARATOR)) + return basePath + relPath; + + Zstring output = basePath; + output.reserve(basePath.size() + 1 + relPath.size()); //append all three strings using a single memory allocation + return std::move(output) + FILE_NAME_SEPARATOR + relPath; // +} + + +Zstring zen::getFileExtension(const Zstring& filePath) +{ + //const Zstring fileName = afterLast(filePath, FILE_NAME_SEPARATOR, IfNotFoundReturn::all); + //return afterLast(fileName, Zstr('.'), IfNotFoundReturn::none); + + auto it = zen::findLast(filePath.begin(), filePath.end(), FILE_NAME_SEPARATOR); + if (it == filePath.end()) + it = filePath.begin(); + else + ++it; + + auto it2 = zen::findLast(it, filePath.end(), Zstr('.')); + if (it2 != filePath.end()) + ++it2; + + return Zstring(it2, filePath.end()); +} + + +/* https://docs.microsoft.com/de-de/windows/desktop/Intl/handling-sorting-in-your-applications + + Perf test: compare strings 10 mio times; 64 bit build + ----------------------------------------------------- + string a = "Fjk84$%kgfj$%T\\\\Gffg\\gsdgf\\fgsx----------d-" + string b = "fjK84$%kgfj$%T\\\\gfFg\\gsdgf\\fgSy----------dfdf" + + Windows (UTF16 wchar_t) + 4 ns | wcscmp + 67 ns | CompareStringOrdinalFunc+ + bIgnoreCase + 314 ns | LCMapString + wmemcmp + + OS X (UTF8 char) + 6 ns | strcmp + 98 ns | strcasecmp + 120 ns | strncasecmp + std::min(sizeLhs, sizeRhs); + 856 ns | CFStringCreateWithCString + CFStringCompare(kCFCompareCaseInsensitive) + 1110 ns | CFStringCreateWithCStringNoCopy + CFStringCompare(kCFCompareCaseInsensitive) + ________________________ + time per call | function */ + +std::weak_ordering zen::compareNativePath(const Zstring& lhs, const Zstring& rhs) +{ + assert(lhs.find(Zchar('\0')) == Zstring::npos); //don't expect embedded nulls! + assert(rhs.find(Zchar('\0')) == Zstring::npos); // + + return lhs <=> rhs; + +} + + diff --git a/zen/file_path.h b/zen/file_path.h index e328fa8e..4a85514b 100644 --- a/zen/file_path.h +++ b/zen/file_path.h @@ -12,6 +12,8 @@ namespace zen { + const Zchar FILE_NAME_SEPARATOR = '/'; + struct PathComponents { Zstring rootPath; //itemPath = rootPath + (FILE_NAME_SEPARATOR?) + relPath @@ -21,6 +23,26 @@ std::optional<PathComponents> parsePathComponents(const Zstring& itemPath); //no std::optional<Zstring> getParentFolderPath(const Zstring& itemPath); +Zstring appendSeparator(Zstring path); //support rvalue references! + +bool isValidRelPath(const Zstring& relPath); + +Zstring appendPath(const Zstring& basePath, const Zstring& relPath); + +Zstring getFileExtension(const Zstring& filePath); + +//------------------------------------------------------------------------------------------ +/* Compare *local* file paths: + Windows: igore case (but distinguish Unicode normalization forms!) + Linux: byte-wise comparison + macOS: ignore case + Unicode normalization forms */ +std::weak_ordering compareNativePath(const Zstring& lhs, const Zstring& rhs); + +inline bool equalNativePath(const Zstring& lhs, const Zstring& rhs) { return compareNativePath(lhs, rhs) == std::weak_ordering::equivalent; } + +struct LessNativePath { bool operator()(const Zstring& lhs, const Zstring& rhs) const { return std::is_lt(compareNativePath(lhs, rhs)); } }; +//------------------------------------------------------------------------------------------ + } diff --git a/zen/file_traverser.cpp b/zen/file_traverser.cpp index 515580ae..ff588562 100644 --- a/zen/file_traverser.cpp +++ b/zen/file_traverser.cpp @@ -51,7 +51,7 @@ void zen::traverseFolder(const Zstring& dirPath, if (itemName.empty()) //checks result of normalizeUtfForPosix, too! throw FileError(replaceCpy(_("Cannot read directory %x."), L"%x", fmtPath(dirPath)), formatSystemError("readdir", L"", L"Folder contains an item without name.")); - const Zstring& itemPath = appendSeparator(dirPath) + itemName; + const Zstring& itemPath = appendPath(dirPath, itemName); struct stat statData = {}; try diff --git a/zen/file_traverser.h b/zen/file_traverser.h index e49219f9..cb7782d6 100644 --- a/zen/file_traverser.h +++ b/zen/file_traverser.h @@ -7,10 +7,8 @@ #ifndef FILER_TRAVERSER_H_127463214871234 #define FILER_TRAVERSER_H_127463214871234 -#include <cstdint> #include <functional> -#include "zstring.h" - +#include "file_path.h" namespace zen { diff --git a/zen/format_unit.cpp b/zen/format_unit.cpp index 6803523a..13280b68 100644 --- a/zen/format_unit.cpp +++ b/zen/format_unit.cpp @@ -7,7 +7,6 @@ #include "format_unit.h" #include <ctime> #include <cstdio> -#include <stdexcept> #include "basic_math.h" #include "sys_error.h" #include "i18n.h" diff --git a/zen/format_unit.h b/zen/format_unit.h index 72a5e91b..d1ebc28c 100644 --- a/zen/format_unit.h +++ b/zen/format_unit.h @@ -8,8 +8,9 @@ #define FMT_UNIT_8702184019487324 #include <string> -#include <cstdint> -#include "string_tools.h" +#include <optional> +//#include <cstdint> +//#include "string_tools.h" namespace zen diff --git a/zen/http.cpp b/zen/http.cpp index 4fe43ede..a26bb3a5 100644 --- a/zen/http.cpp +++ b/zen/http.cpp @@ -47,7 +47,7 @@ public: throw SysError(L"URL uses unexpected protocol."); }(); - std::map<std::string, std::string, LessAsciiNoCase> headers; + std::unordered_map<std::string, std::string, StringHashAsciiNoCase, StringEqualAsciiNoCase> headers; assert(postBuf || contentType.empty()); if (postBuf && !contentType.empty()) @@ -196,7 +196,7 @@ private: InterruptibleThread worker_; int64_t totalBytesReported_ = 0; int statusCode_ = 0; - std::map<std::string, std::string, LessAsciiNoCase> responseHeaders_; + std::unordered_map<std::string, std::string, StringHashAsciiNoCase, StringEqualAsciiNoCase> responseHeaders_; const IoCallback notifyUnbufferedIO_; //throw X }; @@ -7,9 +7,8 @@ #ifndef HTTP_H_879083425703425702 #define HTTP_H_879083425703425702 -#include <zen/zstring.h> -#include <zen/sys_error.h> -#include <zen/serialize.h> +#include "sys_error.h" +#include "serialize.h" namespace zen { @@ -7,8 +7,8 @@ #ifndef I18_N_H_3843489325044253425456 #define I18_N_H_3843489325044253425456 -#include <string> -#include <cstdint> +//#include <string> +//#include <cstdint> #include "globals.h" #include "string_tools.h" #include "format_unit.h" @@ -40,9 +40,9 @@ struct JsonValue Type type = Type::null; - std::string primVal; //for primitive types - std::map<std::string, JsonValue> objectVal; //"[...] most implementations of JSON libraries do not accept duplicate keys [...]" => fine! - std::vector<JsonValue> arrayVal; + std::string primVal; //for primitive types + std::unordered_map<std::string, JsonValue> objectVal; //"[...] most implementations of JSON libraries do not accept duplicate keys [...]" => fine! + std::vector<JsonValue> arrayVal; }; @@ -303,26 +303,26 @@ std::string serializeJson(const JsonValue& jval, namespace json_impl { -struct Token +enum class TokenType { - enum class Type - { - eof, - curlyOpen, - curlyClose, - squareOpen, - squareClose, - colon, - comma, - string, // - number, //primitive types - boolean, // - null, // - }; + eof, + curlyOpen, + curlyClose, + squareOpen, + squareClose, + colon, + comma, + string, // + number, //primitive types + boolean, // + null, // +}; - Token(Type t) : type(t) {} +struct Token +{ + Token(TokenType t) : type(t) {} - Type type; + TokenType type; std::string primVal; //for primitive types }; @@ -341,27 +341,27 @@ public: pos_ = std::find_if_not(pos_, stream_.end(), isJsonWhiteSpace); if (pos_ == stream_.end()) - return Token::Type::eof; + return TokenType::eof; - if (*pos_ == '{') return ++pos_, Token::Type::curlyOpen; - if (*pos_ == '}') return ++pos_, Token::Type::curlyClose; - if (*pos_ == '[') return ++pos_, Token::Type::squareOpen; - if (*pos_ == ']') return ++pos_, Token::Type::squareClose; - if (*pos_ == ':') return ++pos_, Token::Type::colon; - if (*pos_ == ',') return ++pos_, Token::Type::comma; - if (startsWith("null")) return pos_ += 4, Token(Token::Type::null); + if (*pos_ == '{') return ++pos_, TokenType::curlyOpen; + if (*pos_ == '}') return ++pos_, TokenType::curlyClose; + if (*pos_ == '[') return ++pos_, TokenType::squareOpen; + if (*pos_ == ']') return ++pos_, TokenType::squareClose; + if (*pos_ == ':') return ++pos_, TokenType::colon; + if (*pos_ == ',') return ++pos_, TokenType::comma; + if (startsWith("null")) return pos_ += 4, Token(TokenType::null); if (startsWith("true")) { pos_ += 4; - Token tk(Token::Type::boolean); + Token tk(TokenType::boolean); tk.primVal = "true"; return tk; } if (startsWith("false")) { pos_ += 5; - Token tk(Token::Type::boolean); + Token tk(TokenType::boolean); tk.primVal = "false"; return tk; } @@ -371,7 +371,7 @@ public: for (auto it = ++pos_; it != stream_.end(); ++it) if (*it == '"') { - Token tk(Token::Type::string); + Token tk(TokenType::string); tk.primVal = jsonUnescape({pos_, it}); pos_ = ++it; return tk; @@ -388,7 +388,7 @@ public: if (itNumEnd == pos_) throw JsonParsingError(posRow(), posCol()); - Token tk(Token::Type::number); + Token tk(TokenType::number); tk.primVal.assign(pos_, itNumEnd); pos_ = itNumEnd; return tk; @@ -441,7 +441,7 @@ public: JsonValue parse() //throw JsonParsingError { JsonValue jval = parseValue(); //throw JsonParsingError - expectToken(Token::Type::eof); // + expectToken(TokenType::eof); // return jval; } @@ -451,73 +451,73 @@ private: JsonValue parseValue() //throw JsonParsingError { - if (token().type == Token::Type::curlyOpen) + if (token().type == TokenType::curlyOpen) { nextToken(); //throw JsonParsingError JsonValue jval(JsonValue::Type::object); - if (token().type != Token::Type::curlyClose) + if (token().type != TokenType::curlyClose) for (;;) { - expectToken(Token::Type::string); //throw JsonParsingError + expectToken(TokenType::string); //throw JsonParsingError std::string name = token().primVal; nextToken(); //throw JsonParsingError - consumeToken(Token::Type::colon); //throw JsonParsingError + consumeToken(TokenType::colon); //throw JsonParsingError JsonValue value = parseValue(); //throw JsonParsingError jval.objectVal.emplace(std::move(name), std::move(value)); - if (token().type != Token::Type::comma) + if (token().type != TokenType::comma) break; nextToken(); //throw JsonParsingError } - consumeToken(Token::Type::curlyClose); //throw JsonParsingError + consumeToken(TokenType::curlyClose); //throw JsonParsingError return jval; } - else if (token().type == Token::Type::squareOpen) + else if (token().type == TokenType::squareOpen) { nextToken(); //throw JsonParsingError JsonValue jval(JsonValue::Type::array); - if (token().type != Token::Type::squareClose) + if (token().type != TokenType::squareClose) for (;;) { JsonValue value = parseValue(); //throw JsonParsingError jval.arrayVal.emplace_back(std::move(value)); - if (token().type != Token::Type::comma) + if (token().type != TokenType::comma) break; nextToken(); //throw JsonParsingError } - consumeToken(Token::Type::squareClose); //throw JsonParsingError + consumeToken(TokenType::squareClose); //throw JsonParsingError return jval; } - else if (token().type == Token::Type::string) + else if (token().type == TokenType::string) { JsonValue jval(token().primVal); nextToken(); //throw JsonParsingError return jval; } - else if (token().type == Token::Type::number) + else if (token().type == TokenType::number) { JsonValue jval(JsonValue::Type::number); jval.primVal = token().primVal; nextToken(); //throw JsonParsingError return jval; } - else if (token().type == Token::Type::boolean) + else if (token().type == TokenType::boolean) { JsonValue jval(JsonValue::Type::boolean); jval.primVal = token().primVal; nextToken(); //throw JsonParsingError return jval; } - else if (token().type == Token::Type::null) + else if (token().type == TokenType::null) { nextToken(); //throw JsonParsingError return JsonValue(); @@ -530,13 +530,13 @@ private: void nextToken() { tk_ = scn_.getNextToken(); } //throw JsonParsingError - void expectToken(Token::Type t) //throw JsonParsingError + void expectToken(TokenType t) //throw JsonParsingError { if (token().type != t) throw JsonParsingError(scn_.posRow(), scn_.posCol()); } - void consumeToken(Token::Type t) //throw JsonParsingError + void consumeToken(TokenType t) //throw JsonParsingError { expectToken(t); //throw JsonParsingError nextToken(); // diff --git a/zen/open_ssl.cpp b/zen/open_ssl.cpp index 99d7582e..6dc13d3d 100644 --- a/zen/open_ssl.cpp +++ b/zen/open_ssl.cpp @@ -419,15 +419,13 @@ std::string zen::convertPuttyKeyToPkix(const std::string& keyStream, const std:: { std::vector<std::string> lines; - for (auto it = keyStream.begin();;) //=> keep local: "warning: declaration of ‘it’ shadows a previous local" + split2(keyStream, isLineBreak<char>, + [&lines](const char* blockFirst, const char* blockLast) { - auto itLineBegin = std::find_if_not(it, keyStream.end(), isLineBreak<char>); - if (itLineBegin == keyStream.end()) - break; + if (blockFirst != blockLast) //consider Windows' <CR><LF> + lines.emplace_back(blockFirst, blockLast); + }); - it = std::find_if(itLineBegin + 1, keyStream.end(), isLineBreak<char>); - lines.emplace_back(itLineBegin, it); - } //----------- parse PuTTY ppk structure ---------------------------------- auto itLine = lines.begin(); if (itLine == lines.end() || !startsWith(*itLine, "PuTTY-User-Key-File-2: ")) diff --git a/zen/open_ssl.h b/zen/open_ssl.h index d1b823de..c66ad9c0 100644 --- a/zen/open_ssl.h +++ b/zen/open_ssl.h @@ -7,8 +7,7 @@ #ifndef OPEN_SSL_H_801974580936508934568792347506 #define OPEN_SSL_H_801974580936508934568792347506 -#include <zen/zstring.h> -#include <zen/sys_error.h> +#include "sys_error.h" namespace zen diff --git a/zen/process_exec.cpp b/zen/process_exec.cpp index 0c5789d5..6b670508 100644 --- a/zen/process_exec.cpp +++ b/zen/process_exec.cpp @@ -44,8 +44,8 @@ namespace std::pair<int /*exit code*/, std::string> processExecuteImpl(const Zstring& filePath, const std::vector<Zstring>& arguments, std::optional<int> timeoutMs) //throw SysError, SysErrorTimeOut { - const Zstring tempFilePath = appendSeparator(getTempFolderPath()) + //throw FileError - Zstr("FFS-") + utfTo<Zstring>(formatAsHexString(generateGUID())); + const Zstring tempFilePath = appendPath(getTempFolderPath(), //throw FileError + Zstr("FFS-") + utfTo<Zstring>(formatAsHexString(generateGUID()))); /* can't use popen(): does NOT return the exit code on Linux (despite the documentation!), although it works correctly on macOS => use pipes instead: https://linux.die.net/man/2/waitpid bonus: no need for "2>&1" to redirect STDERR to STDOUT diff --git a/zen/resolve_path.cpp b/zen/resolve_path.cpp index f0a49976..2b1a82d3 100644 --- a/zen/resolve_path.cpp +++ b/zen/resolve_path.cpp @@ -8,7 +8,6 @@ #include "time.h" #include "thread.h" #include "file_access.h" -#include "file_path.h" #include <stdlib.h> //getenv() #include <unistd.h> //getcwd() @@ -18,11 +17,11 @@ using namespace zen; namespace { -std::optional<Zstring> getEnvironmentVar(const Zstring& name) +std::optional<Zstring> getEnvironmentVar(const Zchar* name) { assert(runningOnMainThread()); //getenv() is not thread-safe! - const char* buffer = ::getenv(name.c_str()); //no extended error reporting + const char* buffer = ::getenv(name); //no extended error reporting if (!buffer) return {}; Zstring value(buffer); @@ -69,7 +68,7 @@ Zstring resolveRelativePath(const Zstring& relativePath) if (const std::optional<Zstring> homeDir = getEnvironmentVar("HOME")) { if (startsWith(pathTmp, "~/")) - pathTmp = appendSeparator(*homeDir) + afterFirst(pathTmp, '/', IfNotFoundReturn::none); + pathTmp = appendPath(*homeDir, pathTmp.c_str() + 2); else //pathTmp == "~" pathTmp = *homeDir; } @@ -81,7 +80,7 @@ Zstring resolveRelativePath(const Zstring& relativePath) if (char* dirPath = ::getcwd(nullptr, 0)) { ZEN_ON_SCOPE_EXIT(::free(dirPath)); - pathTmp = appendSeparator(dirPath) + pathTmp; + pathTmp = appendPath(dirPath, pathTmp); } } } @@ -142,7 +141,7 @@ std::optional<Zstring> tryResolveMacro(const Zstring& macro) //macro without %-c } //try to resolve as environment variables - if (std::optional<Zstring> value = getEnvironmentVar(macro)) + if (std::optional<Zstring> value = getEnvironmentVar(macro.c_str())) return *value; return {}; @@ -190,57 +189,45 @@ Zstring expandVolumeName(Zstring pathPhrase) // [volname]:\folder [volname]\ } return pathPhrase; } +} -void getFolderAliasesRecursive(const Zstring& pathPhrase, std::set<Zstring, LessNativePath>& output) +std::vector<Zstring> zen::getPathPhraseAliases(const Zstring& itemPath) { + assert(!itemPath.empty()); + std::vector<Zstring> pathAliases{makePathPhrase(itemPath)}; - //3. environment variables: C:\Users\<user> -> %UserProfile% { - std::vector<std::pair<Zstring, Zstring>> macroList; - //get list of useful variables - auto addEnvVar = [&](const Zstring& envName) - { - if (std::optional<Zstring> value = getEnvironmentVar(envName)) - macroList.emplace_back(envName, *value); - }; - addEnvVar("HOME"); //Linux: /home/<user> Mac: /Users/<user> - //addEnvVar("USER"); -> any benefit? - //substitute paths by symbolic names - for (const auto& [macroName, macroPath] : macroList) + //environment variables: C:\Users\<user> -> %UserProfile% + auto substByMacro = [&](const Zchar* macroName, const Zstring& macroPath) { //should use a replaceCpy() that considers "local path" case-sensitivity (if only we had one...) - const Zstring pathSubst = replaceCpyAsciiNoCase(pathPhrase, macroPath, MACRO_SEP + macroName + MACRO_SEP); - if (pathSubst != pathPhrase) - output.insert(pathSubst); - } - } + if (contains(itemPath, macroPath)) + pathAliases.push_back(makePathPhrase(replaceCpyAsciiNoCase(itemPath, macroPath, MACRO_SEP + Zstring(macroName) + MACRO_SEP))); + }; + + for (const Zchar* envName : + { + "HOME", //Linux: /home/<user> Mac: /Users/<user> + //"USER", -> any benefit? + }) + if (const std::optional<Zstring> envPath = getEnvironmentVar(envName)) + substByMacro(envName, *envPath); - //4. replace (all) macros: %UserProfile% -> C:\Users\<user> - { - const Zstring pathExp = expandMacros(pathPhrase); - if (pathExp != pathPhrase) - if (output.insert(pathExp).second) - getFolderAliasesRecursive(pathExp, output); //recurse! } -} + //removeDuplicates()? should not be needed... + + std::sort(pathAliases.begin(), pathAliases.end(), LessNaturalSort() /*even on Linux*/); + return pathAliases; } -std::vector<Zstring> zen::getFolderPathAliases(const Zstring& folderPathPhrase) +Zstring zen::makePathPhrase(const Zstring& itemPath) { - const Zstring dirPath = trimCpy(folderPathPhrase); - if (dirPath.empty()) - return {}; - - std::set<Zstring, LessNativePath> tmp; - getFolderAliasesRecursive(dirPath, tmp); - - tmp.erase(dirPath); - tmp.erase(Zstring()); - - return {tmp.begin(), tmp.end()}; + if (endsWith(itemPath, Zstr(' '))) //path phrase concept must survive trimming! + return itemPath + FILE_NAME_SEPARATOR; + return itemPath; } @@ -254,26 +241,22 @@ Zstring zen::getResolvedFilePath(const Zstring& pathPhrase) //noexcept //remove leading/trailing whitespace before allowing misinterpretation in applyLongPathPrefix() trim(path); //attention: don't remove all whitespace from right, e.g. 0xa0 may be used as part of a folder name - - path = expandVolumeName(path); //may block for slow USB sticks and idle HDDs! - - /* need to resolve relative paths: - WINDOWS: - - \\?\-prefix requires absolute names - - Volume Shadow Copy: volume name needs to be part of each file path - - file icon buffer (at least for extensions that are actually read from disk, like "exe") - WINDOWS/LINUX: - - detection of dependent directories, e.g. "\" and "C:\test" */ - path = resolveRelativePath(path); + { + path = expandVolumeName(path); //may block for slow USB sticks and idle HDDs! + + /* need to resolve relative paths: + WINDOWS: + - \\?\-prefix requires absolute names + - Volume Shadow Copy: volume name needs to be part of each file path + - file icon buffer (at least for extensions that are actually read from disk, like "exe") + WINDOWS/LINUX: + - detection of dependent directories, e.g. "\" and "C:\test" */ + path = resolveRelativePath(path); + } //remove trailing slash, unless volume root: - if (std::optional<PathComponents> pc = parsePathComponents(path)) - { - if (pc->relPath.empty()) - path = pc->rootPath; - else - path = appendSeparator(pc->rootPath) + pc->relPath; - } //keep this brace for GCC: -Wparentheses + if (const std::optional<PathComponents> pc = parsePathComponents(path)) + path = appendPath(pc->rootPath, pc->relPath); return path; } diff --git a/zen/resolve_path.h b/zen/resolve_path.h index 4a5fc8fe..bfef087b 100644 --- a/zen/resolve_path.h +++ b/zen/resolve_path.h @@ -7,8 +7,7 @@ #ifndef RESOLVE_PATH_H_817402834713454 #define RESOLVE_PATH_H_817402834713454 -#include <vector> -#include "zstring.h" +#include "file_error.h" namespace zen @@ -24,7 +23,8 @@ Zstring getResolvedFilePath(const Zstring& pathPhrase); //noexcept //macro substitution only Zstring expandMacros(const Zstring& text); -std::vector<Zstring> getFolderPathAliases(const Zstring& folderPathPhrase); //may block for slow USB sticks when resolving [<volume name>] +std::vector<Zstring> getPathPhraseAliases(const Zstring& itemPath); +Zstring makePathPhrase(const Zstring& itemPath); } diff --git a/zen/scope_guard.h b/zen/scope_guard.h index 61422eb4..1e4165be 100644 --- a/zen/scope_guard.h +++ b/zen/scope_guard.h @@ -8,7 +8,7 @@ #define SCOPE_GUARD_H_8971632487321434 #include <cassert> -#include <exception> +//#include <exception> #include "type_traits.h" #include "legacy_compiler.h" //std::uncaught_exceptions @@ -91,7 +91,7 @@ private: ScopeGuard (const ScopeGuard&) = delete; ScopeGuard& operator=(const ScopeGuard&) = delete; - F fun_; + const F fun_; const int exeptionCount_ = std::uncaught_exceptions(); bool dismissed_ = false; }; diff --git a/zen/serialize.h b/zen/serialize.h index f9677630..b2561808 100644 --- a/zen/serialize.h +++ b/zen/serialize.h @@ -8,9 +8,9 @@ #define SERIALIZE_H_839405783574356 #include <functional> -#include <cstdint> -#include <stdexcept> -#include "string_base.h" +//#include <cstdint> +//#include <stdexcept> +//#include "string_base.h" #include "sys_error.h" //keep header clean from specific stream implementations! (e.g.file_io.h)! used by abstract.h! @@ -206,7 +206,7 @@ void writeArray(BufferedOutputStream& stream, const void* buffer, size_t len) template <class N, class BufferedOutputStream> inline void writeNumber(BufferedOutputStream& stream, const N& num) { - static_assert(IsArithmeticV<N> || std::is_same_v<N, bool> || std::is_enum_v<N>); + static_assert(isArithmetic<N> || std::is_same_v<N, bool> || std::is_enum_v<N>); writeArray(stream, &num, sizeof(N)); } @@ -234,7 +234,7 @@ void readArray(BufferedInputStream& stream, void* buffer, size_t len) //throw Sy template <class N, class BufferedInputStream> inline N readNumber(BufferedInputStream& stream) //throw SysErrorUnexpectedEos { - static_assert(IsArithmeticV<N> || std::is_same_v<N, bool> || std::is_enum_v<N>); + static_assert(isArithmetic<N> || std::is_same_v<N, bool> || std::is_enum_v<N>); N num{}; readArray(stream, &num, sizeof(N)); //throw SysErrorUnexpectedEos return num; diff --git a/zen/shutdown.cpp b/zen/shutdown.cpp index a812d6ae..e64e1e70 100644 --- a/zen/shutdown.cpp +++ b/zen/shutdown.cpp @@ -16,9 +16,9 @@ using namespace zen; void zen::shutdownSystem() //throw FileError { - assert(runningOnMainThread()); - if (runningOnMainThread()) - onSystemShutdownRunTasks(); + assert(runningOnMainThread()); + if (runningOnMainThread()) + onSystemShutdownRunTasks(); try { //https://linux.die.net/man/2/reboot => needs admin rights! diff --git a/zen/socket.h b/zen/socket.h index f9813852..5ece29f8 100644 --- a/zen/socket.h +++ b/zen/socket.h @@ -7,7 +7,6 @@ #ifndef SOCKET_H_23498325972583947678456437 #define SOCKET_H_23498325972583947678456437 -#include <zen/zstring.h> #include "sys_error.h" #include <unistd.h> //close #include <sys/socket.h> diff --git a/zen/stl_tools.h b/zen/stl_tools.h index 0d359641..9f7977db 100644 --- a/zen/stl_tools.h +++ b/zen/stl_tools.h @@ -10,16 +10,28 @@ #include <set> #include <map> #include <vector> +#include <unordered_set> +#include <unordered_map> #include <memory> #include <cassert> #include <algorithm> #include <optional> -#include "string_traits.h" +#include "type_traits.h" //enhancements for <algorithm> namespace zen { +//unfortunately std::erase_if is useless garbage on GCC 12 (requires non-modifying predicate) +template <class T, class Alloc, class Predicate> +void eraseIf(std::vector<T, Alloc>& v, Predicate p); + +template <class T, class LessType, class Alloc, class Predicate> +void eraseIf(std::set<T, LessType, Alloc>& s, Predicate p); + +template <class KeyType, class ValueType, class LessType, class Alloc, class Predicate> +void eraseIf(std::map<KeyType, ValueType, LessType, Alloc>& m, Predicate p); + //append STL containers template <class T, class Alloc, class C> void append(std::vector<T, Alloc>& v, const C& c); @@ -104,6 +116,44 @@ SharedRef<T> makeSharedRef(Args&& ... args) { return SharedRef<T>(std::make_shar //######################## implementation ######################## + +template <class T, class Alloc, class Predicate> inline +void eraseIf(std::vector<T, Alloc>& v, Predicate p) +{ + v.erase(std::remove_if(v.begin(), v.end(), p), v.end()); +} + + +namespace impl +{ +template <class S, class Predicate> inline +void setOrMapEraseIf(S& s, Predicate p) +{ + for (auto it = s.begin(); it != s.end();) + if (p(*it)) + s.erase(it++); + else + ++it; +} +} + + +template <class T, class LessType, class Alloc, class Predicate> inline +void eraseIf(std::set<T, LessType, Alloc>& s, Predicate p) { impl::setOrMapEraseIf(s, p); } //don't make this any more generic! e.g. must not compile for std::vector!!! + + +template <class KeyType, class ValueType, class LessType, class Alloc, class Predicate> inline +void eraseIf(std::map<KeyType, ValueType, LessType, Alloc>& m, Predicate p) { impl::setOrMapEraseIf(m, p); } + + +template <class T, class Hash, class Keyeq, class Alloc, class Predicate> inline +void eraseIf(std::unordered_set<T, Hash, Keyeq, Alloc>& s, Predicate p) { impl::setOrMapEraseIf(s, p); } + + +template <class KeyType, class ValueType, class Hash, class Keyeq, class Alloc, class Predicate> inline +void eraseIf(std::unordered_map<KeyType, ValueType, Hash, Keyeq, Alloc>& m, Predicate p) { impl::setOrMapEraseIf(m, p); } + + template <class T, class Alloc, class C> inline void append(std::vector<T, Alloc>& v, const C& c) { v.insert(v.end(), c.begin(), c.end()); } @@ -249,9 +299,8 @@ void mergeTraversal(Iterator first1, Iterator last1, } -//FNV-1a: https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function template <class Num> -class FNV1aHash +class FNV1aHash //FNV-1a: https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function { public: FNV1aHash() {} @@ -266,50 +315,13 @@ public: Num get() const { return hashVal_; } private: - static_assert(IsUnsignedIntV<Num>); + static_assert(isUnsignedInt<Num>); static_assert(sizeof(Num) == 4 || sizeof(Num) == 8); static constexpr Num base_ = sizeof(Num) == 4 ? 2166136261U : 14695981039346656037ULL; static constexpr Num prime_ = sizeof(Num) == 4 ? 16777619U : 1099511628211ULL; Num hashVal_ = base_; }; - - -template <class Num, class ByteIterator> inline -Num hashArray(ByteIterator first, ByteIterator last) -{ - using ValType = typename std::iterator_traits<ByteIterator>::value_type; - static_assert(sizeof(ValType) <= sizeof(Num)); - static_assert(IsIntegerV<ValType> || std::is_same_v<ValType, char> || std::is_same_v<ValType, wchar_t>); - - FNV1aHash<Num> hash; - std::for_each(first, last, [&hash](ValType v) { hash.add(v); }); - return hash.get(); -} - - -struct StringHash //support for custom string classes with std::unordered_set/map -{ - using is_transparent = int; //allow heterogenous lookup! - - template <class String> - size_t operator()(const String& str) const - { - const auto* const strFirst = strBegin(str); - return hashArray<size_t>(strFirst, strFirst + strLength(str)); - } -}; - -struct StringEqual -{ - using is_transparent = int; //allow heterogenous lookup! - - template <class String1, class String2> - bool operator()(const String1& lhs, const String2& rhs) const - { - return equalString(lhs, rhs); - } -}; } #endif //STL_TOOLS_H_84567184321434 diff --git a/zen/string_base.h b/zen/string_base.h index 693ce118..ace870b9 100644 --- a/zen/string_base.h +++ b/zen/string_base.h @@ -7,8 +7,8 @@ #ifndef STRING_BASE_H_083217454562342526 #define STRING_BASE_H_083217454562342526 -#include <algorithm> #include <atomic> +#include <utility> //std::exchange #include "string_tools.h" @@ -377,8 +377,8 @@ Zbase<Char, SP>::Zbase(const Zbase<Char, SP>& str) template <class Char, template <class> class SP> inline Zbase<Char, SP>::Zbase(Zbase<Char, SP>&& tmp) noexcept { - rawStr_ = tmp.rawStr_; - tmp.rawStr_ = nullptr; //usually nullptr would violate the class invarants, but it is good enough for the destructor! + rawStr_ = std::exchange(tmp.rawStr_, nullptr); + //usually nullptr would violate the class invarants, but it is good enough for the destructor! //caveat: do not increment ref-count of an unshared string! We'd lose optimization opportunity of reusing its memory! } @@ -637,8 +637,8 @@ Zbase<Char, SP>& Zbase<Char, SP>::operator=(Zbase<Char, SP>&& tmp) noexcept { //don't use swap() but end rawStr_ life time immediately this->destroy(rawStr_); - rawStr_ = tmp.rawStr_; - tmp.rawStr_ = nullptr; + + rawStr_ = std::exchange(tmp.rawStr_, nullptr); return *this; } @@ -653,4 +653,12 @@ void Zbase<Char, SP>::pop_back() } } + +//std::hash specialization in global namespace +template <class Char, template <class> class SP> +struct std::hash<zen::Zbase<Char, SP>> +{ + size_t operator()(const zen::Zbase<Char, SP>& str) const { return zen::hashString<size_t>(str); } +}; + #endif //STRING_BASE_H_083217454562342526 diff --git a/zen/string_tools.h b/zen/string_tools.h index ee4e5613..d3f35ce8 100644 --- a/zen/string_tools.h +++ b/zen/string_tools.h @@ -11,9 +11,6 @@ #include <cwctype> //iswspace #include <cstdio> //sprintf #include <cwchar> //swprintf -#include <algorithm> -#include <cassert> -#include <vector> #include "stl_tools.h" #include "string_traits.h" #include "legacy_compiler.h" //<charconv> but without the compiler crashes :> @@ -33,25 +30,30 @@ template <class Char> Char asciiToLower(Char c); template <class Char> Char asciiToUpper(Char c); //both S and T can be strings or char/wchar_t arrays or single char/wchar_t -template <class S, class T, typename = std::enable_if_t<IsStringLikeV<S>>> bool contains(const S& str, const T& term); +template <class S, class T, typename = std::enable_if_t<isStringLike<S>/*Astyle hates tripe >*/ >> bool contains(const S& str, const T& term); - template <class S, class T> bool startsWith (const S& str, const T& prefix); - template <class S, class T> bool startsWithAsciiNoCase(const S& str, const T& prefix); +template <class S, class T> bool startsWith (const S& str, const T& prefix); +template <class S, class T> bool startsWithAsciiNoCase(const S& str, const T& prefix); - template <class S, class T> bool endsWith (const S& str, const T& postfix); - template <class S, class T> bool endsWithAsciiNoCase(const S& str, const T& postfix); +template <class S, class T> bool endsWith (const S& str, const T& postfix); +template <class S, class T> bool endsWithAsciiNoCase(const S& str, const T& postfix); - template <class S, class T> bool equalString (const S& lhs, const T& rhs); - template <class S, class T> bool equalAsciiNoCase(const S& lhs, const T& rhs); +template <class S, class T> bool equalString (const S& lhs, const T& rhs); +template <class S, class T> bool equalAsciiNoCase(const S& lhs, const T& rhs); - // template <class S, class T> std::strong_ordering compareString (const S& lhs, const T& rhs); - template <class S, class T> std::weak_ordering compareAsciiNoCase(const S& lhs, const T& rhs); //basic case-insensitive comparison (considering A-Z only!) +//template <class S, class T> std::strong_ordering compareString(const S& lhs, const T& rhs); +template <class S, class T> std::weak_ordering compareAsciiNoCase(const S& lhs, const T& rhs); //basic case-insensitive comparison (considering A-Z only!) - struct LessAsciiNoCase //STL container predicate -{ - template <class S> bool operator()(const S& lhs, const S& rhs) const { return std::is_lt(compareAsciiNoCase(lhs, rhs)); } -}; +//STL container predicates for std::map, std::unordered_set/map +struct StringHash; +struct StringEqual; + +struct LessAsciiNoCase; +struct StringHashAsciiNoCase; +struct StringEqualAsciiNoCase; +template <class Num, class S> Num hashString(const S& str); +template <class Num, class S> Num appendHashString(Num hashVal, const S& str); enum class IfNotFoundReturn { @@ -77,8 +79,11 @@ template <class S> void trim (S& str, bool fromLeft = true, bo template <class S, class Function> void trim(S& str, bool fromLeft, bool fromRight, Function trimThisChar); -template <class S, class T, class U> [[nodiscard]] S replaceCpy(S str, const T& oldTerm, const U& newTerm, bool replaceAll = true); -template <class S, class T, class U> void replace (S& str, const T& oldTerm, const U& newTerm, bool replaceAll = true); +template <class S, class T, class U> [[nodiscard]] S replaceCpy(S str, const T& oldTerm, const U& newTerm); +template <class S, class T, class U> void replace (S& str, const T& oldTerm, const U& newTerm); + +template <class S, class T, class U> [[nodiscard]] S replaceCpyAsciiNoCase(S str, const T& oldTerm, const U& newTerm); +template <class S, class T, class U> void replaceAsciiNoCase (S& str, const T& oldTerm, const U& newTerm); //high-performance conversion between numbers and strings template <class S, class Num> S numberTo(const Num& number); @@ -173,25 +178,28 @@ template <class Char> inline Char asciiToLower(Char c) { if (static_cast<Char>('A') <= c && c <= static_cast<Char>('Z')) - return static_cast<Char>(c - static_cast<Char>('A') + static_cast<Char>('a')); - return c; + return static_cast<Char>(c - static_cast<Char>('A') + static_cast<Char>('a')); + return c; } - template <class Char> inline - Char asciiToUpper(Char c) +template <class Char> inline +Char asciiToUpper(Char c) { if (static_cast<Char>('a') <= c && c <= static_cast<Char>('z')) - return static_cast<Char>(c - static_cast<Char>('a') + static_cast<Char>('A')); - return c; + return static_cast<Char>(c - static_cast<Char>('a') + static_cast<Char>('A')); + return c; } - namespace impl +namespace impl { -//support embedded 0, unlike strncmp/wcsncmp: -inline std::strong_ordering strcmpWithNulls(const char* ptr1, const char* ptr2, size_t num) { return std:: memcmp(ptr1, ptr2, num) <=> 0; } -inline std::strong_ordering strcmpWithNulls(const wchar_t* ptr1, const wchar_t* ptr2, size_t num) { return std::wmemcmp(ptr1, ptr2, num) <=> 0; } +template <class Char> inline +bool equalSubstring(const Char* lhs, const Char* rhs, size_t len) +{ + //support embedded 0, unlike strncmp/wcsncmp: + return std::equal(lhs, lhs + len, rhs); +} template <class Char1, class Char2> inline @@ -213,13 +221,14 @@ template <class S, class T> inline bool startsWith(const S& str, const T& prefix) { const size_t pfLen = strLength(prefix); - return strLength(str) >= pfLen && impl::strcmpWithNulls(strBegin(str), strBegin(prefix), pfLen) == std::strong_ordering::equal; + return strLength(str) >= pfLen && impl::equalSubstring(strBegin(str), strBegin(prefix), pfLen); } template <class S, class T> inline bool startsWithAsciiNoCase(const S& str, const T& prefix) { + assert(isAsciiString(str) || isAsciiString(prefix)); const size_t pfLen = strLength(prefix); return strLength(str) >= pfLen && impl::strcmpAsciiNoCase(strBegin(str), strBegin(prefix), pfLen) == std::weak_ordering::equivalent; } @@ -230,7 +239,7 @@ bool endsWith(const S& str, const T& postfix) { const size_t strLen = strLength(str); const size_t pfLen = strLength(postfix); - return strLen >= pfLen && impl::strcmpWithNulls(strBegin(str) + strLen - pfLen, strBegin(postfix), pfLen) == std::strong_ordering::equal; + return strLen >= pfLen && impl::equalSubstring(strBegin(str) + strLen - pfLen, strBegin(postfix), pfLen); } @@ -247,19 +256,24 @@ template <class S, class T> inline bool equalString(const S& lhs, const T& rhs) { const size_t lhsLen = strLength(lhs); - return lhsLen == strLength(rhs) && impl::strcmpWithNulls(strBegin(lhs), strBegin(rhs), lhsLen) == std::strong_ordering::equal; + return lhsLen == strLength(rhs) && impl::equalSubstring(strBegin(lhs), strBegin(rhs), lhsLen); } template <class S, class T> inline bool equalAsciiNoCase(const S& lhs, const T& rhs) { + assert(isAsciiString(lhs) || isAsciiString(rhs)); const size_t lhsLen = strLength(lhs); return lhsLen == strLength(rhs) && impl::strcmpAsciiNoCase(strBegin(lhs), strBegin(rhs), lhsLen) == std::weak_ordering::equivalent; } #if 0 +//support embedded 0, unlike strncmp/wcsncmp: +inline std::strong_ordering strcmpWithNulls(const char* ptr1, const char* ptr2, size_t num) { return std:: memcmp(ptr1, ptr2, num) <=> 0; } +inline std::strong_ordering strcmpWithNulls(const wchar_t* ptr1, const wchar_t* ptr2, size_t num) { return std::wmemcmp(ptr1, ptr2, num) <=> 0; } + template <class S, class T> inline std::strong_ordering compareString(const S& lhs, const T& rhs) { @@ -427,29 +441,22 @@ namespace impl ZEN_INIT_DETECT_MEMBER(append) //either call operator+=(S(str, len)) or append(str, len) -template <class S, class InputIterator, typename = std::enable_if_t<HasMemberV_append<S>>> inline +template <class S, class InputIterator, typename = std::enable_if_t<hasMember_append<S>>> inline void stringAppend(S& str, InputIterator first, InputIterator last) { str.append(first, last); } //inefficient append: keep disabled until really needed -//template <class S, class InputIterator, typename = std::enable_if_t<!HasMemberV_append<S>>> inline +//template <class S, class InputIterator, typename = std::enable_if_t<!hasMember_append<S>>> inline //void stringAppend(S& str, InputIterator first, InputIterator last) { str += S(first, last); } -} - - -template <class S, class T, class U> inline -S replaceCpy(S str, const T& oldTerm, const U& newTerm, bool replaceAll) -{ - replace(str, oldTerm, newTerm, replaceAll); - return str; -} -template <class S, class T, class U> inline -void replace(S& str, const T& oldTerm, const U& newTerm, bool replaceAll) +template <class S, class T, class U, class CharEq> inline +void replace(S& str, const T& oldTerm, const U& newTerm, CharEq charEqual) { static_assert(std::is_same_v<GetCharTypeT<S>, GetCharTypeT<T>>); static_assert(std::is_same_v<GetCharTypeT<T>, GetCharTypeT<U>>); const size_t oldLen = strLength(oldTerm); + const size_t newLen = strLength(newTerm); + //assert(oldLen != 0); -> reasonable check, but challenged by unit-test if (oldLen == 0) return; @@ -457,13 +464,17 @@ void replace(S& str, const T& oldTerm, const U& newTerm, bool replaceAll) const auto* const oldEnd = oldBegin + oldLen; const auto* const newBegin = strBegin(newTerm); - const auto* const newEnd = newBegin + strLength(newTerm); + const auto* const newEnd = newBegin + newLen; + + using CharType = GetCharTypeT<S>; + if (oldLen == 1 && newLen == 1) //don't use expensive std::search unless required! + return std::replace_if(str.begin(), str.end(), [charEqual, charOld = *oldBegin](CharType c) { return charEqual(c, charOld); }, *newBegin); - auto it = strBegin(str); //don't use str.begin() or wxString will return this wxUni* nonsense! - const auto* const strEnd = it + strLength(str); + auto* it = strBegin(str); //don't use str.begin() or wxString will return this wxUni* nonsense! + auto* const strEnd = it + strLength(str); auto itFound = std::search(it, strEnd, - oldBegin, oldEnd); + oldBegin, oldEnd, charEqual); if (itFound == strEnd) return; //optimize "oldTerm not found" @@ -472,12 +483,13 @@ void replace(S& str, const T& oldTerm, const U& newTerm, bool replaceAll) { impl::stringAppend(output, newBegin, newEnd); it = itFound + oldLen; - +#if 0 if (!replaceAll) itFound = strEnd; else +#endif itFound = std::search(it, strEnd, - oldBegin, oldEnd); + oldBegin, oldEnd, charEqual); impl::stringAppend(output, it, itFound); } @@ -485,6 +497,37 @@ void replace(S& str, const T& oldTerm, const U& newTerm, bool replaceAll) str = std::move(output); } +} + + +template <class S, class T, class U> inline +void replace(S& str, const T& oldTerm, const U& newTerm) +{ impl::replace(str, oldTerm, newTerm, std::equal_to()); } + + +template <class S, class T, class U> inline +S replaceCpy(S str, const T& oldTerm, const U& newTerm) +{ + replace(str, oldTerm, newTerm); + return str; +} + + +template <class S, class T, class U> inline +void replaceAsciiNoCase(S& str, const T& oldTerm, const U& newTerm) +{ + using CharType = GetCharTypeT<S>; + impl::replace(str, oldTerm, newTerm, + [](CharType charL, CharType charR) { return asciiToLower(charL) == asciiToLower(charR); }); +} + + +template <class S, class T, class U> inline +S replaceCpyAsciiNoCase(S str, const T& oldTerm, const U& newTerm) +{ + replaceAsciiNoCase(str, oldTerm, newTerm); + return str; +} template <class Char, class Function> inline @@ -813,9 +856,9 @@ template <class S, class Num> inline S numberTo(const Num& number) { using TypeTag = std::integral_constant<impl::NumberType, - IsSignedIntV <Num> ? impl::NumberType::signedInt : - IsUnsignedIntV<Num> ? impl::NumberType::unsignedInt : - IsFloatV <Num> ? impl::NumberType::floatingPoint : + isSignedInt <Num> ? impl::NumberType::signedInt : + isUnsignedInt<Num> ? impl::NumberType::unsignedInt : + isFloat <Num> ? impl::NumberType::floatingPoint : impl::NumberType::other>; return impl::numberTo<S>(number, TypeTag()); @@ -826,9 +869,9 @@ template <class Num, class S> inline Num stringTo(const S& str) { using TypeTag = std::integral_constant<impl::NumberType, - IsSignedIntV <Num> ? impl::NumberType::signedInt : - IsUnsignedIntV<Num> ? impl::NumberType::unsignedInt : - IsFloatV <Num> ? impl::NumberType::floatingPoint : + isSignedInt <Num> ? impl::NumberType::signedInt : + isUnsignedInt<Num> ? impl::NumberType::unsignedInt : + isFloat <Num> ? impl::NumberType::floatingPoint : impl::NumberType::other>; return impl::stringTo<Num>(str, TypeTag()); @@ -885,6 +928,72 @@ std::string formatAsHexString(const std::string_view& blob) } + + +template <class Num, class S> inline +Num hashString(const S& str) +{ + using CharType = GetCharTypeT<S>; + const auto* const strFirst = strBegin(str); + + FNV1aHash<Num> hash; + std::for_each(strFirst, strFirst + strLength(str), [&hash](CharType c) { hash.add(c); }); + return hash.get(); +} + + +struct StringHash +{ + using is_transparent = int; //allow heterogenous lookup! + + template <class String> + size_t operator()(const String& str) const { return hashString<size_t>(str); } +}; + + +struct StringEqual +{ + using is_transparent = int; //allow heterogenous lookup! + + template <class String1, class String2> + bool operator()(const String1& lhs, const String2& rhs) const { return equalString(lhs, rhs); } +}; + + +struct LessAsciiNoCase +{ + template <class String> + bool operator()(const String& lhs, const String& rhs) const { return std::is_lt(compareAsciiNoCase(lhs, rhs)); } +}; + + +struct StringHashAsciiNoCase +{ + using is_transparent = int; //allow heterogenous lookup! + + template <class String> + size_t operator()(const String& str) const + { + using CharType = GetCharTypeT<String>; + const auto* const strFirst = strBegin(str); + + FNV1aHash<size_t> hash; + std::for_each(strFirst, strFirst + strLength(str), [&hash](CharType c) { hash.add(asciiToLower(c)); }); + return hash.get(); + } +}; + + +struct StringEqualAsciiNoCase +{ + using is_transparent = int; //allow heterogenous lookup! + + template <class String1, class String2> + bool operator()(const String1& lhs, const String2& rhs) const + { + return equalAsciiNoCase(lhs, rhs); + } +}; } #endif //STRING_TOOLS_H_213458973046 diff --git a/zen/string_traits.h b/zen/string_traits.h index ca40f7d6..1a4f4740 100644 --- a/zen/string_traits.h +++ b/zen/string_traits.h @@ -15,9 +15,9 @@ //uniform access to string-like types, both classes and character arrays namespace zen { -/* IsStringLikeV<>: - IsStringLikeV<const wchar_t*> //equals "true" - IsStringLikeV<const int*> //equals "false" +/* isStringLike<>: + isStringLike<const wchar_t*> //equals "true" + isStringLike<const int*> //equals "false" GetCharTypeT<>: GetCharTypeT<std::wstring> //equals wchar_t @@ -51,7 +51,7 @@ template <class Iterator> auto makeStringView(Iterator first, size_t len); //---------------------- implementation ---------------------- namespace impl { -template<class S, class Char> //test if result of S::c_str() can convert to const Char* +template <class S, class Char> //test if result of S::c_str() can convert to const Char* class HasConversion { using Yes = char[1]; @@ -105,9 +105,9 @@ class StringTraits public: enum { - isStringClass = HasMemberTypeV_value_type<CleanType>&& - HasMemberV_c_str <CleanType>&& - HasMemberV_length <CleanType> + isStringClass = hasMemberType_value_type<CleanType> && + hasMember_c_str <CleanType> && + hasMember_length <CleanType> }; using CharType = typename GetCharTypeImpl<UndecoratedType, isStringClass>::Type; @@ -121,10 +121,10 @@ public: } -template<class T> -constexpr bool IsStringLikeV = impl::StringTraits<T>::isStringLike; +template <class T> +constexpr bool isStringLike = impl::StringTraits<T>::isStringLike; -template<class T> +template <class T> using GetCharTypeT = typename impl::StringTraits<T>::CharType; @@ -184,7 +184,7 @@ inline size_t strLength(const std::basic_string_view<const wchar_t>& ref) { retu template <class S> inline auto strBegin(S&& str) { - static_assert(IsStringLikeV<S>); + static_assert(isStringLike<S>); return impl::strBegin(std::forward<S>(str)); } @@ -192,7 +192,7 @@ auto strBegin(S&& str) template <class S> inline size_t strLength(S&& str) { - static_assert(IsStringLikeV<S>); + static_assert(isStringLike<S>); return impl::strLength(std::forward<S>(str)); } diff --git a/zen/symlink_target.h b/zen/symlink_target.h index 4f007047..ada4e358 100644 --- a/zen/symlink_target.h +++ b/zen/symlink_target.h @@ -7,9 +7,7 @@ #ifndef SYMLINK_TARGET_H_801783470198357483 #define SYMLINK_TARGET_H_801783470198357483 -#include "scope_guard.h" #include "file_error.h" -#include "file_path.h" #include <unistd.h> #include <stdlib.h> //realpath diff --git a/zen/sys_error.h b/zen/sys_error.h index 99cf9316..6d03f299 100644 --- a/zen/sys_error.h +++ b/zen/sys_error.h @@ -8,8 +8,8 @@ #define SYS_ERROR_H_3284791347018951324534 #include "scope_guard.h" // -#include "utf.h" //not used by this header, but the "rest of the world" needs it! -#include "i18n.h" // +#include "i18n.h" //not used by this header, but the "rest of the world" needs it! +#include "zstring.h" // #include <glib.h> #include <cerrno> diff --git a/zen/thread.h b/zen/thread.h index 136c7a5c..42fba281 100644 --- a/zen/thread.h +++ b/zen/thread.h @@ -9,9 +9,7 @@ #include <thread> #include <future> -#include "scope_guard.h" #include "ring_buffer.h" -#include "string_tools.h" #include "zstring.h" @@ -65,7 +63,7 @@ class ThreadStopRequest {}; //context of worker thread: void interruptionPoint(); //throw ThreadStopRequest -template<class Predicate> +template <class Predicate> void interruptibleWait(std::condition_variable& cv, std::unique_lock<std::mutex>& lock, Predicate pred); //throw ThreadStopRequest template <class Rep, class Period> @@ -90,7 +88,7 @@ auto runAsync(Function&& fun); //wait for all with a time limit: return true if *all* results are available! //TODO: use std::when_all when available -template<class InputIterator, class Duration> +template <class InputIterator, class Duration> bool waitForAllTimed(InputIterator first, InputIterator last, const Duration& wait_duration); template<typename T> inline @@ -311,7 +309,7 @@ auto runAsync(Function&& fun) } -template<class InputIterator, class Duration> inline +template <class InputIterator, class Duration> inline bool waitForAllTimed(InputIterator first, InputIterator last, const Duration& duration) { const std::chrono::steady_clock::time_point stopTime = std::chrono::steady_clock::now() + duration; @@ -417,7 +415,7 @@ public: } //context of worker thread: - template<class Predicate> + template <class Predicate> void interruptibleWait(std::condition_variable& cv, std::unique_lock<std::mutex>& lock, Predicate pred) //throw ThreadStopRequest { setConditionVar(&cv); @@ -476,7 +474,7 @@ void interruptionPoint() //throw ThreadStopRequest //context of worker thread: -template<class Predicate> inline +template <class Predicate> inline void interruptibleWait(std::condition_variable& cv, std::unique_lock<std::mutex>& lock, Predicate pred) //throw ThreadStopRequest { assert(impl::threadLocalInterruptionStatus); diff --git a/zen/type_traits.h b/zen/type_traits.h index aca80393..28817aad 100644 --- a/zen/type_traits.h +++ b/zen/type_traits.h @@ -7,18 +7,19 @@ #ifndef TYPE_TRAITS_H_3425628658765467 #define TYPE_TRAITS_H_3425628658765467 +#include <algorithm> #include <type_traits> //https://en.cppreference.com/w/cpp/header/type_traits namespace zen { -template<class T, class...> +template <class T, class...> struct GetFirstOf { using Type = T; }; -template<class... T> using GetFirstOfT = typename GetFirstOf<T...>::Type; +template <class... T> using GetFirstOfT = typename GetFirstOf<T...>::Type; template <class F> @@ -28,61 +29,64 @@ class FunctionReturnType public: using Type = decltype(dummyFun(F())); }; -template<class F> using FunctionReturnTypeT = typename FunctionReturnType<F>::Type; +template <class F> using FunctionReturnTypeT = typename FunctionReturnType<F>::Type; //============================================================================= -template<class T, size_t N> -constexpr size_t arraySize(T (&)[N]) { return N; } - -template<class S, class T, size_t N> -constexpr S arrayAccumulate(T (&arr)[N]) +template <class T, size_t N> +constexpr uint32_t arrayHash(T (&arr)[N]) //don't bother making FNV1aHash constexpr instead { - S sum = 0; - for (size_t i = 0; i < N; ++i) - sum += arr[i]; - return sum; + uint32_t hashVal = 2166136261U; //FNV-1a base + + std::for_each(&arr[0], &arr[N], [&hashVal](T n) + { + //static_assert(isInteger<T> || std::is_same_v<T, char> || std::is_same_v<T, wchar_t>); + static_assert(sizeof(T) <= sizeof(hashVal)); + hashVal ^= static_cast<uint32_t>(n); + hashVal *= 16777619U; //prime + }); + return hashVal; } //Herb Sutter's signedness conversion helpers: https://herbsutter.com/2013/06/13/gotw-93-solution-auto-variables-part-2/ -template<class T> inline auto makeSigned (T t) { return static_cast<std::make_signed_t <T>>(t); } -template<class T> inline auto makeUnsigned(T t) { return static_cast<std::make_unsigned_t<T>>(t); } +template <class T> inline auto makeSigned (T t) { return static_cast<std::make_signed_t <T>>(t); } +template <class T> inline auto makeUnsigned(T t) { return static_cast<std::make_unsigned_t<T>>(t); } //################# Built-in Types ######################## //unfortunate standardized nonsense: std::is_integral<> includes bool, char, wchar_t! => roll our own: -template<class T> constexpr bool IsUnsignedIntV = std::is_same_v<std::remove_cv_t<T>, unsigned char> || +template <class T> constexpr bool isUnsignedInt = std::is_same_v<std::remove_cv_t<T>, unsigned char> || std::is_same_v<std::remove_cv_t<T>, unsigned short int> || std::is_same_v<std::remove_cv_t<T>, unsigned int> || std::is_same_v<std::remove_cv_t<T>, unsigned long int> || std::is_same_v<std::remove_cv_t<T>, unsigned long long int>; -template<class T> constexpr bool IsSignedIntV = std::is_same_v<std::remove_cv_t<T>, signed char> || +template <class T> constexpr bool isSignedInt = std::is_same_v<std::remove_cv_t<T>, signed char> || std::is_same_v<std::remove_cv_t<T>, short int> || std::is_same_v<std::remove_cv_t<T>, int> || std::is_same_v<std::remove_cv_t<T>, long int> || std::is_same_v<std::remove_cv_t<T>, long long int>; -template<class T> constexpr bool IsIntegerV = IsUnsignedIntV<T> || IsSignedIntV<T>; -template<class T> constexpr bool IsFloatV = std::is_floating_point_v<T>; -template<class T> constexpr bool IsArithmeticV = IsIntegerV<T> || IsFloatV<T>; +template <class T> constexpr bool isInteger = isUnsignedInt<T> || isSignedInt<T>; +template <class T> constexpr bool isFloat = std::is_floating_point_v<T>; +template <class T> constexpr bool isArithmetic = isInteger<T> || isFloat<T>; //################# Class Members ######################## -/* Detect data or function members of a class by name: ZEN_INIT_DETECT_MEMBER + HasMember_ +/* Detect data or function members of a class by name: ZEN_INIT_DETECT_MEMBER + hasMember_ Example: 1. ZEN_INIT_DETECT_MEMBER(c_str); - 2. HasMemberV_c_str<T> -> use boolean + 2. hasMember_c_str<T> -> use boolean Detect data or function members of a class by name *and* type: ZEN_INIT_DETECT_MEMBER2 + HasMember_ Example: 1. ZEN_INIT_DETECT_MEMBER2(size, size_t (T::*)() const); - 2. HasMember_size<T>::value -> use as boolean + 2. hasMember_size<T>::value -> use as boolean - Detect member type of a class: ZEN_INIT_DETECT_MEMBER_TYPE + HasMemberType_ + Detect member type of a class: ZEN_INIT_DETECT_MEMBER_TYPE + hasMemberType_ Example: 1. ZEN_INIT_DETECT_MEMBER_TYPE(value_type); - 2. HasMemberTypeV_value_type<T> -> use as boolean */ + 2. hasMemberType_value_type<T> -> use as boolean */ //########## Sorting ############################## /* @@ -103,7 +107,7 @@ private: }; template <class Predicate> inline -/**/ Predicate makeSortDirection(Predicate pred, std::true_type) { return pred; } +/**/ Predicate makeSortDirection(Predicate pred, std::true_type) { return pred; } template <class Predicate> inline LessDescending<Predicate> makeSortDirection(Predicate pred, std::false_type) { return pred; } @@ -138,10 +142,10 @@ LessDescending<Predicate> makeSortDirection(Predicate pred, std::false_type) { r enum { value = sizeof(hasMember<T>(nullptr)) == sizeof(Yes) }; \ }; \ \ - template<class T> \ + template <class T> \ struct HasMemberImpl_##NAME<false, T> : std::false_type {}; \ \ - template<class T> constexpr bool HasMemberV_##NAME = HasMemberImpl_##NAME<std::is_class_v<T>, T>::value; + template <class T> constexpr bool hasMember_##NAME = HasMemberImpl_##NAME<std::is_class_v<T>, T>::value; //#################################################################### @@ -161,7 +165,7 @@ LessDescending<Predicate> makeSortDirection(Predicate pred, std::false_type) { r enum { value = sizeof(hasMember<U>(nullptr)) == sizeof(Yes) }; \ }; \ \ - template<class T> constexpr bool HasMemberV_##NAME = HasMember_##NAME<T>::value; + template <class T> constexpr bool hasMember_##NAME = HasMember_##NAME<T>::value; //#################################################################### @@ -181,7 +185,7 @@ LessDescending<Predicate> makeSortDirection(Predicate pred, std::false_type) { r enum { value = sizeof(hasMemberType<T>(nullptr)) == sizeof(Yes) }; \ }; \ \ - template<class T> constexpr bool HasMemberTypeV_##TYPENAME = HasMemberType_##TYPENAME<T>::value; + template <class T> constexpr bool hasMemberType_##TYPENAME = HasMemberType_##TYPENAME<T>::value; } @@ -7,8 +7,8 @@ #ifndef UTF_H_01832479146991573473545 #define UTF_H_01832479146991573473545 -#include <cstdint> -#include <iterator> +//#include <cstdint> +//#include <iterator> #include "string_tools.h" //copyStringTo diff --git a/zen/zlib_wrap.cpp b/zen/zlib_wrap.cpp index 6f17dc08..e87a284f 100644 --- a/zen/zlib_wrap.cpp +++ b/zen/zlib_wrap.cpp @@ -46,10 +46,10 @@ size_t zen::impl::zlib_compressBound(size_t len) size_t zen::impl::zlib_compress(const void* src, size_t srcLen, void* trg, size_t trgLen, int level) //throw SysError { uLongf bufSize = static_cast<uLong>(trgLen); - const int rv = ::compress2(static_cast<Bytef*>(trg), //Bytef* dest, - &bufSize, //uLongf* destLen, - static_cast<const Bytef*>(src), //const Bytef* source, - static_cast<uLong>(srcLen), //uLong sourceLen, + const int rv = ::compress2(static_cast<Bytef*>(trg), //Bytef* dest + &bufSize, //uLongf* destLen + static_cast<const Bytef*>(src), //const Bytef* source + static_cast<uLong>(srcLen), //uLong sourceLen level); //int level // Z_OK: success // Z_MEM_ERROR: not enough memory @@ -64,9 +64,9 @@ size_t zen::impl::zlib_compress(const void* src, size_t srcLen, void* trg, size_ size_t zen::impl::zlib_decompress(const void* src, size_t srcLen, void* trg, size_t trgLen) //throw SysError { uLongf bufSize = static_cast<uLong>(trgLen); - const int rv = ::uncompress(static_cast<Bytef*>(trg), //Bytef* dest, - &bufSize, //uLongf* destLen, - static_cast<const Bytef*>(src), //const Bytef* source, + const int rv = ::uncompress(static_cast<Bytef*>(trg), //Bytef* dest + &bufSize, //uLongf* destLen + static_cast<const Bytef*>(src), //const Bytef* source static_cast<uLong>(srcLen)); //uLong sourceLen // Z_OK: success // Z_MEM_ERROR: not enough memory diff --git a/zen/zstring.cpp b/zen/zstring.cpp index 635fb47d..76c0a81f 100644 --- a/zen/zstring.cpp +++ b/zen/zstring.cpp @@ -5,50 +5,12 @@ // ***************************************************************************** #include "zstring.h" -#include <stdexcept> -#include "utf.h" - #include <glib.h> #include "sys_error.h" using namespace zen; -Zstring getUpperCase(const Zstring& str) -{ - assert(str.find(Zchar('\0')) == Zstring::npos); //don't expect embedded nulls! - - //fast pre-check: - if (isAsciiString(str)) //perf: in the range of 3.5ns - { - Zstring output = str; - for (Zchar& c : output) - c = asciiToUpper(c); - return output; - } - - Zstring strNorm = getUnicodeNormalForm(str); - try - { - static_assert(sizeof(impl::CodePoint) == sizeof(gunichar)); - Zstring output; - output.reserve(strNorm.size()); - - UtfDecoder<char> decoder(strNorm.c_str(), strNorm.size()); - while (const std::optional<impl::CodePoint> cp = decoder.getNext()) - impl::codePointToUtf<char>(::g_unichar_toupper(*cp), [&](char c) { output += c; }); //don't use std::towupper: *incomplete* and locale-dependent! - - return output; - - } - catch (SysError&) - { - assert(false); - return str; - } -} - - Zstring getUnicodeNormalForm(const Zstring& str) { //fast pre-check: @@ -75,63 +37,38 @@ Zstring getUnicodeNormalForm(const Zstring& str) } -Zstring replaceCpyAsciiNoCase(const Zstring& str, const Zstring& oldTerm, const Zstring& newTerm) +Zstring getUpperCase(const Zstring& str) { - if (oldTerm.empty()) - return str; - - //assert(isAsciiString(oldTerm)); - Zstring output; + assert(str.find(Zchar('\0')) == Zstring::npos); //don't expect embedded nulls! - for (size_t pos = 0;;) + //fast pre-check: + if (isAsciiString(str)) //perf: in the range of 3.5ns { - const size_t posFound = std::search(str.begin() + pos, str.end(), //can't use getUpperCase(): input/output sizes may differ! - oldTerm.begin(), oldTerm.end(), - [](Zchar charL, Zchar charR) { return asciiToUpper(charL) == asciiToUpper(charR); }) - str.begin(); - - if (posFound == str.size()) - { - if (pos == 0) //optimize "oldTerm not found": return ref-counted copy - return str; - output.append(str.begin() + pos, str.end()); - return output; - } - - output.append(str.begin() + pos, str.begin() + posFound); - output += newTerm; - pos = posFound + oldTerm.size(); + Zstring output = str; + for (Zchar& c : output) + c = asciiToUpper(c); + return output; } -} - - -/* https://docs.microsoft.com/de-de/windows/desktop/Intl/handling-sorting-in-your-applications - - Perf test: compare strings 10 mio times; 64 bit build - ----------------------------------------------------- - string a = "Fjk84$%kgfj$%T\\\\Gffg\\gsdgf\\fgsx----------d-" - string b = "fjK84$%kgfj$%T\\\\gfFg\\gsdgf\\fgSy----------dfdf" - Windows (UTF16 wchar_t) - 4 ns | wcscmp - 67 ns | CompareStringOrdinalFunc+ + bIgnoreCase - 314 ns | LCMapString + wmemcmp - - OS X (UTF8 char) - 6 ns | strcmp - 98 ns | strcasecmp - 120 ns | strncasecmp + std::min(sizeLhs, sizeRhs); - 856 ns | CFStringCreateWithCString + CFStringCompare(kCFCompareCaseInsensitive) - 1110 ns | CFStringCreateWithCStringNoCopy + CFStringCompare(kCFCompareCaseInsensitive) - ________________________ - time per call | function */ + Zstring strNorm = getUnicodeNormalForm(str); + try + { + static_assert(sizeof(impl::CodePoint) == sizeof(gunichar)); + Zstring output; + output.reserve(strNorm.size()); -std::weak_ordering compareNativePath(const Zstring& lhs, const Zstring& rhs) -{ - assert(lhs.find(Zchar('\0')) == Zstring::npos); //don't expect embedded nulls! - assert(rhs.find(Zchar('\0')) == Zstring::npos); // + UtfDecoder<char> decoder(strNorm.c_str(), strNorm.size()); + while (const std::optional<impl::CodePoint> cp = decoder.getNext()) + impl::codePointToUtf<char>(::g_unichar_toupper(*cp), [&](char c) { output += c; }); //don't use std::towupper: *incomplete* and locale-dependent! - return lhs <=> rhs; + return output; + } + catch (SysError&) + { + assert(false); + return str; + } } diff --git a/zen/zstring.h b/zen/zstring.h index 15735cb0..bc7cfb06 100644 --- a/zen/zstring.h +++ b/zen/zstring.h @@ -7,12 +7,13 @@ #ifndef ZSTRING_H_73425873425789 #define ZSTRING_H_73425873425789 +#include <stdexcept> //not used by this header, but the "rest of the world" needs it! +#include "utf.h" // #include "string_base.h" using Zchar = char; #define Zstr(x) x - const Zchar FILE_NAME_SEPARATOR = '/'; //"The reason for all the fuss above" - Loki/SmartPtr @@ -24,12 +25,6 @@ using Zstringc = zen::Zbase<char>; //using Zstringw = zen::Zbase<wchar_t>; -/* Caveat: don't expect input/output string sizes to match: - - different UTF-8 encoding length of upper-case chars - - different number of upper case chars (e.g. ß => "SS" on macOS) - - output is Unicode-normalized */ -Zstring getUpperCase(const Zstring& str); - //Windows, Linux: precomposed //macOS: decomposed Zstring getUnicodeNormalForm(const Zstring& str); @@ -37,105 +32,44 @@ Zstring getUnicodeNormalForm(const Zstring& str); and conformant software should not treat canonically equivalent sequences, whether composed or decomposed or something in between, as different." https://www.win.tue.nl/~aeb/linux/uc/nfc_vs_nfd.html */ -struct LessUnicodeNormal { bool operator()(const Zstring& lhs, const Zstring& rhs) const { return getUnicodeNormalForm(lhs) < getUnicodeNormalForm(rhs); } }; - -Zstring replaceCpyAsciiNoCase(const Zstring& str, const Zstring& oldTerm, const Zstring& newTerm); +/* Caveat: don't expect input/output string sizes to match: + - different UTF-8 encoding length of upper-case chars + - different number of upper case chars (e.g. ß => "SS" on macOS) + - output is Unicode-normalized */ +Zstring getUpperCase(const Zstring& str); //------------------------------------------------------------------------------------------ +struct ZstringNorm //use as STL container key: avoid needless Unicode normalizations during std::map<>::find() +{ + /*explicit*/ ZstringNorm(const Zstring& str) : normStr(getUnicodeNormalForm(str)) {} + Zstring normStr; -inline bool equalNoCase(const Zstring& lhs, const Zstring& rhs) { return getUpperCase(lhs) == getUpperCase(rhs); } + std::strong_ordering operator<=>(const ZstringNorm&) const = default; +}; +template<> struct std::hash<ZstringNorm> { size_t operator()(const ZstringNorm& str) const { return std::hash<Zstring>()(str.normStr); } }; + +//struct LessUnicodeNormal { bool operator()(const Zstring& lhs, const Zstring& rhs) const { return getUnicodeNormalForm(lhs) < getUnicodeNormalForm(rhs); } }; +//------------------------------------------------------------------------------------------ struct ZstringNoCase //use as STL container key: avoid needless upper-case conversions during std::map<>::find() { - ZstringNoCase(const Zstring& str) : upperCase(getUpperCase(str)) {} + /*explicit*/ ZstringNoCase(const Zstring& str) : upperCase(getUpperCase(str)) {} Zstring upperCase; std::strong_ordering operator<=>(const ZstringNoCase&) const = default; }; +template<> struct std::hash<ZstringNoCase> { size_t operator()(const ZstringNoCase& str) const { return std::hash<Zstring>()(str.upperCase); } }; -//------------------------------------------------------------------------------------------ - -/* Compare *local* file paths: - Windows: igore case - Linux: byte-wise comparison - macOS: ignore case + Unicode normalization forms */ -std::weak_ordering compareNativePath(const Zstring& lhs, const Zstring& rhs); - -inline bool equalNativePath(const Zstring& lhs, const Zstring& rhs) { return compareNativePath(lhs, rhs) == std::weak_ordering::equivalent; } - -struct LessNativePath { bool operator()(const Zstring& lhs, const Zstring& rhs) const { return std::is_lt(compareNativePath(lhs, rhs)); } }; +inline bool equalNoCase(const Zstring& lhs, const Zstring& rhs) { return getUpperCase(lhs) == getUpperCase(rhs); } //------------------------------------------------------------------------------------------ std::weak_ordering compareNatural(const Zstring& lhs, const Zstring& rhs); struct LessNaturalSort { bool operator()(const Zstring& lhs, const Zstring& rhs) const { return std::is_lt(compareNatural(lhs, rhs)); } }; -//------------------------------------------------------------------------------------------ - - - -inline -Zstring appendSeparator(Zstring path) //support rvalue references! -{ - if (!zen::endsWith(path, FILE_NAME_SEPARATOR)) - path += FILE_NAME_SEPARATOR; - return path; //returning a by-value parameter => RVO if possible, r-value otherwise! -} - - -inline -Zstring appendPaths(const Zstring& basePath, const Zstring& relPath, Zchar pathSep) -{ - using namespace zen; - - assert(!startsWith(relPath, pathSep) && !endsWith(relPath, pathSep)); - if (relPath.empty()) - return basePath; - if (basePath.empty()) - return relPath; - - if (startsWith(relPath, pathSep)) - { - if (relPath.size() == 1) - return basePath; - - if (endsWith(basePath, pathSep)) - return basePath + (relPath.c_str() + 1); - } - else if (!endsWith(basePath, pathSep)) - { - Zstring output = basePath; - output.reserve(basePath.size() + 1 + relPath.size()); //append all three strings using a single memory allocation - return std::move(output) + pathSep + relPath; // - } - return basePath + relPath; -} - -inline Zstring nativeAppendPaths(const Zstring& basePath, const Zstring& relPath) { return appendPaths(basePath, relPath, FILE_NAME_SEPARATOR); } - - -inline -Zstring getFileExtension(const Zstring& filePath) -{ - //const Zstring fileName = afterLast(filePath, FILE_NAME_SEPARATOR, IfNotFoundReturn::all); - //return afterLast(fileName, Zstr('.'), zen::IfNotFoundReturn::none); - - auto it = zen::findLast(filePath.begin(), filePath.end(), FILE_NAME_SEPARATOR); - if (it == filePath.end()) - it = filePath.begin(); - else - ++it; - - auto it2 = zen::findLast(it, filePath.end(), Zstr('.')); - if (it2 != filePath.end()) - ++it2; - - return Zstring(it2, filePath.end()); -} - - -//common unicode characters +//------------------------------------------------------------------------------------------ +//common Unicode characters const wchar_t EN_DASH = L'\u2013'; const wchar_t EM_DASH = L'\u2014'; const wchar_t* const SPACED_DASH = L" \u2014 "; //using 'EM DASH' diff --git a/zenXml/zenxml/cvrt_struc.h b/zenXml/zenxml/cvrt_struc.h index a437604c..0bfe5996 100644 --- a/zenXml/zenxml/cvrt_struc.h +++ b/zenXml/zenxml/cvrt_struc.h @@ -57,12 +57,12 @@ ZEN_INIT_DETECT_MEMBER(insert) // template <typename T> using IsStlContainer = std::bool_constant< - impl_2384343::HasMemberTypeV_value_type <T>&& - impl_2384343::HasMemberTypeV_iterator <T>&& - impl_2384343::HasMemberTypeV_const_iterator<T>&& - impl_2384343::HasMemberV_begin <T>&& - impl_2384343::HasMemberV_end <T>&& - impl_2384343::HasMemberV_insert <T>>; + impl_2384343::hasMemberType_value_type <T>&& + impl_2384343::hasMemberType_iterator <T>&& + impl_2384343::hasMemberType_const_iterator<T>&& + impl_2384343::hasMember_begin <T>&& + impl_2384343::hasMember_end <T>&& + impl_2384343::hasMember_insert <T>>; template <class T> diff --git a/zenXml/zenxml/cvrt_text.h b/zenXml/zenxml/cvrt_text.h index c06a62e0..9c2cbe45 100644 --- a/zenXml/zenxml/cvrt_text.h +++ b/zenXml/zenxml/cvrt_text.h @@ -130,8 +130,8 @@ enum class TextType template <class T> struct GetTextType : std::integral_constant<TextType, std::is_same_v<T, bool> ? TextType::boolean : - IsStringLikeV<T> ? TextType::string : //string before number to correctly handle char/wchar_t -> this was an issue with Loki only! - IsArithmeticV<T> ? TextType::number : // + isStringLike<T> ? TextType::string : //string before number to correctly handle char/wchar_t -> this was an issue with Loki only! + isArithmetic<T> ? TextType::number : // IsChronoDuration<T>::value ? TextType::chrono : TextType::other> {}; diff --git a/zenXml/zenxml/dom.h b/zenXml/zenxml/dom.h index 8d5bc0f5..7a551f69 100644 --- a/zenXml/zenxml/dom.h +++ b/zenXml/zenxml/dom.h @@ -9,7 +9,7 @@ #include <string> #include <list> -#include <map> +#include <unordered_map> #include "cvrt_text.h" //"readText/writeText" @@ -59,11 +59,11 @@ public: template <class T> bool getAttribute(const std::string& name, T& value) const { - auto it = attributesSorted_.find(name); - return it == attributesSorted_.end() ? false : readText(it->second->value, value); + auto it = attributesByName.find(name); + return it == attributesByName.end() ? false : readText(it->second->value, value); } - bool hasAttribute(const std::string& name) const { return attributesSorted_.contains(name); } + bool hasAttribute(const std::string& name) const { return attributesByName.contains(name); } ///Create or update an XML attribute. /** @@ -77,24 +77,25 @@ public: std::string attrValue; writeText(value, attrValue); - auto it = attributesSorted_.find(name); - if (it != attributesSorted_.end()) + auto it = attributesByName.find(name); + if (it != attributesByName.end()) it->second->value = std::move(attrValue); else { auto itBack = attributes_.insert(attributes_.end(), {name, std::move(attrValue)}); - attributesSorted_.emplace(std::move(name), itBack); + attributesByName.emplace(std::move(name), itBack); } + static_assert(std::is_same_v<decltype(attributes_), std::list<Attribute>>); //must NOT invalidate references used in "attributesByName"! } ///Remove the attribute with the given name. void removeAttribute(const std::string& name) { - auto it = attributesSorted_.find(name); - if (it != attributesSorted_.end()) + auto it = attributesByName.find(name); + if (it != attributesByName.end()) { attributes_.erase(it->second); - attributesSorted_.erase(it); + attributesByName.erase(it); } } @@ -106,7 +107,9 @@ public: { childElements_.emplace_back(name, this); XmlElement& newElement = childElements_.back(); - childElementsSorted_.emplace(std::move(name), &newElement); + childElementsByName_.emplace(std::move(name), &newElement); + + static_assert(std::is_same_v<decltype(childElements_), std::list<XmlElement>>); //must NOT invalidate references used in "childElementsByName_"! return newElement; } @@ -117,8 +120,8 @@ public: */ const XmlElement* getChild(const std::string& name) const { - auto it = childElementsSorted_.find(name); - return it == childElementsSorted_.end() ? nullptr : it->second; + auto it = childElementsByName_.find(name); + return it == childElementsByName_.end() ? nullptr : it->second; } ///\sa getChild @@ -156,8 +159,8 @@ public: T& objectRef(const IterTy& it) const { return *(it->second); } }; - using ChildIter2 = PtrIter<std::multimap<std::string, XmlElement*>::iterator, XmlElement, AccessMapElement>; - using ChildIterConst2 = PtrIter<std::multimap<std::string, XmlElement*>::const_iterator, const XmlElement, AccessMapElement>; + using ChildIter2 = PtrIter<std::unordered_multimap<std::string, XmlElement*>::iterator, XmlElement, AccessMapElement>; + using ChildIterConst2 = PtrIter<std::unordered_multimap<std::string, XmlElement*>::const_iterator, const XmlElement, AccessMapElement>; ///Access all child elements with the given name via STL iterators. /** @@ -169,10 +172,10 @@ public: \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. */ - std::pair<ChildIterConst2, ChildIterConst2> getChildren(const std::string& name) const { return childElementsSorted_.equal_range(name); } + std::pair<ChildIterConst2, ChildIterConst2> getChildren(const std::string& name) const { return childElementsByName_.equal_range(name); } ///\sa getChildren - std::pair<ChildIter2, ChildIter2> getChildren(const std::string& name) { return childElementsSorted_.equal_range(name); } + std::pair<ChildIter2, ChildIter2> getChildren(const std::string& name) { return childElementsByName_.equal_range(name); } struct AccessListElement { @@ -225,9 +228,9 @@ public: name_ .swap(other.name_); value_ .swap(other.value_); attributes_ .swap(other.attributes_); - attributesSorted_ .swap(other.attributesSorted_); + attributesByName .swap(other.attributesByName); childElements_ .swap(other.childElements_); - childElementsSorted_.swap(other.childElementsSorted_); + childElementsByName_.swap(other.childElementsByName_); for (XmlElement& child : childElements_) child.parent_ = this; @@ -242,11 +245,11 @@ private: std::string name_; std::string value_; - std::list<Attribute> attributes_; //attributes in order of creation - std::map<std::string, std::list<Attribute>::iterator> attributesSorted_; //alternate view: sorted by attribute name + std::list<Attribute> attributes_; //attributes in order of creation + std::unordered_map<std::string, std::list<Attribute>::iterator> attributesByName; //alternate view for lookup - std::list<XmlElement> childElements_; //child elements in order of creation - std::multimap<std::string, XmlElement*> childElementsSorted_; //alternate view: sorted by element name + std::list<XmlElement> childElements_; //child elements in order of creation + std::unordered_multimap<std::string, XmlElement*> childElementsByName_; //alternate view for lookup XmlElement* parent_ = nullptr; }; |