summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FreeFileSync/Build/Changelog.txt23
-rw-r--r--FreeFileSync/Build/Help/img/comparison_settings.pngbin37039 -> 37035 bytes
-rw-r--r--FreeFileSync/Build/Help/img/time_shift.pngbin26529 -> 26513 bytes
-rw-r--r--FreeFileSync/Build/Languages/arabic.lng4
-rw-r--r--FreeFileSync/Build/Languages/bulgarian.lng4
-rw-r--r--FreeFileSync/Build/Languages/chinese_simple.lng4
-rw-r--r--FreeFileSync/Build/Languages/chinese_traditional.lng4
-rw-r--r--FreeFileSync/Build/Languages/croatian.lng4
-rw-r--r--FreeFileSync/Build/Languages/czech.lng4
-rw-r--r--FreeFileSync/Build/Languages/danish.lng4
-rw-r--r--FreeFileSync/Build/Languages/dutch.lng4
-rw-r--r--FreeFileSync/Build/Languages/english_uk.lng4
-rw-r--r--FreeFileSync/Build/Languages/finnish.lng4
-rw-r--r--FreeFileSync/Build/Languages/french.lng4
-rw-r--r--FreeFileSync/Build/Languages/german.lng6
-rw-r--r--FreeFileSync/Build/Languages/greek.lng4
-rw-r--r--FreeFileSync/Build/Languages/hebrew.lng4
-rw-r--r--FreeFileSync/Build/Languages/hindi.lng1657
-rw-r--r--FreeFileSync/Build/Languages/hungarian.lng4
-rw-r--r--FreeFileSync/Build/Languages/italian.lng4
-rw-r--r--FreeFileSync/Build/Languages/japanese.lng4
-rw-r--r--FreeFileSync/Build/Languages/korean.lng4
-rw-r--r--FreeFileSync/Build/Languages/lithuanian.lng4
-rw-r--r--FreeFileSync/Build/Languages/norwegian.lng4
-rw-r--r--FreeFileSync/Build/Languages/outdated/scottish_gaelic.lng2
-rw-r--r--FreeFileSync/Build/Languages/outdated/slovenian.lng2
-rw-r--r--FreeFileSync/Build/Languages/polish.lng4
-rw-r--r--FreeFileSync/Build/Languages/portuguese.lng4
-rw-r--r--FreeFileSync/Build/Languages/portuguese_br.lng4
-rw-r--r--FreeFileSync/Build/Languages/romanian.lng4
-rw-r--r--FreeFileSync/Build/Languages/russian.lng4
-rw-r--r--FreeFileSync/Build/Languages/serbian.lng4
-rw-r--r--FreeFileSync/Build/Languages/spanish.lng4
-rw-r--r--FreeFileSync/Build/Languages/swedish.lng4
-rw-r--r--FreeFileSync/Build/Languages/turkish.lng4
-rw-r--r--FreeFileSync/Build/Languages/ukrainian.lng4
-rw-r--r--FreeFileSync/Build/Resources.zipbin276201 -> 276808 bytes
-rw-r--r--FreeFileSync/Source/comparison.cpp2
-rw-r--r--FreeFileSync/Source/file_hierarchy.cpp4
-rw-r--r--FreeFileSync/Source/file_hierarchy.h20
-rw-r--r--FreeFileSync/Source/lib/binary.cpp40
-rw-r--r--FreeFileSync/Source/lib/binary.h8
-rw-r--r--FreeFileSync/Source/lib/deep_file_traverser.cpp58
-rw-r--r--FreeFileSync/Source/lib/dir_lock.cpp14
-rw-r--r--FreeFileSync/Source/lib/ffs_paths.cpp3
-rw-r--r--FreeFileSync/Source/lib/icon_buffer.cpp134
-rw-r--r--FreeFileSync/Source/lib/localization.cpp3
-rw-r--r--FreeFileSync/Source/lib/process_xml.cpp6
-rw-r--r--FreeFileSync/Source/lib/process_xml.h1
-rw-r--r--FreeFileSync/Source/structures.cpp2
-rw-r--r--FreeFileSync/Source/synchronization.cpp457
-rw-r--r--FreeFileSync/Source/ui/batch_status_handler.cpp16
-rw-r--r--FreeFileSync/Source/ui/check_version.cpp178
-rw-r--r--FreeFileSync/Source/ui/check_version.h9
-rw-r--r--FreeFileSync/Source/ui/custom_grid.cpp48
-rw-r--r--FreeFileSync/Source/ui/gui_generated.cpp6812
-rw-r--r--FreeFileSync/Source/ui/gui_generated.h1436
-rw-r--r--FreeFileSync/Source/ui/main_dlg.cpp53
-rw-r--r--FreeFileSync/Source/ui/main_dlg.h1
-rw-r--r--FreeFileSync/Source/ui/small_dlgs.cpp4
-rw-r--r--FreeFileSync/Source/version/version.h2
-rw-r--r--wx+/grid.cpp10
-rw-r--r--wx+/image_resources.cpp13
-rw-r--r--wx+/image_tools.cpp44
-rw-r--r--wx+/image_tools.h23
-rw-r--r--zen/file_access.cpp541
-rw-r--r--zen/file_access.h2
-rw-r--r--zen/file_io.cpp317
-rw-r--r--zen/file_io.h44
-rw-r--r--zen/file_traverser.cpp4
-rw-r--r--zen/fixed_list.h4
-rw-r--r--zen/perf.h6
-rw-r--r--zen/recycler.h2
-rw-r--r--zen/string_tools.h4
-rw-r--r--zen/symlink_target.h10
-rw-r--r--zen/thread.h3
-rw-r--r--zen/time.h22
-rw-r--r--zen/win_ver.h15
-rw-r--r--zen/zstring.cpp8
79 files changed, 6959 insertions, 5230 deletions
diff --git a/FreeFileSync/Build/Changelog.txt b/FreeFileSync/Build/Changelog.txt
index a54810c8..ab145f16 100644
--- a/FreeFileSync/Build/Changelog.txt
+++ b/FreeFileSync/Build/Changelog.txt
@@ -1,3 +1,24 @@
+FreeFileSync 6.15
+-----------------
+Revert to log file naming convention without colon character
+Prevent endless recursion when traversing into folder on corrupt file system
+Fixed view filter button rendering issue for RTL languages
+Fixed grid losing far scroll positions when increasing icon sizes
+Flush file buffers before verifying file copy
+Update existing items when retrying failed folder traversal
+Harmonized bitmap file loading by removing format variance
+Fixed invalid argument error when setting file times (Linux)
+Fixed application hang when loading icon for named pipe (Linux)
+Improved file copy read-ahead performance (Linux)
+Use native file I/O for stream operations (Linux, OS X)
+Fixed file copy creating zero-sized files (OS X)
+Automatically create Minidump files during an application crash (Windows)
+Check for missing service pack to help diagnose crash (Windows 7)
+New menu item with download link after a version update
+Work around C-function memory race condition when formatting time
+Added Hindi language
+
+
FreeFileSync 6.14 [2015-02-10]
------------------------------
New buttons allow changing the order of folder pairs
@@ -1069,7 +1090,7 @@ Fixed resource loading if installation folder is not working directory (Linux bu
Consolidated batch creation dialog
<Automatic> mode: Detect conflict when a directory shall be deleted while new sub-elements are to be copied
Automatically mark left behind temporary files (*.ffs_tmp) for deletion with next sync
-New Project website: http://freefilesync.sourceforge.net
+New Project website: freefilesync.sourceforge.net
A lot of small GUI fixes
Updated translation files
diff --git a/FreeFileSync/Build/Help/img/comparison_settings.png b/FreeFileSync/Build/Help/img/comparison_settings.png
index 8fb95a7f..07caa726 100644
--- a/FreeFileSync/Build/Help/img/comparison_settings.png
+++ b/FreeFileSync/Build/Help/img/comparison_settings.png
Binary files differ
diff --git a/FreeFileSync/Build/Help/img/time_shift.png b/FreeFileSync/Build/Help/img/time_shift.png
index 2970cdaf..46f3bc64 100644
--- a/FreeFileSync/Build/Help/img/time_shift.png
+++ b/FreeFileSync/Build/Help/img/time_shift.png
Binary files differ
diff --git a/FreeFileSync/Build/Languages/arabic.lng b/FreeFileSync/Build/Languages/arabic.lng
index 8e654b06..bc4c210a 100644
--- a/FreeFileSync/Build/Languages/arabic.lng
+++ b/FreeFileSync/Build/Languages/arabic.lng
@@ -631,8 +631,8 @@ The command is triggered if:
<source>FreeFileSync is up to date.</source>
<target>البرنامج هو الأحدث حتى الآن.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>تعذر الاتصال بـ FreeFileSync.org</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>تعذر الاتصال بـ www.freefilesync.org</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>لم نستطع العثور على على رقم إصدار FreeFileSync على الشبكة. هل تريد التحقق يدوياً؟</target>
diff --git a/FreeFileSync/Build/Languages/bulgarian.lng b/FreeFileSync/Build/Languages/bulgarian.lng
index e4f8263e..9c5a0fee 100644
--- a/FreeFileSync/Build/Languages/bulgarian.lng
+++ b/FreeFileSync/Build/Languages/bulgarian.lng
@@ -615,8 +615,8 @@ The command is triggered if:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync вече е актуална.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Не мога да се свържа с FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Не мога да се свържа с www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Номера на текущата версия на FreeFileSync не е открит онлайн. Ще опитате ли ръчно?</target>
diff --git a/FreeFileSync/Build/Languages/chinese_simple.lng b/FreeFileSync/Build/Languages/chinese_simple.lng
index 4d3cb947..4262105b 100644
--- a/FreeFileSync/Build/Languages/chinese_simple.lng
+++ b/FreeFileSync/Build/Languages/chinese_simple.lng
@@ -611,8 +611,8 @@ The command is triggered if:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync 已是最新.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>无法连接到FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>无法连接到www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>无法在线找到当前FreeFileSync版本号. 你要手动检查吗?</target>
diff --git a/FreeFileSync/Build/Languages/chinese_traditional.lng b/FreeFileSync/Build/Languages/chinese_traditional.lng
index 9c526db4..bede17c9 100644
--- a/FreeFileSync/Build/Languages/chinese_traditional.lng
+++ b/FreeFileSync/Build/Languages/chinese_traditional.lng
@@ -611,8 +611,8 @@ The command is triggered if:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync已經是最新版本。</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>無法連接到FreeFileSync.org。</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>無法連接到www.freefilesync.org。</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>找不到目前線上FreeFileSync版號!是否要手動檢查?</target>
diff --git a/FreeFileSync/Build/Languages/croatian.lng b/FreeFileSync/Build/Languages/croatian.lng
index 93b7721a..2b764e1d 100644
--- a/FreeFileSync/Build/Languages/croatian.lng
+++ b/FreeFileSync/Build/Languages/croatian.lng
@@ -619,8 +619,8 @@ Naredba će biti pokrenuta ako se:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync je ažuran.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Nije moguće povezivanje s FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Nije moguće povezivanje s www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Ne mogu pronaći trenutnu verziju FreeFileSync-a online. Da li želite ručno potražiti?</target>
diff --git a/FreeFileSync/Build/Languages/czech.lng b/FreeFileSync/Build/Languages/czech.lng
index af34ceb9..0fd201d3 100644
--- a/FreeFileSync/Build/Languages/czech.lng
+++ b/FreeFileSync/Build/Languages/czech.lng
@@ -619,8 +619,8 @@ Příkaz je spuštěn když:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync je aktuální.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Není možné se připojit k FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Není možné se připojit k www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Současná verze FreeFileSync nebyla nalezena online! Chcete verzi zkontrolovat ručně?</target>
diff --git a/FreeFileSync/Build/Languages/danish.lng b/FreeFileSync/Build/Languages/danish.lng
index 1ac52b9a..4a9354ea 100644
--- a/FreeFileSync/Build/Languages/danish.lng
+++ b/FreeFileSync/Build/Languages/danish.lng
@@ -615,8 +615,8 @@ Kommandoen udføres hvis:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync er opdateret.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Kan ikke kontakte FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Kan ikke kontakte www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Kunne ikke finde FreeFileSync's versionsnummer online. Vil du kontrollere manuelt?</target>
diff --git a/FreeFileSync/Build/Languages/dutch.lng b/FreeFileSync/Build/Languages/dutch.lng
index 93753618..1f40dad3 100644
--- a/FreeFileSync/Build/Languages/dutch.lng
+++ b/FreeFileSync/Build/Languages/dutch.lng
@@ -615,8 +615,8 @@ De opdracht wordt geactiveerd als:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync is actueel.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Kan geen verbinding maken met FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Kan geen verbinding maken met www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Kan online niet het actuele FreeFileSync versienummer vinden. Wilt u handmatig controleren?</target>
diff --git a/FreeFileSync/Build/Languages/english_uk.lng b/FreeFileSync/Build/Languages/english_uk.lng
index 60e334e5..ec4e344d 100644
--- a/FreeFileSync/Build/Languages/english_uk.lng
+++ b/FreeFileSync/Build/Languages/english_uk.lng
@@ -615,8 +615,8 @@ The command is triggered if:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync is up to date.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Unable to connect to FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Unable to connect to www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Cannot find current FreeFileSync version number online. Do you want to check manually?</target>
diff --git a/FreeFileSync/Build/Languages/finnish.lng b/FreeFileSync/Build/Languages/finnish.lng
index e499c8c3..a39ff83c 100644
--- a/FreeFileSync/Build/Languages/finnish.lng
+++ b/FreeFileSync/Build/Languages/finnish.lng
@@ -615,8 +615,8 @@ Käsky suoritetaan jos:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync on ajan tasalla.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Ei yhteyttä FreeFileSync.org:iin.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Ei yhteyttä www.freefilesync.org:iin.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Nykyistä FreeFileSyncin versiota ei löydy verkosta. Suoritetaanko manuaalinen haku?</target>
diff --git a/FreeFileSync/Build/Languages/french.lng b/FreeFileSync/Build/Languages/french.lng
index 46e6adb7..acb5f1dc 100644
--- a/FreeFileSync/Build/Languages/french.lng
+++ b/FreeFileSync/Build/Languages/french.lng
@@ -615,8 +615,8 @@ La commande est déclenchée si :
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync est à jour.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Impossible de se connecter à FreeFileSync.org</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Impossible de se connecter à www.freefilesync.org</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Impossible de trouver en ligne une nouvelle version de FreeFileSync.Voulez-vous le faire manuellement ?</target>
diff --git a/FreeFileSync/Build/Languages/german.lng b/FreeFileSync/Build/Languages/german.lng
index 487319f8..8889b16b 100644
--- a/FreeFileSync/Build/Languages/german.lng
+++ b/FreeFileSync/Build/Languages/german.lng
@@ -630,8 +630,8 @@ Die Befehlszeile wird ausgelöst, wenn:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync ist auf dem neuesten Stand.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Es kann keine Verbindung zu FreeFileSync.org aufgebaut werden.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Es kann keine Verbindung zu www.freefilesync.org aufgebaut werden.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Die aktuelle FreeFileSync Versionsnummer wurde online nicht gefunden. Möchten Sie manuell prüfen?</target>
@@ -877,7 +877,7 @@ Die Befehlszeile wird ausgelöst, wenn:
<target>Maximum:</target>
<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source>
-<target>Wählen Sie Filterregeln aus, um einzelne Dateien von der Synchronisation auszuschließen. Geben Sie Dateipfade relativ zu ihrem zugehörigen Ordnerpaar an.</target>
+<target>Wählen Sie Filterregeln aus, um einzelne Dateien von der Synchronisation auszuschließen. Geben Sie Dateipfade relativ zum zugehörigen Ordnerpaar an.</target>
<source>C&lear</source>
<target>&Löschen</target>
diff --git a/FreeFileSync/Build/Languages/greek.lng b/FreeFileSync/Build/Languages/greek.lng
index 6fb8ba84..37042e12 100644
--- a/FreeFileSync/Build/Languages/greek.lng
+++ b/FreeFileSync/Build/Languages/greek.lng
@@ -615,8 +615,8 @@ The command is triggered if:
<source>FreeFileSync is up to date.</source>
<target>Το FreeFileSync είναι ενημερωμένο.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Αδυναμία επικοινωνίας με το FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Αδυναμία επικοινωνίας με το www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Ο αριθμός της τρέχουσας έκδοσης του FreeFileSync δεν βρέθηκε στο δίκτυο. Θέλετε να το ελέγξετε εσείς;</target>
diff --git a/FreeFileSync/Build/Languages/hebrew.lng b/FreeFileSync/Build/Languages/hebrew.lng
index 51465750..e50eb86b 100644
--- a/FreeFileSync/Build/Languages/hebrew.lng
+++ b/FreeFileSync/Build/Languages/hebrew.lng
@@ -615,8 +615,8 @@ The command is triggered if:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync מעודכן לגירסה האחרונה.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>אין תקשורת אל FreeFileSync.org</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>אין תקשורת אל www.freefilesync.org</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>לא מוצא מספר גירסה עדכנית של FreeFileSync באופן מכוון. האם אתה רוצה לבדוק באופן ידני?</target>
diff --git a/FreeFileSync/Build/Languages/hindi.lng b/FreeFileSync/Build/Languages/hindi.lng
new file mode 100644
index 00000000..b08df15d
--- /dev/null
+++ b/FreeFileSync/Build/Languages/hindi.lng
@@ -0,0 +1,1657 @@
+<header>
+ <language>हिन्दी</language>
+ <translator>अमोल खिस्ते</translator>
+ <locale>hi_IN</locale>
+ <image>flag_india.png</image>
+ <plural_count>2</plural_count>
+ <plural_definition>n == 1 ? 0 : 1</plural_definition>
+</header>
+
+<source>Both sides have changed since last synchronization.</source>
+<target>पिछ्ले सिंक्रनाइज़ेशन के बाद से दोनो तरफ बदलाव है।</target>
+
+<source>Cannot determine sync-direction:</source>
+<target>सिंक्रनाइज़ेशन-दिशा का निर्धारण नहीं किया जा सकता :</target>
+
+<source>No change since last synchronization.</source>
+<target>पिछ्ले सिंक्रनाइज़ेशन के बाद से कोई बदलाव नहीं है।</target>
+
+<source>The database entry is not in sync considering current settings.</source>
+<target>वर्तमान सेटिंग्स के अनुसार डेटाबेस प्रविष्टि सिंक्रनाइज़्ड नहीं है।</target>
+
+<source>Setting default synchronization directions: Old files will be overwritten with newer files.</source>
+<target>डिफ़ॉल्ट सिंक्रनाइज़ेशन दिशाएँ सेट हो रही हैं : पुरानी फ़ाइल्स नई फ़ाइल्स से अधिलेखित होंगी।</target>
+
+<source>Checking recycle bin availability for folder %x...</source>
+<target>%x फ़ोल्डर के लिए रीसायकल बिन की उपलब्धता की जाँच हो रही है...</target>
+
+<source>Moving file %x to the recycle bin</source>
+<target>%x फ़ाइल को रीसायकल बिन में ले जाया जा रहा है</target>
+
+<source>Moving folder %x to the recycle bin</source>
+<target>%x फ़ोल्डर को रीसायकल बिन में ले जाया जा रहा है</target>
+
+<source>Moving symbolic link %x to the recycle bin</source>
+<target>%x प्रतीकात्मक कड़ी को रीसायकल बिन में ले जाया जा रहा है</target>
+
+<source>Deleting file %x</source>
+<target>%x फ़ाइल हटाया जा रहा है</target>
+
+<source>Deleting folder %x</source>
+<target>%x फ़ोल्डर हटाया जा रहा है</target>
+
+<source>Deleting symbolic link %x</source>
+<target>%x प्रतीकात्मक कड़ी हटाया जा रहा है</target>
+
+<source>The recycle bin is not available for the following folders. Files will be deleted permanently instead:</source>
+<target>रीसायकल बिन निम्न फ़ोलडर्स के लिए उपलब्ध नहीं है। फ़ाइल्स को स्थायी रूप से हटाया जाएगा :</target>
+
+<source>An exception occurred</source>
+<target>कोई अपवाद हुआ</target>
+
+<source>A directory path is expected after %x.</source>
+<target>%x के बाद कोई निर्देशिका पथ अपेक्षित है।</target>
+
+<source>Syntax error</source>
+<target>वाक्य-विन्यास त्रुटि</target>
+
+<source>Cannot find file %x.</source>
+<target>फ़ाइल %x नहीं मिली।</target>
+
+<source>File %x does not contain a valid configuration.</source>
+<target>%x फ़ाइल में वैध कॉन्फ़िगरेशन नहीं है।</target>
+
+<source>Unequal number of left and right directories specified.</source>
+<target>बाईं और दाईं निर्देशिकाओं की असमान संख्या निर्दिष्टित।</target>
+
+<source>The config file must not contain settings at directory pair level when directories are set via command line.</source>
+<target>कॉन्फ़िग फ़ाइल में निर्देशिका जोडी स्तर पर सेटिंग्स नहीं होने चाहिए जब निर्देशिकाएँ आदेश-पंक्ति से सेट हुई हों।</target>
+
+<source>Directories cannot be set for more than one configuration file.</source>
+<target>एक से अधिक कॉन्फ़िगरेशन फ़ाइल के लिए निर्देशिकाएँ सेट नहीं हो सकती।</target>
+
+<source>Command line</source>
+<target>आदेश-पंक्ति</target>
+
+<source>Syntax:</source>
+<target>वाक्य-विन्यास :</target>
+
+<source>global config file:</source>
+<target>सार्वत्रिक कॉन्फ़िग फ़ाइल :</target>
+
+<source>config files:</source>
+<target>कॉन्फ़िग फ़ाइल्स :</target>
+
+<source>directory</source>
+<target>निर्देशिका</target>
+
+<source>Path to an alternate GlobalSettings.xml file.</source>
+<target>वैकल्पिक GlobalSettings.xml फ़ाइल का पथ।</target>
+
+<source>Any number of FreeFileSync .ffs_gui and/or .ffs_batch configuration files.</source>
+<target>कितने भी FreeFileSync .ffs_gui और/या .ffs_batch कॉन्फ़िगरेशन फ़ाइल्स।</target>
+
+<source>Any number of alternative directory pairs for at most one config file.</source>
+<target>कितने भी वैकलपिक निर्देशिका जोडे अधिक से अधिक एक कॉन्फ़िग फ़ाइल के लिए।</target>
+
+<source>Open configuration for edit without executing.</source>
+<target>कॉन्फ़िगरेशन को बिना निष्पादित किए संपादन के लिए खोलें।</target>
+
+<source>Cannot find the following folders:</source>
+<target>निम्न फ़ोलडर्स नहीं मिले :</target>
+
+<source>You can ignore this error to consider each folder as empty. The folders then will be created automatically during synchronization.</source>
+<target>हर फ़ोल्डर को खाली समझकर आप इस त्रुटि को अनदेखा कर सकते हो। फिर सिंक्रनाइज़ेशन के दौरान फ़ोलडर्स अपने आप बनेंगे।</target>
+
+<source>A folder input field is empty.</source>
+<target>कोई फ़ोल्डर इनपुट प्रविष्टि खाली है।</target>
+
+<source>The corresponding folder will be considered as empty.</source>
+<target>तद्नुरूप फ़ोल्डर को खाली माना जाएगा।</target>
+
+<source>The following folder paths are dependent from each other:</source>
+<target>निम्न फ़ोलडर्स के पथ एक दूसरे पर निर्भर हैं :</target>
+
+<source>File %x has an invalid date.</source>
+<target>%x फ़ाइल का दिनांक अवैध है।</target>
+
+<source>Date:</source>
+<target>दिनांक:</target>
+
+<source>Files %x have the same date but a different size.</source>
+<target>%x फ़ाइल्स का दिनांक समान है पर आकार भिन्न है।</target>
+
+<source>Size:</source>
+<target>आकार:</target>
+
+<source>Content comparison was skipped for excluded files %x.</source>
+<target>%x अपवर्जित फ़ाइल्स के लिए सामग्री तुलना छोड़ दी गई।</target>
+
+<source>Items differ in attributes only</source>
+<target>आइटम्स के केवल गुण ही भिन्न हैं।</target>
+
+<source>Resolving symbolic link %x</source>
+<target>%x प्रतीकात्मक कड़ी को हल किया जा रहा है</target>
+
+<source>Comparing content of files %x</source>
+<target>%x फ़ाइल्स की सामग्री तुलना हो रही है</target>
+
+<source>Generating file list...</source>
+<target>फ़ाइल सूची बनाई जा रही है...</target>
+
+<source>Starting comparison</source>
+<target>तुलना शुरू हो रही है</target>
+
+<source>Calculating sync directions...</source>
+<target>सिंक्रनाइज़ेशन दिशा का परिकलन हो रहा है...</target>
+
+<source>Out of memory.</source>
+<target>स्मृति से बाहर।</target>
+
+<source>Item exists on left side only</source>
+<target>आइटम केवल बाईं तरफ मौजूद है।</target>
+
+<source>Item exists on right side only</source>
+<target>आइटम केवल दाईं तरफ मौजूद है।</target>
+
+<source>Left side is newer</source>
+<target>बायां पक्ष अधिक नया है</target>
+
+<source>Right side is newer</source>
+<target>दायां पक्ष अधिक नया है</target>
+
+<source>Items have different content</source>
+<target>आइटम्स की सामग्री भिन्न है।</target>
+
+<source>Both sides are equal</source>
+<target>दोनों पक्ष समान हैं।</target>
+
+<source>Conflict/item cannot be categorized</source>
+<target>विरोध/आइटम को वर्गीकृत नहीं किया जा सकता</target>
+
+<source>Copy new item to left</source>
+<target>नए आइटम की बाईं तरफ प्रतिलिपि बनाएँ</target>
+
+<source>Copy new item to right</source>
+<target>नए आइटम की दाईं तरफ प्रतिलिपि बनाएँ</target>
+
+<source>Delete left item</source>
+<target>बायां आइटम हटाएँ</target>
+
+<source>Delete right item</source>
+<target>दायां आइटम हटाएँ</target>
+
+<source>Move file on left</source>
+<target>फ़ाइल को बाईं तरफ खिसकाएँ</target>
+
+<source>Move file on right</source>
+<target>फ़ाइल को दाईं तरफ खिसकाएँ</target>
+
+<source>Update left item</source>
+<target>बायां आइटम अद्यतन करें</target>
+
+<source>Update right item</source>
+<target>दायां आइटम अद्यतन करें</target>
+
+<source>Do nothing</source>
+<target>कुछ ना करें</target>
+
+<source>Update attributes on left</source>
+<target>बाईं तरफ के गुण अद्यतन करें</target>
+
+<source>Update attributes on right</source>
+<target>दाईं तरफ के गुण अद्यतन करें</target>
+
+<source>
+<pluralform>1 byte</pluralform>
+<pluralform>%x bytes</pluralform>
+</source>
+<target>
+<pluralform>1 बाइट</pluralform>
+<pluralform>%x बाइट्स</pluralform>
+</target>
+
+<source>%x MB</source>
+<target>%x MB</target>
+
+<source>%x KB</source>
+<target>%x KB</target>
+
+<source>%x GB</source>
+<target>%x GB</target>
+
+<source>Cannot load file %x.</source>
+<target>फ़ाइल %x लोड करने में असमर्थ।</target>
+
+<source>Database file %x is incompatible.</source>
+<target>डेटाबेस फ़ाइल %x विसंगत है।</target>
+
+<source>Initial synchronization:</source>
+<target>प्रारंभिक सिंक्रनाइज़ेशन :</target>
+
+<source>Database file %x does not yet exist.</source>
+<target>डेटाबेस फ़ाइल %x अभी तक मौजूद नहीं है।</target>
+
+<source>Database file is corrupt:</source>
+<target>डेटाबेस फ़ाइल दूषित है :</target>
+
+<source>Cannot write file %x.</source>
+<target>फ़ाइल %x लिखने में असमर्थ।</target>
+
+<source>Cannot read file %x.</source>
+<target>फ़ाइल %x पढ़ने में असमर्थ।</target>
+
+<source>Database files do not share a common session.</source>
+<target>डेटाबेस फ़ाइल्स कोई आम सत्र साझा नहीं करते।</target>
+
+<source>Cannot resolve symbolic link %x.</source>
+<target>सिंबॉलिक लिंक %x को हल नहीं कर सकते।</target>
+
+<source>Cannot open directory %x.</source>
+<target>निर्देशिका %x खोल नहीं सकते।</target>
+
+<source>Cannot enumerate directory %x.</source>
+<target>निर्देशिका %x इन्यूमरेट नहीं कर सकते।</target>
+
+<source>Cannot read file attributes of %x.</source>
+<target>%x के फ़ाइल गुण पढ़ने में असमर्थ।</target>
+
+<source>Searching for folder %x...</source>
+<target>फ़ोल्डर %x की खोज हो रही है...</target>
+
+<source>Cannot get process information.</source>
+<target>प्रक्रिया जानकारी प्राप्त करने में असमर्थ।</target>
+
+<source>Waiting while directory is locked:</source>
+<target>प्रतीक्षारत जब कि निर्देशिका अवरोधित है :</target>
+
+<source>Lock owner:</source>
+<target>स्वामी अवरोध करें :</target>
+
+<source>
+<pluralform>1 sec</pluralform>
+<pluralform>%x sec</pluralform>
+</source>
+<target>
+<pluralform>1 सेकंड</pluralform>
+<pluralform>%x सेकंड्स</pluralform>
+</target>
+
+<source>Detecting abandoned lock...</source>
+<target>अपसर्जित अवरोध पता लगाया जा रहा है...</target>
+
+<source>Creating file %x</source>
+<target>फ़ाइल %x बनाई जा रही है</target>
+
+<source>Saving file %x...</source>
+<target>फ़ाइल %x सहेजी जा रही है...</target>
+
+<source>Items processed:</source>
+<target>संसाधित आइटम्स :</target>
+
+<source>Items remaining:</source>
+<target>शेष आइटम्स :</target>
+
+<source>Total time:</source>
+<target>कुल समय :</target>
+
+<source>Error parsing file %x, row %y, column %z.</source>
+<target>फ़ाइल %x, पंक्ति %y, स्तंभ %z पदच्छेदन में त्रुटि।</target>
+
+<source>Cannot set directory lock for %x.</source>
+<target>%x के लिए निर्देशिका अवरोध सेट नहीं कर सकते।</target>
+
+<source>Scanning:</source>
+<target>स्कैनिंग :</target>
+
+<source>
+<pluralform>1 thread</pluralform>
+<pluralform>%x threads</pluralform>
+</source>
+<target>
+<pluralform>1 थ्रेड</pluralform>
+<pluralform>%x थ्रेड्स</pluralform>
+</target>
+
+<source>/sec</source>
+<target>/सेकंड</target>
+
+<source>%x items/sec</source>
+<target>%x आइटम्स/सेकंड</target>
+
+<source>Show in Explorer</source>
+<target>एक्सप्लोरर में दिखाएँ</target>
+
+<source>Open with default application</source>
+<target>डिफ़ॉल्ट अ‍ॅप्लिकेशन के साथ खोलें</target>
+
+<source>Browse directory</source>
+<target>निर्देशिका ब्राउज़ करें</target>
+
+<source>Cannot access the Volume Shadow Copy Service.</source>
+<target>वॉल्यूम शॅडो कॉपी सर्व्हिस अभिगम करने में असमर्थ।</target>
+
+<source>Please use FreeFileSync 64-bit version to create shadow copies on this system.</source>
+<target>इस सिस्टम पर शॅडो कॉपियां बनाने के लिए कृपया FreeFileSync 64-बिट संस्करण उपयोग करें।</target>
+
+<source>Cannot determine volume name for %x.</source>
+<target>%x के लिए वॉल्यूम नाम निर्धारण नहीं किया जा सकता।</target>
+
+<source>Volume name %x is not part of file path %y.</source>
+<target>%x वॉल्यूम नाम %y फ़ाइल पथ का हिस्सा नहीं है।</target>
+
+<source>Stop requested: Waiting for current operation to finish...</source>
+<target>रोकने का अनुरोध हुआ: वर्तमान कार्य पूर्ण होने की प्रतीक्षा में...</target>
+
+<source>Unable to create time stamp for versioning:</source>
+<target>संस्करण के लिए समय मोहर बनाने में असमर्थ :</target>
+
+<source>&Open...</source>
+<target>खोलें (&O)...</target>
+
+<source>Save &as...</source>
+<target>इस रूप में सहेजें (&a)...</target>
+
+<source>E&xit</source>
+<target>बाहर निकलें (&x)</target>
+
+<source>&File</source>
+<target>फ़ाइल (&F)</target>
+
+<source>&View help</source>
+<target>मदद देखें (&V)</target>
+
+<source>&About</source>
+<target>बारे में (&A)</target>
+
+<source>&Help</source>
+<target>मदद (&H)</target>
+
+<source>Usage:</source>
+<target>प्रयोग :</target>
+
+<source>1. Select folders to watch.</source>
+<target>1. निगरानी के लिए फ़ोलडर्स चुनिए।</target>
+
+<source>2. Enter a command line.</source>
+<target>2. आदेश-पंक्ति प्रविष्ट करें।</target>
+
+<source>3. Press 'Start'.</source>
+<target>3. 'प्रारंभ' दबाएँ.</target>
+
+<source>To get started just import a .ffs_batch file.</source>
+<target>प्रारंभ करने के लिए केवल कोई .ffs_batch फ़ाइल आयात करें।</target>
+
+<source>Folders to watch:</source>
+<target>इन फ़ोलडर्स की निगरानी होगी:</target>
+
+<source>Add folder</source>
+<target>फ़ोल्डर जोडें</target>
+
+<source>Remove folder</source>
+<target>फ़ोल्डर निकालें</target>
+
+<source>Browse</source>
+<target>ब्राउज़</target>
+
+<source>Select a folder</source>
+<target>फ़ोल्डर चुनें</target>
+
+<source>Idle time (in seconds):</source>
+<target>निष्क्रिय समय (सेकंड में):</target>
+
+<source>Idle time between last detected change and execution of command</source>
+<target>पिछ्ला पता लगाया हुआ परिवर्तन और आदेश के निष्पादन के बीच का निष्क्रिय समय</target>
+
+<source>Command line:</source>
+<target>आदेश-पंक्ति :</target>
+
+<source>
+The command is triggered if:
+- files or subfolders change
+- new folders arrive (e.g. USB stick insert)
+</source>
+<target>
+यह आदेश सक्रिय होता है यदि:
+- फ़ाइल्स या उप-फ़ोलडर्स बदले
+- नए फ़ोलडर्स आए (उदा. USB स्टिक डालने पर)
+</target>
+
+<source>&Start</source>
+<target>प्रारंभ (&S)</target>
+
+<source>About</source>
+<target>बारे में</target>
+
+<source>Build: %x</source>
+<target>बिल्ड: %x</target>
+
+<source>All files</source>
+<target>सारी फ़ाइल्स</target>
+
+<source>Automated Synchronization</source>
+<target>स्वचालित सिंक्रनाइज़ेशन</target>
+
+<source>Directory monitoring active</source>
+<target>निर्देशिका निगरानी सक्रिय</target>
+
+<source>Waiting until all directories are available...</source>
+<target>सब निर्देशिकाएँ उपलब्ध होने की प्रतिक्षा में...</target>
+
+<source>Error</source>
+<target>त्रुटि</target>
+
+<source>&Restore</source>
+<target>पुनर्स्थापित करें (&R)</target>
+
+<source>&Show error</source>
+<target>त्रुटि दिखाएँ (&S)</target>
+
+<source>&Quit</source>
+<target>बाहर निकलें (&Q)</target>
+
+<source>Incorrect command line:</source>
+<target>अनुचित आदेश-पंक्ति :</target>
+
+<source>&Retry</source>
+<target>पुनः प्रयास (&R)</target>
+
+<source>File content</source>
+<target>फ़ाइल सामग्री</target>
+
+<source>File time and size</source>
+<target>फ़ाइल समय और आकार</target>
+
+<source>Two way</source>
+<target>दुतरफा</target>
+
+<source>Mirror</source>
+<target>प्रतिबिंबित करें</target>
+
+<source>Update</source>
+<target>अद्यतन करें</target>
+
+<source>Custom</source>
+<target>अनुकूल</target>
+
+<source>Multiple...</source>
+<target>एकाधिक...</target>
+
+<source>Moving file %x to %y</source>
+<target>फ़ाइल %x को %y यहाँ ले जाया जा रहा है</target>
+
+<source>Moving folder %x to %y</source>
+<target>फ़ोल्डर %x को %y यहाँ ले जाया जा रहा है</target>
+
+<source>Moving symbolic link %x to %y</source>
+<target>प्रतीकात्मक कड़ी %x को %y यहाँ ले जाया जा रहा है</target>
+
+<source>Removing old versions...</source>
+<target>पुराने संस्करणों को हटाया जा रहा है...</target>
+
+<source>Creating symbolic link %x</source>
+<target>प्रतीकात्मक कड़ी %x बनाया जा रहा है</target>
+
+<source>Creating folder %x</source>
+<target>फ़ोल्डर %x बनाया हा रहा है</target>
+
+<source>Updating file %x</source>
+<target>फ़ाइल %x अद्यतित हो रही है</target>
+
+<source>Updating symbolic link %x</source>
+<target>प्रतीकात्मक कड़ी %x अद्यतित हो रही है</target>
+
+<source>Verifying file %x</source>
+<target>फ़ाइल %x सत्यापित हो रही है</target>
+
+<source>Updating attributes of %x</source>
+<target>%x के गुण अद्यतित हो रहे हैं</target>
+
+<source>Creating a Volume Shadow Copy for %x...</source>
+<target>%x के लिए वॉल्यूम शॅडो कॉपी बनाया जा रहा है...</target>
+
+<source>Data verification error: %x and %y have different content.</source>
+<target>डेटा सत्यापन त्रुटि: %x और %y की सामग्री भिन्न है।</target>
+
+<source>Target folder %x already existing.</source>
+<target>गंतव्य फ़ोल्डर %x पहले से ही विद्यमान।</target>
+
+<source>Cannot find folder %x.</source>
+<target>फ़ोल्डर %x नहीं मिला।</target>
+
+<source>Target folder input field must not be empty.</source>
+<target>गंतव्य फ़ोल्डर प्रविष्टि खाली नहीं हो सकती।</target>
+
+<source>Source folder %x not found.</source>
+<target>स्रोत फ़ोल्डर %x नहीं मिला।</target>
+
+<source>Please enter a target folder for versioning.</source>
+<target>कृपया संस्करण करने के लिए गंतव्य फ़ोल्डर प्रविष्ट करें।</target>
+
+<source>The following items have unresolved conflicts and will not be synchronized:</source>
+<target>निम्न आइटम्स में हल नहीं किये गए विरोध हैं और वे सिंक्रनाइज़ नहीं होंगे :</target>
+
+<source>The following folders are significantly different. Make sure you are matching the correct folders for synchronization.</source>
+<target>निम्न फ़ोलडर्स उल्लेखनीय ढंग से भिन्न हैं। सुनिश्चित करें की आप सिंक्रनाइज़ेशन के लिए सही फ़ोल्डर्स मिला रहे हैं।</target>
+
+<source>Not enough free disk space available in:</source>
+<target>यहाँ पर्याप्त खाली डिस्क जगह उपलब्ध नहीं :</target>
+
+<source>Required:</source>
+<target>आवश्यक :</target>
+
+<source>Available:</source>
+<target>उपलब्ध :</target>
+
+<source>Multiple folder pairs write to a common subfolder. Please review your configuration.</source>
+<target>एकाधिक फ़ोल्डर जोडें समान उपफ़ोल्डर में लिखते हैं। कृपया अपने कॉन्फ़िगरेशन की समीक्षा करें।</target>
+
+<source>Synchronizing folder pair:</source>
+<target>यह फ़ोल्डर जोडा सिंक्रनाइज़ हो रहा है:</target>
+
+<source>Generating database...</source>
+<target>डेटाबेस बनाया जा रहा है...</target>
+
+<source>job name</source>
+<target>कार्य नाम</target>
+
+<source>Synchronization stopped</source>
+<target>सिंक्रनाइज़ेशन बंद कर दिया गया</target>
+
+<source>Synchronization completed with errors</source>
+<target>सिंक्रनाइज़ेशन त्रुटियों सहित पूरा हुआ</target>
+
+<source>Synchronization completed with warnings</source>
+<target>सिंक्रनाइज़ेशन चेतावनियों सहित पूरा हुआ</target>
+
+<source>Nothing to synchronize</source>
+<target>सिंक्रनाइज़ करने के लिए कुछ नहीं</target>
+
+<source>Synchronization completed successfully</source>
+<target>सिंक्रनाइज़ेशन सफलतापूर्वक पूरा हुआ</target>
+
+<source>Cleaning up old log files...</source>
+<target>पुराने लॉग फ़ाइल्स की सफाई हो रही है...</target>
+
+<source>Stopped</source>
+<target>रुका</target>
+
+<source>Warning</source>
+<target>चेतावनी</target>
+
+<source>You can switch to FreeFileSync's main window to resolve this issue.</source>
+<target>इस समस्या को हल करने के लिए आप FreeFileSync के मुख्य विंडो में जा सकते हैं।</target>
+
+<source>&Don't show this warning again</source>
+<target>इस चेतावनी को दोबारा न दिखाएँ (&D)</target>
+
+<source>&Ignore</source>
+<target>अनदेखा करें (&I)</target>
+
+<source>&Switch</source>
+<target>अदला-बदली करें (स्विच) (&S)</target>
+
+<source>Switching to FreeFileSync's main window</source>
+<target>FreeFileSync के मुख्य विंडो में जाएँ</target>
+
+<source>
+<pluralform>Automatic retry in 1 second...</pluralform>
+<pluralform>Automatic retry in %x seconds...</pluralform>
+</source>
+<target>
+<pluralform>स्वचालित पुनःप्रयास 1 सेकंड में...</pluralform>
+<pluralform>स्वचालित पुनःप्रयास %x सेकंड में...</pluralform>
+</target>
+
+<source>&Ignore subsequent errors</source>
+<target>आगामी त्रुटियों को अनदेखा करें (&I)</target>
+
+<source>Retrying operation...</source>
+<target>कार्य का पुनःप्रयास हो रहा है...</target>
+
+<source>Serious Error</source>
+<target>गंभीर त्रुटि</target>
+
+<source>Check for Program Updates</source>
+<target>प्रोग्राम अद्यतनों के लिए जाँच करें</target>
+
+<source>A new version of FreeFileSync is available:</source>
+<target>FreeFileSync का नया संस्करण उपलब्ध है :</target>
+
+<source>Download now?</source>
+<target>अभी डाउनलोड करें?</target>
+
+<source>&Download</source>
+<target>डाउनलोड (&D)</target>
+
+<source>FreeFileSync is up to date.</source>
+<target>FreeFileSync नवीनतम है।</target>
+
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>www.freefilesync.org से जुड़ने में असमर्थ।</target>
+
+<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
+<target>वर्तमान FreeFileSync संस्करण संख्या ऑनलाइन नहीं मिल सकती. क्या आप मैन्युअल रूप से जाँच करना चाहते हैं?</target>
+
+<source>&Check</source>
+<target>जाँच करें (&C)</target>
+
+<source>Symlink</source>
+<target>सिमलिंक</target>
+
+<source>Folder</source>
+<target>फ़ोल्डर</target>
+
+<source>Full path</source>
+<target>पूरा पथ</target>
+
+<source>Name</source>
+<target>नाम</target>
+
+<source>Relative folder</source>
+<target>सापेक्ष फ़ोल्डर</target>
+
+<source>Base folder</source>
+<target>मूल फ़ोल्डर</target>
+
+<source>Size</source>
+<target>आकार</target>
+
+<source>Date</source>
+<target>दिनांक</target>
+
+<source>Extension</source>
+<target>विस्तार</target>
+
+<source>Category</source>
+<target>वर्ग</target>
+
+<source>Action</source>
+<target>कार्य</target>
+
+<source>Drag && drop</source>
+<target>ड्रॅग एण्ड ड्रॉप</target>
+
+<source>Local comparison settings</source>
+<target>स्थानीय तुलना सेटिंग्स</target>
+
+<source>Local synchronization settings</source>
+<target>स्थानीय सिंक्रनाइज़ेशन सेटिंग्स</target>
+
+<source>Local filter</source>
+<target>स्थानीय फ़िल्टर</target>
+
+<source>Active</source>
+<target>सक्रिय</target>
+
+<source>None</source>
+<target>कुछ नहीं</target>
+
+<source>Remove local settings</source>
+<target>स्थानीय सेटिंग्स निकालें</target>
+
+<source>Clear local filter</source>
+<target>स्थानीय फ़िल्टर हटाएँ</target>
+
+<source>Copy</source>
+<target>प्रतिलिपि</target>
+
+<source>Paste</source>
+<target>चिपकाएँ</target>
+
+<source>Local Synchronization Settings</source>
+<target>स्थानीय सिंक्रनाइज़ेशन सेटिंग्स</target>
+
+<source>&New</source>
+<target>नया (&N)</target>
+
+<source>&Save</source>
+<target>सहेजें (&S)</target>
+
+<source>Save as &batch job...</source>
+<target>बॅच जॉब के रूप में सहेजें (&b)...</target>
+
+<source>Start &comparison</source>
+<target>तुलना शुरू करें (&c)</target>
+
+<source>C&omparison settings</source>
+<target>तुलना सेटिंग्स (&o)</target>
+
+<source>&Filter settings</source>
+<target>फ़िल्टर सेटिंग्स (&F)</target>
+
+<source>S&ynchronization settings</source>
+<target>सिंक्रनाइज़ेशन सेटिंग्स (&y)</target>
+
+<source>Start &synchronization</source>
+<target>सिंक्रनाइज़ेशन शुरू करें (&s)</target>
+
+<source>&Actions</source>
+<target>कार्य (&A)</target>
+
+<source>&Options</source>
+<target>विकल्प (&O)</target>
+
+<source>&Language</source>
+<target>भाषा (&L)</target>
+
+<source>&Find...</source>
+<target>ढूंढें (&F)...</target>
+
+<source>&Reset layout</source>
+<target>अभिन्यास रीसेट करें (&R)</target>
+
+<source>&Export file list...</source>
+<target>फ़ाइल सूचि निर्यात करें (&E)...</target>
+
+<source>&Tools</source>
+<target>उपकरण (&T)</target>
+
+<source>&Check for new version</source>
+<target>नए संस्करण के लिए जांचें (&C)</target>
+
+<source>&Check now</source>
+<target>अभी जांचें (&C)</target>
+
+<source>Check &automatically once a week</source>
+<target>सप्ताह में एक बार स्वचालित रूप से जांचें (&a)</target>
+
+<source>Cancel</source>
+<target>रद्द करें</target>
+
+<source>Compare</source>
+<target>तुलना करें</target>
+
+<source>Synchronize</source>
+<target>सिंक्रनाइज़</target>
+
+<source>Add folder pair</source>
+<target>फ़ोल्डर जोडा जोडें</target>
+
+<source>Remove folder pair</source>
+<target>फ़ोल्डर जोडा निकालें</target>
+
+<source>Swap sides</source>
+<target>पक्ष गमागम करें</target>
+
+<source>Close search bar</source>
+<target>खोज पट्टी बंद करें</target>
+
+<source>Find:</source>
+<target>ढूंढें :</target>
+
+<source>Match case</source>
+<target>केस मिलाएँ</target>
+
+<source>New</source>
+<target>नया</target>
+
+<source>Open...</source>
+<target>खोलें...</target>
+
+<source>Save</source>
+<target>सहेजें</target>
+
+<source>Save as...</source>
+<target>इस रूप से सहेजें...</target>
+
+<source>View type:</source>
+<target>दृश्य प्रकार :</target>
+
+<source>Select view:</source>
+<target>दृश्य चुनें :</target>
+
+<source>Statistics:</source>
+<target>आंकड़े :</target>
+
+<source>Number of files and folders that will be deleted</source>
+<target>जिन फ़ाइल्स और फ़ोलडर्स को हटाया जाएगा उनकी संख्या</target>
+
+<source>Number of files that will be updated</source>
+<target>जिन फ़ाइल्स का अद्यतन होगा उनकी संख्या</target>
+
+<source>Number of files and folders that will be created</source>
+<target>जिन फ़ाइल्स और फ़ोलडर्स को बनया जाएगा उनकी संख्या</target>
+
+<source>Total bytes to copy</source>
+<target>कॉपी करने के लिए कुल बाइट्स</target>
+
+<source>Use local settings:</source>
+<target>स्थानीय सेटिंग्स का उपयोग करें :</target>
+
+<source>Select a variant:</source>
+<target>प्रकार चुने :</target>
+
+<source>Identify equal files by comparing modification time and size.</source>
+<target>समान फ़ाइल्स पहचानने के लिए संशोधन समय और आकार की तुलना करें।</target>
+
+<source>Identify equal files by comparing the file content.</source>
+<target>समान फ़ाइल्स पहचानने के लिए फ़ाइल सामग्री की तुलना करें।</target>
+
+<source>Ignore time shift (in hours)</source>
+<target>समय परिवर्तन अनदेखा करें (घंटों में)</target>
+
+<source>Consider file times with specified offset as equal</source>
+<target>निर्दिष्ट खसका में फ़ाइल समयों को समान समझें</target>
+
+<source>Handle daylight saving time</source>
+<target>दिवालोक बचत समय (डेलाईट सेविंग टाइम) प्रहस्तन करें</target>
+
+<source>Include symbolic links:</source>
+<target>प्रतीकात्मक कडियां शामिल करें :</target>
+
+<source>Direct</source>
+<target>प्रत्यक्ष</target>
+
+<source>Follow</source>
+<target>अनुगमन करें</target>
+
+<source>More information</source>
+<target>अधिक जानकारी</target>
+
+<source>Local settings:</source>
+<target>स्थानीय सेटिंग्स :</target>
+
+<source>Include:</source>
+<target>शामिल करें :</target>
+
+<source>Exclude:</source>
+<target>वर्जित करें :</target>
+
+<source>Show examples</source>
+<target>उदाहरण दिखाएँ</target>
+
+<source>Time span:</source>
+<target>समय अवधि :</target>
+
+<source>File size:</source>
+<target>फ़ाइल आकार :</target>
+
+<source>Minimum:</source>
+<target>न्यूनतम :</target>
+
+<source>Maximum:</source>
+<target>अधिकतम :</target>
+
+<source>Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair.</source>
+<target>सिंक्रनाइज़ेशन से कुछ फ़ाइल्स को वर्जित करने के लिए फ़िल्टर नियमों का चयन करें। फ़ाइल पथों को उनके तद्नुरूप फ़ोल्डर जोडों के सापेक्ष प्रविष्ट करें।</target>
+
+<source>C&lear</source>
+<target>हटाएँ (&l)</target>
+
+<source>Detect moved files</source>
+<target>ले जाई गई फ़ाइल्स का पता लगाएँ</target>
+
+<source>
+- Detection active after initial sync
+- Requires and creates database files
+- Not supported by all file systems
+</source>
+<target>
+- प्रारंभिक सिंक्रनाइज़ेशन के बाद पता लगाना सक्रिय
+- डेटाबेस फ़ाइल्स आवश्यक हैं और बनाता है
+- सभी फ़ाइल सिस्टम के द्वारा समर्थित नहीं
+</target>
+
+<source>Detect synchronization directions with the help of database files</source>
+<target>डेटाबेस फ़ाइल्स की मदद से सिंक्रनाइज़ेशन दिशाओं का पता लगाएँ</target>
+
+<source>Delete files:</source>
+<target>फ़ाइल्स हटाएँ :</target>
+
+<source>&Permanent</source>
+<target>स्थायी (&P)</target>
+
+<source>Delete or overwrite files permanently</source>
+<target>फ़ाइल्स स्थायी रूप से हटाएँ या अधिलेखित करें</target>
+
+<source>&Recycle bin</source>
+<target>रीसायकल बिन (&R)</target>
+
+<source>Back up deleted and overwritten files in the recycle bin</source>
+<target>रीसायकल बिन में हटाई या अधिलेखित फ़ाइल्स बैक अप करें</target>
+
+<source>&Versioning</source>
+<target>संस्करण (&V)</target>
+
+<source>Move files to a user-defined folder</source>
+<target>फ़ाइल्स उपयोगकर्ता-परिभाषित फ़ोल्डर में ले जाएँ</target>
+
+<source>Naming convention:</source>
+<target>नामकरण नीति :</target>
+
+<source>Handle errors:</source>
+<target>त्रुटियां प्रहस्तन करें :</target>
+
+<source>Hide all error and warning messages</source>
+<target>सभी त्रुटि और चेतावनी संदेशों को छुपाएँ</target>
+
+<source>&Pop-up</source>
+<target>पॉप-अप (&P)</target>
+
+<source>Show pop-up on errors or warnings</source>
+<target>त्रुटियों या चेतावनियों पर पॉप-अप दिखाएँ</target>
+
+<source>On completion:</source>
+<target>समापन उपरांत:</target>
+
+<source>OK</source>
+<target>ठीक</target>
+
+<source>Start synchronization now?</source>
+<target>अब सिंक्रनाइज़ेशन शुरू करें?</target>
+
+<source>Variant:</source>
+<target>प्रकार:</target>
+
+<source>&Don't show this dialog again</source>
+<target>यह संवाद बॉक्स दोबारा न दिखाएँ (&D)</target>
+
+<source>Arrange folder pair</source>
+<target>फ़ोल्डर जोडा व्यवस्थित करें</target>
+
+<source>Items found:</source>
+<target>आइटम बरामद :</target>
+
+<source>Time remaining:</source>
+<target>शेष समय :</target>
+
+<source>Time elapsed:</source>
+<target>बीता समय :</target>
+
+<source>Synchronizing...</source>
+<target>सिंक्रनाइज़ हो रहा है...</target>
+
+<source>Minimize to notification area</source>
+<target>अधिसूचना क्षेत्र में मिनिमाइज़ करें</target>
+
+<source>Bytes copied:</source>
+<target>बाइट प्रतिलिपित :</target>
+
+<source>Close</source>
+<target>बंद करें</target>
+
+<source>&Pause</source>
+<target>ठहरें (&P)</target>
+
+<source>Stop</source>
+<target>रोकें</target>
+
+<source>Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x</source>
+<target>उपस्थिति निरपेक्ष सिंक्रनाइज़ेशन के लिए बॅच फ़ाइल बनाएँ। शुरू करने के लिए, किसी कार्य योजनाकार में यह फ़ाइल या अनुसूची डबल क्लिक करें : %x</target>
+
+<source>&Stop</source>
+<target>रोकें (&S)</target>
+
+<source>Stop synchronization at first error</source>
+<target>पहली त्रुटि पर सिंक्रनाइज़ेशन रोकें</target>
+
+<source>Run minimized</source>
+<target>छोटा (मिनिमाइज़) कर के चलाएँ</target>
+
+<source>Save log:</source>
+<target>लॉग सहेजें :</target>
+
+<source>Limit:</source>
+<target>सीमा :</target>
+
+<source>Limit maximum number of log files</source>
+<target>लॉग फ़ाइल्स की अधिकतम संख्या सीमित करें</target>
+
+<source>How can I schedule a batch job?</source>
+<target>मैं कोई बॅच कार्य कैसे अनुसूचित करूँ?</target>
+
+<source>The following settings are used for all synchronization jobs.</source>
+<target>सभी सिंक्रनाइज़ेशन कार्यों के लिए निम्न सेटिंग्स का उपयोग किया जाता है।</target>
+
+<source>Fail-safe file copy</source>
+<target>सुरक्षित फ़ाइल प्रतिलिपि</target>
+
+<source>
+Copy to a temporary file (*.ffs_tmp) before overwriting target.
+This guarantees a consistent state even in case of a serious error.
+</source>
+<target>
+गंतव्य अधिलेखित करने से पहले किसी अस्थायी फ़ाइल (*.ffs_tmp) में प्रतिलिपित करें।
+यह गंभीर त्रुटि की दशा में भी सुसंगत स्थिती सुनिश्चित करता है।
+</target>
+
+<source>(recommended)</source>
+<target>(अनुशंसित)</target>
+
+<source>Copy locked files</source>
+<target>अवरोधित फ़ाइल्स प्रतिलिपित करें</target>
+
+<source>Copy shared or locked files using the Volume Shadow Copy Service.</source>
+<target>साझा या अवरोधित फ़ाइल्स वॉल्यूम शॅडो कॉपी सर्व्हिस के उपयोग से प्रतिलिपित करें।</target>
+
+<source>(requires administrator rights)</source>
+<target>(प्रबंधक अधिकार आवश्यक)</target>
+
+<source>Copy file access permissions</source>
+<target>फ़ाइल अभिगम अनुमतियाँ प्रतिलिपित करें</target>
+
+<source>Transfer file and folder permissions.</source>
+<target>फ़ाइल और फ़ोल्डर अनुमतियाँ स्थानांतर करें।</target>
+
+<source>Automatic retry on error:</source>
+<target>त्रुटि पर स्वचालित पुनः प्रयास करें :</target>
+
+<source>Retry count:</source>
+<target>पुनः प्रयास गणनांक :</target>
+
+<source>Delay (in seconds):</source>
+<target>विलंब (सेकंड में):</target>
+
+<source>Customize context menu:</source>
+<target>प्रासंगिक मेनू अनुकूलित करें :</target>
+
+<source>Description</source>
+<target>विवरण</target>
+
+<source>Show hidden dialogs again</source>
+<target>छिपाये संवाद बक्से फिर से देखाएँ</target>
+
+<source>Show all permanently hidden dialogs and warning messages again</source>
+<target>स्थायी रूप से छिपाये संवाद बॉक्सेस और चेतावनी संदेश फिर से दिखाएँ</target>
+
+<source>&Default</source>
+<target>डिफ़ॉल्ट (&D)</target>
+
+<source>Source code written in C++ using:</source>
+<target>स्रोत कोड C++ में लिखा गया इनके प्रयोग से :</target>
+
+<source>If you like FreeFileSync</source>
+<target>यदि आपको FreeFileSync पसंद है तो</target>
+
+<source>Donate with PayPal</source>
+<target>PayPal (पेपॉल) द्वारा दान करें</target>
+
+<source>Feedback and suggestions are welcome</source>
+<target>प्रतिक्रिया और सुझावों का स्वागत है</target>
+
+<source>Homepage</source>
+<target>मुख पृष्ठ</target>
+
+<source>Email</source>
+<target>ई-मेल</target>
+
+<source>Published under the GNU General Public License</source>
+<target>जीएनयू जनरल पब्लिक लाइसेंस (GNU General Public License) के अंतर्गत प्रकाशित</target>
+
+<source>Many thanks for localization:</source>
+<target>स्थानीयकरण के लिए अनेक आभार :</target>
+
+<source>Save as Batch Job</source>
+<target>बॅच जॉब के रूप में सहेजें</target>
+
+<source>Delete Items</source>
+<target>आइटम हटाएँ</target>
+
+<source>Options</source>
+<target>विकल्प</target>
+
+<source>Select Time Span</source>
+<target>समय अवधि चुनें</target>
+
+<source>&Preferences...</source>
+<target>प्राथमिकताएँ (&P)...</target>
+
+<source>Main Bar</source>
+<target>मुख्य पट्टी</target>
+
+<source>Folder Pairs</source>
+<target>फ़ोल्डर जोडें</target>
+
+<source>Find</source>
+<target>ढूंढें</target>
+
+<source>View Settings</source>
+<target>दृश्य सेटिंग्स</target>
+
+<source>Configuration</source>
+<target>कॉन्फ़िगरेशन</target>
+
+<source>Overview</source>
+<target>अवलोकन</target>
+
+<source>Confirm</source>
+<target>पुष्टि करें</target>
+
+<source>
+<pluralform>Do you really want to execute the command %y for one item?</pluralform>
+<pluralform>Do you really want to execute the command %y for %x items?</pluralform>
+</source>
+<target>
+<pluralform>क्या आप वाकई एक आइटम के लिए %y आदेश निष्पादित करना चाहते हैं?</pluralform>
+<pluralform>क्या आप वाकई %x आइटम्स के लिए %y आदेश निष्पादित करना चाहते हैं?</pluralform>
+</target>
+
+<source>&Execute</source>
+<target>निष्पादित करें (&E)</target>
+
+<source>
+<pluralform>1 directory</pluralform>
+<pluralform>%x directories</pluralform>
+</source>
+<target>
+<pluralform>1 निर्देशिका</pluralform>
+<pluralform>%x निर्देशिकाएँ</pluralform>
+</target>
+
+<source>
+<pluralform>1 file</pluralform>
+<pluralform>%x files</pluralform>
+</source>
+<target>
+<pluralform>1 फ़ाइल</pluralform>
+<pluralform>%x फ़ाइल्स</pluralform>
+</target>
+
+<source>
+<pluralform>Showing %y of 1 row</pluralform>
+<pluralform>Showing %y of %x rows</pluralform>
+</source>
+<target>
+<pluralform>1 पंक्ति में से %y प्रदर्शित</pluralform>
+<pluralform>%x पंक्तियों में से %y प्रदर्शित</pluralform>
+</target>
+
+<source>Set direction:</source>
+<target>दिशा सेट करें :</target>
+
+<source>multiple selection</source>
+<target>एकाधिक चयन</target>
+
+<source>Include via filter:</source>
+<target>फ़िल्टर के द्वारा शामिल करें :</target>
+
+<source>Exclude via filter:</source>
+<target>फ़िल्टर के द्वारा अपवर्जित करें :</target>
+
+<source>Include temporarily</source>
+<target>अस्थायी रूप से शामिल करें</target>
+
+<source>Exclude temporarily</source>
+<target>अस्थायी रूप से अपवर्जित करें</target>
+
+<source>Delete</source>
+<target>हटाएँ</target>
+
+<source>Include all</source>
+<target>सभी शामिल करें</target>
+
+<source>Exclude all</source>
+<target>सभी अपवर्जित करें</target>
+
+<source>Show icons:</source>
+<target>चिन्ह दिखाएँ :</target>
+
+<source>Small</source>
+<target>छोटा</target>
+
+<source>Medium</source>
+<target>मध्यम</target>
+
+<source>Large</source>
+<target>बड़ा</target>
+
+<source>Select time span...</source>
+<target>समय अवधि चुनें...</target>
+
+<source>Show "%x"</source>
+<target>"%x" दिखाएँ</target>
+
+<source>Last session</source>
+<target>पिछला सत्र</target>
+
+<source>Folder Comparison and Synchronization</source>
+<target>फ़ोल्डर तुलना और सिंक्रनाइज़ेशन</target>
+
+<source>Configuration saved</source>
+<target>सहेजा कॉन्फ़िगरेशन</target>
+
+<source>FreeFileSync batch</source>
+<target>FreeFileSync बॅच</target>
+
+<source>Do you want to save changes to %x?</source>
+<target>क्या आप %x के परिवर्तन सहेजना चाहते हैं?</target>
+
+<source>Never save &changes</source>
+<target>परिवर्तनों को कभी भी न सहेजें (&c)</target>
+
+<source>Do&n't save</source>
+<target>नहीं सहेजें (&n)</target>
+
+<source>Delete selected configurations</source>
+<target>चुना कॉन्फ़िगरेशन हटाएँ</target>
+
+<source>Synchronization Settings</source>
+<target>सिंक्रनाइज़ेशन सेटिंग्स</target>
+
+<source>Clear filter</source>
+<target>फ़िल्टर हटाएँ</target>
+
+<source>Show files that exist on left side only</source>
+<target>केवल बाईं तरफ़ मौजूद फ़ाइल्स दिखाएँ</target>
+
+<source>Show files that exist on right side only</source>
+<target>केवल दाईं तरफ़ मौजूद फ़ाइल्स दिखाएँ</target>
+
+<source>Show files that are newer on left</source>
+<target>नवीन फ़ाइल्स को बाईं तरफ़ दिखाएँ</target>
+
+<source>Show files that are newer on right</source>
+<target>नवीन फ़ाइल्स को दाईं तरफ़ दिखाएँ</target>
+
+<source>Show files that are equal</source>
+<target>समान फ़ाइल्स दिखाएँ</target>
+
+<source>Show files that are different</source>
+<target>असमान फ़ाइल्स दिखाएँ</target>
+
+<source>Show conflicts</source>
+<target>विरोध दिखाएँ</target>
+
+<source>Show files that will be created on the left side</source>
+<target>जो फ़ाइल्स बनाई जाएंगी वो बाईं तरफ़ दिखाएँ</target>
+
+<source>Show files that will be created on the right side</source>
+<target>जो फ़ाइल्स बनाई जाएंगी वो दाईं तरफ़ दिखाएँ</target>
+
+<source>Show files that will be deleted on the left side</source>
+<target>जो फ़ाइल्स हटाई जाएंगी वो बाईं तरफ़ दिखाएँ</target>
+
+<source>Show files that will be deleted on the right side</source>
+<target>जो फ़ाइल्स हटाई जाएंगी वो दाईं तरफ़ दिखाएँ</target>
+
+<source>Show files that will be updated on the left side</source>
+<target>जिन फ़ाइल्स का अद्यतन होगा वो बाईं तरफ़ दिखाएँ</target>
+
+<source>Show files that will be updated on the right side</source>
+<target>जिन फ़ाइल्स का अद्यतन होगा वो दाईं तरफ़ दिखाएँ</target>
+
+<source>Show files that won't be copied</source>
+<target>जिन फ़ाइल्स की प्रतिलिपि नहीं बनेगी वो दिखाएँ</target>
+
+<source>Show filtered or temporarily excluded files</source>
+<target>फ़िल्टर किए या अस्थायी रूप से अपवर्जित फ़ाइल्स दिखाएँ</target>
+
+<source>Set as default</source>
+<target>डिफ़ॉल्ट के रूप में सेट करें</target>
+
+<source>Filter</source>
+<target>फ़िल्टर</target>
+
+<source>All files are in sync</source>
+<target>सभी फ़ाइल्स सिंक में हैं</target>
+
+<source>Cannot find %x</source>
+<target>%x ढूंढने में असमर्थ</target>
+
+<source>Move up</source>
+<target>उपर ले जाएं</target>
+
+<source>Move down</source>
+<target>नीचे ले जाएं</target>
+
+<source>Comma-separated values</source>
+<target>कॉमा-सेपरेटेड वैल्यूज़</target>
+
+<source>File list exported</source>
+<target>फ़ाइल सूची निर्यात की गई</target>
+
+<source>Searching for program updates...</source>
+<target>प्रोग्राम अद्यतनों की खोज हो रही है...</target>
+
+<source>Close progress dialog</source>
+<target>प्रगति संवाद बॉक्स बंद करें</target>
+
+<source>Log off</source>
+<target>लॉग ऑफ़</target>
+
+<source>Standby</source>
+<target>स्टैंडबाय</target>
+
+<source>Shut down</source>
+<target>बंद करें</target>
+
+<source>Scanning...</source>
+<target>स्कैनिंग...</target>
+
+<source>Comparing content...</source>
+<target>सामग्री की तुलना हो रही है...</target>
+
+<source>Info</source>
+<target>जानकारी</target>
+
+<source>Select all</source>
+<target>सभी चुने</target>
+
+<source>Paused</source>
+<target>ठहरा</target>
+
+<source>Initializing...</source>
+<target>प्रारंभ हो रहा है...</target>
+
+<source>Completed</source>
+<target>पूर्ण हुआ</target>
+
+<source>&Continue</source>
+<target>जारी रखें (&C)</target>
+
+<source>Progress</source>
+<target>प्रगति</target>
+
+<source>Log</source>
+<target>लॉग</target>
+
+<source>
+<pluralform>Do you really want to move the following item to the recycle bin?</pluralform>
+<pluralform>Do you really want to move the following %x items to the recycle bin?</pluralform>
+</source>
+<target>
+<pluralform>क्या आप वाकई निम्न आइटम रीसायकल बिन में ले जाना चाहते हैं?</pluralform>
+<pluralform>क्या आप वाकई निम्न %x आइटम्स रीसायकल बिन में ले जाना चाहते हैं?</pluralform>
+</target>
+
+<source>Move</source>
+<target>ले जाएँ</target>
+
+<source>
+<pluralform>Do you really want to delete the following item?</pluralform>
+<pluralform>Do you really want to delete the following %x items?</pluralform>
+</source>
+<target>
+<pluralform>क्या आप वाकई निम्न आइटम हटाना चाहते हैं?</pluralform>
+<pluralform>क्या आप वाकई निम्न %x आइटम्स हटाना चाहते हैं?</pluralform>
+</target>
+
+<source>Preferences</source>
+<target>प्राथमिकताएँ</target>
+
+<source>Copy NTFS permissions</source>
+<target>NTFS अनुमतियाँ प्रतिलिपित करें</target>
+
+<source>Integrate external applications into context menu. The following macros are available:</source>
+<target>बाह्य अनुप्रयोगों को प्रसंग मेनू में एकीकृत करें। निम्न मैक्रोज़ उपलब्ध हैं :</target>
+
+<source>- full file or folder name</source>
+<target>- पूर्ण फ़ाइल या फ़ोल्डर का नाम</target>
+
+<source>- folder part only</source>
+<target>- केवल फ़ोल्डर का हिस्सा</target>
+
+<source>- Other side's counterpart to %item_path%</source>
+<target>- %item_path% के लिए दूसरी तरफ़ का समकक्ष</target>
+
+<source>- Other side's counterpart to %item_folder%</source>
+<target>- %item_folder% के लिए दूसरी तरफ़ का समकक्ष</target>
+
+<source>Show hidden dialogs and warning messages again?</source>
+<target>छिपाये संवाद बॉक्सेस और चेतावनी संदेश फिर से दिखाएँ?</target>
+
+<source>&Show</source>
+<target>दिखाएँ (&S)</target>
+
+<source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source>
+<target>दोनों तरफ़ के परिवर्तन पहचानें और प्रसारित करें। हटाए गए, ले जाए गए और विरोधों का स्वचालित रूप से डेटाबेस के उपयोग से पता लगाया जाता है।</target>
+
+<source>Create a mirror backup of the left folder by adapting the right folder to match.</source>
+<target>मिलाए जाने वाले दाए फ़ोल्डर के अनुकूल बाए फ़ोल्डर का प्रतिबिंबित बैकअप बनाएँ।</target>
+
+<source>Copy new and updated files to the right folder.</source>
+<target>नए और अद्यतित फ़ाइल्स दाए फ़ोल्डर में प्रतिलिपित करें।</target>
+
+<source>Configure your own synchronization rules.</source>
+<target>अपने खुद के सिंक्रनाइज़ेशन नियम कॉन्फ़िगर करें।</target>
+
+<source>Today</source>
+<target>आज</target>
+
+<source>This week</source>
+<target>इस सप्ताह</target>
+
+<source>This month</source>
+<target>इस महीने</target>
+
+<source>This year</source>
+<target>इस साल</target>
+
+<source>Last x days</source>
+<target>अंतिम x दिन</target>
+
+<source>Byte</source>
+<target>बाइट</target>
+
+<source>KB</source>
+<target>KB</target>
+
+<source>MB</source>
+<target>MB</target>
+
+<source>Replace</source>
+<target>बदलें</target>
+
+<source>Move files and replace if existing</source>
+<target>फ़ाइल्स ले जाएँ और मौजूद हों तो अधिलेखित करें</target>
+
+<source>Time stamp</source>
+<target>समय मोहर</target>
+
+<source>Append a time stamp to each file name</source>
+<target>प्रत्येक फ़ाइल नाम को समय मोहर जोडें</target>
+
+<source>Comparison</source>
+<target>तुलना</target>
+
+<source>Synchronization</source>
+<target>सिंक्रनाइज़ेशन</target>
+
+<source>Leave as unresolved conflict</source>
+<target>हल नहीं किये गए विरोध के रूप में छोड़ दें</target>
+
+<source>File</source>
+<target>फ़ाइल</target>
+
+<source>YYYY-MM-DD hhmmss</source>
+<target>YYYY-MM-DD hhmmss</target>
+
+<source>Files</source>
+<target>फ़ाइल्स</target>
+
+<source>Items</source>
+<target>आइटम्स</target>
+
+<source>Percentage</source>
+<target>प्रतिशत</target>
+
+<source>Cannot monitor directory %x.</source>
+<target>निर्देशिका %x की निगरानी कर नहीं सकते।</target>
+
+<source>Cannot delete file %x.</source>
+<target>फ़ाइल %x हटा नहीं सकते।</target>
+
+<source>The file is locked by another process:</source>
+<target>फ़ाइल किसी अन्य प्रक्रिया द्वारा अवरोधित है :</target>
+
+<source>Cannot move file %x to %y.</source>
+<target>फ़ाइल %x से %y ले जा नाहीं सकते।</target>
+
+<source>Cannot delete directory %x.</source>
+<target>निर्देशिका %x हटा नहीं सकते।</target>
+
+<source>Cannot write file attributes of %x.</source>
+<target>%x के फ़ाइल गुण लिख नहीं सकते।</target>
+
+<source>Cannot write modification time of %x.</source>
+<target>%x का संशोधन समय लिख नहीं सकते।</target>
+
+<source>Cannot read security context of %x.</source>
+<target>%x का सुरक्षा संदर्भ पढ़ नहीं सकते।</target>
+
+<source>Cannot write security context of %x.</source>
+<target>%x का सुरक्षा संदर्भ लिख नहीं सकते।</target>
+
+<source>Cannot read permissions of %x.</source>
+<target>%x की अनुमतियां पढ़ नहीं सकते।</target>
+
+<source>Cannot write permissions of %x.</source>
+<target>%x की अनुमतियां लिख नहीं सकते।</target>
+
+<source>Cannot copy permissions from %x to %y.</source>
+<target>%x से %y अनुमतियां प्रतिलिपित नहीं कर सकते।</target>
+
+<source>Cannot create directory %x.</source>
+<target>%x निर्देशिका बना नहीं सकते।</target>
+
+<source>Cannot copy symbolic link %x to %y.</source>
+<target>सिंबॉलिक लिंक %x से %y प्रतिलिपित नहीं कर सकते।</target>
+
+<source>Cannot find system function %x.</source>
+<target>सिस्टम फ़ंकशन %x ढूंढ नहीं सकते।</target>
+
+<source>Cannot copy attributes from %x to %y.</source>
+<target>%x से %y गुण प्रतिलिपित नहीं कर सकते।</target>
+
+<source>Cannot copy file %x to %y.</source>
+<target>फ़ाइल %x से %y प्रतिलिपित नहीं कर सकते।</target>
+
+<source>Type of item %x is not supported:</source>
+<target>%x प्रकार का आइटम समर्थित नहीं है :</target>
+
+<source>Cannot open file %x.</source>
+<target>%x फ़ाइल को खोलने में असमर्थ।</target>
+
+<source>%x TB</source>
+<target>%x TB</target>
+
+<source>%x PB</source>
+<target>%x PB</target>
+
+<source>
+<pluralform>1 min</pluralform>
+<pluralform>%x min</pluralform>
+</source>
+<target>
+<pluralform>1 मिनट</pluralform>
+<pluralform>%x मिनट</pluralform>
+</target>
+
+<source>
+<pluralform>1 hour</pluralform>
+<pluralform>%x hours</pluralform>
+</source>
+<target>
+<pluralform>1 घंटा</pluralform>
+<pluralform>%x घंटे</pluralform>
+</target>
+
+<source>
+<pluralform>1 day</pluralform>
+<pluralform>%x days</pluralform>
+</source>
+<target>
+<pluralform>1 दिन</pluralform>
+<pluralform>%x दिन</pluralform>
+</target>
+
+<source>Unable to register to receive system messages.</source>
+<target>सिस्टम संदेशों को प्राप्त करने के लिए पंजीकृत करने में असमर्थ।</target>
+
+<source>Cannot set privilege %x.</source>
+<target>विशेषाधिकार %x सेट नहीं कर सकते।</target>
+
+<source>Unable to suspend system sleep mode.</source>
+<target>सिस्टम स्लीप मोड को स्थगित करने में असमर्थ।</target>
+
+<source>Cannot change process I/O priorities.</source>
+<target>प्रक्रिया I/O प्राथमिकताओं को बदल नहीं सकते।</target>
+
+<source>Unable to move %x to the recycle bin.</source>
+<target>%x को रीसायकल बिन ले जाने में असमर्थ।</target>
+
+<source>Checking recycle bin failed for folder %x.</source>
+<target>फ़ोल्डर %x के लिए रीसायकल बिन की जाँच विफल।</target>
+
+<source>Cannot determine final path for %x.</source>
+<target>%x का अंतिम पथ निर्धारित नहीं कर सकते।</target>
+
+<source>Error Code %x:</source>
+<target>त्रुटि कोड %x:</target>
+
+<source>Cannot read the following XML elements:</source>
+<target>निम्न XML तत्व पढ़ नहीं सकते :</target>
+
+<source>Configuration file %x loaded partially only.</source>
+<target>कॉन्फ़िगरेशन फ़ाइल %x आंशिक रूप से ही लोड हुई है।</target>
+
+<source>Prepare installation</source>
+<target>स्थापना तैयारी</target>
+
+<source>Choose which components you want to install.</source>
+<target>जिन घटकों को आप स्थापित करना चाहते हैं उन्हें चुनें।</target>
+
+<source>Select installation type:</source>
+<target>स्थापना प्रकार चुनें :</target>
+
+<source>Local</source>
+<target>स्थानीय</target>
+
+<source>Portable</source>
+<target>पोर्टेबल</target>
+
+<source>recommended</source>
+<target>अनुशंसित</target>
+
+<source>Save settings to "%APPDATA%\FreeFileSync"</source>
+<target>सेटिंग्ज़ "%APPDATA%\FreeFileSync" यहाँ सहेजें</target>
+
+<source>Register FreeFileSync file extensions</source>
+<target>FreeFileSync फ़ाइल ऐक्सटेंशंस पंजिकृत करें</target>
+
+<source>Create Explorer context menu entries</source>
+<target>एक्सप्लोरर प्रसंग मेनू प्रविष्टियां बनाएँ</target>
+
+<source>Save settings in installation directory</source>
+<target>स्थापना निर्देशिका में सेटिंग्ज़ सहेजें</target>
+
+<source>Do not write to Registry</source>
+<target>रजिस्ट्री में ना लिखें</target>
+
+<source>Just copy the files</source>
+<target>फ़ाइल्स केवल प्रतिलिपित करें</target>
+
+<source>Choose a directory for installation:</source>
+<target>स्थापना के लिए निर्देशिका चुनें :</target>
+
+<source>Create shortcuts:</source>
+<target>शॉर्टकट्‍स बनाएँ :</target>
+
+<source>Desktop</source>
+<target>डेस्कटॉप</target>
+
+<source>Start menu</source>
+<target>प्रारंभ मेनू</target>
+
+<source>Registering FreeFileSync file extensions</source>
+<target>FreeFileSync फ़ाइल एक्सटेंशंस पंजिकृत हो रहे हैं</target>
+
+<source>Unregistering FreeFileSync file extensions</source>
+<target>FreeFileSync फ़ाइल एक्सटेंशंस अपंजिकृत हो रहे हैं</target>
+
+<source>FreeFileSync Configuration</source>
+<target>FreeFileSync कॉन्फ़िगरेशन</target>
+
+<source>FreeFileSync Batch File</source>
+<target>FreeFileSync बॅच फ़ाइल</target>
+
+<source>FreeFileSync Synchronization Database</source>
+<target>FreeFileSync सिंक्रनाइज़ेशन डेटाबेस</target>
+
+<source>RealtimeSync Configuration</source>
+<target>RealtimeSync कॉन्फ़िगरेशन</target>
+
+<source>Edit with FreeFileSync</source>
+<target>FreeFileSync के साथ संपादित करें</target>
+
diff --git a/FreeFileSync/Build/Languages/hungarian.lng b/FreeFileSync/Build/Languages/hungarian.lng
index 96433e65..28321cf7 100644
--- a/FreeFileSync/Build/Languages/hungarian.lng
+++ b/FreeFileSync/Build/Languages/hungarian.lng
@@ -615,8 +615,8 @@ A parancs végrehajtódik, ha:
<source>FreeFileSync is up to date.</source>
<target>A FreeFileSync naprakész.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Nem tudok csatlakozni a FreeFileSync.org-hoz</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Nem tudok csatlakozni a www.freefilesync.org-hoz</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Nem lehet online megtalálni a jelenlegi FreeFileSync verziószámot. Meg akarod keresni manuálisan?</target>
diff --git a/FreeFileSync/Build/Languages/italian.lng b/FreeFileSync/Build/Languages/italian.lng
index 402edbdd..22e109de 100644
--- a/FreeFileSync/Build/Languages/italian.lng
+++ b/FreeFileSync/Build/Languages/italian.lng
@@ -615,8 +615,8 @@ Il comando è attivato se:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync è aggiornato.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Impossibile connettersi al FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Impossibile connettersi al www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Non riesci a trovare l'attuale numero di versione di FreeFileSync on-line. Vuoi controllare manualmente?</target>
diff --git a/FreeFileSync/Build/Languages/japanese.lng b/FreeFileSync/Build/Languages/japanese.lng
index ab14ad2e..46769af7 100644
--- a/FreeFileSync/Build/Languages/japanese.lng
+++ b/FreeFileSync/Build/Languages/japanese.lng
@@ -611,8 +611,8 @@ The command is triggered if:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync は最新です.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>FreeFileSync.org に接続できません.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>www.freefilesync.org に接続できません.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>現在の FreeFileSync バージョン番号を確認できませんでした、手動で確認しますか?</target>
diff --git a/FreeFileSync/Build/Languages/korean.lng b/FreeFileSync/Build/Languages/korean.lng
index 8495026c..60c75ef0 100644
--- a/FreeFileSync/Build/Languages/korean.lng
+++ b/FreeFileSync/Build/Languages/korean.lng
@@ -611,8 +611,8 @@ The command is triggered if:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync는 현재 최신버전 상태입니다.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>FreeFileSync.org.에 접속할 수 없습니다.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>www.freefilesync.org.에 접속할 수 없습니다.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>현재 사용 중인 FreeFileSync 버전 번호를 온라인에서 찾을 수 없습니다. 수동으로 확인해 보시겠습니까?</target>
diff --git a/FreeFileSync/Build/Languages/lithuanian.lng b/FreeFileSync/Build/Languages/lithuanian.lng
index 372e3390..bbc8c4d5 100644
--- a/FreeFileSync/Build/Languages/lithuanian.lng
+++ b/FreeFileSync/Build/Languages/lithuanian.lng
@@ -625,8 +625,8 @@ Komanda inicijuojama jei:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync yra naujausia.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Nepavyko prisijungti prie FreeFileSync.org</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Nepavyko prisijungti prie www.freefilesync.org</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Dabartinės FreeFileSync versijos numeris internete nerastas. Ar norėtumėte patikrinti rankiniu būdu?</target>
diff --git a/FreeFileSync/Build/Languages/norwegian.lng b/FreeFileSync/Build/Languages/norwegian.lng
index 50096dbb..14c9287a 100644
--- a/FreeFileSync/Build/Languages/norwegian.lng
+++ b/FreeFileSync/Build/Languages/norwegian.lng
@@ -615,8 +615,8 @@ Kommandoen utføres hvis:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync er oppdatert.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Kan ikke koble til FreeFileSync.org</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Kan ikke koble til www.freefilesync.org</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Kunne ikke finne FreeFileSync's versjonsnummer online. Vil du kontrollere manuelt?</target>
diff --git a/FreeFileSync/Build/Languages/outdated/scottish_gaelic.lng b/FreeFileSync/Build/Languages/outdated/scottish_gaelic.lng
index 90aeaa2b..0de67972 100644
--- a/FreeFileSync/Build/Languages/outdated/scottish_gaelic.lng
+++ b/FreeFileSync/Build/Languages/outdated/scottish_gaelic.lng
@@ -623,7 +623,7 @@ Thèid an loidhne-àithne a chur gu dol:
<source>FreeFileSync is up to date.</source>
<target>Tha FreeFileSync cho ùr ’s a ghabhas.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
+<source>Unable to connect to www.freefilesync.org.</source>
<target></target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
diff --git a/FreeFileSync/Build/Languages/outdated/slovenian.lng b/FreeFileSync/Build/Languages/outdated/slovenian.lng
index be8afc55..9374d49f 100644
--- a/FreeFileSync/Build/Languages/outdated/slovenian.lng
+++ b/FreeFileSync/Build/Languages/outdated/slovenian.lng
@@ -623,7 +623,7 @@ Ukaz se sproži če:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync je posodobljen.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
+<source>Unable to connect to www.freefilesync.org.</source>
<target></target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
diff --git a/FreeFileSync/Build/Languages/polish.lng b/FreeFileSync/Build/Languages/polish.lng
index f5aac64e..593765f7 100644
--- a/FreeFileSync/Build/Languages/polish.lng
+++ b/FreeFileSync/Build/Languages/polish.lng
@@ -619,8 +619,8 @@ Komenda jest wykonywana gdy:
<source>FreeFileSync is up to date.</source>
<target>Posiadasz aktualną wersję FreeFileSync.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Nie można połączyć się z FreeFileSync.org</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Nie można połączyć się z www.freefilesync.org</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Nie można znaleźć obecnej wersji FreeFileSync. Czy chcesz sprawdzić ręcznie?</target>
diff --git a/FreeFileSync/Build/Languages/portuguese.lng b/FreeFileSync/Build/Languages/portuguese.lng
index 306129ae..5efcccfc 100644
--- a/FreeFileSync/Build/Languages/portuguese.lng
+++ b/FreeFileSync/Build/Languages/portuguese.lng
@@ -615,8 +615,8 @@ O comando é executado se:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync está actualizado.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Não é possível ligar a FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Não é possível ligar a www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Não é possível encontrar a última versão do FreeFileSync online. Deseja verificar manualmente?</target>
diff --git a/FreeFileSync/Build/Languages/portuguese_br.lng b/FreeFileSync/Build/Languages/portuguese_br.lng
index 3bbda548..4310425e 100644
--- a/FreeFileSync/Build/Languages/portuguese_br.lng
+++ b/FreeFileSync/Build/Languages/portuguese_br.lng
@@ -615,8 +615,8 @@ O comando é disparado se:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync está atualizado.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Não foi possível conectar a FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Não foi possível conectar a www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Não foi possível encontrar a versão atual do FreeFileSync online. Deseja verificar manualmente?</target>
diff --git a/FreeFileSync/Build/Languages/romanian.lng b/FreeFileSync/Build/Languages/romanian.lng
index cfe2119f..7c23ae51 100644
--- a/FreeFileSync/Build/Languages/romanian.lng
+++ b/FreeFileSync/Build/Languages/romanian.lng
@@ -619,8 +619,8 @@ Comanda este declanșată dacă:
<source>FreeFileSync is up to date.</source>
<target>Ai deja ultima versiune a softului.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Nu pot face conectarea la FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Nu pot face conectarea la www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Nu pot afla numărul versiunii FreeFileSync disponibile acum pe internet. Vrei să-l cauți manual?</target>
diff --git a/FreeFileSync/Build/Languages/russian.lng b/FreeFileSync/Build/Languages/russian.lng
index e052fbf9..78f8f3a7 100644
--- a/FreeFileSync/Build/Languages/russian.lng
+++ b/FreeFileSync/Build/Languages/russian.lng
@@ -625,8 +625,8 @@ The command is triggered if:
<source>FreeFileSync is up to date.</source>
<target>У Вас самая последняя версия FreeFileSync.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Невозможно соединиться с FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Невозможно соединиться с www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Невозможно найти номер текущей версии FreeFileSync онлайн! Вы хотите проверить вручную?</target>
diff --git a/FreeFileSync/Build/Languages/serbian.lng b/FreeFileSync/Build/Languages/serbian.lng
index cf1a15d0..140f0fde 100644
--- a/FreeFileSync/Build/Languages/serbian.lng
+++ b/FreeFileSync/Build/Languages/serbian.lng
@@ -619,8 +619,8 @@ The command is triggered if:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync је ажуриран.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Не може се успоставити веза са FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Не може се успоставити веза са www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Не могу на мрежи пронаћи тренутни број верзије FreeFileSync-а. Да ли желите да проверите ручно?</target>
diff --git a/FreeFileSync/Build/Languages/spanish.lng b/FreeFileSync/Build/Languages/spanish.lng
index e2145d1d..e32edc27 100644
--- a/FreeFileSync/Build/Languages/spanish.lng
+++ b/FreeFileSync/Build/Languages/spanish.lng
@@ -615,8 +615,8 @@ El comando es disparado si:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync está actualizado.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>No se puede conectar al sitio FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>No se puede conectar al sitio www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>No se encuentra el número de versión actual de FreeFileSync en línea. ¿Desea comprobarla manualmente?</target>
diff --git a/FreeFileSync/Build/Languages/swedish.lng b/FreeFileSync/Build/Languages/swedish.lng
index 1afef2d8..dd617fed 100644
--- a/FreeFileSync/Build/Languages/swedish.lng
+++ b/FreeFileSync/Build/Languages/swedish.lng
@@ -615,8 +615,8 @@ Kommandot triggas om:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync är uppdaterad.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Kan inte ansluta till FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Kan inte ansluta till www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Kan inte hitta aktuellt versionsnummer online. Vill du kontrollera manuellt?</target>
diff --git a/FreeFileSync/Build/Languages/turkish.lng b/FreeFileSync/Build/Languages/turkish.lng
index 66552031..f3d9846b 100644
--- a/FreeFileSync/Build/Languages/turkish.lng
+++ b/FreeFileSync/Build/Languages/turkish.lng
@@ -615,8 +615,8 @@ Komut şu durumlarda yürütülür:
<source>FreeFileSync is up to date.</source>
<target>FreeFileSync güncel.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>FreeFileSync.org sitesine bağlanılamadı.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>www.freefilesync.org sitesine bağlanılamadı.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Geçerli FreeFileSync sürüm numarası çevrimiçi olarak bulunamıyor. El ile denetlemek ister misiniz?</target>
diff --git a/FreeFileSync/Build/Languages/ukrainian.lng b/FreeFileSync/Build/Languages/ukrainian.lng
index 71573e54..bd180bc0 100644
--- a/FreeFileSync/Build/Languages/ukrainian.lng
+++ b/FreeFileSync/Build/Languages/ukrainian.lng
@@ -625,8 +625,8 @@ The command is triggered if:
<source>FreeFileSync is up to date.</source>
<target>У Вас найновіша версія FreeFileSync.</target>
-<source>Unable to connect to FreeFileSync.org.</source>
-<target>Не вдалось підключитись до FreeFileSync.org.</target>
+<source>Unable to connect to www.freefilesync.org.</source>
+<target>Не вдалось підключитись до www.freefilesync.org.</target>
<source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source>
<target>Не вдається знайти номер поточної версії FreeFileSync он-лайн. Бажаєте перевірити вручну?</target>
diff --git a/FreeFileSync/Build/Resources.zip b/FreeFileSync/Build/Resources.zip
index e84b8a1a..5ba74a51 100644
--- a/FreeFileSync/Build/Resources.zip
+++ b/FreeFileSync/Build/Resources.zip
Binary files differ
diff --git a/FreeFileSync/Source/comparison.cpp b/FreeFileSync/Source/comparison.cpp
index cf034a50..f39415db 100644
--- a/FreeFileSync/Source/comparison.cpp
+++ b/FreeFileSync/Source/comparison.cpp
@@ -473,7 +473,7 @@ std::list<std::shared_ptr<BaseDirPair>> ComparisonBuffer::compareByContent(const
const std::wstring txtComparingContentOfFiles = _("Comparing content of files %x");
- //PERF_START;
+ //PERF_START;
//compare files (that have same size) bytewise...
for (FilePair* fileObj : filesToCompareBytewise)
diff --git a/FreeFileSync/Source/file_hierarchy.cpp b/FreeFileSync/Source/file_hierarchy.cpp
index 3777d5ed..8fb6a323 100644
--- a/FreeFileSync/Source/file_hierarchy.cpp
+++ b/FreeFileSync/Source/file_hierarchy.cpp
@@ -159,9 +159,9 @@ SyncOperation FileSystemObject::getSyncOperation() const
SyncOperation DirPair::getSyncOperation() const
{
- if (!syncOpUpToDate)
+ if (!haveBufferedSyncOp)
{
- syncOpUpToDate = true;
+ haveBufferedSyncOp = true;
//redetermine...
//suggested operation *not* considering child elements
diff --git a/FreeFileSync/Source/file_hierarchy.h b/FreeFileSync/Source/file_hierarchy.h
index 356020d1..a3c162ea 100644
--- a/FreeFileSync/Source/file_hierarchy.h
+++ b/FreeFileSync/Source/file_hierarchy.h
@@ -122,12 +122,16 @@ struct DirContainer
void addSubFile(const Zstring& shortName, const FileDescriptor& fileData)
{
- files.emplace(shortName, fileData);
+ auto rv = files.emplace(shortName, fileData);
+ if (!rv.second) //update entry if already existing (e.g. during folder traverser "retry")
+ rv.first->second = fileData;
}
void addSubLink(const Zstring& shortName, const LinkDescriptor& linkData)
{
- links.emplace(shortName, linkData);
+ auto rv = links.emplace(shortName, linkData);
+ if (!rv.second)
+ rv.first->second = linkData;
}
};
@@ -236,13 +240,9 @@ public:
int fileTimeTolerance,
unsigned int optTimeShiftHours) :
#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4355) //"The this pointer is valid only within nonstatic member functions. It cannot be used in the initializer list for a base class."
+#pragma warning(suppress: 4355) //"The this pointer is valid only within nonstatic member functions. It cannot be used in the initializer list for a base class."
#endif
HierarchyObject(Zstring(), *this),
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
filter_(filter), cmpVar_(cmpVar), fileTimeTolerance_(fileTimeTolerance), optTimeShiftHours_(optTimeShiftHours),
baseDirPfL (dirPostfixedLeft ),
baseDirPfR (dirPostfixedRight),
@@ -465,7 +465,7 @@ public:
FileSystemObject(shortNameLeft, shortNameRight, parentObj, static_cast<CompareFilesResult>(defaultCmpResult)),
HierarchyObject(getPairRelativePath() + FILE_NAME_SEPARATOR, parentObj.getRoot()),
syncOpBuffered(SO_DO_NOTHING),
- syncOpUpToDate(false) {}
+ haveBufferedSyncOp(false) {}
SyncOperation getSyncOperation() const override;
@@ -475,10 +475,10 @@ private:
void flip () override;
void removeObjectL() override;
void removeObjectR() override;
- void notifySyncCfgChanged() override { syncOpUpToDate = false; FileSystemObject::notifySyncCfgChanged(); HierarchyObject::notifySyncCfgChanged(); }
+ void notifySyncCfgChanged() override { haveBufferedSyncOp = false; FileSystemObject::notifySyncCfgChanged(); HierarchyObject::notifySyncCfgChanged(); }
mutable SyncOperation syncOpBuffered; //determining sync-op for directory may be expensive as it depends on child-objects -> buffer it
- mutable bool syncOpUpToDate; //
+ mutable bool haveBufferedSyncOp; //
};
//------------------------------------------------------------------
diff --git a/FreeFileSync/Source/lib/binary.cpp b/FreeFileSync/Source/lib/binary.cpp
index 0ef1d4e1..6b7277ce 100644
--- a/FreeFileSync/Source/lib/binary.cpp
+++ b/FreeFileSync/Source/lib/binary.cpp
@@ -15,24 +15,24 @@ using namespace zen;
namespace
{
- /*
- 1. there seems to be no perf improvement possible when using file mappings instad of ::ReadFile() calls on Windows:
- => buffered access: same perf
- => unbuffered access: same perf on USB stick, file mapping 30% slower on local disk
-
- 2. Tests on Win7 x64 show that buffer size does NOT matter if files are located on different physical disks!
- Impact of buffer size when files are on same disk:
-
- buffer MB/s
- ------------
- 64 10
- 128 19
- 512 40
- 1024 48
- 2048 56
- 4096 56
- 8192 56
- */
+/*
+1. there seems to be no perf improvement possible when using file mappings instad of ::ReadFile() calls on Windows:
+ => buffered access: same perf
+ => unbuffered access: same perf on USB stick, file mapping 30% slower on local disk
+
+2. Tests on Win7 x64 show that buffer size does NOT matter if files are located on different physical disks!
+Impact of buffer size when files are on same disk:
+
+buffer MB/s
+------------
+64 10
+128 19
+512 40
+1024 48
+2048 56
+4096 56
+8192 56
+*/
class BufferSize
{
@@ -74,7 +74,7 @@ const std::int64_t TICKS_PER_SEC = ticksPerSec();
}
-bool zen::filesHaveSameContent(const Zstring& filepath1, const Zstring& filepath2, const std::function<void(std::int64_t bytesDelta)>& onUpdateStatus)
+bool zen::filesHaveSameContent(const Zstring& filepath1, const Zstring& filepath2, const std::function<void(std::int64_t bytesDelta)>& onUpdateStatus) //throw FileError
{
static boost::thread_specific_ptr<std::vector<char>> cpyBuf1;
static boost::thread_specific_ptr<std::vector<char>> cpyBuf2;
@@ -133,7 +133,7 @@ bool zen::filesHaveSameContent(const Zstring& filepath1, const Zstring& filepath
}
while (!file1.eof());
- if (!file2.eof()) //highly unlikely, but possible! (but then again, not in this context where both files have same size...)
+ if (!file2.eof()) //unlikely, but possible
return false;
return true;
diff --git a/FreeFileSync/Source/lib/binary.h b/FreeFileSync/Source/lib/binary.h
index 774c6767..279f69d3 100644
--- a/FreeFileSync/Source/lib/binary.h
+++ b/FreeFileSync/Source/lib/binary.h
@@ -4,8 +4,8 @@
// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *
// **************************************************************************
-#ifndef BINARY_H_INCLUDED
-#define BINARY_H_INCLUDED
+#ifndef BINARY_H_INCLUDED_3941281398513241134
+#define BINARY_H_INCLUDED_3941281398513241134
#include <functional>
#include <zen/zstring.h>
@@ -13,9 +13,9 @@
namespace zen
{
-bool filesHaveSameContent(const Zstring& filepath1, //throw FileError
+bool filesHaveSameContent(const Zstring& filepath1, //throw FileError
const Zstring& filepath2,
const std::function<void(std::int64_t bytesDelta)>& onUpdateStatus); //may be nullptr
}
-#endif // BINARY_H_INCLUDED
+#endif //BINARY_H_INCLUDED_3941281398513241134
diff --git a/FreeFileSync/Source/lib/deep_file_traverser.cpp b/FreeFileSync/Source/lib/deep_file_traverser.cpp
index 9686bef3..d95cd1a2 100644
--- a/FreeFileSync/Source/lib/deep_file_traverser.cpp
+++ b/FreeFileSync/Source/lib/deep_file_traverser.cpp
@@ -12,10 +12,6 @@
#include <sys/stat.h>
#include <dirent.h>
-#ifdef ZEN_MAC
- #include <zen/osx_string.h>
-#endif
-
using namespace zen;
@@ -85,7 +81,7 @@ private:
/* quote: "Since POSIX.1 does not specify the size of the d_name field, and other nonstandard fields may precede
that field within the dirent structure, portable applications that use readdir_r() should allocate
the buffer whose address is passed in entry as follows:
- len = offsetof(struct dirent, d_name) + pathconf(dirpath, _PC_NAME_MAX) + 1
+ len = offsetof(struct dirent, d_name) + pathconf(dirPath, _PC_NAME_MAX) + 1
entryp = malloc(len); */
const size_t nameMax = std::max<long>(::pathconf(directoryFormatted.c_str(), _PC_NAME_MAX), 10000); //::pathconf may return long(-1)
buffer.resize(offsetof(struct ::dirent, d_name) + nameMax + 1);
@@ -96,28 +92,28 @@ private:
DirTraverser (const DirTraverser&) = delete;
DirTraverser& operator=(const DirTraverser&) = delete;
- void traverse(const Zstring& dirpath, TraverseCallback& sink)
+ void traverse(const Zstring& dirPath, TraverseCallback& sink)
{
tryReportingDirError([&]
{
- traverseWithException(dirpath, sink); //throw FileError
+ traverseWithException(dirPath, sink); //throw FileError
}, sink);
}
- void traverseWithException(const Zstring& dirpath, TraverseCallback& sink) //throw FileError
+ void traverseWithException(const Zstring& dirPath, TraverseCallback& sink) //throw FileError
{
//no need to check for endless recursion: Linux has a fixed limit on the number of symbolic links in a path
- DIR* dirObj = ::opendir(dirpath.c_str()); //directory must NOT end with path separator, except "/"
+ DIR* dirObj = ::opendir(dirPath.c_str()); //directory must NOT end with path separator, except "/"
if (!dirObj)
- throwFileError(replaceCpy(_("Cannot open directory %x."), L"%x", fmtFileName(dirpath)), L"opendir", getLastError());
+ throwFileError(replaceCpy(_("Cannot open directory %x."), L"%x", fmtFileName(dirPath)), L"opendir", getLastError());
ZEN_ON_SCOPE_EXIT(::closedir(dirObj)); //never close nullptr handles! -> crash
for (;;)
{
struct ::dirent* dirEntry = nullptr;
if (::readdir_r(dirObj, reinterpret_cast< ::dirent*>(&buffer[0]), &dirEntry) != 0)
- throwFileError(replaceCpy(_("Cannot enumerate directory %x."), L"%x", fmtFileName(dirpath)), L"readdir_r", getLastError());
+ throwFileError(replaceCpy(_("Cannot enumerate directory %x."), L"%x", fmtFileName(dirPath)), L"readdir_r", getLastError());
//don't retry but restart dir traversal on error! http://blogs.msdn.com/b/oldnewthing/archive/2014/06/12/10533529.aspx
if (!dirEntry) //no more items
@@ -125,30 +121,13 @@ private:
//don't return "." and ".."
const char* shortName = dirEntry->d_name; //evaluate dirEntry *before* going into recursion => we use a single "buffer"!
+
+ if (shortName[0] == 0) throw FileError(replaceCpy(_("Cannot enumerate directory %x."), L"%x", fmtFileName(dirPath)), L"Data corruption: Found item without name.");
if (shortName[0] == '.' &&
(shortName[1] == 0 || (shortName[1] == '.' && shortName[2] == 0)))
continue;
-#ifdef ZEN_MAC
- //some file system abstraction layers fail to properly return decomposed UTF8: http://developer.apple.com/library/mac/#qa/qa1173/_index.html
- //so we need to do it ourselves; perf: ~600 ns per conversion
- //note: it's not sufficient to apply this in z_impl::compareFilenamesNoCase: if UTF8 forms differ, FFS assumes a rename in case sensitivity and
- // will try to propagate the rename => this won't work if target drive reports a particular UTF8 form only!
- if (CFStringRef cfStr = osx::createCFString(shortName))
- {
- ZEN_ON_SCOPE_EXIT(::CFRelease(cfStr));
-
- CFIndex lenMax = ::CFStringGetMaximumSizeOfFileSystemRepresentation(cfStr); //"could be much larger than the actual space required" => don't store in Zstring
- if (lenMax > 0)
- {
- bufferUtfDecomposed.resize(lenMax);
- if (::CFStringGetFileSystemRepresentation(cfStr, &bufferUtfDecomposed[0], lenMax)) //get decomposed UTF form (verified!) despite ambiguous documentation
- shortName = &bufferUtfDecomposed[0]; //attention: => don't access "shortName" after recursion in "traverse"!
- }
- }
- //const char* sampleDecomposed = "\x6f\xcc\x81.txt";
- //const char* samplePrecomposed = "\xc3\xb3.txt";
-#endif
- const Zstring& itempath = appendSeparator(dirpath) + shortName;
+
+ const Zstring& itempath = appendSeparator(dirPath) + shortName;
struct ::stat statData = {};
if (!tryReportingItemError([&]
@@ -185,7 +164,10 @@ private:
}
}
else //a file or named pipe, ect.
- sink.onFile({ shortName, itempath, makeUnsigned(statDataTrg.st_size), statDataTrg.st_mtime, extractFileId(statDataTrg), &linkInfo });
+ {
+ TraverseCallback::FileInfo fi = { shortName, itempath, makeUnsigned(statDataTrg.st_size), statDataTrg.st_mtime, extractFileId(statDataTrg), &linkInfo };
+ sink.onFile(fi);
+ }
}
// else //broken symlink -> ignore: it's client's responsibility to handle error!
}
@@ -204,7 +186,10 @@ private:
}
}
else //a file or named pipe, ect.
- sink.onFile({ shortName, itempath, makeUnsigned(statData.st_size), statData.st_mtime, extractFileId(statData), nullptr });
+ {
+ TraverseCallback::FileInfo fi = { shortName, itempath, makeUnsigned(statData.st_size), statData.st_mtime, extractFileId(statData), nullptr };
+ sink.onFile(fi);
+ }
/*
It may be a good idea to not check "S_ISREG(statData.st_mode)" explicitly and to not issue an error message on other types to support these scenarios:
- RTS setup watch (essentially wants to read directories only)
@@ -216,11 +201,8 @@ private:
}
std::vector<char> buffer;
-#ifdef ZEN_MAC
- std::vector<char> bufferUtfDecomposed;
-#endif
};
}
-void zen::deepTraverseFolder(const Zstring& dirpath, TraverseCallback& sink) { DirTraverser::execute(dirpath, sink); }
+void zen::deepTraverseFolder(const Zstring& dirPath, TraverseCallback& sink) { DirTraverser::execute(dirPath, sink); }
diff --git a/FreeFileSync/Source/lib/dir_lock.cpp b/FreeFileSync/Source/lib/dir_lock.cpp
index 703cb7b1..fd2a1f26 100644
--- a/FreeFileSync/Source/lib/dir_lock.cpp
+++ b/FreeFileSync/Source/lib/dir_lock.cpp
@@ -554,7 +554,8 @@ bool tryLock(const Zstring& lockfilepath) //throw FileError
ZEN_ON_SCOPE_EXIT(::umask(oldMask));
//O_EXCL contains a race condition on NFS file systems: http://linux.die.net/man/2/open
- const int fileHandle = ::open(lockfilepath.c_str(), O_CREAT | O_WRONLY | O_EXCL, S_IRWXU | S_IRWXG | S_IRWXO);
+ const int fileHandle = ::open(lockfilepath.c_str(), O_CREAT | O_EXCL | O_WRONLY,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (fileHandle == -1)
{
if (errno == EEXIST)
@@ -563,16 +564,17 @@ bool tryLock(const Zstring& lockfilepath) //throw FileError
throwFileError(replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(lockfilepath)), L"open", getLastError());
}
ScopeGuard guardLockFile = zen::makeGuard([&] { removeFile(lockfilepath); });
- FileOutputUnbuffered fileOut(fileHandle, lockfilepath); //pass handle ownership
+ FileOutput fileOut(fileHandle, lockfilepath); //pass handle ownership
#endif
//write housekeeping info: user, process info, lock GUID
- BinaryStream binStream;
+ BinaryStream binStream = [&]
{
BinStreamOut streamOut;
LockInformation(FromCurrentProcess()).toStream(streamOut);
- binStream = streamOut.get();
- }
+ return streamOut.get();
+ }();
+
if (!binStream.empty())
fileOut.write(&*binStream.begin(), binStream.size()); //throw FileError
@@ -691,7 +693,7 @@ DirLock::DirLock(const Zstring& lockfilepath, DirLockCallback* callback) //throw
&volName[0], //__out LPTSTR lpszVolumePathName,
bufferSize)) //__in DWORD cchBufferLength
{
- DWORD dt = ::GetDriveType(&volName[0]);
+ const DWORD dt = ::GetDriveType(&volName[0]);
if (dt == DRIVE_CDROM)
return; //we don't need a lock for a CD ROM
}
diff --git a/FreeFileSync/Source/lib/ffs_paths.cpp b/FreeFileSync/Source/lib/ffs_paths.cpp
index b094fd5b..7b5b6363 100644
--- a/FreeFileSync/Source/lib/ffs_paths.cpp
+++ b/FreeFileSync/Source/lib/ffs_paths.cpp
@@ -59,7 +59,8 @@ bool zen::manualProgramUpdateRequired()
#if defined ZEN_WIN || defined ZEN_MAC
return true;
#elif defined ZEN_LINUX
- return isPortableVersion(); //locally installed version is updated by system
+ return true;
+ //return isPortableVersion(); //locally installed version is updated by Launchpad
#endif
}
diff --git a/FreeFileSync/Source/lib/icon_buffer.cpp b/FreeFileSync/Source/lib/icon_buffer.cpp
index b3b6f943..f6c72f79 100644
--- a/FreeFileSync/Source/lib/icon_buffer.cpp
+++ b/FreeFileSync/Source/lib/icon_buffer.cpp
@@ -36,14 +36,72 @@ const size_t BUFFER_SIZE_MAX = 800; //maximum number of icons to hold in buffer:
#endif
#ifdef ZEN_WIN
- const bool isXpOrLater = winXpOrLater(); //VS2010 compiled DLLs are not supported on Win 2000: Popup dialog "DecodePointer not found"
+const bool isXpOrLater = winXpOrLater(); //VS2010 compiled DLLs are not supported on Win 2000: Popup dialog "DecodePointer not found"
- #define DEF_DLL_FUN(name) const auto name = isXpOrLater ? DllFun<thumb::FunType_##name>(thumb::getDllName(), thumb::funName_##name) : DllFun<thumb::FunType_##name>();
- DEF_DLL_FUN(getIconByIndex); //
- DEF_DLL_FUN(getThumbnail); //let's spare the boost::call_once hustle and allocate statically
- DEF_DLL_FUN(releaseImageData); //
+#define DEF_DLL_FUN(name) const auto name = isXpOrLater ? DllFun<thumb::FunType_##name>(thumb::getDllName(), thumb::funName_##name) : DllFun<thumb::FunType_##name>();
+DEF_DLL_FUN(getIconByIndex); //
+DEF_DLL_FUN(getThumbnail); //let's spare the boost::call_once hustle and allocate statically
+DEF_DLL_FUN(releaseImageData); //
+#undef DEF_DLL_FUN
+
+#elif defined ZEN_LINUX
+wxImage getImageFromPixBuf(const GdkPixbuf* pixbuf)
+{
+ //see: https://developer.gnome.org/gdk-pixbuf/stable/gdk-pixbuf-The-GdkPixbuf-Structure.html
+ if (pixbuf &&
+ ::gdk_pixbuf_get_colorspace(pixbuf) == GDK_COLORSPACE_RGB &&
+ ::gdk_pixbuf_get_bits_per_sample(pixbuf) == 8)
+ {
+ const int width = ::gdk_pixbuf_get_width (pixbuf);
+ const int height = ::gdk_pixbuf_get_height(pixbuf);
+ const int channels = ::gdk_pixbuf_get_n_channels(pixbuf);
+ const int stride = ::gdk_pixbuf_get_rowstride(pixbuf);
+ const unsigned char* rgbaSrc = ::gdk_pixbuf_get_pixels(pixbuf);
+ wxImage image(width, height);
+ unsigned char* rgb = image.GetData();
+
+ if (channels == 3)
+ {
+ assert(!::gdk_pixbuf_get_has_alpha(pixbuf));
+
+ for (int y = 0; y < height; y++)
+ {
+ const unsigned char* srcLine = rgbaSrc + y * stride;
+ for (int x = 0; x < width; x++)
+ {
+ *rgb++ = *srcLine++;
+ *rgb++ = *srcLine++;
+ *rgb++ = *srcLine++;
+ }
+ }
+ return image;
+ }
+ else if (channels == 4)
+ {
+ assert(::gdk_pixbuf_get_has_alpha(pixbuf));
+ image.SetAlpha();
+ unsigned char* alpha = image.GetAlpha();
+
+ for (int y = 0; y < height; y++)
+ {
+ const unsigned char* srcLine = rgbaSrc + y * stride;
+ for (int x = 0; x < width; x++)
+ {
+ *rgb++ = *srcLine++;
+ *rgb++ = *srcLine++;
+ *rgb++ = *srcLine++;
+ *alpha++ = *srcLine++;
+ }
+ }
+ return image;
+ }
+ }
+ assert(false);
+ return wxImage();
+}
#endif
+
class IconHolder //handle HICON/GdkPixbuf ownership supporting thread-safe usage (in contrast to wxIcon/wxBitmap)
{
public:
@@ -57,7 +115,7 @@ public:
explicit IconHolder(HandleType handle = nullptr) : handle_(handle) {} //take ownership!
- IconHolder(IconHolder&& other) : handle_(other.release()) {}
+ IconHolder(IconHolder&& tmp) : handle_(tmp.release()) {}
IconHolder& operator=(IconHolder other) //unifying assignment
{
@@ -103,6 +161,9 @@ public:
return wxBitmap(fileIcon);
#elif defined ZEN_LINUX
+ //ZEN_ON_SCOPE_EXIT(IconHolder().swap(*this)); //destroy after extraction
+ //return getImageFromPixBuf(handle_);
+
return wxBitmap(release()); //ownership passed!
#elif defined ZEN_MAC
@@ -135,7 +196,7 @@ public:
#if defined ZEN_WIN || defined ZEN_LINUX
Zstring getFileExtension(const Zstring& filepath)
{
- const Zstring shortName = afterLast(filepath, Zchar('\\')); //warning: using windows file name separator!
+ const Zstring shortName = afterLast(filepath, FILE_NAME_SEPARATOR); //returns the whole string if term not found
return contains(shortName, Zchar('.')) ?
afterLast(filepath, Zchar('.')) :
@@ -145,7 +206,7 @@ Zstring getFileExtension(const Zstring& filepath)
#ifdef ZEN_WIN
-const bool wereVistaOrLater = vistaOrLater(); //thread-safety: init at startup
+const bool wereVistaOrLater = vistaOrLater();
thumb::IconSizeType getThumbSizeType(IconBuffer::IconSize sz)
@@ -255,26 +316,31 @@ IconHolder getThumbnailImage(const Zstring& filepath, int requestedSize) //retur
return IconHolder(getThumbnail(filepath.c_str(), requestedSize));
#elif defined ZEN_LINUX
- gint width = 0;
- gint height = 0;
- if (GdkPixbufFormat* fmt = ::gdk_pixbuf_get_file_info(filepath.c_str(), &width, &height))
- {
- (void)fmt;
- if (width > 0 && height > 0 && requestedSize > 0)
+ struct ::stat fileInfo = {};
+ if (::stat(filepath.c_str(), &fileInfo) == 0)
+ if (!S_ISFIFO(fileInfo.st_mode)) //skip named pipes: else gdk_pixbuf_get_file_info() would hang forever!
{
- int trgWidth = width;
- int trgHeight = height;
-
- const int maxExtent = std::max(width, height); //don't stretch small images, but shrink large ones instead!
- if (requestedSize < maxExtent)
+ gint width = 0;
+ gint height = 0;
+ if (GdkPixbufFormat* fmt = ::gdk_pixbuf_get_file_info(filepath.c_str(), &width, &height))
{
- trgWidth = width * requestedSize / maxExtent;
- trgHeight = height * requestedSize / maxExtent;
+ (void)fmt;
+ if (width > 0 && height > 0 && requestedSize > 0)
+ {
+ int trgWidth = width;
+ int trgHeight = height;
+
+ const int maxExtent = std::max(width, height); //don't stretch small images, but shrink large ones instead!
+ if (requestedSize < maxExtent)
+ {
+ trgWidth = width * requestedSize / maxExtent;
+ trgHeight = height * requestedSize / maxExtent;
+ }
+ if (GdkPixbuf* pixBuf = ::gdk_pixbuf_new_from_file_at_size(filepath.c_str(), trgWidth, trgHeight, nullptr))
+ return IconHolder(pixBuf); //pass ownership
+ }
}
- if (GdkPixbuf* pixBuf = ::gdk_pixbuf_new_from_file_at_size(filepath.c_str(), trgWidth, trgHeight, nullptr))
- return IconHolder(pixBuf); //pass ownership
}
- }
#elif defined ZEN_MAC
try
@@ -368,11 +434,11 @@ IconHolder getAssociatedIcon(const Zstring& filepath, IconBuffer::IconSize sz)
#elif defined ZEN_LINUX
GFile* file = ::g_file_new_for_path(filepath.c_str()); //documented to "never fail"
- ZEN_ON_SCOPE_EXIT(::g_object_unref(file);)
+ ZEN_ON_SCOPE_EXIT(::g_object_unref(file));
if (GFileInfo* fileInfo = ::g_file_query_info(file, G_FILE_ATTRIBUTE_STANDARD_ICON, G_FILE_QUERY_INFO_NONE, nullptr, nullptr))
{
- ZEN_ON_SCOPE_EXIT(::g_object_unref(fileInfo);)
+ ZEN_ON_SCOPE_EXIT(::g_object_unref(fileInfo));
if (GIcon* gicon = ::g_file_info_get_icon(fileInfo)) //not owned!
return iconHolderFromGicon(gicon, sz);
}
@@ -402,9 +468,9 @@ public:
while (filesToLoad.empty())
conditionNewFiles.timed_wait(dummy, boost::posix_time::milliseconds(100)); //interruption point!
- Zstring filepath = filesToLoad.back(); //yes, not std::bad_alloc exception-safe, but bad_alloc is not relevant for us
+ Zstring filepath = filesToLoad.back(); //
filesToLoad.pop_back(); //
- return filepath;
+ return filepath; //yes, not std::bad_alloc exception-safe, but bad_alloc is not relevant for us
}
void setWorkload(const std::vector<Zstring>& newLoad) //context of main thread
@@ -501,14 +567,14 @@ public:
private:
struct IconData;
-#if defined ZEN_WIN || defined ZEN_LINUX
- typedef std::map<Zstring, IconData, LessFilename> FileIconMap;
- IconData& refData(FileIconMap::iterator it) { return it->second; }
- static IconData makeValueObject() { return IconData(); }
-#elif defined ZEN_MAC //workaround libc++ limitation for incomplete types: http://llvm.org/bugs/show_bug.cgi?id=17701
+#ifdef __clang__ //workaround libc++ limitation for incomplete types: http://llvm.org/bugs/show_bug.cgi?id=17701
typedef std::map<Zstring, std::unique_ptr<IconData>, LessFilename> FileIconMap;
static IconData& refData(FileIconMap::iterator it) { return *(it->second); }
static std::unique_ptr<IconData> makeValueObject() { return make_unique<IconData>(); }
+#else
+ typedef std::map<Zstring, IconData, LessFilename> FileIconMap;
+ IconData& refData(FileIconMap::iterator it) { return it->second; }
+ static IconData makeValueObject() { return IconData(); }
#endif
//call while holding lock:
@@ -519,7 +585,7 @@ private:
if (firstInsertPos != iconList.end())
refData(firstInsertPos).prev_ = iconList.end();
- else //BUFFER_SIZE_MAX > 0, but still for completeness:
+ else //priority list size > BUFFER_SIZE_MAX in this context, but still for completeness:
lastInsertPos = iconList.end();
}
diff --git a/FreeFileSync/Source/lib/localization.cpp b/FreeFileSync/Source/lib/localization.cpp
index d15dfc43..dba8d6e5 100644
--- a/FreeFileSync/Source/lib/localization.cpp
+++ b/FreeFileSync/Source/lib/localization.cpp
@@ -124,7 +124,7 @@ struct LessTranslation
rhs.languageName.c_str(), //__in LPCTSTR lpString2,
static_cast<int>(rhs.languageName.size())); //__in int cchCount2
if (rv == 0)
- throw std::runtime_error("Error comparing strings.");
+ throw std::runtime_error("Error comparing strings (CompareString). " + std::string(__FILE__) + ":" + numberTo<std::string>(__LINE__));
else
return rv == CSTR_LESS_THAN; //convert to C-style string compare result
@@ -352,6 +352,7 @@ wxLanguage mapLanguageDialect(wxLanguage language)
//case wxLANGUAGE_DANISH:
//case wxLANGUAGE_FINNISH:
//case wxLANGUAGE_GREEK:
+ //case wxLANGUAGE_HINDI:
//case wxLANGUAGE_HEBREW:
//case wxLANGUAGE_HUNGARIAN:
//case wxLANGUAGE_JAPANESE:
diff --git a/FreeFileSync/Source/lib/process_xml.cpp b/FreeFileSync/Source/lib/process_xml.cpp
index 83741791..9a9c5f64 100644
--- a/FreeFileSync/Source/lib/process_xml.cpp
+++ b/FreeFileSync/Source/lib/process_xml.cpp
@@ -1022,7 +1022,8 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& config)
config.gui.externelApplications = XmlGlobalSettings().gui.externelApplications;
//last update check
- inGui["LastOnlineCheck"](config.gui.lastUpdateCheck);
+ inGui["LastOnlineCheck" ](config.gui.lastUpdateCheck);
+ inGui["LastOnlineVersion"](config.gui.lastOnlineVersion);
//batch specific global settings
//XmlIn inBatch = in["Batch"];
@@ -1396,7 +1397,8 @@ void writeConfig(const XmlGlobalSettings& config, XmlOut& out)
outGui["ExternalApplications"](config.gui.externelApplications);
//last update check
- outGui["LastOnlineCheck"](config.gui.lastUpdateCheck);
+ outGui["LastOnlineCheck" ](config.gui.lastUpdateCheck);
+ outGui["LastOnlineVersion"](config.gui.lastOnlineVersion);
//batch specific global settings
//XmlOut outBatch = out["Batch"];
diff --git a/FreeFileSync/Source/lib/process_xml.h b/FreeFileSync/Source/lib/process_xml.h
index 3a853a90..17089d8c 100644
--- a/FreeFileSync/Source/lib/process_xml.h
+++ b/FreeFileSync/Source/lib/process_xml.h
@@ -263,6 +263,7 @@ struct XmlGlobalSettings
FileIconSize iconSize;
long lastUpdateCheck; //time of last update check
+ wxString lastOnlineVersion;
ViewFilterDefault viewFilterDefault;
wxString guiPerspectiveLast; //used by wxAuiManager
diff --git a/FreeFileSync/Source/structures.cpp b/FreeFileSync/Source/structures.cpp
index da3d9a71..0d229dc4 100644
--- a/FreeFileSync/Source/structures.cpp
+++ b/FreeFileSync/Source/structures.cpp
@@ -53,7 +53,7 @@ DirectionSet zen::extractDirections(const DirectionConfig& cfg)
switch (cfg.var)
{
case DirectionConfig::TWOWAY:
- throw std::logic_error("there are no predefined directions for automatic mode!");
+ throw std::logic_error("there are no predefined directions for automatic mode! " + std::string(__FILE__) + ":" + numberTo<std::string>(__LINE__));
case DirectionConfig::MIRROR:
output.exLeftSideOnly = SyncDirection::RIGHT;
diff --git a/FreeFileSync/Source/synchronization.cpp b/FreeFileSync/Source/synchronization.cpp
index c6d8df33..eb5b4b3d 100644
--- a/FreeFileSync/Source/synchronization.cpp
+++ b/FreeFileSync/Source/synchronization.cpp
@@ -8,7 +8,6 @@
#include <memory>
#include <deque>
#include <stdexcept>
-#include <wx/file.h> //get rid!?
#include <zen/format_unit.h>
#include <zen/scope_guard.h>
#include <zen/process_priority.h>
@@ -24,11 +23,15 @@
#include "lib/cmp_filetime.h"
#include "lib/status_handler_impl.h"
#include "lib/versioning.h"
+#include "lib/binary.h"
#ifdef ZEN_WIN
#include <zen/long_path_prefix.h>
#include <zen/perf.h>
#include "lib/shadow.h"
+
+#elif defined ZEN_LINUX || defined ZEN_MAC
+ #include <fcntl.h> //open, close
#endif
using namespace zen;
@@ -308,6 +311,150 @@ bool significantDifferenceDetected(const SyncStatistics& folderPairStat)
//#################################################################################################################
+class RecycleSession
+{
+public:
+ RecycleSession(const Zstring baseDirPf) : baseDirPf_(baseDirPf) {}
+
+ bool recycleItem(const Zstring& fullPath, const Zstring& relPath); //throw FileError
+ void tryCleanup(const std::function<void (const Zstring& currentItem)>& notifyDeletionStatus /*optional; currentItem may be empty*/); //throw FileError
+
+private:
+ const Zstring baseDirPf_; //ends with path separator
+
+#ifdef ZEN_WIN
+ Zstring getOrCreateRecyclerTempDirPf(); //throw FileError
+
+ std::vector<Zstring> toBeRecycled; //full path of files located in temporary folder, waiting for batch-recycling
+ Zstring recyclerTmpDir; //temporary folder holding files/folders for *deferred* recycling
+#endif
+};
+
+
+#ifdef ZEN_WIN
+//create + returns temporary directory postfixed with file name separator
+//to support later cleanup if automatic deletion fails for whatever reason
+Zstring RecycleSession::getOrCreateRecyclerTempDirPf() //throw FileError
+{
+ assert(!baseDirPf_.empty());
+ if (baseDirPf_.empty())
+ return Zstring();
+
+ if (recyclerTmpDir.empty())
+ recyclerTmpDir = [&]
+ {
+ assert(endsWith(baseDirPf_, FILE_NAME_SEPARATOR));
+ /*
+ -> this naming convention is too cute and confusing for end users:
+
+ //1. generate random directory name
+ static std::mt19937 rng(std::time(nullptr)); //don't use std::default_random_engine which leaves the choice to the STL implementer!
+ //- the alternative std::random_device may not always be available and can even throw an exception!
+ //- seed with second precision is sufficient: collisions are handled below
+
+ const Zstring chars(Zstr("abcdefghijklmnopqrstuvwxyz")
+ Zstr("1234567890"));
+ std::uniform_int_distribution<size_t> distrib(0, chars.size() - 1); //takes closed range
+
+ auto generatePath = [&]() -> Zstring //e.g. C:\Source\3vkf74fq.ffs_tmp
+ {
+ Zstring path = baseDirPf;
+ for (int i = 0; i < 8; ++i)
+ path += chars[distrib(rng)];
+ return path + TEMP_FILE_ENDING;
+ };
+ */
+
+ //ensure unique ownership:
+ Zstring dirpath = baseDirPf_ + Zstr("RecycleBin") + TEMP_FILE_ENDING;
+ for (int i = 0;; ++i)
+ try
+ {
+ makeDirectory(dirpath, /*bool failIfExists*/ true); //throw FileError, ErrorTargetExisting
+ return dirpath;
+ }
+ catch (const ErrorTargetExisting&)
+ {
+ if (i == 10) throw; //avoid endless recursion in pathological cases
+ dirpath = baseDirPf_ + Zstr("RecycleBin") + Zchar('_') + numberTo<Zstring>(i) + TEMP_FILE_ENDING;
+ }
+ }();
+
+ //assemble temporary recycle bin directory with random name and .ffs_tmp ending
+ return appendSeparator(recyclerTmpDir);
+}
+#endif
+
+
+bool RecycleSession::recycleItem(const Zstring& itemPath, const Zstring& relPath) //throw FileError
+{
+#ifdef ZEN_WIN
+ const Zstring tmpPath = getOrCreateRecyclerTempDirPf() + relPath; //throw FileError
+ bool deleted = false;
+
+ auto moveToTempDir = [&]
+ {
+ try
+ {
+ //performance optimization: Instead of moving each object into recycle bin separately,
+ //we rename them one by one into a temporary directory and batch-recycle this directory after sync
+ renameFile(itemPath, tmpPath); //throw FileError, ErrorDifferentVolume
+ this->toBeRecycled.push_back(tmpPath);
+ deleted = true;
+ }
+ catch (ErrorDifferentVolume&) //MoveFileEx() returns ERROR_PATH_NOT_FOUND *before* considering ERROR_NOT_SAME_DEVICE! => we have to create tmpParentDir anyway to find out!
+ {
+ deleted = recycleOrDelete(itemPath); //throw FileError
+ }
+ };
+
+ try
+ {
+ moveToTempDir(); //throw FileError, ErrorDifferentVolume
+ }
+ catch (FileError&)
+ {
+ if (somethingExists(itemPath))
+ {
+ const Zstring tmpParentDir = beforeLast(tmpPath, FILE_NAME_SEPARATOR); //what if C:\ ?
+ if (!dirExists(tmpParentDir))
+ {
+ makeDirectory(tmpParentDir); //throw FileError -> may legitimately fail on Linux if permissions are missing
+ moveToTempDir(); //throw FileError -> this should work now!
+ }
+ else
+ throw;
+ }
+ }
+ return deleted;
+
+#elif defined ZEN_LINUX || defined ZEN_MAC
+ return recycleOrDelete(itemPath); //throw FileError
+#endif
+}
+
+
+void RecycleSession::tryCleanup(const std::function<void (const Zstring& currentItem)>& notifyDeletionStatus) //throw FileError
+{
+#ifdef ZEN_WIN
+ if (!toBeRecycled.empty())
+ {
+ //move content of temporary directory to recycle bin in a single call
+ recycleOrDelete(toBeRecycled, notifyDeletionStatus); //throw FileError
+ toBeRecycled.clear();
+ }
+
+ //clean up temp directory itself (should contain remnant empty directories only)
+ if (!recyclerTmpDir.empty())
+ {
+ removeDirectory(recyclerTmpDir); //throw FileError
+ recyclerTmpDir.clear();
+ }
+#endif
+}
+
+//#################################################################################################################
+
class DeletionHandling //abstract deletion variants: permanently, recycle bin, user-defined directory
{
public:
@@ -333,7 +480,7 @@ public:
}
//clean-up temporary directory (recycle bin optimization)
- void tryCleanup(bool allowUserCallback = true); //throw FileError; throw X -> call this in non-exceptional coding, i.e. somewhere after sync!
+ void tryCleanup(bool allowUserCallback); //throw FileError; throw X -> call this in non-exceptional coding, i.e. somewhere after sync!
template <class Function> void removeFileWithCallback (const Zstring& filepath, const Zstring& relativePath, Function onNotifyItemDeletion, const std::function<void(std::int64_t bytesDelta)>& onNotifyFileCopy); //
template <class Function> void removeDirWithCallback (const Zstring& dirpath, const Zstring& relativePath, Function onNotifyItemDeletion, const std::function<void(std::int64_t bytesDelta)>& onNotifyFileCopy); //throw FileError
@@ -355,21 +502,16 @@ private:
};
ProcessCallback& procCallback_;
- const Zstring baseDirPf_; //ends with path separator
const Zstring versioningDir_;
const VersioningStyle versioningStyle_;
const TimeComp timeStamp_;
-#ifdef ZEN_WIN
- Zstring getOrCreateRecyclerTempDirPf(); //throw FileError
- Zstring recyclerTmpDir; //temporary folder holding files/folders for *deferred* recycling
- std::vector<Zstring> toBeRecycled; //full path of files located in temporary folder, waiting for batch-recycling
-#endif
-
- //magage three states: allow dynamic fallback from recycler to permanent deletion
+ //manage three states: allow dynamic fallback from recycler to permanent deletion
const DeletionPolicy deletionPolicy_;
std::unique_ptr<FileVersioner> versioner; //used for DELETE_TO_VERSIONING; throw FileError in constructor => create on demand!
+ RecycleSession recycler;
+
//buffer status texts:
std::wstring txtRemovingFile;
std::wstring txtRemovingSymlink;
@@ -387,11 +529,11 @@ DeletionHandling::DeletionHandling(DeletionPolicy handleDel, //nothrow!
const Zstring& baseDirPf, //with separator postfix
ProcessCallback& procCallback) :
procCallback_(procCallback),
- baseDirPf_(baseDirPf),
versioningDir_(versioningDir),
versioningStyle_(versioningStyle),
timeStamp_(timeStamp),
deletionPolicy_(handleDel),
+ recycler(baseDirPf),
txtMovingFile (_("Moving file %x to %y")),
txtMovingFolder(_("Moving folder %x to %y"))
{
@@ -418,62 +560,6 @@ DeletionHandling::DeletionHandling(DeletionPolicy handleDel, //nothrow!
}
-#ifdef ZEN_WIN
-//create + returns temporary directory postfixed with file name separator
-//to support later cleanup if automatic deletion fails for whatever reason
-Zstring DeletionHandling::getOrCreateRecyclerTempDirPf() //throw FileError
-{
- assert(!baseDirPf_.empty());
- if (baseDirPf_.empty())
- return Zstring();
-
- if (recyclerTmpDir.empty())
- {
- recyclerTmpDir = [&]
- {
- assert(endsWith(baseDirPf_, FILE_NAME_SEPARATOR));
- /*
- -> this naming convention is too cute and confusing for end users:
-
- //1. generate random directory name
- static std::mt19937 rng(std::time(nullptr)); //don't use std::default_random_engine which leaves the choice to the STL implementer!
- //- the alternative std::random_device may not always be available and can even throw an exception!
- //- seed with second precision is sufficient: collisions are handled below
-
- const Zstring chars(Zstr("abcdefghijklmnopqrstuvwxyz")
- Zstr("1234567890"));
- std::uniform_int_distribution<size_t> distrib(0, chars.size() - 1); //takes closed range
-
- auto generatePath = [&]() -> Zstring //e.g. C:\Source\3vkf74fq.ffs_tmp
- {
- Zstring path = baseDirPf;
- for (int i = 0; i < 8; ++i)
- path += chars[distrib(rng)];
- return path + TEMP_FILE_ENDING;
- };
- */
-
- //ensure unique ownership:
- Zstring dirpath = baseDirPf_ + Zstr("RecycleBin") + TEMP_FILE_ENDING;
- for (int i = 0;; ++i)
- try
- {
- makeDirectory(dirpath, /*bool failIfExists*/ true); //throw FileError, ErrorTargetExisting
- return dirpath;
- }
- catch (const ErrorTargetExisting&)
- {
- if (i == 10) throw; //avoid endless recursion in pathological cases
- dirpath = baseDirPf_ + Zstr("RecycleBin") + Zchar('_') + numberTo<Zstring>(i) + TEMP_FILE_ENDING;
- }
- }();
- }
- //assemble temporary recycle bin directory with random name and .ffs_tmp ending
- return appendSeparator(recyclerTmpDir);
-}
-#endif
-
-
void DeletionHandling::tryCleanup(bool allowUserCallback) //throw FileError; throw X
{
switch (deletionPolicy_)
@@ -482,33 +568,22 @@ void DeletionHandling::tryCleanup(bool allowUserCallback) //throw FileError; thr
break;
case DELETE_TO_RECYCLER:
-#ifdef ZEN_WIN
- if (!toBeRecycled.empty())
+ {
+ auto notifyDeletionStatus = [&](const Zstring& currentItem)
{
- auto notifyDeletionStatus = [&](const Zstring& currentItem)
- {
- if (!currentItem.empty())
- procCallback_.reportStatus(replaceCpy(txtRemovingFile, L"%x", fmtFileName(currentItem))); //throw ?
- else
- procCallback_.requestUiRefresh(); //throw ?
- };
-
- //move content of temporary directory to recycle bin in a single call
- if (allowUserCallback)
- recycleOrDelete(toBeRecycled, notifyDeletionStatus); //throw FileError
+ if (!currentItem.empty())
+ procCallback_.reportStatus(replaceCpy(txtRemovingFile, L"%x", fmtFileName(currentItem))); //throw ?
else
- recycleOrDelete(toBeRecycled, nullptr); //throw FileError
- toBeRecycled.clear();
- }
+ procCallback_.requestUiRefresh(); //throw ?
+ };
- //clean up temp directory itself (should contain remnant empty directories only)
- if (!recyclerTmpDir.empty())
- {
- removeDirectory(recyclerTmpDir); //throw FileError
- recyclerTmpDir.clear();
- }
-#endif
- break;
+ //move content of temporary directory to recycle bin in a single call
+ if (allowUserCallback)
+ recycler.tryCleanup(notifyDeletionStatus); //throw FileError
+ else
+ recycler.tryCleanup(nullptr); //throw FileError
+ }
+ break;
case DELETE_TO_VERSIONING:
//if (versioner.get())
@@ -549,52 +624,9 @@ void DeletionHandling::removeDirWithCallback(const Zstring& dirpath,
break;
case DELETE_TO_RECYCLER:
- {
-#ifdef ZEN_WIN
- const Zstring targetDir = getOrCreateRecyclerTempDirPf() + relativePath; //throw FileError
- bool deleted = false;
-
- auto moveToTempDir = [&]
- {
- try
- {
- //performance optimization: Instead of moving each object into recycle bin separately,
- //we rename them one by one into a temporary directory and batch-recycle this directory after sync
- renameFile(dirpath, targetDir); //throw FileError, ErrorDifferentVolume
- this->toBeRecycled.push_back(targetDir);
- deleted = true;
- }
- catch (ErrorDifferentVolume&) //MoveFileEx() returns ERROR_PATH_NOT_FOUND *before* considering ERROR_NOT_SAME_DEVICE! => we have to create targetDir in any case!
- {
- deleted = recycleOrDelete(dirpath); //throw FileError
- }
- };
-
- try
- {
- moveToTempDir(); //throw FileError, ErrorDifferentVolume
- }
- catch (FileError&)
- {
- if (somethingExists(dirpath))
- {
- const Zstring targetSuperDir = beforeLast(targetDir, FILE_NAME_SEPARATOR); //what if C:\ ?
- if (!dirExists(targetSuperDir))
- {
- makeDirectory(targetSuperDir); //throw FileError -> may legitimately fail on Linux if permissions are missing
- moveToTempDir(); //throw FileError -> this should work now!
- }
- else
- throw;
- }
- }
-#elif defined ZEN_LINUX || defined ZEN_MAC
- const bool deleted = recycleOrDelete(dirpath); //throw FileError
-#endif
- if (deleted)
+ if (recycler.recycleItem(dirpath, relativePath)) //throw FileError
onNotifyItemDeletion(); //moving to recycler is ONE logical operation, irrespective of the number of child elements!
- }
- break;
+ break;
case DELETE_TO_VERSIONING:
{
@@ -632,48 +664,7 @@ void DeletionHandling::removeFileWithCallback(const Zstring& filepath,
break;
case DELETE_TO_RECYCLER:
-#ifdef ZEN_WIN
- {
- const Zstring targetFile = getOrCreateRecyclerTempDirPf() + relativePath; //throw FileError
-
- auto moveToTempDir = [&]
- {
- try
- {
- //performance optimization: Instead of moving each object into recycle bin separately,
- //we rename them one by one into a temporary directory and batch-recycle this directory after sync
- renameFile(filepath, targetFile); //throw FileError, ErrorDifferentVolume
- this->toBeRecycled.push_back(targetFile);
- deleted = true;
- }
- catch (ErrorDifferentVolume&) //MoveFileEx() returns ERROR_PATH_NOT_FOUND *before* considering ERROR_NOT_SAME_DEVICE! => we have to create targetDir in any case!
- {
- deleted = recycleOrDelete(filepath); //throw FileError
- }
- };
-
- try
- {
- moveToTempDir(); //throw FileError, ErrorDifferentVolume
- }
- catch (FileError&)
- {
- if (somethingExists(filepath))
- {
- const Zstring targetDir = beforeLast(targetFile, FILE_NAME_SEPARATOR);
- if (!dirExists(targetDir))
- {
- makeDirectory(targetDir); //throw FileError -> may legitimately fail on Linux if permissions are missing
- moveToTempDir(); //throw FileError -> this should work now!
- }
- else
- throw;
- }
- }
- }
-#elif defined ZEN_LINUX || defined ZEN_MAC
- deleted = recycleOrDelete(filepath); //throw FileError
-#endif
+ deleted = recycler.recycleItem(filepath, relativePath); //throw FileError
break;
case DELETE_TO_VERSIONING:
@@ -865,8 +856,6 @@ private:
const std::function<void()>& onDeleteTargetFile,
const std::function<void(std::int64_t bytesDelta)>& onNotifyFileCopy) const; //throw FileError
- void verifyFiles(const Zstring& source, const Zstring& target, const std::function<void(std::int64_t bytesDelta)>& onUpdateStatus) const; //throw FileError
-
template <SelectedSide side>
DeletionHandling& getDelHandling();
@@ -1765,6 +1754,53 @@ void SynchronizeFolderPair::synchronizeFolderInt(DirPair& dirObj, SyncOperation
//###########################################################################################
+//--------------------- data verification -------------------------
+void verifyFiles(const Zstring& sourceFile, const Zstring& targetFile, const std::function<void(std::int64_t bytesDelta)>& onUpdateStatus) //throw FileError
+{
+ try
+ {
+ //do like "copy /v": 1. flush target file buffers, 2. read again as usual (using OS buffers)
+ // => it seems OS buffered are not invalidated by this: snake oil???
+ {
+#ifdef ZEN_WIN
+ const HANDLE fileHandle = ::CreateFile(applyLongPathPrefix(targetFile).c_str(), //_In_ LPCTSTR lpFileName,
+ GENERIC_WRITE | //_In_ DWORD dwDesiredAccess,
+ GENERIC_READ, //=> request read-access, too, just like "copy /v" command
+ FILE_SHARE_READ | FILE_SHARE_DELETE, //_In_ DWORD dwShareMode,
+ nullptr, //_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ OPEN_EXISTING, //_In_ DWORD dwCreationDisposition,
+ FILE_ATTRIBUTE_NORMAL, //_In_ DWORD dwFlagsAndAttributes,
+ nullptr); //_In_opt_ HANDLE hTemplateFile
+ if (fileHandle == INVALID_HANDLE_VALUE)
+ throwFileError(replaceCpy(_("Cannot open file %x."), L"%x", fmtFileName(targetFile)), L"CreateFile", getLastError());
+ ZEN_ON_SCOPE_EXIT(::CloseHandle(fileHandle));
+
+ if (!::FlushFileBuffers(fileHandle))
+ throwFileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(targetFile)), L"FlushFileBuffers", getLastError());
+
+#elif defined ZEN_LINUX || defined ZEN_MAC
+ const int fileHandle = ::open(targetFile.c_str(), O_WRONLY);
+ if (fileHandle == -1)
+ throwFileError(replaceCpy(_("Cannot open file %x."), L"%x", fmtFileName(targetFile)), L"open", getLastError());
+ ZEN_ON_SCOPE_EXIT(::close(fileHandle));
+
+ if (::fsync(fileHandle) != 0)
+ throwFileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(targetFile)), L"fsync", getLastError());
+#endif
+ } //close file handles
+
+ if (onUpdateStatus) onUpdateStatus(0);
+
+ if (!filesHaveSameContent(sourceFile, targetFile, onUpdateStatus)) //throw FileError
+ throw FileError(replaceCpy(replaceCpy(_("%x and %y have different content."), L"%x", L"\n" + fmtFileName(sourceFile)), L"%y", L"\n" + fmtFileName(targetFile)));
+ }
+ catch (const FileError& e) //add some context to error message
+ {
+ throw FileError(_("Data verification error:"), e.toString());
+ }
+}
+
+
InSyncAttributes SynchronizeFolderPair::copyFileWithCallback(const Zstring& sourceFile, //throw FileError
const Zstring& targetFile,
const std::function<void()>& onDeleteTargetFile,
@@ -1816,7 +1852,7 @@ InSyncAttributes SynchronizeFolderPair::copyFileWithCallback(const Zstring& sour
procCallback_.reportStatus(replaceCpy(_("Creating a Volume Shadow Copy for %x..."), L"%x", fmtFileName(volumeName)));
});
}
- catch (const FileError& e2) //enhance error massage
+ catch (const FileError& e2) //enhance error message
{
throw FileError(e1.toString(), e2.toString());
}
@@ -1829,52 +1865,6 @@ InSyncAttributes SynchronizeFolderPair::copyFileWithCallback(const Zstring& sour
#endif
}
-//--------------------- data verification -------------------------
-void SynchronizeFolderPair::verifyFiles(const Zstring& source, const Zstring& target, const std::function<void(std::int64_t bytesDelta)>& onUpdateStatus) const //throw FileError
-{
- static std::vector<char> memory1(1024 * 1024); //1024 kb seems to be a reasonable buffer size
- static std::vector<char> memory2(1024 * 1024);
-
- warn_static("redesign: access still buffered:")
-
-#ifdef ZEN_WIN
- wxFile file1(applyLongPathPrefix(source).c_str(), wxFile::read); //don't use buffered file input for verification!
-#elif defined ZEN_LINUX || defined ZEN_MAC
- wxFile file1(::open(source.c_str(), O_RDONLY)); //utilize UTF-8 filepath
-#endif
- if (!file1.IsOpened())
- throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(source)) + L" (open)");
-
-#ifdef ZEN_WIN
- wxFile file2(applyLongPathPrefix(target).c_str(), wxFile::read); //don't use buffered file input for verification!
-#elif defined ZEN_LINUX || defined ZEN_MAC
- wxFile file2(::open(target.c_str(), O_RDONLY)); //utilize UTF-8 filepath
-#endif
- if (!file2.IsOpened()) //NO cleanup necessary for (wxFile) file1
- throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(target)) + L" (open)");
-
- do
- {
- const size_t length1 = file1.Read(&memory1[0], memory1.size());
- if (file1.Error())
- throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(source)));
-
- const size_t length2 = file2.Read(&memory2[0], memory2.size());
- if (file2.Error())
- throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(target)));
-
- if (length1 != length2 || ::memcmp(&memory1[0], &memory2[0], length1) != 0)
- throw FileError(replaceCpy(replaceCpy(_("Data verification error: %x and %y have different content."), L"%x", L"\n" + fmtFileName(source)), L"%y", L"\n" + fmtFileName(target)));
-
- if (onUpdateStatus)
- onUpdateStatus(length1);
- }
- while (!file1.Eof());
-
- if (!file2.Eof())
- throw FileError(replaceCpy(replaceCpy(_("Data verification error: %x and %y have different content."), L"%x", L"\n" + fmtFileName(source)), L"%y", L"\n" + fmtFileName(target)));
-}
-
//###########################################################################################
template <SelectedSide side> //create base directories first (if not yet existing) -> no symlink or attribute copying!
@@ -2027,7 +2017,7 @@ void zen::synchronize(const TimeComp& timeStamp,
++item.second.writes;
};
- std::vector<std::pair<Zstring, Zstring>> significantDiffPairs;
+ std::vector<std::pair<Zstring, Zstring>> significantDiffPairs;
std::vector<std::pair<Zstring, std::pair<std::int64_t, std::int64_t>>> diskSpaceMissing; //dirpath / space required / space available
@@ -2093,7 +2083,7 @@ void zen::synchronize(const TimeComp& timeStamp,
incWriteCount(j->getBaseDirPf<LEFT_SIDE>());
}
- //check empty input fields: this only makes sense if empty field is source (and no DB files need to be created)
+ //check for empty target folder paths: this only makes sense if empty field is source (and no DB files need to be created)
if ((j->getBaseDirPf<LEFT_SIDE >().empty() && (writeLeft || folderPairCfg.saveSyncDB_)) ||
(j->getBaseDirPf<RIGHT_SIDE>().empty() && (writeRight || folderPairCfg.saveSyncDB_)))
{
@@ -2117,8 +2107,7 @@ void zen::synchronize(const TimeComp& timeStamp,
{
if (!baseDirPf.empty())
//PERMANENT network drop: avoid data loss when source directory is not found AND user chose to ignore errors (else we wouldn't arrive here)
- if (folderPairStat.getCreate() + folderPairStat.getUpdate() == 0 &&
- folderPairStat.getDelete() > 0) //deletions only... (respect filtered items!)
+ if (folderPairStat.getDelete() > 0) //check deletions only... (respect filtered items!)
//folderPairStat.getConflict() == 0 && -> there COULD be conflicts for <automatic> if directory existence check fails, but loading sync.ffs_db succeeds
//https://sourceforge.net/tracker/?func=detail&atid=1093080&aid=3531351&group_id=234430 -> fixed, but still better not consider conflicts!
if (!wasExisting) //avoid race-condition: we need to evaluate existence status from time of comparison!
@@ -2320,7 +2309,7 @@ void zen::synchronize(const TimeComp& timeStamp,
if (jobType[folderIndex] == FolderPairJobType::PROCESS)
{
//guarantee removal of invalid entries (where element is empty on both sides)
- ZEN_ON_SCOPE_EXIT(BaseDirPair::removeEmpty(*j););
+ ZEN_ON_SCOPE_EXIT(BaseDirPair::removeEmpty(*j));
bool copyPermissionsFp = false;
tryReportingError([&]
@@ -2371,8 +2360,8 @@ void zen::synchronize(const TimeComp& timeStamp,
syncFP.startSync(*j);
//(try to gracefully) cleanup temporary Recycle bin folders and versioning -> will be done in ~DeletionHandling anyway...
- tryReportingError([&] { delHandlerL.tryCleanup(); /*throw FileError*/}, callback); //throw X?
- tryReportingError([&] { delHandlerR.tryCleanup(); /*throw FileError*/}, callback); //throw X?
+ tryReportingError([&] { delHandlerL.tryCleanup(true /*allowUserCallback*/); /*throw FileError*/}, callback); //throw X?
+ tryReportingError([&] { delHandlerR.tryCleanup(true ); /*throw FileError*/}, callback); //throw X?
}
//(try to gracefully) write database file
diff --git a/FreeFileSync/Source/ui/batch_status_handler.cpp b/FreeFileSync/Source/ui/batch_status_handler.cpp
index beb59d48..88b136e7 100644
--- a/FreeFileSync/Source/ui/batch_status_handler.cpp
+++ b/FreeFileSync/Source/ui/batch_status_handler.cpp
@@ -39,18 +39,18 @@ Zstring addStatusToLogfilename(const Zstring& logfilepath, const std::wstring& s
void limitLogfileCount(const Zstring& logdir, const std::wstring& jobname, size_t maxCount, const std::function<void()>& onUpdateStatus) //noexcept
{
std::vector<Zstring> logFiles;
- const Zstring prefix = utfCvrtTo<Zstring>(jobname);
+ const Zstring prefix = utfCvrtTo<Zstring>(jobname);
-traverseFolder(logdir, [&](const FileInfo& fi)
-{
+ traverseFolder(logdir, [&](const FileInfo& fi)
+ {
const Zstring fileName(fi.shortName);
if (startsWith(fileName, prefix) && endsWith(fileName, Zstr(".log")))
logFiles.push_back(fi.fullPath);
if (onUpdateStatus)
onUpdateStatus();
-},
- nullptr, nullptr, [&](const std::wstring& errorMsg){ assert(false); }); //errors are not really critical in this context
+ },
+ nullptr, nullptr, [&](const std::wstring& errorMsg) { assert(false); }); //errors are not really critical in this context
if (logFiles.size() <= maxCount)
return;
@@ -78,11 +78,11 @@ std::unique_ptr<FileOutput> prepareNewLogfile(const Zstring& logfileDirectory, /
//create logfile directory if required
makeDirectory(logfileDir); //throw FileError
- const std::string colon = "\xcb\xb8"; //="modifier letter raised colon" => regular colon is forbidden in file names on Windows and OS X
- const auto format = utfCvrtTo<Zstring>("%Y-%m-%d %H" + colon + "%M" + colon + "%S");
+ //const std::string colon = "\xcb\xb8"; //="modifier letter raised colon" => regular colon is forbidden in file names on Windows and OS X
+ //=> too many issues, most notably cmd.exe is not Unicode-awere: http://sourceforge.net/p/freefilesync/discussion/open-discussion/thread/c559a5fb/
//assemble logfile name
- const Zstring body = appendSeparator(logfileDir) + utfCvrtTo<Zstring>(jobName) + Zstr(" ") + formatTime<Zstring>(format, timeStamp);
+ const Zstring body = appendSeparator(logfileDir) + utfCvrtTo<Zstring>(jobName) + Zstr(" ") + formatTime<Zstring>(Zstr("%Y-%m-%d %H%M%S"), timeStamp);
//ensure uniqueness
Zstring filepath = body + Zstr(".log");
diff --git a/FreeFileSync/Source/ui/check_version.cpp b/FreeFileSync/Source/ui/check_version.cpp
index 46663954..fad4b614 100644
--- a/FreeFileSync/Source/ui/check_version.cpp
+++ b/FreeFileSync/Source/ui/check_version.cpp
@@ -8,19 +8,25 @@
#include <zen/string_tools.h>
#include <zen/i18n.h>
#include <zen/utf.h>
+#include <zen/scope_guard.h>
+#include <zen/build_info.h>
#include <wx/timer.h>
#include <wx/utils.h>
#include <wx+/popup_dlg.h>
#include "../version/version.h"
-#include <zen/scope_guard.h>
#ifdef ZEN_WIN
#include <zen/win.h> //tame wininet include
+ #include <zen/win_ver.h>
#include <wininet.h>
-#elif defined ZEN_LINUX || defined ZEN_MAC
+#elif defined ZEN_LINUX
+ #include <wx/protocol/http.h>
+ #include <wx/sstream.h>
+#elif defined ZEN_MAC
#include <wx/protocol/http.h>
#include <wx/sstream.h>
+ #include <CoreServices/CoreServices.h> //Gestalt()
#endif
using namespace zen;
@@ -28,22 +34,91 @@ using namespace zen;
namespace
{
-std::wstring getUserAgentName()
+std::wstring getIso639Language()
+{
+#ifdef ZEN_WIN //use a more reliable function than wxWidgets:
+ const int bufSize = 10;
+ wchar_t buf[bufSize] = {};
+ int rv = ::GetLocaleInfo(LOCALE_USER_DEFAULT, //_In_ LCID Locale,
+ LOCALE_SISO639LANGNAME,//_In_ LCTYPE LCType,
+ buf, //_Out_opt_ LPTSTR lpLCData,
+ bufSize); //_In_ int cchData
+ if (0 < rv && rv < bufSize)
+ return buf; //MSDN: "This can be a 3-letter code for languages that don't have a 2-letter code"!
+ else assert(false);
+#endif
+ const std::wstring localeName(wxLocale::GetLanguageCanonicalName(wxLocale::GetSystemLanguage()));
+ if (localeName.empty())
+ return std::wstring();
+
+ if (contains(localeName, L"_"))
+ return beforeLast(localeName, L"_");
+
+ assert(localeName.size() == 2);
+ return localeName;
+}
+
+std::wstring getIso3166Country()
+{
+#ifdef ZEN_WIN //use a more reliable function than wxWidgets:
+ const int bufSize = 10;
+ wchar_t buf[bufSize] = {};
+ int rv = ::GetLocaleInfo(LOCALE_USER_DEFAULT, //_In_ LCID Locale,
+ LOCALE_SISO3166CTRYNAME,//_In_ LCTYPE LCType,
+ buf, //_Out_opt_ LPTSTR lpLCData,
+ bufSize); //_In_ int cchData
+ if (0 < rv && rv < bufSize)
+ return buf; //MSDN: "This can also return a number, such as "029" for Caribbean."!
+ else assert(false);
+#endif
+ const std::wstring localeName(wxLocale::GetLanguageCanonicalName(wxLocale::GetSystemLanguage()));
+ if (localeName.empty())
+ return std::wstring();
+
+ if (contains(localeName, L"_"))
+ return afterLast(localeName, L"_");
+
+ return std::wstring();
+}
+
+
+std::wstring getUserAgentName() //coordinate with on_check_latest_version.php
{
- std::wstring agentName = std::wstring(L"FreeFileSync ") + zen::currentVersion;
+ std::wstring agentName = std::wstring(L"FreeFileSync (") + zen::currentVersion;
+
#ifdef ZEN_WIN
agentName += L" Windows";
+ const auto osvMajor = getOsVersion().major;
+ const auto osvMinor = getOsVersion().minor;
+
#elif defined ZEN_LINUX
+ int osvMajor = 0;
+ int osvMinor = 0;
agentName += L" Linux";
+
#elif defined ZEN_MAC
agentName += L" Mac";
-#else
-#error wtf
+ SInt32 osvMajor = 0;
+ SInt32 osvMinor = 0;
+ ::Gestalt(gestaltSystemVersionMajor, &osvMajor);
+ ::Gestalt(gestaltSystemVersionMinor, &osvMinor);
#endif
- const std::wstring localeName(wxLocale::GetLanguageCanonicalName(wxLocale::GetSystemLanguage()));
- if (!localeName.empty())
- agentName += L" " + localeName;
+ agentName += L" " + numberTo<std::wstring>(osvMajor) + L"." + numberTo<std::wstring>(osvMinor);
+ agentName +=
+#ifdef ZEN_WIN
+ running64BitWindows()
+#elif defined ZEN_LINUX || defined ZEN_MAC
+ zen::is64BitBuild
+#endif
+ ? L" 64" : L" 32";
+
+ const std::wstring isoLang = getIso639Language();
+ const std::wstring isoCountry = getIso3166Country();
+ agentName += L" " + (!isoLang .empty() ? isoLang : L"zz");
+ agentName += L" " + (!isoCountry.empty() ? isoCountry : L"ZZ");
+
+ agentName += L")";
return agentName;
}
@@ -147,6 +222,7 @@ OutputIterator readBytesUrl(const wchar_t* url, OutputIterator result) //throw I
#else
bool getStringFromUrl(const wxString& server, const wxString& page, int timeout, wxString* output, int level = 0) //true on successful connection
{
+ wxWindowDisabler dummy;
wxHTTP webAccess;
webAccess.SetHeader(L"content-type", L"text/html; charset=utf-8");
webAccess.SetHeader(L"USER-AGENT", getUserAgentName());
@@ -204,10 +280,9 @@ enum GetVerResult
GET_VER_PAGE_NOT_FOUND //version file seems to have moved! => trigger an update!
};
-GetVerResult getOnlineVersion(wxString& version) //empty string on error;
+GetVerResult getOnlineVersion(wxString& version)
{
-#ifdef ZEN_WIN
- //internet access supporting proxy connections
+#ifdef ZEN_WIN //internet access supporting proxy connections
std::vector<char> output;
try
{
@@ -215,22 +290,20 @@ GetVerResult getOnlineVersion(wxString& version) //empty string on error;
}
catch (const InternetConnectionError&)
{
- return canAccessUrl(L"http://www.freefilesync.org/") ? GET_VER_PAGE_NOT_FOUND : GET_VER_NO_CONNECTION;
+ return canAccessUrl(L"http://www.google.com/") ? GET_VER_PAGE_NOT_FOUND : GET_VER_NO_CONNECTION;
}
-
output.push_back('\0');
version = utfCvrtTo<wxString>(&output[0]);
- return GET_VER_SUCCESS;
#elif defined ZEN_LINUX || defined ZEN_MAC
- wxWindowDisabler dummy;
-
- if (getStringFromUrl(L"www.freefilesync.org", L"/latest_version.txt", 5, &version))
- return GET_VER_SUCCESS;
-
- const bool canConnectToSf = getStringFromUrl(L"www.freefilesync.org", L"/", 1, nullptr);
- return canConnectToSf ? GET_VER_PAGE_NOT_FOUND : GET_VER_NO_CONNECTION;
+ if (!getStringFromUrl(L"www.freefilesync.org", L"/latest_version.txt", 5, &version))
+ {
+ const bool canConnectToSf = getStringFromUrl(L"www.google.com", L"/", 1, nullptr);
+ return canConnectToSf ? GET_VER_PAGE_NOT_FOUND : GET_VER_NO_CONNECTION;
+ }
#endif
+ trim(version); //Windows: remove trailing blank and newline
+ return version.empty() ? GET_VER_PAGE_NOT_FOUND : GET_VER_SUCCESS; //empty version possible??
}
@@ -246,27 +319,63 @@ std::vector<size_t> parseVersion(const wxString& version)
}
-bool haveNewerVersion(const wxString& onlineVersion)
+/*constexpr*/ long getInactiveCheckId()
+{
+ //use current version to calculate a changing number for the inactive state near UTC begin, in order to always check for updates after installing a new version
+ //=> convert version into 11-based *unique* number (this breaks lexicographical version ordering, but that's irrelevant!)
+ long id = 0;
+ const wchar_t* first = zen::currentVersion;
+ const wchar_t* last = first + zen::strLength(currentVersion);
+ std::for_each(first, last, [&](wchar_t c)
+ {
+ id *= 11;
+ if (L'0' <= c && c <= L'9')
+ id += c - L'0';
+ else
+ {
+ assert(c == VERSION_SEP);
+ id += 10;
+ }
+ });
+ assert(0 < id && id < 3600 * 24 * 365); //as long as value is within a year after UTC begin (1970) there's no risk to clash with *current* time
+ return id;
+}
+}
+
+
+bool zen::isNewerFreeFileSyncVersion(const wxString& onlineVersion)
{
std::vector<size_t> current = parseVersion(zen::currentVersion);
std::vector<size_t> online = parseVersion(onlineVersion);
- if (online.empty() || online[0] == 0) //online version may be "This website has been moved..." In this case better check for an update
+ if (online.empty() || online[0] == 0) //online version string may be "This website has been moved..." In this case better check for an update
return true;
return std::lexicographical_compare(current.begin(), current.end(),
online .begin(), online .end());
}
+
+
+bool zen::updateCheckActive(long lastUpdateCheck)
+{
+ return lastUpdateCheck != getInactiveCheckId();
+}
+
+
+void zen::disableUpdateCheck(long& lastUpdateCheck)
+{
+ lastUpdateCheck = getInactiveCheckId();
}
-void zen::checkForUpdateNow(wxWindow* parent)
+void zen::checkForUpdateNow(wxWindow* parent, wxString& lastOnlineVersion)
{
wxString onlineVersion;
switch (getOnlineVersion(onlineVersion))
{
case GET_VER_SUCCESS:
- if (haveNewerVersion(onlineVersion))
+ lastOnlineVersion = onlineVersion;
+ if (isNewerFreeFileSyncVersion(onlineVersion))
{
switch (showConfirmationDialog(parent, DialogInfoType::INFO, PopupDialogCfg().
setTitle(_("Check for Program Updates")).
@@ -274,7 +383,7 @@ void zen::checkForUpdateNow(wxWindow* parent)
_("&Download")))
{
case ConfirmationButton::DO_IT:
- wxLaunchDefaultBrowser(L"http://freefilesync.org/get_latest.php");
+ wxLaunchDefaultBrowser(L"http://www.freefilesync.org/get_latest.php");
break;
case ConfirmationButton::CANCEL:
break;
@@ -289,17 +398,18 @@ void zen::checkForUpdateNow(wxWindow* parent)
case GET_VER_NO_CONNECTION:
showNotificationDialog(parent, DialogInfoType::ERROR2, PopupDialogCfg().
setTitle(("Check for Program Updates")).
- setMainInstructions(_("Unable to connect to FreeFileSync.org.")));
+ setMainInstructions(_("Unable to connect to www.freefilesync.org.")));
break;
case GET_VER_PAGE_NOT_FOUND:
+ lastOnlineVersion = L"unknown";
switch (showConfirmationDialog(parent, DialogInfoType::ERROR2, PopupDialogCfg().
setTitle(_("Check for Program Updates")).
setMainInstructions(_("Cannot find current FreeFileSync version number online. Do you want to check manually?")),
_("&Check")))
{
case ConfirmationButton::DO_IT:
- wxLaunchDefaultBrowser(L"http://www.freefilesync.org/");
+ wxLaunchDefaultBrowser(L"http://www.freefilesync.org/get_latest.php");
break;
case ConfirmationButton::CANCEL:
break;
@@ -309,9 +419,9 @@ void zen::checkForUpdateNow(wxWindow* parent)
}
-void zen::checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck, const std::function<void()>& onBeforeInternetAccess)
+void zen::checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck, wxString& lastOnlineVersion, const std::function<void()>& onBeforeInternetAccess)
{
- if (lastUpdateCheck != -1)
+ if (updateCheckActive(lastUpdateCheck))
{
if (wxGetLocalTime() >= lastUpdateCheck + 7 * 24 * 3600) //check weekly
{
@@ -321,8 +431,9 @@ void zen::checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck, co
{
case GET_VER_SUCCESS:
lastUpdateCheck = wxGetLocalTime();
+ lastOnlineVersion = onlineVersion;
- if (haveNewerVersion(onlineVersion))
+ if (isNewerFreeFileSyncVersion(onlineVersion))
{
switch (showConfirmationDialog(parent, DialogInfoType::INFO, PopupDialogCfg().
setTitle(_("Check for Program Updates")).
@@ -342,13 +453,14 @@ void zen::checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck, co
break; //ignore this error
case GET_VER_PAGE_NOT_FOUND:
+ lastOnlineVersion = L"unknown";
switch (showConfirmationDialog(parent, DialogInfoType::ERROR2, PopupDialogCfg().
setTitle(_("Check for Program Updates")).
setMainInstructions(_("Cannot find current FreeFileSync version number online. Do you want to check manually?")),
_("&Check")))
{
case ConfirmationButton::DO_IT:
- wxLaunchDefaultBrowser(L"http://www.freefilesync.org/");
+ wxLaunchDefaultBrowser(L"http://www.freefilesync.org/get_latest.php");
break;
case ConfirmationButton::CANCEL:
break;
diff --git a/FreeFileSync/Source/ui/check_version.h b/FreeFileSync/Source/ui/check_version.h
index 4ffe9726..54c068da 100644
--- a/FreeFileSync/Source/ui/check_version.h
+++ b/FreeFileSync/Source/ui/check_version.h
@@ -13,8 +13,13 @@
namespace zen
{
-void checkForUpdateNow(wxWindow* parent);
-void checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck, const std::function<void()>& onBeforeInternetAccess); //-1: check never
+void checkForUpdateNow(wxWindow* parent, wxString& lastOnlineVersion);
+void checkForUpdatePeriodically(wxWindow* parent, long& lastUpdateCheck, wxString& lastOnlineVersion, const std::function<void()>& onBeforeInternetAccess); //-1: check never
+
+bool updateCheckActive(long lastUpdateCheck);
+void disableUpdateCheck(long& lastUpdateCheck);
+
+bool isNewerFreeFileSyncVersion(const wxString& onlineVersion);
}
#endif // UPDATEVERSION_H_INCLUDED
diff --git a/FreeFileSync/Source/ui/custom_grid.cpp b/FreeFileSync/Source/ui/custom_grid.cpp
index a2130a82..cf292bf5 100644
--- a/FreeFileSync/Source/ui/custom_grid.cpp
+++ b/FreeFileSync/Source/ui/custom_grid.cpp
@@ -540,21 +540,27 @@ private:
const IconInfo ii = getIconInfo(row);
- wxBitmap fileIcon;
- if (ii.drawAsFolder)
- fileIcon = iconMgr_->getGenericDirIcon();
- else if (!ii.iconPath.empty()) //retrieve file icon
+ wxBitmap fileIcon = [&]
{
- if (Opt<wxBitmap> tmpIco = iconMgr_->refIconBuffer().retrieveFileIcon(ii.iconPath))
- fileIcon = *tmpIco;
- else
+ switch (ii.type)
{
- fileIcon = iconMgr_->getGenericFileIcon(); //better than nothing
- setFailedLoad(row); //save status of failed icon load -> used for async. icon loading
- //falsify only! we want to avoid writing incorrect success values when only partially updating the DC, e.g. when scrolling,
- //see repaint behavior of ::ScrollWindow() function!
+ case IconInfo::FOLDER:
+ return iconMgr_->getGenericDirIcon();
+
+ case IconInfo::ICON_PATH:
+ if (Opt<wxBitmap> tmpIco = iconMgr_->refIconBuffer().retrieveFileIcon(ii.iconPath))
+ return *tmpIco;
+
+ setFailedLoad(row); //save status of failed icon load -> used for async. icon loading
+ //falsify only! we want to avoid writing incorrect success values when only partially updating the DC, e.g. when scrolling,
+ //see repaint behavior of ::ScrollWindow() function!
+ return iconMgr_->getGenericFileIcon(); //better than nothing
+
+ case IconInfo::EMPTY:
+ break;
}
- }
+ return wxBitmap();
+ }();
if (fileIcon.IsOk())
{
@@ -664,8 +670,14 @@ private:
struct IconInfo
{
- Zstring iconPath; //mutually exclusive: either non-empty iconPath, or folder, or neither if no entry at this row
- bool drawAsFolder; //
+ enum IconType
+ {
+ EMPTY = 0, //= default value!
+ FOLDER,
+ ICON_PATH,
+ };
+ IconType type;
+ Zstring iconPath; //only set for type==ICON_PATH
bool drawAsLink;
};
@@ -682,17 +694,19 @@ private:
void visit(const FilePair& fileObj) override
{
- ii_.iconPath = fileObj.getFullPath<side>();
+ ii_.type = IconInfo::ICON_PATH;
+ ii_.iconPath = fileObj.getFullPath<side>();
ii_.drawAsLink = fileObj.isFollowedSymlink<side>() || hasLinkExtension(ii_.iconPath);
}
void visit(const SymlinkPair& linkObj) override
{
- ii_.iconPath = linkObj.getFullPath<side>();
+ ii_.type = IconInfo::ICON_PATH;
+ ii_.iconPath = linkObj.getFullPath<side>();
ii_.drawAsLink = true;
}
void visit(const DirPair& dirObj) override
{
- ii_.drawAsFolder = true;
+ ii_.type = IconInfo::FOLDER;
//todo: if ("is followed symlink") ii_.drawAsLink = true;
}
diff --git a/FreeFileSync/Source/ui/gui_generated.cpp b/FreeFileSync/Source/ui/gui_generated.cpp
index fb9c0914..c233de4c 100644
--- a/FreeFileSync/Source/ui/gui_generated.cpp
+++ b/FreeFileSync/Source/ui/gui_generated.cpp
@@ -19,971 +19,971 @@
MainDialogGenerated::MainDialogGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxSize( 640,400 ), wxDefaultSize );
-
- m_menubar1 = new wxMenuBar( 0 );
- m_menuFile = new wxMenu();
- m_menuItemNew = new wxMenuItem( m_menuFile, wxID_NEW, wxString( _("&New") ) + wxT('\t') + wxT("Ctrl+N"), wxEmptyString, wxITEM_NORMAL );
- m_menuFile->Append( m_menuItemNew );
-
- m_menuItemLoad = new wxMenuItem( m_menuFile, wxID_OPEN, wxString( _("&Open...") ) + wxT('\t') + wxT("Ctrl+O"), wxEmptyString, wxITEM_NORMAL );
- m_menuFile->Append( m_menuItemLoad );
-
- m_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_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_menuFile->AppendSeparator();
-
- wxMenuItem* m_menuItem4;
- m_menuItem4 = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("E&xit") ) , wxEmptyString, wxITEM_NORMAL );
- m_menuFile->Append( m_menuItem4 );
-
- m_menubar1->Append( m_menuFile, _("&File") );
-
- m_menu4 = new wxMenu();
- m_menuItemCompare = new wxMenuItem( m_menu4, wxID_ANY, wxString( _("Start &comparison") ) + wxT('\t') + wxT("F5"), wxEmptyString, wxITEM_NORMAL );
- m_menu4->Append( m_menuItemCompare );
-
- m_menu4->AppendSeparator();
-
- m_menuItemCompSettings = new wxMenuItem( m_menu4, wxID_ANY, wxString( _("C&omparison settings") ) + wxT('\t') + wxT("F6"), wxEmptyString, wxITEM_NORMAL );
- m_menu4->Append( m_menuItemCompSettings );
-
- m_menuItemFilter = new wxMenuItem( m_menu4, wxID_ANY, wxString( _("&Filter settings") ) + wxT('\t') + wxT("F7"), wxEmptyString, wxITEM_NORMAL );
- m_menu4->Append( m_menuItemFilter );
-
- m_menuItemSyncSettings = new wxMenuItem( m_menu4, wxID_ANY, wxString( _("S&ynchronization settings") ) + wxT('\t') + wxT("F8"), wxEmptyString, wxITEM_NORMAL );
- m_menu4->Append( m_menuItemSyncSettings );
-
- m_menu4->AppendSeparator();
-
- m_menuItemSynchronize = new wxMenuItem( m_menu4, wxID_ANY, wxString( _("Start &synchronization") ) + wxT('\t') + wxT("F9"), wxEmptyString, wxITEM_NORMAL );
- m_menu4->Append( m_menuItemSynchronize );
-
- m_menubar1->Append( m_menu4, _("&Actions") );
-
- m_menuTools = new wxMenu();
- m_menuItemOptions = new wxMenuItem( m_menuTools, wxID_PREFERENCES, wxString( _("&Options") ) , 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_menuTools->AppendSeparator();
-
- wxMenuItem* m_menuItem15;
- m_menuItem15 = new wxMenuItem( m_menuTools, wxID_FIND, wxString( _("&Find...") ) + wxT('\t') + wxT("Ctrl+F"), wxEmptyString, wxITEM_NORMAL );
- m_menuTools->Append( m_menuItem15 );
-
- wxMenuItem* m_menuItem51;
- m_menuItem51 = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("&Reset layout") ) , wxEmptyString, wxITEM_NORMAL );
- m_menuTools->Append( m_menuItem51 );
-
- wxMenuItem* m_menuItem5;
- m_menuItem5 = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("&Export file list...") ) , wxEmptyString, wxITEM_NORMAL );
- m_menuTools->Append( m_menuItem5 );
-
- m_menubar1->Append( m_menuTools, _("&Tools") );
-
- m_menuHelp = new wxMenu();
- m_menuItemHelp = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&View help") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL );
- m_menuHelp->Append( m_menuItemHelp );
-
- m_menuCheckVersion = new wxMenu();
- wxMenuItem* m_menuCheckVersionItem = new wxMenuItem( m_menuHelp, wxID_ANY, _("&Check for new version"), wxEmptyString, wxITEM_NORMAL, m_menuCheckVersion );
- m_menuItemCheckVersionNow = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("&Check now") ) , wxEmptyString, wxITEM_NORMAL );
- m_menuCheckVersion->Append( m_menuItemCheckVersionNow );
-
- m_menuItemCheckVersionAuto = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("Check &automatically once a week") ) , wxEmptyString, wxITEM_CHECK );
- m_menuCheckVersion->Append( m_menuItemCheckVersionAuto );
- m_menuItemCheckVersionAuto->Check( true );
-
- m_menuHelp->Append( m_menuCheckVersionItem );
-
- m_menuHelp->AppendSeparator();
-
- m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL );
- m_menuHelp->Append( m_menuItemAbout );
-
- m_menubar1->Append( m_menuHelp, _("&Help") );
-
- this->SetMenuBar( m_menubar1 );
-
- bSizerPanelHolder = new wxBoxSizer( wxVERTICAL );
-
- m_panelTopButtons = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER|wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer1791;
- bSizer1791 = new wxBoxSizer( wxVERTICAL );
-
- bSizerTopButtons = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonCancel = new zen::BitmapTextButton( m_panelTopButtons, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonCancel->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
- m_buttonCancel->Enable( false );
- m_buttonCancel->Hide();
-
- bSizerTopButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_buttonCompare = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Compare"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonCompare->SetDefault();
- m_buttonCompare->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
- m_buttonCompare->SetToolTip( _("dummy") );
-
- bSizerTopButtons->Add( m_buttonCompare, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizerTopButtons->Add( 3, 3, 0, 0, 5 );
-
- m_bpButtonCmpConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW );
- m_bpButtonCmpConfig->SetToolTip( _("dummy") );
-
- bSizerTopButtons->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizerTopButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerTopButtons->Add( 5, 5, 0, 0, 5 );
-
- m_bpButtonFilter = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 60,-1 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE );
- bSizerTopButtons->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizerTopButtons->Add( 5, 5, 0, 0, 5 );
-
-
- bSizerTopButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonSyncConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW );
- m_bpButtonSyncConfig->SetToolTip( _("dummy") );
-
- bSizerTopButtons->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizerTopButtons->Add( 3, 3, 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(), 70, 90, 92, false, wxEmptyString ) );
- m_buttonSync->SetToolTip( _("dummy") );
-
- bSizerTopButtons->Add( m_buttonSync, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizer1791->Add( bSizerTopButtons, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- m_panelTopButtons->SetSizer( bSizer1791 );
- m_panelTopButtons->Layout();
- bSizer1791->Fit( m_panelTopButtons );
- bSizerPanelHolder->Add( m_panelTopButtons, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_panelDirectoryPairs = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer1601;
- bSizer1601 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer91;
- bSizer91 = new wxBoxSizer( wxHORIZONTAL );
-
- m_panelTopLeft = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelTopLeft->SetMinSize( wxSize( 1,-1 ) );
-
- wxFlexGridSizer* fgSizer8;
- fgSizer8 = new wxFlexGridSizer( 0, 2, 0, 0 );
- fgSizer8->AddGrowableCol( 1 );
- fgSizer8->SetFlexibleDirection( wxBOTH );
- fgSizer8->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_ALL );
-
-
- fgSizer8->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticTextResolvedPathL = new wxStaticText( m_panelTopLeft, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextResolvedPathL->Wrap( -1 );
- fgSizer8->Add( m_staticTextResolvedPathL, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 );
-
- wxBoxSizer* bSizer159;
- bSizer159 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bpButtonAddPair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- m_bpButtonAddPair->SetToolTip( _("Add folder pair") );
-
- bSizer159->Add( m_bpButtonAddPair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonRemovePair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") );
-
- bSizer159->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- fgSizer8->Add( bSizer159, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- wxBoxSizer* bSizer182;
- bSizer182 = new wxBoxSizer( wxHORIZONTAL );
-
- m_directoryLeft = new FolderHistoryBox( m_panelTopLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer182->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_buttonSelectDirLeft = new wxButton( m_panelTopLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
- m_buttonSelectDirLeft->SetToolTip( _("Select a folder") );
-
- bSizer182->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- fgSizer8->Add( bSizer182, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- m_panelTopLeft->SetSizer( fgSizer8 );
- m_panelTopLeft->Layout();
- fgSizer8->Fit( m_panelTopLeft );
- bSizer91->Add( m_panelTopLeft, 1, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_panelTopMiddle = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer1771;
- bSizer1771 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer1771->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_bpButtonSwapSides = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW );
- m_bpButtonSwapSides->SetToolTip( _("Swap sides") );
-
- bSizer1771->Add( m_bpButtonSwapSides, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- wxBoxSizer* bSizer160;
- bSizer160 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bpButtonAltCompCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- bSizer160->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonLocalFilter = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- bSizer160->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 2 );
-
- m_bpButtonAltSyncCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- bSizer160->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer1771->Add( bSizer160, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer1771->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- m_panelTopMiddle->SetSizer( bSizer1771 );
- m_panelTopMiddle->Layout();
- bSizer1771->Fit( m_panelTopMiddle );
- bSizer91->Add( m_panelTopMiddle, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_panelTopRight = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelTopRight->SetMinSize( wxSize( 1,-1 ) );
-
- wxBoxSizer* bSizer183;
- bSizer183 = new wxBoxSizer( wxVERTICAL );
-
- m_staticTextResolvedPathR = new wxStaticText( m_panelTopRight, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextResolvedPathR->Wrap( -1 );
- bSizer183->Add( m_staticTextResolvedPathR, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 );
-
- wxBoxSizer* bSizer179;
- bSizer179 = new wxBoxSizer( wxHORIZONTAL );
-
- m_directoryRight = new FolderHistoryBox( m_panelTopRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer179->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_buttonSelectDirRight = new wxButton( m_panelTopRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
- m_buttonSelectDirRight->SetToolTip( _("Select a folder") );
-
- bSizer179->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer183->Add( bSizer179, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- m_panelTopRight->SetSizer( bSizer183 );
- m_panelTopRight->Layout();
- bSizer183->Fit( m_panelTopRight );
- bSizer91->Add( m_panelTopRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
-
- bSizer1601->Add( bSizer91, 0, wxEXPAND, 5 );
-
- m_scrolledWindowFolderPairs = new wxScrolledWindow( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxHSCROLL|wxVSCROLL );
- m_scrolledWindowFolderPairs->SetScrollRate( 10, 10 );
- m_scrolledWindowFolderPairs->SetMinSize( wxSize( -1,0 ) );
-
- bSizerAddFolderPairs = new wxBoxSizer( wxVERTICAL );
-
-
- m_scrolledWindowFolderPairs->SetSizer( bSizerAddFolderPairs );
- m_scrolledWindowFolderPairs->Layout();
- bSizerAddFolderPairs->Fit( m_scrolledWindowFolderPairs );
- bSizer1601->Add( m_scrolledWindowFolderPairs, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- m_panelDirectoryPairs->SetSizer( bSizer1601 );
- m_panelDirectoryPairs->Layout();
- bSizer1601->Fit( m_panelDirectoryPairs );
- bSizerPanelHolder->Add( m_panelDirectoryPairs, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_gridNavi = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
- m_gridNavi->SetScrollRate( 5, 5 );
- bSizerPanelHolder->Add( m_gridNavi, 1, wxEXPAND, 5 );
-
- m_panelCenter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer1711;
- bSizer1711 = new wxBoxSizer( wxVERTICAL );
-
- m_splitterMain = new zen::TripleSplitter( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer1781;
- bSizer1781 = new wxBoxSizer( wxHORIZONTAL );
-
- m_gridMainL = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
- m_gridMainL->SetScrollRate( 5, 5 );
- bSizer1781->Add( m_gridMainL, 1, wxEXPAND, 5 );
-
- m_gridMainC = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
- m_gridMainC->SetScrollRate( 5, 5 );
- bSizer1781->Add( m_gridMainC, 0, wxEXPAND, 5 );
-
- m_gridMainR = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
- m_gridMainR->SetScrollRate( 5, 5 );
- bSizer1781->Add( m_gridMainR, 1, wxEXPAND, 5 );
-
-
- m_splitterMain->SetSizer( bSizer1781 );
- m_splitterMain->Layout();
- bSizer1781->Fit( m_splitterMain );
- bSizer1711->Add( m_splitterMain, 1, wxEXPAND, 5 );
-
- m_panelStatusBar = new wxPanel( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer451;
- bSizer451 = new wxBoxSizer( wxHORIZONTAL );
-
- bSizer451->SetMinSize( wxSize( -1,22 ) );
- bSizerFileStatus = new wxBoxSizer( wxHORIZONTAL );
-
- bSizerStatusLeft = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer53;
- bSizer53 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizerStatusLeftDirectories = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapSmallDirectoryLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- bSizerStatusLeftDirectories->Add( m_bitmapSmallDirectoryLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatusLeftDirectories->Add( 2, 0, 0, 0, 5 );
-
- m_staticTextStatusLeftDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatusLeftDirs->Wrap( -1 );
- bSizerStatusLeftDirectories->Add( m_staticTextStatusLeftDirs, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer53->Add( bSizerStatusLeftDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizerStatusLeftFiles = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizerStatusLeftFiles->Add( 10, 0, 0, 0, 5 );
-
- m_bitmapSmallFileLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- bSizerStatusLeftFiles->Add( m_bitmapSmallFileLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatusLeftFiles->Add( 2, 0, 0, 0, 5 );
-
- m_staticTextStatusLeftFiles = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatusLeftFiles->Wrap( -1 );
- bSizerStatusLeftFiles->Add( m_staticTextStatusLeftFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatusLeftFiles->Add( 4, 0, 0, 0, 5 );
-
- m_staticTextStatusLeftBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatusLeftBytes->Wrap( -1 );
- bSizerStatusLeftFiles->Add( m_staticTextStatusLeftBytes, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer53->Add( bSizerStatusLeftFiles, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatusLeft->Add( bSizer53, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticline9 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizerStatusLeft->Add( m_staticline9, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 2 );
-
-
- bSizerFileStatus->Add( bSizerStatusLeft, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextStatusMiddle = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatusMiddle->Wrap( -1 );
- bSizerFileStatus->Add( m_staticTextStatusMiddle, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizerStatusRight = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticline10 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizerStatusRight->Add( m_staticline10, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP, 2 );
-
- wxBoxSizer* bSizer52;
- bSizer52 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizerStatusRightDirectories = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapSmallDirectoryRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- bSizerStatusRightDirectories->Add( m_bitmapSmallDirectoryRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatusRightDirectories->Add( 2, 0, 0, 0, 5 );
-
- m_staticTextStatusRightDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatusRightDirs->Wrap( -1 );
- bSizerStatusRightDirectories->Add( m_staticTextStatusRightDirs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer52->Add( bSizerStatusRightDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- bSizerStatusRightFiles = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizerStatusRightFiles->Add( 10, 0, 0, 0, 5 );
-
- m_bitmapSmallFileRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- bSizerStatusRightFiles->Add( m_bitmapSmallFileRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatusRightFiles->Add( 2, 0, 0, 0, 5 );
-
- m_staticTextStatusRightFiles = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatusRightFiles->Wrap( -1 );
- bSizerStatusRightFiles->Add( m_staticTextStatusRightFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatusRightFiles->Add( 4, 0, 0, 0, 5 );
-
- m_staticTextStatusRightBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatusRightBytes->Wrap( -1 );
- bSizerStatusRightFiles->Add( m_staticTextStatusRightBytes, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer52->Add( bSizerStatusRightFiles, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatusRight->Add( bSizer52, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerFileStatus->Add( bSizerStatusRight, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer451->Add( bSizerFileStatus, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_staticTextFullStatus = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextFullStatus->Wrap( -1 );
- m_staticTextFullStatus->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer451->Add( m_staticTextFullStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
-
- m_panelStatusBar->SetSizer( bSizer451 );
- m_panelStatusBar->Layout();
- bSizer451->Fit( m_panelStatusBar );
- bSizer1711->Add( m_panelStatusBar, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
-
- m_panelCenter->SetSizer( bSizer1711 );
- m_panelCenter->Layout();
- bSizer1711->Fit( m_panelCenter );
- bSizerPanelHolder->Add( m_panelCenter, 1, wxEXPAND, 5 );
-
- m_panelSearch = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer1713;
- bSizer1713 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bpButtonHideSearch = new wxBitmapButton( m_panelSearch, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- m_bpButtonHideSearch->SetToolTip( _("Close search bar") );
-
- bSizer1713->Add( m_bpButtonHideSearch, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_staticText101 = new wxStaticText( m_panelSearch, wxID_ANY, _("Find:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText101->Wrap( -1 );
- bSizer1713->Add( m_staticText101, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_textCtrlSearchTxt = new wxTextCtrl( m_panelSearch, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220,-1 ), 0|wxWANTS_CHARS );
- m_textCtrlSearchTxt->SetMaxLength( 0 );
- bSizer1713->Add( m_textCtrlSearchTxt, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_checkBoxMatchCase = new wxCheckBox( m_panelSearch, wxID_ANY, _("Match case"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer1713->Add( m_checkBoxMatchCase, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
-
- m_panelSearch->SetSizer( bSizer1713 );
- m_panelSearch->Layout();
- bSizer1713->Fit( m_panelSearch );
- bSizerPanelHolder->Add( m_panelSearch, 0, 0, 5 );
-
- m_panelConfig = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- bSizerConfig = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer151;
- bSizer151 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer17611;
- bSizer17611 = new wxBoxSizer( wxVERTICAL );
-
- m_bpButtonNew = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- m_bpButtonNew->SetToolTip( _("dummy") );
-
- bSizer17611->Add( m_bpButtonNew, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 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 );
-
-
- bSizer151->Add( bSizer17611, 0, 0, 5 );
-
- wxBoxSizer* bSizer1761;
- bSizer1761 = new wxBoxSizer( wxVERTICAL );
-
- m_bpButtonOpen = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- m_bpButtonOpen->SetToolTip( _("dummy") );
-
- bSizer1761->Add( m_bpButtonOpen, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 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 );
-
-
- bSizer151->Add( bSizer1761, 0, 0, 5 );
-
- wxBoxSizer* bSizer175;
- bSizer175 = new wxBoxSizer( wxVERTICAL );
-
- m_bpButtonSave = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- m_bpButtonSave->SetToolTip( _("dummy") );
-
- bSizer175->Add( m_bpButtonSave, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 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 );
-
-
- bSizer151->Add( bSizer175, 0, 0, 5 );
-
- wxBoxSizer* bSizer174;
- bSizer174 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer1772;
- bSizer1772 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bpButtonSaveAs = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- m_bpButtonSaveAs->SetToolTip( _("dummy") );
-
- bSizer1772->Add( m_bpButtonSaveAs, 0, 0, 5 );
-
- m_bpButtonSaveAsBatch = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- m_bpButtonSaveAsBatch->SetToolTip( _("dummy") );
-
- bSizer1772->Add( m_bpButtonSaveAsBatch, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer174->Add( bSizer1772, 0, wxALIGN_CENTER_HORIZONTAL, 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 );
-
-
- bSizer151->Add( bSizer174, 0, 0, 5 );
-
-
- bSizerConfig->Add( bSizer151, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_listBoxHistory = new wxListBox( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB );
- m_listBoxHistory->SetMinSize( wxSize( -1,40 ) );
-
- bSizerConfig->Add( m_listBoxHistory, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- m_panelConfig->SetSizer( bSizerConfig );
- m_panelConfig->Layout();
- bSizerConfig->Fit( m_panelConfig );
- bSizerPanelHolder->Add( m_panelConfig, 0, 0, 5 );
-
- m_panelViewFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- bSizerViewFilter = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticTextViewType = new wxStaticText( m_panelViewFilter, wxID_ANY, _("View type:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextViewType->Wrap( -1 );
- bSizerViewFilter->Add( m_staticTextViewType, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonViewTypeSyncAction = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 82,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonViewTypeSyncAction, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 );
-
- m_bpButtonShowExcluded = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowExcluded, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticTextSelectView = new wxStaticText( m_panelViewFilter, wxID_ANY, _("Select view:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextSelectView->Wrap( -1 );
- bSizerViewFilter->Add( m_staticTextSelectView, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowDeleteLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowDeleteLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowUpdateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowCreateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowLeftOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowLeftOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowLeftNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowLeftNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowEqual = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowEqual, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowDoNothing = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowDoNothing, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowDifferent = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowDifferent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowRightNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowRightNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowRightOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowRightOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowCreateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowUpdateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowDeleteRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowDeleteRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonShowConflict = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
- bSizerViewFilter->Add( m_bpButtonShowConflict, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_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, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
- m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- bSizer1801 = new wxBoxSizer( wxVERTICAL );
-
- bSizerStatistics = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer173;
- bSizer173 = new wxBoxSizer( wxVERTICAL );
-
- m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") );
-
- bSizer173->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer173->Add( 5, 2, 0, 0, 5 );
-
-
- bSizer173->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextDeleteLeft->Wrap( -1 );
- m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") );
-
- bSizer173->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatistics->Add( bSizer173, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizerStatistics->Add( 5, 5, 0, 0, 5 );
-
- 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") );
-
- bSizer172->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer172->Add( 5, 2, 0, 0, 5 );
-
-
- bSizer172->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticTextUpdateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextUpdateLeft->Wrap( -1 );
- m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be updated") );
-
- bSizer172->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizerStatistics->Add( bSizer172, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizerStatistics->Add( 5, 5, 0, 0, 5 );
-
- wxBoxSizer* bSizer1712;
- bSizer1712 = new wxBoxSizer( wxVERTICAL );
-
- m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") );
-
- bSizer1712->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer1712->Add( 5, 2, 0, 0, 5 );
-
-
- bSizer1712->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextCreateLeft->Wrap( -1 );
- m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") );
-
- bSizer1712->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizerStatistics->Add( bSizer1712, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizerStatistics->Add( 5, 5, 0, 0, 5 );
-
- bSizerData = new wxBoxSizer( wxVERTICAL );
-
- m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapData->SetToolTip( _("Total bytes to copy") );
-
- bSizerData->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizerData->Add( 5, 2, 0, 0, 5 );
-
-
- bSizerData->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextData->Wrap( -1 );
- m_staticTextData->SetToolTip( _("Total bytes to copy") );
-
- bSizerData->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatistics->Add( bSizerData, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizerStatistics->Add( 5, 5, 0, 0, 5 );
-
- wxBoxSizer* bSizer178;
- bSizer178 = new wxBoxSizer( wxVERTICAL );
-
- m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") );
-
- bSizer178->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer178->Add( 5, 2, 0, 0, 5 );
-
-
- bSizer178->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticTextCreateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextCreateRight->Wrap( -1 );
- m_staticTextCreateRight->SetToolTip( _("Number of files and folders that will be created") );
-
- bSizer178->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatistics->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizerStatistics->Add( 5, 5, 0, 0, 5 );
-
- wxBoxSizer* bSizer177;
- bSizer177 = new wxBoxSizer( wxVERTICAL );
-
- m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapUpdateRight->SetToolTip( _("Number of files that will be updated") );
-
- bSizer177->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer177->Add( 5, 2, 0, 0, 5 );
-
-
- bSizer177->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticTextUpdateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextUpdateRight->Wrap( -1 );
- m_staticTextUpdateRight->SetToolTip( _("Number of files that will be updated") );
-
- bSizer177->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatistics->Add( bSizer177, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizerStatistics->Add( 5, 5, 0, 0, 5 );
-
- wxBoxSizer* bSizer176;
- bSizer176 = new wxBoxSizer( wxVERTICAL );
-
- m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") );
-
- bSizer176->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer176->Add( 5, 2, 0, 0, 5 );
-
-
- bSizer176->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticTextDeleteRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextDeleteRight->Wrap( -1 );
- m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") );
-
- bSizer176->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerStatistics->Add( bSizer176, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizer1801->Add( bSizerStatistics, 0, wxALIGN_CENTER_VERTICAL|wxALL, 4 );
-
-
- m_panelStatistics->SetSizer( bSizer1801 );
- m_panelStatistics->Layout();
- bSizer1801->Fit( m_panelStatistics );
- bSizerViewFilter->Add( m_panelStatistics, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- m_panelViewFilter->SetSizer( bSizerViewFilter );
- m_panelViewFilter->Layout();
- bSizerViewFilter->Fit( m_panelViewFilter );
- bSizerPanelHolder->Add( m_panelViewFilter, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- this->SetSizer( bSizerPanelHolder );
- this->Layout();
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) );
- this->Connect( m_menuItemNew->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigNew ) );
- this->Connect( m_menuItemLoad->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ) );
- this->Connect( m_menuItemSave->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ) );
- this->Connect( m_menuItemSaveAs->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSaveAs ) );
- this->Connect( m_menuItemSaveAsBatch->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ) );
- this->Connect( m_menuItem4->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) );
- this->Connect( m_menuItemCompare->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) );
- this->Connect( m_menuItemCompSettings->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ) );
- this->Connect( m_menuItemFilter->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ) );
- this->Connect( m_menuItemSyncSettings->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ) );
- this->Connect( m_menuItemSynchronize->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) );
- this->Connect( m_menuItemOptions->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuOptions ) );
- this->Connect( m_menuItem15->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuFindItem ) );
- this->Connect( m_menuItem51->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuResetLayout ) );
- this->Connect( m_menuItem5->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) );
- this->Connect( m_menuItemHelp->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) );
- this->Connect( m_menuItemCheckVersionNow->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) );
- this->Connect( m_menuItemCheckVersionAuto->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersionAutomatically ) );
- this->Connect( m_menuItemAbout->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) );
- m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this );
- m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this );
- m_bpButtonCmpConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCompSettingsContext ), NULL, this );
- m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this );
- m_bpButtonFilter->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnGlobalFilterContext ), NULL, this );
- m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this );
- m_bpButtonSyncConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnSyncSettingsContext ), NULL, this );
- m_buttonSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this );
- m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::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_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_listBoxHistory->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( MainDialogGenerated::OnCfgHistoryKeyEvent ), NULL, this );
- m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistory ), NULL, this );
- m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistoryDoubleClick ), NULL, this );
- m_listBoxHistory->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCfgHistoryRightClick ), NULL, this );
- m_bpButtonViewTypeSyncAction->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewType ), NULL, this );
- m_bpButtonShowExcluded->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowExcluded->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowDeleteLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowDeleteLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowUpdateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowUpdateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowCreateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowCreateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowLeftOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowLeftNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowEqual->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowEqual->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowDoNothing->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowDoNothing->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowDifferent->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowRightNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowRightOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowCreateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowCreateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowUpdateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowUpdateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowDeleteRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowDeleteRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
- m_bpButtonShowConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
- m_bpButtonShowConflict->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ this->SetSizeHints( wxSize( 640,400 ), wxDefaultSize );
+
+ m_menubar1 = new wxMenuBar( 0 );
+ m_menuFile = new wxMenu();
+ m_menuItemNew = new wxMenuItem( m_menuFile, wxID_NEW, wxString( _("&New") ) + wxT('\t') + wxT("Ctrl+N"), wxEmptyString, wxITEM_NORMAL );
+ m_menuFile->Append( m_menuItemNew );
+
+ m_menuItemLoad = new wxMenuItem( m_menuFile, wxID_OPEN, wxString( _("&Open...") ) + wxT('\t') + wxT("Ctrl+O"), wxEmptyString, wxITEM_NORMAL );
+ m_menuFile->Append( m_menuItemLoad );
+
+ m_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_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_menuFile->AppendSeparator();
+
+ wxMenuItem* m_menuItem4;
+ m_menuItem4 = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("E&xit") ) , wxEmptyString, wxITEM_NORMAL );
+ m_menuFile->Append( m_menuItem4 );
+
+ m_menubar1->Append( m_menuFile, _("&File") );
+
+ m_menu4 = new wxMenu();
+ m_menuItemCompare = new wxMenuItem( m_menu4, wxID_ANY, wxString( _("Start &comparison") ) + wxT('\t') + wxT("F5"), wxEmptyString, wxITEM_NORMAL );
+ m_menu4->Append( m_menuItemCompare );
+
+ m_menu4->AppendSeparator();
+
+ m_menuItemCompSettings = new wxMenuItem( m_menu4, wxID_ANY, wxString( _("C&omparison settings") ) + wxT('\t') + wxT("F6"), wxEmptyString, wxITEM_NORMAL );
+ m_menu4->Append( m_menuItemCompSettings );
+
+ m_menuItemFilter = new wxMenuItem( m_menu4, wxID_ANY, wxString( _("&Filter settings") ) + wxT('\t') + wxT("F7"), wxEmptyString, wxITEM_NORMAL );
+ m_menu4->Append( m_menuItemFilter );
+
+ m_menuItemSyncSettings = new wxMenuItem( m_menu4, wxID_ANY, wxString( _("S&ynchronization settings") ) + wxT('\t') + wxT("F8"), wxEmptyString, wxITEM_NORMAL );
+ m_menu4->Append( m_menuItemSyncSettings );
+
+ m_menu4->AppendSeparator();
+
+ m_menuItemSynchronize = new wxMenuItem( m_menu4, wxID_ANY, wxString( _("Start &synchronization") ) + wxT('\t') + wxT("F9"), wxEmptyString, wxITEM_NORMAL );
+ m_menu4->Append( m_menuItemSynchronize );
+
+ m_menubar1->Append( m_menu4, _("&Actions") );
+
+ m_menuTools = new wxMenu();
+ m_menuItemOptions = new wxMenuItem( m_menuTools, wxID_PREFERENCES, wxString( _("&Options") ) , 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_menuTools->AppendSeparator();
+
+ wxMenuItem* m_menuItem15;
+ m_menuItem15 = new wxMenuItem( m_menuTools, wxID_FIND, wxString( _("&Find...") ) + wxT('\t') + wxT("Ctrl+F"), wxEmptyString, wxITEM_NORMAL );
+ m_menuTools->Append( m_menuItem15 );
+
+ wxMenuItem* m_menuItem51;
+ m_menuItem51 = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("&Reset layout") ) , wxEmptyString, wxITEM_NORMAL );
+ m_menuTools->Append( m_menuItem51 );
+
+ wxMenuItem* m_menuItem5;
+ m_menuItem5 = new wxMenuItem( m_menuTools, wxID_ANY, wxString( _("&Export file list...") ) , wxEmptyString, wxITEM_NORMAL );
+ m_menuTools->Append( m_menuItem5 );
+
+ m_menubar1->Append( m_menuTools, _("&Tools") );
+
+ m_menuHelp = new wxMenu();
+ m_menuItemHelp = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&View help") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL );
+ m_menuHelp->Append( m_menuItemHelp );
+
+ m_menuCheckVersion = new wxMenu();
+ wxMenuItem* m_menuCheckVersionItem = new wxMenuItem( m_menuHelp, wxID_ANY, _("&Check for new version"), wxEmptyString, wxITEM_NORMAL, m_menuCheckVersion );
+ m_menuItemCheckVersionNow = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("&Check now") ) , wxEmptyString, wxITEM_NORMAL );
+ m_menuCheckVersion->Append( m_menuItemCheckVersionNow );
+
+ m_menuItemCheckVersionAuto = new wxMenuItem( m_menuCheckVersion, wxID_ANY, wxString( _("Check &automatically once a week") ) , wxEmptyString, wxITEM_CHECK );
+ m_menuCheckVersion->Append( m_menuItemCheckVersionAuto );
+ m_menuItemCheckVersionAuto->Check( true );
+
+ m_menuHelp->Append( m_menuCheckVersionItem );
+
+ m_menuHelp->AppendSeparator();
+
+ m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL );
+ m_menuHelp->Append( m_menuItemAbout );
+
+ m_menubar1->Append( m_menuHelp, _("&Help") );
+
+ this->SetMenuBar( m_menubar1 );
+
+ bSizerPanelHolder = new wxBoxSizer( wxVERTICAL );
+
+ m_panelTopButtons = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER|wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer1791;
+ bSizer1791 = new wxBoxSizer( wxVERTICAL );
+
+ bSizerTopButtons = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonCancel = new zen::BitmapTextButton( m_panelTopButtons, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonCancel->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+ m_buttonCancel->Enable( false );
+ m_buttonCancel->Hide();
+
+ bSizerTopButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_buttonCompare = new zen::BitmapTextButton( m_panelTopButtons, wxID_ANY, _("Compare"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonCompare->SetDefault();
+ m_buttonCompare->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+ m_buttonCompare->SetToolTip( _("dummy") );
+
+ bSizerTopButtons->Add( m_buttonCompare, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizerTopButtons->Add( 3, 3, 0, 0, 5 );
+
+ m_bpButtonCmpConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW );
+ m_bpButtonCmpConfig->SetToolTip( _("dummy") );
+
+ bSizerTopButtons->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizerTopButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerTopButtons->Add( 5, 5, 0, 0, 5 );
+
+ m_bpButtonFilter = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 60,-1 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE );
+ bSizerTopButtons->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizerTopButtons->Add( 5, 5, 0, 0, 5 );
+
+
+ bSizerTopButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonSyncConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW );
+ m_bpButtonSyncConfig->SetToolTip( _("dummy") );
+
+ bSizerTopButtons->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizerTopButtons->Add( 3, 3, 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(), 70, 90, 92, false, wxEmptyString ) );
+ m_buttonSync->SetToolTip( _("dummy") );
+
+ bSizerTopButtons->Add( m_buttonSync, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizer1791->Add( bSizerTopButtons, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ m_panelTopButtons->SetSizer( bSizer1791 );
+ m_panelTopButtons->Layout();
+ bSizer1791->Fit( m_panelTopButtons );
+ bSizerPanelHolder->Add( m_panelTopButtons, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_panelDirectoryPairs = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer1601;
+ bSizer1601 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer91;
+ bSizer91 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_panelTopLeft = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelTopLeft->SetMinSize( wxSize( 1,-1 ) );
+
+ wxFlexGridSizer* fgSizer8;
+ fgSizer8 = new wxFlexGridSizer( 0, 2, 0, 0 );
+ fgSizer8->AddGrowableCol( 1 );
+ fgSizer8->SetFlexibleDirection( wxBOTH );
+ fgSizer8->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_ALL );
+
+
+ fgSizer8->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticTextResolvedPathL = new wxStaticText( m_panelTopLeft, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextResolvedPathL->Wrap( -1 );
+ fgSizer8->Add( m_staticTextResolvedPathL, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 );
+
+ wxBoxSizer* bSizer159;
+ bSizer159 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bpButtonAddPair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ m_bpButtonAddPair->SetToolTip( _("Add folder pair") );
+
+ bSizer159->Add( m_bpButtonAddPair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonRemovePair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") );
+
+ bSizer159->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ fgSizer8->Add( bSizer159, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxBoxSizer* bSizer182;
+ bSizer182 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_directoryLeft = new FolderHistoryBox( m_panelTopLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer182->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonSelectDirLeft = new wxButton( m_panelTopLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonSelectDirLeft->SetToolTip( _("Select a folder") );
+
+ bSizer182->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ fgSizer8->Add( bSizer182, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ m_panelTopLeft->SetSizer( fgSizer8 );
+ m_panelTopLeft->Layout();
+ fgSizer8->Fit( m_panelTopLeft );
+ bSizer91->Add( m_panelTopLeft, 1, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_panelTopMiddle = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer1771;
+ bSizer1771 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer1771->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_bpButtonSwapSides = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW );
+ m_bpButtonSwapSides->SetToolTip( _("Swap sides") );
+
+ bSizer1771->Add( m_bpButtonSwapSides, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer160;
+ bSizer160 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bpButtonAltCompCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ bSizer160->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonLocalFilter = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ bSizer160->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 2 );
+
+ m_bpButtonAltSyncCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ bSizer160->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer1771->Add( bSizer160, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizer1771->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ m_panelTopMiddle->SetSizer( bSizer1771 );
+ m_panelTopMiddle->Layout();
+ bSizer1771->Fit( m_panelTopMiddle );
+ bSizer91->Add( m_panelTopMiddle, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_panelTopRight = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelTopRight->SetMinSize( wxSize( 1,-1 ) );
+
+ wxBoxSizer* bSizer183;
+ bSizer183 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextResolvedPathR = new wxStaticText( m_panelTopRight, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextResolvedPathR->Wrap( -1 );
+ bSizer183->Add( m_staticTextResolvedPathR, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 );
+
+ wxBoxSizer* bSizer179;
+ bSizer179 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_directoryRight = new FolderHistoryBox( m_panelTopRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer179->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonSelectDirRight = new wxButton( m_panelTopRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonSelectDirRight->SetToolTip( _("Select a folder") );
+
+ bSizer179->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer183->Add( bSizer179, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ m_panelTopRight->SetSizer( bSizer183 );
+ m_panelTopRight->Layout();
+ bSizer183->Fit( m_panelTopRight );
+ bSizer91->Add( m_panelTopRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+
+ bSizer1601->Add( bSizer91, 0, wxEXPAND, 5 );
+
+ m_scrolledWindowFolderPairs = new wxScrolledWindow( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxHSCROLL|wxVSCROLL );
+ m_scrolledWindowFolderPairs->SetScrollRate( 10, 10 );
+ m_scrolledWindowFolderPairs->SetMinSize( wxSize( -1,0 ) );
+
+ bSizerAddFolderPairs = new wxBoxSizer( wxVERTICAL );
+
+
+ m_scrolledWindowFolderPairs->SetSizer( bSizerAddFolderPairs );
+ m_scrolledWindowFolderPairs->Layout();
+ bSizerAddFolderPairs->Fit( m_scrolledWindowFolderPairs );
+ bSizer1601->Add( m_scrolledWindowFolderPairs, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ m_panelDirectoryPairs->SetSizer( bSizer1601 );
+ m_panelDirectoryPairs->Layout();
+ bSizer1601->Fit( m_panelDirectoryPairs );
+ bSizerPanelHolder->Add( m_panelDirectoryPairs, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_gridNavi = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
+ m_gridNavi->SetScrollRate( 5, 5 );
+ bSizerPanelHolder->Add( m_gridNavi, 1, wxEXPAND, 5 );
+
+ m_panelCenter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer1711;
+ bSizer1711 = new wxBoxSizer( wxVERTICAL );
+
+ m_splitterMain = new zen::TripleSplitter( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer1781;
+ bSizer1781 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_gridMainL = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
+ m_gridMainL->SetScrollRate( 5, 5 );
+ bSizer1781->Add( m_gridMainL, 1, wxEXPAND, 5 );
+
+ m_gridMainC = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
+ m_gridMainC->SetScrollRate( 5, 5 );
+ bSizer1781->Add( m_gridMainC, 0, wxEXPAND, 5 );
+
+ m_gridMainR = new zen::Grid( m_splitterMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
+ m_gridMainR->SetScrollRate( 5, 5 );
+ bSizer1781->Add( m_gridMainR, 1, wxEXPAND, 5 );
+
+
+ m_splitterMain->SetSizer( bSizer1781 );
+ m_splitterMain->Layout();
+ bSizer1781->Fit( m_splitterMain );
+ bSizer1711->Add( m_splitterMain, 1, wxEXPAND, 5 );
+
+ m_panelStatusBar = new wxPanel( m_panelCenter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer451;
+ bSizer451 = new wxBoxSizer( wxHORIZONTAL );
+
+ bSizer451->SetMinSize( wxSize( -1,22 ) );
+ bSizerFileStatus = new wxBoxSizer( wxHORIZONTAL );
+
+ bSizerStatusLeft = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer53;
+ bSizer53 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizerStatusLeftDirectories = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapSmallDirectoryLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerStatusLeftDirectories->Add( m_bitmapSmallDirectoryLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatusLeftDirectories->Add( 2, 0, 0, 0, 5 );
+
+ m_staticTextStatusLeftDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatusLeftDirs->Wrap( -1 );
+ bSizerStatusLeftDirectories->Add( m_staticTextStatusLeftDirs, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizer53->Add( bSizerStatusLeftDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizerStatusLeftFiles = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizerStatusLeftFiles->Add( 10, 0, 0, 0, 5 );
+
+ m_bitmapSmallFileLeft = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerStatusLeftFiles->Add( m_bitmapSmallFileLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatusLeftFiles->Add( 2, 0, 0, 0, 5 );
+
+ m_staticTextStatusLeftFiles = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatusLeftFiles->Wrap( -1 );
+ bSizerStatusLeftFiles->Add( m_staticTextStatusLeftFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatusLeftFiles->Add( 4, 0, 0, 0, 5 );
+
+ m_staticTextStatusLeftBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatusLeftBytes->Wrap( -1 );
+ bSizerStatusLeftFiles->Add( m_staticTextStatusLeftBytes, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer53->Add( bSizerStatusLeftFiles, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer53->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatusLeft->Add( bSizer53, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticline9 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizerStatusLeft->Add( m_staticline9, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 2 );
+
+
+ bSizerFileStatus->Add( bSizerStatusLeft, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticTextStatusMiddle = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatusMiddle->Wrap( -1 );
+ bSizerFileStatus->Add( m_staticTextStatusMiddle, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerFileStatus->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizerStatusRight = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticline10 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizerStatusRight->Add( m_staticline10, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP, 2 );
+
+ wxBoxSizer* bSizer52;
+ bSizer52 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizerStatusRightDirectories = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapSmallDirectoryRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerStatusRightDirectories->Add( m_bitmapSmallDirectoryRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatusRightDirectories->Add( 2, 0, 0, 0, 5 );
+
+ m_staticTextStatusRightDirs = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatusRightDirs->Wrap( -1 );
+ bSizerStatusRightDirectories->Add( m_staticTextStatusRightDirs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer52->Add( bSizerStatusRightDirectories, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ bSizerStatusRightFiles = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizerStatusRightFiles->Add( 10, 0, 0, 0, 5 );
+
+ m_bitmapSmallFileRight = new wxStaticBitmap( m_panelStatusBar, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerStatusRightFiles->Add( m_bitmapSmallFileRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatusRightFiles->Add( 2, 0, 0, 0, 5 );
+
+ m_staticTextStatusRightFiles = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatusRightFiles->Wrap( -1 );
+ bSizerStatusRightFiles->Add( m_staticTextStatusRightFiles, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatusRightFiles->Add( 4, 0, 0, 0, 5 );
+
+ m_staticTextStatusRightBytes = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatusRightBytes->Wrap( -1 );
+ bSizerStatusRightFiles->Add( m_staticTextStatusRightBytes, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer52->Add( bSizerStatusRightFiles, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer52->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatusRight->Add( bSizer52, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerFileStatus->Add( bSizerStatusRight, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer451->Add( bSizerFileStatus, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_staticTextFullStatus = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextFullStatus->Wrap( -1 );
+ m_staticTextFullStatus->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer451->Add( m_staticTextFullStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+
+ m_panelStatusBar->SetSizer( bSizer451 );
+ m_panelStatusBar->Layout();
+ bSizer451->Fit( m_panelStatusBar );
+ bSizer1711->Add( m_panelStatusBar, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+
+ m_panelCenter->SetSizer( bSizer1711 );
+ m_panelCenter->Layout();
+ bSizer1711->Fit( m_panelCenter );
+ bSizerPanelHolder->Add( m_panelCenter, 1, wxEXPAND, 5 );
+
+ m_panelSearch = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer1713;
+ bSizer1713 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bpButtonHideSearch = new wxBitmapButton( m_panelSearch, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ m_bpButtonHideSearch->SetToolTip( _("Close search bar") );
+
+ bSizer1713->Add( m_bpButtonHideSearch, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_staticText101 = new wxStaticText( m_panelSearch, wxID_ANY, _("Find:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText101->Wrap( -1 );
+ bSizer1713->Add( m_staticText101, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_textCtrlSearchTxt = new wxTextCtrl( m_panelSearch, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220,-1 ), 0|wxWANTS_CHARS );
+ m_textCtrlSearchTxt->SetMaxLength( 0 );
+ bSizer1713->Add( m_textCtrlSearchTxt, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_checkBoxMatchCase = new wxCheckBox( m_panelSearch, wxID_ANY, _("Match case"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer1713->Add( m_checkBoxMatchCase, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+
+ m_panelSearch->SetSizer( bSizer1713 );
+ m_panelSearch->Layout();
+ bSizer1713->Fit( m_panelSearch );
+ bSizerPanelHolder->Add( m_panelSearch, 0, 0, 5 );
+
+ m_panelConfig = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ bSizerConfig = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer151;
+ bSizer151 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer17611;
+ bSizer17611 = new wxBoxSizer( wxVERTICAL );
+
+ m_bpButtonNew = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ m_bpButtonNew->SetToolTip( _("dummy") );
+
+ bSizer17611->Add( m_bpButtonNew, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 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 );
+
+
+ bSizer151->Add( bSizer17611, 0, 0, 5 );
+
+ wxBoxSizer* bSizer1761;
+ bSizer1761 = new wxBoxSizer( wxVERTICAL );
+
+ m_bpButtonOpen = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ m_bpButtonOpen->SetToolTip( _("dummy") );
+
+ bSizer1761->Add( m_bpButtonOpen, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 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 );
+
+
+ bSizer151->Add( bSizer1761, 0, 0, 5 );
+
+ wxBoxSizer* bSizer175;
+ bSizer175 = new wxBoxSizer( wxVERTICAL );
+
+ m_bpButtonSave = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ m_bpButtonSave->SetToolTip( _("dummy") );
+
+ bSizer175->Add( m_bpButtonSave, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 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 );
+
+
+ bSizer151->Add( bSizer175, 0, 0, 5 );
+
+ wxBoxSizer* bSizer174;
+ bSizer174 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer1772;
+ bSizer1772 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bpButtonSaveAs = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ m_bpButtonSaveAs->SetToolTip( _("dummy") );
+
+ bSizer1772->Add( m_bpButtonSaveAs, 0, 0, 5 );
+
+ m_bpButtonSaveAsBatch = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ m_bpButtonSaveAsBatch->SetToolTip( _("dummy") );
+
+ bSizer1772->Add( m_bpButtonSaveAsBatch, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizer174->Add( bSizer1772, 0, wxALIGN_CENTER_HORIZONTAL, 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 );
+
+
+ bSizer151->Add( bSizer174, 0, 0, 5 );
+
+
+ bSizerConfig->Add( bSizer151, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_listBoxHistory = new wxListBox( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB );
+ m_listBoxHistory->SetMinSize( wxSize( -1,40 ) );
+
+ bSizerConfig->Add( m_listBoxHistory, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ m_panelConfig->SetSizer( bSizerConfig );
+ m_panelConfig->Layout();
+ bSizerConfig->Fit( m_panelConfig );
+ bSizerPanelHolder->Add( m_panelConfig, 0, 0, 5 );
+
+ m_panelViewFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ bSizerViewFilter = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticTextViewType = new wxStaticText( m_panelViewFilter, wxID_ANY, _("View type:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextViewType->Wrap( -1 );
+ bSizerViewFilter->Add( m_staticTextViewType, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonViewTypeSyncAction = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 82,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonViewTypeSyncAction, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 );
+
+ m_bpButtonShowExcluded = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowExcluded, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticTextSelectView = new wxStaticText( m_panelViewFilter, wxID_ANY, _("Select view:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextSelectView->Wrap( -1 );
+ bSizerViewFilter->Add( m_staticTextSelectView, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowDeleteLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowDeleteLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowUpdateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowCreateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowLeftOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowLeftOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowLeftNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowLeftNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowEqual = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowEqual, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowDoNothing = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowDoNothing, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowDifferent = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowDifferent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowRightNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowRightNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowRightOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowRightOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowCreateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowUpdateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowDeleteRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowDeleteRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonShowConflict = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW );
+ bSizerViewFilter->Add( m_bpButtonShowConflict, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_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, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
+ m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ bSizer1801 = new wxBoxSizer( wxVERTICAL );
+
+ bSizerStatistics = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer173;
+ bSizer173 = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") );
+
+ bSizer173->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer173->Add( 5, 2, 0, 0, 5 );
+
+
+ bSizer173->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDeleteLeft->Wrap( -1 );
+ m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") );
+
+ bSizer173->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatistics->Add( bSizer173, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizerStatistics->Add( 5, 5, 0, 0, 5 );
+
+ 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") );
+
+ bSizer172->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer172->Add( 5, 2, 0, 0, 5 );
+
+
+ bSizer172->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticTextUpdateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextUpdateLeft->Wrap( -1 );
+ m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be updated") );
+
+ bSizer172->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizerStatistics->Add( bSizer172, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizerStatistics->Add( 5, 5, 0, 0, 5 );
+
+ wxBoxSizer* bSizer1712;
+ bSizer1712 = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") );
+
+ bSizer1712->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizer1712->Add( 5, 2, 0, 0, 5 );
+
+
+ bSizer1712->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextCreateLeft->Wrap( -1 );
+ m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") );
+
+ bSizer1712->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizerStatistics->Add( bSizer1712, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizerStatistics->Add( 5, 5, 0, 0, 5 );
+
+ bSizerData = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapData->SetToolTip( _("Total bytes to copy") );
+
+ bSizerData->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizerData->Add( 5, 2, 0, 0, 5 );
+
+
+ bSizerData->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextData->Wrap( -1 );
+ m_staticTextData->SetToolTip( _("Total bytes to copy") );
+
+ bSizerData->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatistics->Add( bSizerData, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizerStatistics->Add( 5, 5, 0, 0, 5 );
+
+ wxBoxSizer* bSizer178;
+ bSizer178 = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") );
+
+ bSizer178->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizer178->Add( 5, 2, 0, 0, 5 );
+
+
+ bSizer178->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticTextCreateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextCreateRight->Wrap( -1 );
+ m_staticTextCreateRight->SetToolTip( _("Number of files and folders that will be created") );
+
+ bSizer178->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatistics->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizerStatistics->Add( 5, 5, 0, 0, 5 );
+
+ wxBoxSizer* bSizer177;
+ bSizer177 = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapUpdateRight->SetToolTip( _("Number of files that will be updated") );
+
+ bSizer177->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizer177->Add( 5, 2, 0, 0, 5 );
+
+
+ bSizer177->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticTextUpdateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextUpdateRight->Wrap( -1 );
+ m_staticTextUpdateRight->SetToolTip( _("Number of files that will be updated") );
+
+ bSizer177->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatistics->Add( bSizer177, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizerStatistics->Add( 5, 5, 0, 0, 5 );
+
+ wxBoxSizer* bSizer176;
+ bSizer176 = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") );
+
+ bSizer176->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer176->Add( 5, 2, 0, 0, 5 );
+
+
+ bSizer176->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticTextDeleteRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDeleteRight->Wrap( -1 );
+ m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") );
+
+ bSizer176->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerStatistics->Add( bSizer176, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizer1801->Add( bSizerStatistics, 0, wxALIGN_CENTER_VERTICAL|wxALL, 4 );
+
+
+ m_panelStatistics->SetSizer( bSizer1801 );
+ m_panelStatistics->Layout();
+ bSizer1801->Fit( m_panelStatistics );
+ bSizerViewFilter->Add( m_panelStatistics, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ m_panelViewFilter->SetSizer( bSizerViewFilter );
+ m_panelViewFilter->Layout();
+ bSizerViewFilter->Fit( m_panelViewFilter );
+ bSizerPanelHolder->Add( m_panelViewFilter, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ this->SetSizer( bSizerPanelHolder );
+ this->Layout();
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) );
+ this->Connect( m_menuItemNew->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigNew ) );
+ this->Connect( m_menuItemLoad->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ) );
+ this->Connect( m_menuItemSave->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ) );
+ this->Connect( m_menuItemSaveAs->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSaveAs ) );
+ this->Connect( m_menuItemSaveAsBatch->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ) );
+ this->Connect( m_menuItem4->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) );
+ this->Connect( m_menuItemCompare->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) );
+ this->Connect( m_menuItemCompSettings->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ) );
+ this->Connect( m_menuItemFilter->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ) );
+ this->Connect( m_menuItemSyncSettings->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ) );
+ this->Connect( m_menuItemSynchronize->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) );
+ this->Connect( m_menuItemOptions->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuOptions ) );
+ this->Connect( m_menuItem15->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuFindItem ) );
+ this->Connect( m_menuItem51->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuResetLayout ) );
+ this->Connect( m_menuItem5->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) );
+ this->Connect( m_menuItemHelp->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) );
+ this->Connect( m_menuItemCheckVersionNow->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) );
+ this->Connect( m_menuItemCheckVersionAuto->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersionAutomatically ) );
+ this->Connect( m_menuItemAbout->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) );
+ m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this );
+ m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this );
+ m_bpButtonCmpConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCompSettingsContext ), NULL, this );
+ m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this );
+ m_bpButtonFilter->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnGlobalFilterContext ), NULL, this );
+ m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this );
+ m_bpButtonSyncConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnSyncSettingsContext ), NULL, this );
+ m_buttonSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this );
+ m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::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_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_listBoxHistory->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( MainDialogGenerated::OnCfgHistoryKeyEvent ), NULL, this );
+ m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistory ), NULL, this );
+ m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistoryDoubleClick ), NULL, this );
+ m_listBoxHistory->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnCfgHistoryRightClick ), NULL, this );
+ m_bpButtonViewTypeSyncAction->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewType ), NULL, this );
+ m_bpButtonShowExcluded->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowExcluded->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowDeleteLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowDeleteLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowUpdateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowUpdateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowCreateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowCreateLeft->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowLeftOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowLeftNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowEqual->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowEqual->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowDoNothing->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowDoNothing->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowDifferent->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowRightNewer->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowRightOnly->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowCreateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowCreateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowUpdateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowUpdateRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowDeleteRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowDeleteRight->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
+ m_bpButtonShowConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnToggleViewButton ), NULL, this );
+ m_bpButtonShowConflict->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::OnViewButtonRightClick ), NULL, this );
}
MainDialogGenerated::~MainDialogGenerated()
@@ -992,815 +992,815 @@ MainDialogGenerated::~MainDialogGenerated()
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 ) );
-
- wxBoxSizer* bSizer7;
- bSizer7 = new wxBoxSizer( wxVERTICAL );
-
- m_notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
- m_panelCompSettingsHolder = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelCompSettingsHolder->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer275;
- bSizer275 = new wxBoxSizer( wxVERTICAL );
-
- bSizerLocalCompSettings = new wxBoxSizer( wxVERTICAL );
-
- m_checkBoxUseLocalCmpOptions = new wxCheckBox( m_panelCompSettingsHolder, wxID_ANY, _("Use local settings:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxUseLocalCmpOptions->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- bSizerLocalCompSettings->Add( m_checkBoxUseLocalCmpOptions, 0, wxALL|wxEXPAND, 10 );
-
- m_staticline59 = new wxStaticLine( m_panelCompSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizerLocalCompSettings->Add( m_staticline59, 0, wxEXPAND, 5 );
-
-
- bSizer275->Add( bSizerLocalCompSettings, 0, wxEXPAND, 5 );
-
- m_panelComparisonSettings = new wxPanel( m_panelCompSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelComparisonSettings->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer159;
- bSizer159 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer178;
- bSizer178 = new wxBoxSizer( wxHORIZONTAL );
-
- 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 );
-
- wxFlexGridSizer* fgSizer16;
- fgSizer16 = new wxFlexGridSizer( 2, 2, 5, 5 );
- fgSizer16->SetFlexibleDirection( wxBOTH );
- fgSizer16->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_bitmapByTime = new wxStaticBitmap( m_panelComparisonSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapByTime->SetToolTip( _("Identify equal files by comparing modification time and size.") );
-
- fgSizer16->Add( m_bitmapByTime, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_toggleBtnTimeSize = new wxToggleButton( m_panelComparisonSettings, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_toggleBtnTimeSize->SetValue( true );
- m_toggleBtnTimeSize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer16->Add( m_toggleBtnTimeSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_bitmapByContent = new wxStaticBitmap( m_panelComparisonSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapByContent->SetToolTip( _("Identify equal files by comparing the file content.") );
-
- fgSizer16->Add( m_bitmapByContent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_toggleBtnContent = new wxToggleButton( m_panelComparisonSettings, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_toggleBtnContent->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer16->Add( m_toggleBtnContent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizer182->Add( fgSizer16, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer178->Add( bSizer182, 0, wxALL, 5 );
-
- m_staticline42 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer178->Add( m_staticline42, 0, wxEXPAND, 5 );
-
- m_textCtrlCompVarDescription = new wxTextCtrl( m_panelComparisonSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER );
- bSizer178->Add( m_textCtrlCompVarDescription, 1, wxEXPAND|wxLEFT, 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 );
-
- wxBoxSizer* bSizer1734;
- bSizer1734 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer1733;
- bSizer1733 = new wxBoxSizer( wxVERTICAL );
-
- m_checkBoxTimeShift = new wxCheckBox( m_panelComparisonSettings, wxID_ANY, _("Ignore time shift (in hours)"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxTimeShift->SetToolTip( _("Consider file times with specified offset as equal") );
-
- bSizer1733->Add( m_checkBoxTimeShift, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_spinCtrlTimeShift = new wxSpinCtrl( m_panelComparisonSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 70,-1 ), wxSP_ARROW_KEYS|wxSP_WRAP, 1, 26, 0 );
- m_spinCtrlTimeShift->SetToolTip( _("Consider file times with specified offset as equal") );
-
- bSizer1733->Add( m_spinCtrlTimeShift, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_hyperlink241 = new wxHyperlinkCtrl( m_panelComparisonSettings, wxID_ANY, _("Handle daylight saving time"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- bSizer1733->Add( m_hyperlink241, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer1734->Add( bSizer1733, 0, wxALL, 5 );
-
- m_staticline44 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer1734->Add( m_staticline44, 0, wxEXPAND, 5 );
-
- 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 );
-
- wxBoxSizer* bSizer176;
- bSizer176 = new wxBoxSizer( wxVERTICAL );
-
- m_radioBtnSymlinksDirect = new wxRadioButton( m_panelComparisonSettings, wxID_ANY, _("Direct"), wxDefaultPosition, wxDefaultSize, 0 );
- m_radioBtnSymlinksDirect->SetValue( true );
- bSizer176->Add( m_radioBtnSymlinksDirect, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_radioBtnSymlinksFollow = new wxRadioButton( m_panelComparisonSettings, wxID_ANY, _("Follow"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer176->Add( m_radioBtnSymlinksFollow, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer1721->Add( bSizer176, 0, wxEXPAND|wxLEFT, 18 );
-
- m_hyperlink24 = new wxHyperlinkCtrl( m_panelComparisonSettings, wxID_ANY, _("More information"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- bSizer1721->Add( m_hyperlink24, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer1734->Add( bSizer1721, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_staticline441 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer1734->Add( m_staticline441, 0, wxEXPAND, 5 );
-
-
- bSizer159->Add( bSizer1734, 0, 0, 5 );
-
- m_staticline331 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer159->Add( m_staticline331, 0, wxEXPAND, 5 );
-
-
- m_panelComparisonSettings->SetSizer( bSizer159 );
- m_panelComparisonSettings->Layout();
- bSizer159->Fit( m_panelComparisonSettings );
- bSizer275->Add( m_panelComparisonSettings, 0, wxEXPAND, 5 );
-
-
- m_panelCompSettingsHolder->SetSizer( bSizer275 );
- m_panelCompSettingsHolder->Layout();
- bSizer275->Fit( m_panelCompSettingsHolder );
- m_notebook->AddPage( m_panelCompSettingsHolder, _("dummy"), true );
- m_panelFilterSettingsHolder = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelFilterSettingsHolder->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer278;
- bSizer278 = new wxBoxSizer( wxVERTICAL );
-
- bSizerLocalFilterSettings = new wxBoxSizer( wxVERTICAL );
-
- m_staticText144 = new wxStaticText( m_panelFilterSettingsHolder, wxID_ANY, _("Local settings:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText144->Wrap( -1 );
- bSizerLocalFilterSettings->Add( m_staticText144, 0, wxALL, 10 );
-
- m_staticline61 = new wxStaticLine( m_panelFilterSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizerLocalFilterSettings->Add( m_staticline61, 0, wxEXPAND, 5 );
-
-
- bSizer278->Add( bSizerLocalFilterSettings, 0, wxEXPAND, 5 );
-
- m_panelFilterSettings = new wxPanel( m_panelFilterSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelFilterSettings->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer1591;
- bSizer1591 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer166;
- bSizer166 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer166->Add( 0, 10, 0, 0, 5 );
-
- wxBoxSizer* bSizer1661;
- bSizer1661 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapInclude = new wxStaticBitmap( m_panelFilterSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 );
- bSizer1661->Add( m_bitmapInclude, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
-
- wxBoxSizer* bSizer1731;
- bSizer1731 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText78 = new wxStaticText( m_panelFilterSettings, wxID_ANY, _("Include:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText78->Wrap( -1 );
- bSizer1731->Add( m_staticText78, 0, 0, 5 );
-
- m_textCtrlInclude = new wxTextCtrl( m_panelFilterSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE );
- m_textCtrlInclude->SetMinSize( wxSize( 280,-1 ) );
-
- bSizer1731->Add( m_textCtrlInclude, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP, 5 );
-
-
- bSizer1661->Add( bSizer1731, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer166->Add( bSizer1661, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxLEFT, 5 );
-
- m_staticline22 = new wxStaticLine( m_panelFilterSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer166->Add( m_staticline22, 0, wxEXPAND, 5 );
-
-
- bSizer166->Add( 0, 10, 0, 0, 5 );
-
- wxBoxSizer* bSizer1651;
- bSizer1651 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapExclude = new wxStaticBitmap( m_panelFilterSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 );
- bSizer1651->Add( m_bitmapExclude, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- wxBoxSizer* bSizer1742;
- bSizer1742 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer189;
- bSizer189 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText77 = new wxStaticText( m_panelFilterSettings, wxID_ANY, _("Exclude:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText77->Wrap( -1 );
- bSizer189->Add( m_staticText77, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer189->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_hyperlink171 = new wxHyperlinkCtrl( m_panelFilterSettings, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- bSizer189->Add( m_hyperlink171, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer1742->Add( bSizer189, 0, wxEXPAND, 5 );
-
- m_textCtrlExclude = new wxTextCtrl( m_panelFilterSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE );
- bSizer1742->Add( m_textCtrlExclude, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxTOP, 5 );
-
-
- bSizer1651->Add( bSizer1742, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer166->Add( bSizer1651, 2, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxLEFT, 5 );
-
-
- bSizer1591->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_staticline24 = new wxStaticLine( m_panelFilterSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer1591->Add( m_staticline24, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- wxBoxSizer* bSizer160;
- bSizer160 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer167;
- bSizer167 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapFilterDate = new wxStaticBitmap( m_panelFilterSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 34,34 ), 0 );
- bSizer167->Add( m_bitmapFilterDate, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- wxBoxSizer* bSizer165;
- bSizer165 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText79 = new wxStaticText( m_panelFilterSettings, wxID_ANY, _("Time span:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText79->Wrap( -1 );
- bSizer165->Add( m_staticText79, 0, wxBOTTOM, 5 );
-
- m_spinCtrlTimespan = new wxSpinCtrl( m_panelFilterSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
- bSizer165->Add( m_spinCtrlTimespan, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- wxArrayString m_choiceUnitTimespanChoices;
- m_choiceUnitTimespan = new wxChoice( m_panelFilterSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitTimespanChoices, 0 );
- m_choiceUnitTimespan->SetSelection( 0 );
- bSizer165->Add( m_choiceUnitTimespan, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizer167->Add( bSizer165, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
-
-
- bSizer160->Add( bSizer167, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 );
-
- m_staticline23 = new wxStaticLine( m_panelFilterSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer160->Add( m_staticline23, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer168;
- bSizer168 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapFilterSize = new wxStaticBitmap( m_panelFilterSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 );
- bSizer168->Add( m_bitmapFilterSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
-
- wxBoxSizer* bSizer158;
- bSizer158 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText80 = new wxStaticText( m_panelFilterSettings, wxID_ANY, _("File size:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText80->Wrap( -1 );
- bSizer158->Add( m_staticText80, 0, wxBOTTOM, 5 );
-
- wxBoxSizer* bSizer162;
- bSizer162 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText101 = new wxStaticText( m_panelFilterSettings, wxID_ANY, _("Minimum:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText101->Wrap( -1 );
- bSizer162->Add( m_staticText101, 0, wxBOTTOM, 2 );
-
- m_spinCtrlMinSize = new wxSpinCtrl( m_panelFilterSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
- bSizer162->Add( m_spinCtrlMinSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- wxArrayString m_choiceUnitMinSizeChoices;
- m_choiceUnitMinSize = new wxChoice( m_panelFilterSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMinSizeChoices, 0 );
- m_choiceUnitMinSize->SetSelection( 0 );
- bSizer162->Add( m_choiceUnitMinSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizer158->Add( bSizer162, 0, wxBOTTOM|wxEXPAND, 5 );
-
- wxBoxSizer* bSizer163;
- bSizer163 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText102 = new wxStaticText( m_panelFilterSettings, wxID_ANY, _("Maximum:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText102->Wrap( -1 );
- bSizer163->Add( m_staticText102, 0, wxBOTTOM, 2 );
-
- m_spinCtrlMaxSize = new wxSpinCtrl( m_panelFilterSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
- bSizer163->Add( m_spinCtrlMaxSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- wxArrayString m_choiceUnitMaxSizeChoices;
- m_choiceUnitMaxSize = new wxChoice( m_panelFilterSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMaxSizeChoices, 0 );
- m_choiceUnitMaxSize->SetSelection( 0 );
- bSizer163->Add( m_choiceUnitMaxSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizer158->Add( bSizer163, 0, wxEXPAND, 5 );
-
-
- bSizer168->Add( bSizer158, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
-
-
- bSizer160->Add( bSizer168, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 );
-
-
- bSizer1591->Add( bSizer160, 0, wxEXPAND, 5 );
-
-
- m_panelFilterSettings->SetSizer( bSizer1591 );
- m_panelFilterSettings->Layout();
- bSizer1591->Fit( m_panelFilterSettings );
- bSizer278->Add( m_panelFilterSettings, 1, wxEXPAND, 5 );
-
- m_staticline62 = new wxStaticLine( m_panelFilterSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer278->Add( m_staticline62, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer280;
- bSizer280 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText44 = new wxStaticText( m_panelFilterSettingsHolder, wxID_ANY, _("Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair."), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_staticText44->Wrap( 590 );
- bSizer280->Add( m_staticText44, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 );
-
-
- bSizer280->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticline46 = new wxStaticLine( m_panelFilterSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer280->Add( m_staticline46, 0, wxEXPAND, 5 );
-
- m_buttonClear = new wxButton( m_panelFilterSettingsHolder, wxID_DEFAULT, _("C&lear"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- bSizer280->Add( m_buttonClear, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 );
-
-
- bSizer278->Add( bSizer280, 0, wxEXPAND, 5 );
-
-
- m_panelFilterSettingsHolder->SetSizer( bSizer278 );
- m_panelFilterSettingsHolder->Layout();
- bSizer278->Fit( m_panelFilterSettingsHolder );
- m_notebook->AddPage( m_panelFilterSettingsHolder, _("dummy"), false );
- m_panelSyncSettingsHolder = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelSyncSettingsHolder->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer276;
- bSizer276 = new wxBoxSizer( wxVERTICAL );
-
- bSizerLocalSyncSettings = new wxBoxSizer( wxVERTICAL );
-
- m_checkBoxUseLocalSyncOptions = new wxCheckBox( m_panelSyncSettingsHolder, wxID_ANY, _("Use local settings:"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizerLocalSyncSettings->Add( m_checkBoxUseLocalSyncOptions, 0, wxALL|wxEXPAND, 10 );
-
- m_staticline60 = new wxStaticLine( m_panelSyncSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizerLocalSyncSettings->Add( m_staticline60, 0, wxEXPAND, 5 );
-
-
- bSizer276->Add( bSizerLocalSyncSettings, 0, wxEXPAND, 5 );
-
- m_panelSyncSettings = new wxPanel( m_panelSyncSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelSyncSettings->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer232;
- bSizer232 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer237;
- bSizer237 = new wxBoxSizer( wxHORIZONTAL );
-
- 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 );
-
- wxBoxSizer* bSizer236;
- bSizer236 = new wxBoxSizer( wxVERTICAL );
-
- m_toggleBtnTwoWay = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_toggleBtnTwoWay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer236->Add( m_toggleBtnTwoWay, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM, 5 );
-
- m_toggleBtnMirror = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_toggleBtnMirror->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer236->Add( m_toggleBtnMirror, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM, 5 );
-
- m_toggleBtnUpdate = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_toggleBtnUpdate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer236->Add( m_toggleBtnUpdate, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM, 5 );
-
- m_toggleBtnCustom = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 );
- m_toggleBtnCustom->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer236->Add( m_toggleBtnCustom, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizer235->Add( bSizer236, 0, wxRIGHT|wxLEFT, 5 );
-
- m_checkBoxDetectMove = new wxCheckBox( m_panelSyncSettings, wxID_ANY, _("Detect moved files"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxDetectMove->SetValue(true);
- m_checkBoxDetectMove->SetToolTip( _("- Detection active after initial sync\n- Requires and creates database files\n- Not supported by all file systems") );
-
- bSizer235->Add( m_checkBoxDetectMove, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALL, 5 );
-
-
- bSizer237->Add( bSizer235, 0, wxALL, 5 );
-
- m_staticline53 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer237->Add( m_staticline53, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer238;
- bSizer238 = new wxBoxSizer( wxVERTICAL );
-
- m_textCtrlSyncVarDescription = new wxTextCtrl( m_panelSyncSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER );
- bSizer238->Add( m_textCtrlSyncVarDescription, 1, wxEXPAND|wxLEFT, 5 );
-
- m_staticline43 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer238->Add( m_staticline43, 0, wxEXPAND, 5 );
-
- bSizerSyncConfig = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer173;
- bSizer173 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer173->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticText119 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Category"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText119->Wrap( -1 );
- bSizer173->Add( m_staticText119, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer173->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- bSizer173->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticText120 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText120->Wrap( -1 );
- bSizer173->Add( m_staticText120, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer173->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- bSizerSyncConfig->Add( bSizer173, 0, wxEXPAND|wxRIGHT, 5 );
-
- fgSizerSyncDirections = new wxFlexGridSizer( 2, 0, 5, 5 );
- fgSizerSyncDirections->SetFlexibleDirection( wxBOTH );
- fgSizerSyncDirections->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_bitmapLeftOnly = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
- m_bitmapLeftOnly->SetToolTip( _("Item exists on left side only") );
-
- fgSizerSyncDirections->Add( m_bitmapLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapLeftNewer = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
- m_bitmapLeftNewer->SetToolTip( _("Left side is newer") );
-
- fgSizerSyncDirections->Add( m_bitmapLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapDifferent = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
- m_bitmapDifferent->SetToolTip( _("Items have different content") );
-
- fgSizerSyncDirections->Add( m_bitmapDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapConflict = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
- m_bitmapConflict->SetToolTip( _("Conflict/item cannot be categorized") );
-
- fgSizerSyncDirections->Add( m_bitmapConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapRightNewer = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
- m_bitmapRightNewer->SetToolTip( _("Right side is newer") );
-
- fgSizerSyncDirections->Add( m_bitmapRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bitmapRightOnly = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
- m_bitmapRightOnly->SetToolTip( _("Item exists on right side only") );
-
- fgSizerSyncDirections->Add( m_bitmapRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonLeftOnly = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW );
- fgSizerSyncDirections->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonLeftNewer = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW );
- fgSizerSyncDirections->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonDifferent = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW );
- fgSizerSyncDirections->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonConflict = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW );
- fgSizerSyncDirections->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonRightNewer = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW );
- fgSizerSyncDirections->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonRightOnly = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW );
- fgSizerSyncDirections->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerSyncConfig->Add( fgSizerSyncDirections, 0, 0, 5 );
-
- m_bitmapDatabase = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_bitmapDatabase->SetToolTip( _("Detect synchronization directions with the help of database files") );
-
- bSizerSyncConfig->Add( m_bitmapDatabase, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxALIGN_CENTER_VERTICAL, 10 );
-
- wxBoxSizer* bSizerKeepVerticalHeightWhenSyncDirsNotShown;
- bSizerKeepVerticalHeightWhenSyncDirsNotShown = new wxBoxSizer( wxVERTICAL );
-
-
- bSizerKeepVerticalHeightWhenSyncDirsNotShown->Add( 0, 45, 0, 0, 5 );
-
-
- bSizerKeepVerticalHeightWhenSyncDirsNotShown->Add( 0, 5, 1, 0, 5 );
-
-
- bSizerKeepVerticalHeightWhenSyncDirsNotShown->Add( 0, 46, 0, 0, 5 );
-
-
- bSizerSyncConfig->Add( bSizerKeepVerticalHeightWhenSyncDirsNotShown, 0, 0, 5 );
-
-
- bSizer238->Add( bSizerSyncConfig, 0, wxALL, 10 );
-
-
- bSizer237->Add( bSizer238, 1, 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 );
-
- wxBoxSizer* bSizer184;
- bSizer184 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText87 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Delete files:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText87->Wrap( -1 );
- bSizer184->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
-
- wxBoxSizer* bSizer180;
- bSizer180 = new wxBoxSizer( wxHORIZONTAL );
-
- m_toggleBtnPermanent = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("&Permanent"), wxDefaultPosition, wxDefaultSize, 0 );
- m_toggleBtnPermanent->SetToolTip( _("Delete or overwrite files permanently") );
-
- bSizer180->Add( m_toggleBtnPermanent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT, 5 );
-
- m_toggleBtnRecycler = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("&Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 );
- m_toggleBtnRecycler->SetToolTip( _("Back up deleted and overwritten files in the recycle bin") );
-
- bSizer180->Add( m_toggleBtnRecycler, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT, 5 );
-
- m_toggleBtnVersioning = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("&Versioning"), wxDefaultPosition, wxDefaultSize, 0 );
- m_toggleBtnVersioning->SetToolTip( _("Move files to a user-defined folder") );
-
- bSizer180->Add( m_toggleBtnVersioning, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizer184->Add( bSizer180, 0, 0, 5 );
-
- bSizerVersioning = new wxBoxSizer( wxHORIZONTAL );
-
- 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* bSizer156;
- bSizer156 = new wxBoxSizer( wxHORIZONTAL );
-
- m_versioningFolder = new FolderHistoryBox( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer156->Add( m_versioningFolder, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_buttonSelectDirVersioning = new wxButton( m_panelVersioning, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
- m_buttonSelectDirVersioning->SetToolTip( _("Select a folder") );
-
- bSizer156->Add( m_buttonSelectDirVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer191->Add( bSizer156, 0, wxEXPAND|wxBOTTOM, 5 );
-
- bSizer192 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText93 = new wxStaticText( m_panelVersioning, wxID_ANY, _("Naming convention:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText93->Wrap( -1 );
- bSizer192->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- wxArrayString m_choiceVersioningStyleChoices;
- m_choiceVersioningStyle = new wxChoice( m_panelVersioning, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceVersioningStyleChoices, 0 );
- m_choiceVersioningStyle->SetSelection( 0 );
- bSizer192->Add( m_choiceVersioningStyle, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_staticTextNamingCvtPart1 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextNamingCvtPart1->Wrap( -1 );
- m_staticTextNamingCvtPart1->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
-
- bSizer192->Add( m_staticTextNamingCvtPart1, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextNamingCvtPart2Bold = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextNamingCvtPart2Bold->Wrap( -1 );
- m_staticTextNamingCvtPart2Bold->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
- m_staticTextNamingCvtPart2Bold->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
-
- bSizer192->Add( m_staticTextNamingCvtPart2Bold, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextNamingCvtPart3 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextNamingCvtPart3->Wrap( -1 );
- m_staticTextNamingCvtPart3->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
-
- bSizer192->Add( m_staticTextNamingCvtPart3, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer192->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_hyperlink17 = new wxHyperlinkCtrl( m_panelVersioning, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- bSizer192->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
-
- bSizer191->Add( bSizer192, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- m_panelVersioning->SetSizer( bSizer191 );
- m_panelVersioning->Layout();
- bSizer191->Fit( m_panelVersioning );
- bSizerVersioning->Add( m_panelVersioning, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer184->Add( bSizerVersioning, 0, wxTOP|wxEXPAND, 5 );
-
-
- bSizer232->Add( bSizer184, 0, wxALL|wxEXPAND, 10 );
-
- bSizerMiscConfig = new wxBoxSizer( wxVERTICAL );
-
- m_staticline582 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizerMiscConfig->Add( m_staticline582, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer1732;
- bSizer1732 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer174;
- bSizer174 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText88 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Handle errors:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText88->Wrap( -1 );
- bSizer174->Add( m_staticText88, 0, wxBOTTOM, 5 );
-
- wxBoxSizer* bSizer175;
- bSizer175 = new wxBoxSizer( wxHORIZONTAL );
-
- m_toggleBtnErrorIgnore = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("&Ignore"), wxDefaultPosition, wxDefaultSize, 0 );
- m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") );
-
- bSizer175->Add( m_toggleBtnErrorIgnore, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_toggleBtnErrorPopup = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("&Pop-up"), wxDefaultPosition, wxDefaultSize, 0 );
- m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") );
-
- bSizer175->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer174->Add( bSizer175, 0, 0, 5 );
-
-
- bSizer1732->Add( bSizer174, 0, wxALL, 10 );
-
- m_staticline57 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer1732->Add( m_staticline57, 0, wxEXPAND, 5 );
-
- bSizerOnCompletion = new wxBoxSizer( wxVERTICAL );
-
- m_staticText89 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText89->Wrap( -1 );
- bSizerOnCompletion->Add( m_staticText89, 0, wxBOTTOM, 5 );
-
- m_comboBoxOnCompletion = new OnCompletionBox( m_panelSyncSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizerOnCompletion->Add( m_comboBoxOnCompletion, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- bSizer1732->Add( bSizerOnCompletion, 1, wxALL, 10 );
-
-
- bSizerMiscConfig->Add( bSizer1732, 1, wxEXPAND, 5 );
-
-
- bSizer232->Add( bSizerMiscConfig, 1, wxEXPAND, 5 );
-
-
- m_panelSyncSettings->SetSizer( bSizer232 );
- m_panelSyncSettings->Layout();
- bSizer232->Fit( m_panelSyncSettings );
- bSizer276->Add( m_panelSyncSettings, 1, wxEXPAND, 5 );
-
-
- m_panelSyncSettingsHolder->SetSizer( bSizer276 );
- m_panelSyncSettingsHolder->Layout();
- bSizer276->Fit( m_panelSyncSettingsHolder );
- m_notebook->AddPage( m_panelSyncSettingsHolder, _("dummy"), false );
-
- bSizer7->Add( m_notebook, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
-
- bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonOkay->SetDefault();
- m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
-
-
- bSizer7->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 );
-
-
- this->SetSizer( bSizer7 );
- this->Layout();
- bSizer7->Fit( this );
-
- this->Centre( wxBOTH );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ConfigDlgGenerated::OnClose ) );
- m_checkBoxUseLocalCmpOptions->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnToggleLocalCompSettings ), NULL, this );
- m_toggleBtnTimeSize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::OnTimeSizeDouble ), NULL, this );
- m_toggleBtnTimeSize->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnTimeSize ), NULL, this );
- m_toggleBtnContent->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::OnContentDouble ), NULL, this );
- m_toggleBtnContent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnContent ), NULL, this );
- m_checkBoxTimeShift->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnChangeCompOption ), NULL, this );
- m_hyperlink241->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( ConfigDlgGenerated::OnHelpTimeShift ), NULL, this );
- m_checkBoxSymlinksInclude->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnChangeCompOption ), NULL, this );
- m_hyperlink24->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( ConfigDlgGenerated::OnHelpComparisonSettings ), NULL, this );
- m_textCtrlInclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( ConfigDlgGenerated::OnChangeFilterOption ), NULL, this );
- m_hyperlink171->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( ConfigDlgGenerated::OnHelpShowExamples ), NULL, this );
- m_textCtrlExclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( ConfigDlgGenerated::OnChangeFilterOption ), NULL, this );
- m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, 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_buttonClear->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnFilterReset ), NULL, this );
- m_checkBoxUseLocalSyncOptions->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnToggleLocalSyncSettings ), NULL, this );
- m_toggleBtnTwoWay->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::OnSyncTwoWayDouble ), NULL, this );
- m_toggleBtnTwoWay->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnSyncTwoWay ), NULL, this );
- m_toggleBtnMirror->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::OnSyncMirrorDouble ), NULL, this );
- m_toggleBtnMirror->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnSyncMirror ), NULL, this );
- m_toggleBtnUpdate->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::OnSyncUpdateDouble ), NULL, this );
- m_toggleBtnUpdate->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnSyncUpdate ), NULL, this );
- m_toggleBtnCustom->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::OnSyncCustomDouble ), NULL, this );
- m_toggleBtnCustom->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnSyncCustom ), NULL, this );
- m_checkBoxDetectMove->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnToggleDetectMovedFiles ), 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_toggleBtnPermanent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnDeletionPermanent ), NULL, this );
- m_toggleBtnRecycler->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnDeletionRecycler ), NULL, this );
- m_toggleBtnVersioning->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnDeletionVersioning ), NULL, this );
- m_choiceVersioningStyle->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( ConfigDlgGenerated::OnChangeSyncOption ), NULL, this );
- m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( ConfigDlgGenerated::OnHelpVersioning ), NULL, this );
- m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnErrorIgnore ), NULL, this );
- m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnErrorPopup ), 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 );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+ this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer7;
+ bSizer7 = new wxBoxSizer( wxVERTICAL );
+
+ m_notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+ m_panelCompSettingsHolder = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelCompSettingsHolder->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer275;
+ bSizer275 = new wxBoxSizer( wxVERTICAL );
+
+ bSizerLocalCompSettings = new wxBoxSizer( wxVERTICAL );
+
+ m_checkBoxUseLocalCmpOptions = new wxCheckBox( m_panelCompSettingsHolder, wxID_ANY, _("Use local settings:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxUseLocalCmpOptions->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ bSizerLocalCompSettings->Add( m_checkBoxUseLocalCmpOptions, 0, wxALL|wxEXPAND, 10 );
+
+ m_staticline59 = new wxStaticLine( m_panelCompSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerLocalCompSettings->Add( m_staticline59, 0, wxEXPAND, 5 );
+
+
+ bSizer275->Add( bSizerLocalCompSettings, 0, wxEXPAND, 5 );
+
+ m_panelComparisonSettings = new wxPanel( m_panelCompSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelComparisonSettings->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer159;
+ bSizer159 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer178;
+ bSizer178 = new wxBoxSizer( wxHORIZONTAL );
+
+ 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 );
+
+ wxFlexGridSizer* fgSizer16;
+ fgSizer16 = new wxFlexGridSizer( 2, 2, 5, 5 );
+ fgSizer16->SetFlexibleDirection( wxBOTH );
+ fgSizer16->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_bitmapByTime = new wxStaticBitmap( m_panelComparisonSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapByTime->SetToolTip( _("Identify equal files by comparing modification time and size.") );
+
+ fgSizer16->Add( m_bitmapByTime, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_toggleBtnTimeSize = new wxToggleButton( m_panelComparisonSettings, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_toggleBtnTimeSize->SetValue( true );
+ m_toggleBtnTimeSize->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer16->Add( m_toggleBtnTimeSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_bitmapByContent = new wxStaticBitmap( m_panelComparisonSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapByContent->SetToolTip( _("Identify equal files by comparing the file content.") );
+
+ fgSizer16->Add( m_bitmapByContent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_toggleBtnContent = new wxToggleButton( m_panelComparisonSettings, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_toggleBtnContent->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer16->Add( m_toggleBtnContent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizer182->Add( fgSizer16, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizer178->Add( bSizer182, 0, wxALL, 5 );
+
+ m_staticline42 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer178->Add( m_staticline42, 0, wxEXPAND, 5 );
+
+ m_textCtrlCompVarDescription = new wxTextCtrl( m_panelComparisonSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER );
+ bSizer178->Add( m_textCtrlCompVarDescription, 1, wxEXPAND|wxLEFT, 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 );
+
+ wxBoxSizer* bSizer1734;
+ bSizer1734 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer1733;
+ bSizer1733 = new wxBoxSizer( wxVERTICAL );
+
+ m_checkBoxTimeShift = new wxCheckBox( m_panelComparisonSettings, wxID_ANY, _("Ignore time shift (in hours)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxTimeShift->SetToolTip( _("Consider file times with specified offset as equal") );
+
+ bSizer1733->Add( m_checkBoxTimeShift, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_spinCtrlTimeShift = new wxSpinCtrl( m_panelComparisonSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 70,-1 ), wxSP_ARROW_KEYS|wxSP_WRAP, 1, 26, 0 );
+ m_spinCtrlTimeShift->SetToolTip( _("Consider file times with specified offset as equal") );
+
+ bSizer1733->Add( m_spinCtrlTimeShift, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_hyperlink241 = new wxHyperlinkCtrl( m_panelComparisonSettings, wxID_ANY, _("Handle daylight saving time"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ bSizer1733->Add( m_hyperlink241, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer1734->Add( bSizer1733, 0, wxALL, 5 );
+
+ m_staticline44 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer1734->Add( m_staticline44, 0, wxEXPAND, 5 );
+
+ 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 );
+
+ wxBoxSizer* bSizer176;
+ bSizer176 = new wxBoxSizer( wxVERTICAL );
+
+ m_radioBtnSymlinksFollow = new wxRadioButton( m_panelComparisonSettings, wxID_ANY, _("Follow"), wxDefaultPosition, wxDefaultSize, 0 );
+ 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 );
+
+
+ bSizer1721->Add( bSizer176, 0, wxEXPAND|wxLEFT, 18 );
+
+ m_hyperlink24 = new wxHyperlinkCtrl( m_panelComparisonSettings, wxID_ANY, _("More information"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ bSizer1721->Add( m_hyperlink24, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer1734->Add( bSizer1721, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_staticline441 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer1734->Add( m_staticline441, 0, wxEXPAND, 5 );
+
+
+ bSizer159->Add( bSizer1734, 0, 0, 5 );
+
+ m_staticline331 = new wxStaticLine( m_panelComparisonSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer159->Add( m_staticline331, 0, wxEXPAND, 5 );
+
+
+ m_panelComparisonSettings->SetSizer( bSizer159 );
+ m_panelComparisonSettings->Layout();
+ bSizer159->Fit( m_panelComparisonSettings );
+ bSizer275->Add( m_panelComparisonSettings, 0, wxEXPAND, 5 );
+
+
+ m_panelCompSettingsHolder->SetSizer( bSizer275 );
+ m_panelCompSettingsHolder->Layout();
+ bSizer275->Fit( m_panelCompSettingsHolder );
+ m_notebook->AddPage( m_panelCompSettingsHolder, _("dummy"), true );
+ m_panelFilterSettingsHolder = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelFilterSettingsHolder->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer278;
+ bSizer278 = new wxBoxSizer( wxVERTICAL );
+
+ bSizerLocalFilterSettings = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText144 = new wxStaticText( m_panelFilterSettingsHolder, wxID_ANY, _("Local settings:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText144->Wrap( -1 );
+ bSizerLocalFilterSettings->Add( m_staticText144, 0, wxALL, 10 );
+
+ m_staticline61 = new wxStaticLine( m_panelFilterSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerLocalFilterSettings->Add( m_staticline61, 0, wxEXPAND, 5 );
+
+
+ bSizer278->Add( bSizerLocalFilterSettings, 0, wxEXPAND, 5 );
+
+ m_panelFilterSettings = new wxPanel( m_panelFilterSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelFilterSettings->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer1591;
+ bSizer1591 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer166;
+ bSizer166 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer166->Add( 0, 10, 0, 0, 5 );
+
+ wxBoxSizer* bSizer1661;
+ bSizer1661 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapInclude = new wxStaticBitmap( m_panelFilterSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 );
+ bSizer1661->Add( m_bitmapInclude, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+ wxBoxSizer* bSizer1731;
+ bSizer1731 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText78 = new wxStaticText( m_panelFilterSettings, wxID_ANY, _("Include:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText78->Wrap( -1 );
+ bSizer1731->Add( m_staticText78, 0, 0, 5 );
+
+ m_textCtrlInclude = new wxTextCtrl( m_panelFilterSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE );
+ m_textCtrlInclude->SetMinSize( wxSize( 280,-1 ) );
+
+ bSizer1731->Add( m_textCtrlInclude, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP, 5 );
+
+
+ bSizer1661->Add( bSizer1731, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer166->Add( bSizer1661, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxLEFT, 5 );
+
+ m_staticline22 = new wxStaticLine( m_panelFilterSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer166->Add( m_staticline22, 0, wxEXPAND, 5 );
+
+
+ bSizer166->Add( 0, 10, 0, 0, 5 );
+
+ wxBoxSizer* bSizer1651;
+ bSizer1651 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapExclude = new wxStaticBitmap( m_panelFilterSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 );
+ bSizer1651->Add( m_bitmapExclude, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ wxBoxSizer* bSizer1742;
+ bSizer1742 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer189;
+ bSizer189 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText77 = new wxStaticText( m_panelFilterSettings, wxID_ANY, _("Exclude:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText77->Wrap( -1 );
+ bSizer189->Add( m_staticText77, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer189->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_hyperlink171 = new wxHyperlinkCtrl( m_panelFilterSettings, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ bSizer189->Add( m_hyperlink171, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer1742->Add( bSizer189, 0, wxEXPAND, 5 );
+
+ m_textCtrlExclude = new wxTextCtrl( m_panelFilterSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE );
+ bSizer1742->Add( m_textCtrlExclude, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxTOP, 5 );
+
+
+ bSizer1651->Add( bSizer1742, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer166->Add( bSizer1651, 2, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxLEFT, 5 );
+
+
+ bSizer1591->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_staticline24 = new wxStaticLine( m_panelFilterSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer1591->Add( m_staticline24, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer160;
+ bSizer160 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer167;
+ bSizer167 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapFilterDate = new wxStaticBitmap( m_panelFilterSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 34,34 ), 0 );
+ bSizer167->Add( m_bitmapFilterDate, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ wxBoxSizer* bSizer165;
+ bSizer165 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText79 = new wxStaticText( m_panelFilterSettings, wxID_ANY, _("Time span:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText79->Wrap( -1 );
+ bSizer165->Add( m_staticText79, 0, wxBOTTOM, 5 );
+
+ m_spinCtrlTimespan = new wxSpinCtrl( m_panelFilterSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
+ bSizer165->Add( m_spinCtrlTimespan, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ wxArrayString m_choiceUnitTimespanChoices;
+ m_choiceUnitTimespan = new wxChoice( m_panelFilterSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitTimespanChoices, 0 );
+ m_choiceUnitTimespan->SetSelection( 0 );
+ bSizer165->Add( m_choiceUnitTimespan, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizer167->Add( bSizer165, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
+
+
+ bSizer160->Add( bSizer167, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 );
+
+ m_staticline23 = new wxStaticLine( m_panelFilterSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer160->Add( m_staticline23, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer168;
+ bSizer168 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapFilterSize = new wxStaticBitmap( m_panelFilterSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 );
+ bSizer168->Add( m_bitmapFilterSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+ wxBoxSizer* bSizer158;
+ bSizer158 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText80 = new wxStaticText( m_panelFilterSettings, wxID_ANY, _("File size:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText80->Wrap( -1 );
+ bSizer158->Add( m_staticText80, 0, wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizer162;
+ bSizer162 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText101 = new wxStaticText( m_panelFilterSettings, wxID_ANY, _("Minimum:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText101->Wrap( -1 );
+ bSizer162->Add( m_staticText101, 0, wxBOTTOM, 2 );
+
+ m_spinCtrlMinSize = new wxSpinCtrl( m_panelFilterSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
+ bSizer162->Add( m_spinCtrlMinSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ wxArrayString m_choiceUnitMinSizeChoices;
+ m_choiceUnitMinSize = new wxChoice( m_panelFilterSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMinSizeChoices, 0 );
+ m_choiceUnitMinSize->SetSelection( 0 );
+ bSizer162->Add( m_choiceUnitMinSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizer158->Add( bSizer162, 0, wxBOTTOM|wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer163;
+ bSizer163 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText102 = new wxStaticText( m_panelFilterSettings, wxID_ANY, _("Maximum:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText102->Wrap( -1 );
+ bSizer163->Add( m_staticText102, 0, wxBOTTOM, 2 );
+
+ m_spinCtrlMaxSize = new wxSpinCtrl( m_panelFilterSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 );
+ bSizer163->Add( m_spinCtrlMaxSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ wxArrayString m_choiceUnitMaxSizeChoices;
+ m_choiceUnitMaxSize = new wxChoice( m_panelFilterSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMaxSizeChoices, 0 );
+ m_choiceUnitMaxSize->SetSelection( 0 );
+ bSizer163->Add( m_choiceUnitMaxSize, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizer158->Add( bSizer163, 0, wxEXPAND, 5 );
+
+
+ bSizer168->Add( bSizer158, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
+
+
+ bSizer160->Add( bSizer168, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 );
+
+
+ bSizer1591->Add( bSizer160, 0, wxEXPAND, 5 );
+
+
+ m_panelFilterSettings->SetSizer( bSizer1591 );
+ m_panelFilterSettings->Layout();
+ bSizer1591->Fit( m_panelFilterSettings );
+ bSizer278->Add( m_panelFilterSettings, 1, wxEXPAND, 5 );
+
+ m_staticline62 = new wxStaticLine( m_panelFilterSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer278->Add( m_staticline62, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer280;
+ bSizer280 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText44 = new wxStaticText( m_panelFilterSettingsHolder, wxID_ANY, _("Select filter rules to exclude certain files from synchronization. Enter file paths relative to their corresponding folder pair."), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_staticText44->Wrap( 590 );
+ bSizer280->Add( m_staticText44, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 );
+
+
+ bSizer280->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticline46 = new wxStaticLine( m_panelFilterSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer280->Add( m_staticline46, 0, wxEXPAND, 5 );
+
+ m_buttonClear = new wxButton( m_panelFilterSettingsHolder, wxID_DEFAULT, _("C&lear"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ bSizer280->Add( m_buttonClear, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 );
+
+
+ bSizer278->Add( bSizer280, 0, wxEXPAND, 5 );
+
+
+ m_panelFilterSettingsHolder->SetSizer( bSizer278 );
+ m_panelFilterSettingsHolder->Layout();
+ bSizer278->Fit( m_panelFilterSettingsHolder );
+ m_notebook->AddPage( m_panelFilterSettingsHolder, _("dummy"), false );
+ m_panelSyncSettingsHolder = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelSyncSettingsHolder->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer276;
+ bSizer276 = new wxBoxSizer( wxVERTICAL );
+
+ bSizerLocalSyncSettings = new wxBoxSizer( wxVERTICAL );
+
+ m_checkBoxUseLocalSyncOptions = new wxCheckBox( m_panelSyncSettingsHolder, wxID_ANY, _("Use local settings:"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerLocalSyncSettings->Add( m_checkBoxUseLocalSyncOptions, 0, wxALL|wxEXPAND, 10 );
+
+ m_staticline60 = new wxStaticLine( m_panelSyncSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerLocalSyncSettings->Add( m_staticline60, 0, wxEXPAND, 5 );
+
+
+ bSizer276->Add( bSizerLocalSyncSettings, 0, wxEXPAND, 5 );
+
+ m_panelSyncSettings = new wxPanel( m_panelSyncSettingsHolder, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelSyncSettings->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer232;
+ bSizer232 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer237;
+ bSizer237 = new wxBoxSizer( wxHORIZONTAL );
+
+ 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 );
+
+ wxBoxSizer* bSizer236;
+ bSizer236 = new wxBoxSizer( wxVERTICAL );
+
+ m_toggleBtnTwoWay = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_toggleBtnTwoWay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer236->Add( m_toggleBtnTwoWay, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM, 5 );
+
+ m_toggleBtnMirror = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_toggleBtnMirror->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer236->Add( m_toggleBtnMirror, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM, 5 );
+
+ m_toggleBtnUpdate = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_toggleBtnUpdate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer236->Add( m_toggleBtnUpdate, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM, 5 );
+
+ m_toggleBtnCustom = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 );
+ m_toggleBtnCustom->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer236->Add( m_toggleBtnCustom, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizer235->Add( bSizer236, 0, wxRIGHT|wxLEFT, 5 );
+
+ m_checkBoxDetectMove = new wxCheckBox( m_panelSyncSettings, wxID_ANY, _("Detect moved files"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxDetectMove->SetValue(true);
+ m_checkBoxDetectMove->SetToolTip( _("- Detection active after initial sync\n- Requires and creates database files\n- Not supported by all file systems") );
+
+ bSizer235->Add( m_checkBoxDetectMove, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALL, 5 );
+
+
+ bSizer237->Add( bSizer235, 0, wxALL, 5 );
+
+ m_staticline53 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer237->Add( m_staticline53, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer238;
+ bSizer238 = new wxBoxSizer( wxVERTICAL );
+
+ m_textCtrlSyncVarDescription = new wxTextCtrl( m_panelSyncSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER );
+ bSizer238->Add( m_textCtrlSyncVarDescription, 1, wxEXPAND|wxLEFT, 5 );
+
+ m_staticline43 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer238->Add( m_staticline43, 0, wxEXPAND, 5 );
+
+ bSizerSyncConfig = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer173;
+ bSizer173 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer173->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticText119 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Category"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText119->Wrap( -1 );
+ bSizer173->Add( m_staticText119, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer173->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ bSizer173->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticText120 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText120->Wrap( -1 );
+ bSizer173->Add( m_staticText120, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer173->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ bSizerSyncConfig->Add( bSizer173, 0, wxEXPAND|wxRIGHT, 5 );
+
+ fgSizerSyncDirections = new wxFlexGridSizer( 2, 0, 5, 5 );
+ fgSizerSyncDirections->SetFlexibleDirection( wxBOTH );
+ fgSizerSyncDirections->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_bitmapLeftOnly = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
+ m_bitmapLeftOnly->SetToolTip( _("Item exists on left side only") );
+
+ fgSizerSyncDirections->Add( m_bitmapLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapLeftNewer = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
+ m_bitmapLeftNewer->SetToolTip( _("Left side is newer") );
+
+ fgSizerSyncDirections->Add( m_bitmapLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapDifferent = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
+ m_bitmapDifferent->SetToolTip( _("Items have different content") );
+
+ fgSizerSyncDirections->Add( m_bitmapDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapConflict = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
+ m_bitmapConflict->SetToolTip( _("Conflict/item cannot be categorized") );
+
+ fgSizerSyncDirections->Add( m_bitmapConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapRightNewer = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
+ m_bitmapRightNewer->SetToolTip( _("Right side is newer") );
+
+ fgSizerSyncDirections->Add( m_bitmapRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bitmapRightOnly = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 );
+ m_bitmapRightOnly->SetToolTip( _("Item exists on right side only") );
+
+ fgSizerSyncDirections->Add( m_bitmapRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonLeftOnly = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW );
+ fgSizerSyncDirections->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonLeftNewer = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW );
+ fgSizerSyncDirections->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonDifferent = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW );
+ fgSizerSyncDirections->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonConflict = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW );
+ fgSizerSyncDirections->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonRightNewer = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW );
+ fgSizerSyncDirections->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonRightOnly = new wxBitmapButton( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW );
+ fgSizerSyncDirections->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerSyncConfig->Add( fgSizerSyncDirections, 0, 0, 5 );
+
+ m_bitmapDatabase = new wxStaticBitmap( m_panelSyncSettings, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_bitmapDatabase->SetToolTip( _("Detect synchronization directions with the help of database files") );
+
+ bSizerSyncConfig->Add( m_bitmapDatabase, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxALIGN_CENTER_VERTICAL, 10 );
+
+ wxBoxSizer* bSizerKeepVerticalHeightWhenSyncDirsNotShown;
+ bSizerKeepVerticalHeightWhenSyncDirsNotShown = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizerKeepVerticalHeightWhenSyncDirsNotShown->Add( 0, 45, 0, 0, 5 );
+
+
+ bSizerKeepVerticalHeightWhenSyncDirsNotShown->Add( 0, 5, 1, 0, 5 );
+
+
+ bSizerKeepVerticalHeightWhenSyncDirsNotShown->Add( 0, 46, 0, 0, 5 );
+
+
+ bSizerSyncConfig->Add( bSizerKeepVerticalHeightWhenSyncDirsNotShown, 0, 0, 5 );
+
+
+ bSizer238->Add( bSizerSyncConfig, 0, wxALL, 10 );
+
+
+ bSizer237->Add( bSizer238, 1, 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 );
+
+ wxBoxSizer* bSizer184;
+ bSizer184 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText87 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Delete files:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText87->Wrap( -1 );
+ bSizer184->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizer180;
+ bSizer180 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_toggleBtnPermanent = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("&Permanent"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_toggleBtnPermanent->SetToolTip( _("Delete or overwrite files permanently") );
+
+ bSizer180->Add( m_toggleBtnPermanent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT, 5 );
+
+ m_toggleBtnRecycler = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("&Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_toggleBtnRecycler->SetToolTip( _("Back up deleted and overwritten files in the recycle bin") );
+
+ bSizer180->Add( m_toggleBtnRecycler, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT, 5 );
+
+ m_toggleBtnVersioning = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("&Versioning"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_toggleBtnVersioning->SetToolTip( _("Move files to a user-defined folder") );
+
+ bSizer180->Add( m_toggleBtnVersioning, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizer184->Add( bSizer180, 0, 0, 5 );
+
+ bSizerVersioning = new wxBoxSizer( wxHORIZONTAL );
+
+ 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* bSizer156;
+ bSizer156 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_versioningFolder = new FolderHistoryBox( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer156->Add( m_versioningFolder, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonSelectDirVersioning = new wxButton( m_panelVersioning, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonSelectDirVersioning->SetToolTip( _("Select a folder") );
+
+ bSizer156->Add( m_buttonSelectDirVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer191->Add( bSizer156, 0, wxEXPAND|wxBOTTOM, 5 );
+
+ bSizer192 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText93 = new wxStaticText( m_panelVersioning, wxID_ANY, _("Naming convention:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText93->Wrap( -1 );
+ bSizer192->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ wxArrayString m_choiceVersioningStyleChoices;
+ m_choiceVersioningStyle = new wxChoice( m_panelVersioning, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceVersioningStyleChoices, 0 );
+ m_choiceVersioningStyle->SetSelection( 0 );
+ bSizer192->Add( m_choiceVersioningStyle, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_staticTextNamingCvtPart1 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextNamingCvtPart1->Wrap( -1 );
+ m_staticTextNamingCvtPart1->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+
+ bSizer192->Add( m_staticTextNamingCvtPart1, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticTextNamingCvtPart2Bold = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextNamingCvtPart2Bold->Wrap( -1 );
+ m_staticTextNamingCvtPart2Bold->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+ m_staticTextNamingCvtPart2Bold->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+
+ bSizer192->Add( m_staticTextNamingCvtPart2Bold, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticTextNamingCvtPart3 = new wxStaticText( m_panelVersioning, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextNamingCvtPart3->Wrap( -1 );
+ m_staticTextNamingCvtPart3->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+
+ bSizer192->Add( m_staticTextNamingCvtPart3, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer192->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_hyperlink17 = new wxHyperlinkCtrl( m_panelVersioning, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ bSizer192->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+
+ bSizer191->Add( bSizer192, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ m_panelVersioning->SetSizer( bSizer191 );
+ m_panelVersioning->Layout();
+ bSizer191->Fit( m_panelVersioning );
+ bSizerVersioning->Add( m_panelVersioning, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer184->Add( bSizerVersioning, 0, wxTOP|wxEXPAND, 5 );
+
+
+ bSizer232->Add( bSizer184, 0, wxALL|wxEXPAND, 10 );
+
+ bSizerMiscConfig = new wxBoxSizer( wxVERTICAL );
+
+ m_staticline582 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerMiscConfig->Add( m_staticline582, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer1732;
+ bSizer1732 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer174;
+ bSizer174 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText88 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("Handle errors:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText88->Wrap( -1 );
+ bSizer174->Add( m_staticText88, 0, wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizer175;
+ bSizer175 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_toggleBtnErrorIgnore = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("&Ignore"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") );
+
+ bSizer175->Add( m_toggleBtnErrorIgnore, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_toggleBtnErrorPopup = new wxToggleButton( m_panelSyncSettings, wxID_ANY, _("&Pop-up"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") );
+
+ bSizer175->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer174->Add( bSizer175, 0, 0, 5 );
+
+
+ bSizer1732->Add( bSizer174, 0, wxALL, 10 );
+
+ m_staticline57 = new wxStaticLine( m_panelSyncSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer1732->Add( m_staticline57, 0, wxEXPAND, 5 );
+
+ bSizerOnCompletion = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText89 = new wxStaticText( m_panelSyncSettings, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText89->Wrap( -1 );
+ bSizerOnCompletion->Add( m_staticText89, 0, wxBOTTOM, 5 );
+
+ m_comboBoxOnCompletion = new OnCompletionBox( m_panelSyncSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizerOnCompletion->Add( m_comboBoxOnCompletion, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+
+ bSizer1732->Add( bSizerOnCompletion, 1, wxALL, 10 );
+
+
+ bSizerMiscConfig->Add( bSizer1732, 1, wxEXPAND, 5 );
+
+
+ bSizer232->Add( bSizerMiscConfig, 1, wxEXPAND, 5 );
+
+
+ m_panelSyncSettings->SetSizer( bSizer232 );
+ m_panelSyncSettings->Layout();
+ bSizer232->Fit( m_panelSyncSettings );
+ bSizer276->Add( m_panelSyncSettings, 1, wxEXPAND, 5 );
+
+
+ m_panelSyncSettingsHolder->SetSizer( bSizer276 );
+ m_panelSyncSettingsHolder->Layout();
+ bSizer276->Fit( m_panelSyncSettingsHolder );
+ m_notebook->AddPage( m_panelSyncSettingsHolder, _("dummy"), false );
+
+ bSizer7->Add( m_notebook, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonOkay->SetDefault();
+ m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
+
+
+ bSizer7->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 );
+
+
+ this->SetSizer( bSizer7 );
+ this->Layout();
+ bSizer7->Fit( this );
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( ConfigDlgGenerated::OnClose ) );
+ m_checkBoxUseLocalCmpOptions->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnToggleLocalCompSettings ), NULL, this );
+ m_toggleBtnTimeSize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::OnTimeSizeDouble ), NULL, this );
+ m_toggleBtnTimeSize->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnTimeSize ), NULL, this );
+ m_toggleBtnContent->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::OnContentDouble ), NULL, this );
+ m_toggleBtnContent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnContent ), NULL, this );
+ m_checkBoxTimeShift->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnChangeCompOption ), NULL, this );
+ m_hyperlink241->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( ConfigDlgGenerated::OnHelpTimeShift ), NULL, this );
+ m_checkBoxSymlinksInclude->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnChangeCompOption ), NULL, this );
+ m_hyperlink24->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( ConfigDlgGenerated::OnHelpComparisonSettings ), NULL, this );
+ m_textCtrlInclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( ConfigDlgGenerated::OnChangeFilterOption ), NULL, this );
+ m_hyperlink171->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( ConfigDlgGenerated::OnHelpShowExamples ), NULL, this );
+ m_textCtrlExclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( ConfigDlgGenerated::OnChangeFilterOption ), NULL, this );
+ m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, 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_buttonClear->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnFilterReset ), NULL, this );
+ m_checkBoxUseLocalSyncOptions->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnToggleLocalSyncSettings ), NULL, this );
+ m_toggleBtnTwoWay->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::OnSyncTwoWayDouble ), NULL, this );
+ m_toggleBtnTwoWay->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnSyncTwoWay ), NULL, this );
+ m_toggleBtnMirror->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::OnSyncMirrorDouble ), NULL, this );
+ m_toggleBtnMirror->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnSyncMirror ), NULL, this );
+ m_toggleBtnUpdate->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::OnSyncUpdateDouble ), NULL, this );
+ m_toggleBtnUpdate->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnSyncUpdate ), NULL, this );
+ m_toggleBtnCustom->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( ConfigDlgGenerated::OnSyncCustomDouble ), NULL, this );
+ m_toggleBtnCustom->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnSyncCustom ), NULL, this );
+ m_checkBoxDetectMove->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnToggleDetectMovedFiles ), 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_toggleBtnPermanent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnDeletionPermanent ), NULL, this );
+ m_toggleBtnRecycler->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnDeletionRecycler ), NULL, this );
+ m_toggleBtnVersioning->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnDeletionVersioning ), NULL, this );
+ m_choiceVersioningStyle->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( ConfigDlgGenerated::OnChangeSyncOption ), NULL, this );
+ m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( ConfigDlgGenerated::OnHelpVersioning ), NULL, this );
+ m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnErrorIgnore ), NULL, this );
+ m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( ConfigDlgGenerated::OnErrorPopup ), 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()
@@ -1809,221 +1809,221 @@ ConfigDlgGenerated::~ConfigDlgGenerated()
SyncConfirmationDlgGenerated::SyncConfirmationDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
- this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-
- wxBoxSizer* bSizer134;
- bSizer134 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer72;
- bSizer72 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapSync = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- bSizer72->Add( m_bitmapSync, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 );
-
- m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("Start synchronization now?"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextHeader->Wrap( -1 );
- bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 );
-
-
- bSizer134->Add( bSizer72, 0, 0, 5 );
-
- m_staticline371 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer134->Add( m_staticline371, 0, wxEXPAND, 5 );
-
- m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
- m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer185;
- bSizer185 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer185->Add( 40, 0, 0, 0, 5 );
-
-
- bSizer185->Add( 0, 0, 1, 0, 5 );
-
- m_staticline38 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer185->Add( m_staticline38, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer162;
- bSizer162 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer182;
- bSizer182 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText84 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Variant:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText84->Wrap( -1 );
- bSizer182->Add( m_staticText84, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
-
-
- bSizer182->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_staticTextVariant = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextVariant->Wrap( -1 );
- m_staticTextVariant->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer182->Add( m_staticTextVariant, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
-
- bSizer182->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- bSizer162->Add( bSizer182, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 );
-
- m_staticline14 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer162->Add( m_staticline14, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer181;
- bSizer181 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText83 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Statistics:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText83->Wrap( -1 );
- bSizer181->Add( m_staticText83, 0, wxALL, 5 );
-
- wxFlexGridSizer* fgSizer11;
- fgSizer11 = new wxFlexGridSizer( 2, 7, 2, 5 );
- fgSizer11->SetFlexibleDirection( wxBOTH );
- fgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") );
-
- fgSizer11->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_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 );
-
- m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") );
-
- fgSizer11->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapData->SetToolTip( _("Total bytes to copy") );
-
- fgSizer11->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") );
-
- fgSizer11->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_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 );
-
- m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") );
-
- fgSizer11->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextDeleteLeft->Wrap( -1 );
- m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") );
-
- fgSizer11->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_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 );
-
- m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextCreateLeft->Wrap( -1 );
- m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") );
-
- fgSizer11->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextData->Wrap( -1 );
- m_staticTextData->SetToolTip( _("Total bytes to copy") );
-
- fgSizer11->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_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 );
-
- 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 );
-
- 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 );
-
-
- bSizer181->Add( fgSizer11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer162->Add( bSizer181, 0, wxEXPAND|wxALL, 5 );
-
-
- bSizer185->Add( bSizer162, 0, 0, 5 );
-
- m_staticline381 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer185->Add( m_staticline381, 0, wxEXPAND, 5 );
-
-
- bSizer185->Add( 0, 0, 1, 0, 5 );
-
-
- bSizer185->Add( 40, 0, 0, 0, 5 );
-
-
- m_panelStatistics->SetSizer( bSizer185 );
- m_panelStatistics->Layout();
- bSizer185->Fit( m_panelStatistics );
- bSizer134->Add( m_panelStatistics, 0, wxEXPAND, 5 );
-
- m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer164;
- bSizer164 = new wxBoxSizer( wxVERTICAL );
-
- m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("&Don't show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer164->Add( m_checkBoxDontShowAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
-
- bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonStartSync = new wxButton( this, wxID_OK, _("&Start"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonStartSync->SetDefault();
- m_buttonStartSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- 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 );
-
-
- bSizer164->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 );
-
-
- bSizer134->Add( bSizer164, 1, wxEXPAND, 5 );
-
-
- this->SetSizer( bSizer134 );
- this->Layout();
- bSizer134->Fit( this );
-
- this->Centre( wxBOTH );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncConfirmationDlgGenerated::OnClose ) );
- m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnStartSync ), NULL, this );
- m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+ this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer134;
+ bSizer134 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer72;
+ bSizer72 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapSync = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer72->Add( m_bitmapSync, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 );
+
+ m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("Start synchronization now?"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextHeader->Wrap( -1 );
+ bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 );
+
+
+ bSizer134->Add( bSizer72, 0, 0, 5 );
+
+ m_staticline371 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer134->Add( m_staticline371, 0, wxEXPAND, 5 );
+
+ m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+ m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer185;
+ bSizer185 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer185->Add( 40, 0, 0, 0, 5 );
+
+
+ bSizer185->Add( 0, 0, 1, 0, 5 );
+
+ m_staticline38 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer185->Add( m_staticline38, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer162;
+ bSizer162 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer182;
+ bSizer182 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText84 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Variant:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText84->Wrap( -1 );
+ bSizer182->Add( m_staticText84, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 );
+
+
+ bSizer182->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_staticTextVariant = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextVariant->Wrap( -1 );
+ m_staticTextVariant->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer182->Add( m_staticTextVariant, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+
+ bSizer182->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ bSizer162->Add( bSizer182, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxALL, 5 );
+
+ m_staticline14 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer162->Add( m_staticline14, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer181;
+ bSizer181 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText83 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Statistics:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText83->Wrap( -1 );
+ bSizer181->Add( m_staticText83, 0, wxALL, 5 );
+
+ wxFlexGridSizer* fgSizer11;
+ fgSizer11 = new wxFlexGridSizer( 2, 7, 2, 5 );
+ fgSizer11->SetFlexibleDirection( wxBOTH );
+ fgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") );
+
+ fgSizer11->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_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 );
+
+ m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") );
+
+ fgSizer11->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapData->SetToolTip( _("Total bytes to copy") );
+
+ fgSizer11->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") );
+
+ fgSizer11->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_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 );
+
+ m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") );
+
+ fgSizer11->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDeleteLeft->Wrap( -1 );
+ m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") );
+
+ fgSizer11->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_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 );
+
+ m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextCreateLeft->Wrap( -1 );
+ m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") );
+
+ fgSizer11->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextData->Wrap( -1 );
+ m_staticTextData->SetToolTip( _("Total bytes to copy") );
+
+ fgSizer11->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_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 );
+
+ 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 );
+
+ 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 );
+
+
+ bSizer181->Add( fgSizer11, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer162->Add( bSizer181, 0, wxEXPAND|wxALL, 5 );
+
+
+ bSizer185->Add( bSizer162, 0, 0, 5 );
+
+ m_staticline381 = new wxStaticLine( m_panelStatistics, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer185->Add( m_staticline381, 0, wxEXPAND, 5 );
+
+
+ bSizer185->Add( 0, 0, 1, 0, 5 );
+
+
+ bSizer185->Add( 40, 0, 0, 0, 5 );
+
+
+ m_panelStatistics->SetSizer( bSizer185 );
+ m_panelStatistics->Layout();
+ bSizer185->Fit( m_panelStatistics );
+ bSizer134->Add( m_panelStatistics, 0, wxEXPAND, 5 );
+
+ m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer164;
+ bSizer164 = new wxBoxSizer( wxVERTICAL );
+
+ m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("&Don't show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer164->Add( m_checkBoxDontShowAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+ bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonStartSync = new wxButton( this, wxID_OK, _("&Start"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonStartSync->SetDefault();
+ m_buttonStartSync->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ 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 );
+
+
+ bSizer164->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 );
+
+
+ bSizer134->Add( bSizer164, 1, wxEXPAND, 5 );
+
+
+ this->SetSizer( bSizer134 );
+ this->Layout();
+ bSizer134->Fit( this );
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncConfirmationDlgGenerated::OnClose ) );
+ m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnStartSync ), NULL, this );
+ m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncConfirmationDlgGenerated::OnCancel ), NULL, this );
}
SyncConfirmationDlgGenerated::~SyncConfirmationDlgGenerated()
@@ -2032,88 +2032,88 @@ SyncConfirmationDlgGenerated::~SyncConfirmationDlgGenerated()
FolderPairPanelGenerated::FolderPairPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
{
- wxBoxSizer* bSizer74;
- bSizer74 = new wxBoxSizer( wxHORIZONTAL );
-
- m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelLeft->SetMinSize( wxSize( 1,-1 ) );
-
- wxBoxSizer* bSizer134;
- bSizer134 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bpButtonFolderPairOptions = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- m_bpButtonFolderPairOptions->SetToolTip( _("Arrange folder pair") );
-
- bSizer134->Add( m_bpButtonFolderPairOptions, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonRemovePair = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") );
-
- bSizer134->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_directoryLeft = new FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer134->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_buttonSelectDirLeft = new wxButton( m_panelLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
- m_buttonSelectDirLeft->SetToolTip( _("Select a folder") );
-
- bSizer134->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- m_panelLeft->SetSizer( bSizer134 );
- m_panelLeft->Layout();
- bSizer134->Fit( m_panelLeft );
- bSizer74->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 5 );
-
- m_panel20 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- wxBoxSizer* bSizer95;
- bSizer95 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer95->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_bpButtonAltCompCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- bSizer95->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_bpButtonLocalFilter = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- bSizer95->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 2 );
-
- m_bpButtonAltSyncCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- bSizer95->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer95->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- m_panel20->SetSizer( bSizer95 );
- m_panel20->Layout();
- bSizer95->Fit( m_panel20 );
- bSizer74->Add( m_panel20, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelRight->SetMinSize( wxSize( 1,-1 ) );
-
- wxBoxSizer* bSizer135;
- bSizer135 = new wxBoxSizer( wxHORIZONTAL );
-
- m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer135->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_buttonSelectDirRight = new wxButton( m_panelRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
- m_buttonSelectDirRight->SetToolTip( _("Select a folder") );
-
- bSizer135->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- m_panelRight->SetSizer( bSizer135 );
- m_panelRight->Layout();
- bSizer135->Fit( m_panelRight );
- bSizer74->Add( m_panelRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND, 5 );
-
-
- this->SetSizer( bSizer74 );
- this->Layout();
- bSizer74->Fit( this );
+ wxBoxSizer* bSizer74;
+ bSizer74 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelLeft->SetMinSize( wxSize( 1,-1 ) );
+
+ wxBoxSizer* bSizer134;
+ bSizer134 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bpButtonFolderPairOptions = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ m_bpButtonFolderPairOptions->SetToolTip( _("Arrange folder pair") );
+
+ bSizer134->Add( m_bpButtonFolderPairOptions, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonRemovePair = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") );
+
+ bSizer134->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_directoryLeft = new FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer134->Add( m_directoryLeft, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonSelectDirLeft = new wxButton( m_panelLeft, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonSelectDirLeft->SetToolTip( _("Select a folder") );
+
+ bSizer134->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ m_panelLeft->SetSizer( bSizer134 );
+ m_panelLeft->Layout();
+ bSizer134->Fit( m_panelLeft );
+ bSizer74->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 5 );
+
+ m_panel20 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizer95;
+ bSizer95 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer95->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_bpButtonAltCompCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ bSizer95->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_bpButtonLocalFilter = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ bSizer95->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 2 );
+
+ m_bpButtonAltSyncCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ bSizer95->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer95->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ m_panel20->SetSizer( bSizer95 );
+ m_panel20->Layout();
+ bSizer95->Fit( m_panel20 );
+ bSizer74->Add( m_panel20, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelRight->SetMinSize( wxSize( 1,-1 ) );
+
+ wxBoxSizer* bSizer135;
+ bSizer135 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer135->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonSelectDirRight = new wxButton( m_panelRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonSelectDirRight->SetToolTip( _("Select a folder") );
+
+ bSizer135->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ m_panelRight->SetSizer( bSizer135 );
+ m_panelRight->Layout();
+ bSizer135->Fit( m_panelRight );
+ bSizer74->Add( m_panelRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND, 5 );
+
+
+ this->SetSizer( bSizer74 );
+ this->Layout();
+ bSizer74->Fit( this );
}
FolderPairPanelGenerated::~FolderPairPanelGenerated()
@@ -2122,110 +2122,110 @@ FolderPairPanelGenerated::~FolderPairPanelGenerated()
CompareProgressDlgGenerated::CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
{
- this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer40;
- bSizer40 = new wxBoxSizer( wxHORIZONTAL );
-
- m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
- m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-
- wxBoxSizer* bSizer187;
- bSizer187 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer187->Add( 0, 5, 0, 0, 5 );
-
- wxFlexGridSizer* fgSizer7;
- fgSizer7 = new wxFlexGridSizer( 0, 2, 5, 5 );
- fgSizer7->SetFlexibleDirection( wxHORIZONTAL );
- fgSizer7->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_staticTextItemsFoundLabel = new wxStaticText( m_panelStatistics, wxID_ANY, _("Items found:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextItemsFoundLabel->Wrap( -1 );
- fgSizer7->Add( m_staticTextItemsFoundLabel, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextItemsFound = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextItemsFound->Wrap( -1 );
- m_staticTextItemsFound->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer7->Add( m_staticTextItemsFound, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextItemsRemainingLabel = new wxStaticText( m_panelStatistics, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextItemsRemainingLabel->Wrap( -1 );
- fgSizer7->Add( m_staticTextItemsRemainingLabel, 0, wxALIGN_BOTTOM, 5 );
-
- bSizerItemsRemaining = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticTextItemsRemaining = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextItemsRemaining->Wrap( -1 );
- m_staticTextItemsRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizerItemsRemaining->Add( m_staticTextItemsRemaining, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextDataRemaining = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextDataRemaining->Wrap( -1 );
- bSizerItemsRemaining->Add( m_staticTextDataRemaining, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
-
-
- fgSizer7->Add( bSizerItemsRemaining, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextTimeRemainingLabel = new wxStaticText( m_panelStatistics, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextTimeRemainingLabel->Wrap( -1 );
- fgSizer7->Add( m_staticTextTimeRemainingLabel, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextTimeRemaining = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextTimeRemaining->Wrap( -1 );
- m_staticTextTimeRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer7->Add( m_staticTextTimeRemaining, 0, wxALIGN_BOTTOM, 5 );
-
- wxStaticText* m_staticText37;
- m_staticText37 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText37->Wrap( -1 );
- fgSizer7->Add( m_staticText37, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextTimeElapsed = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextTimeElapsed->Wrap( -1 );
- m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- fgSizer7->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM, 5 );
-
-
- bSizer187->Add( fgSizer7, 0, wxRIGHT|wxLEFT, 5 );
-
-
- bSizer187->Add( 0, 5, 0, 0, 5 );
-
-
- m_panelStatistics->SetSizer( bSizer187 );
- m_panelStatistics->Layout();
- bSizer187->Fit( m_panelStatistics );
- bSizer40->Add( m_panelStatistics, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- wxBoxSizer* bSizer181;
- bSizer181 = new wxBoxSizer( wxVERTICAL );
-
- m_staticTextStatus = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatus->Wrap( -1 );
- bSizer181->Add( m_staticTextStatus, 0, 0, 5 );
-
- m_gauge2 = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,14 ), wxGA_HORIZONTAL|wxGA_SMOOTH );
- bSizer181->Add( m_gauge2, 0, wxEXPAND|wxTOP, 5 );
-
- m_staticTextSpeed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextSpeed->Wrap( -1 );
- m_staticTextSpeed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer181->Add( m_staticTextSpeed, 0, wxALIGN_BOTTOM|wxTOP, 5 );
-
-
- bSizer40->Add( bSizer181, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
-
- this->SetSizer( bSizer40 );
- this->Layout();
- bSizer40->Fit( this );
+ this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer40;
+ bSizer40 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+ m_panelStatistics->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer187;
+ bSizer187 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer187->Add( 0, 5, 0, 0, 5 );
+
+ wxFlexGridSizer* fgSizer7;
+ fgSizer7 = new wxFlexGridSizer( 0, 2, 5, 5 );
+ fgSizer7->SetFlexibleDirection( wxHORIZONTAL );
+ fgSizer7->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_staticTextItemsFoundLabel = new wxStaticText( m_panelStatistics, wxID_ANY, _("Items found:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextItemsFoundLabel->Wrap( -1 );
+ fgSizer7->Add( m_staticTextItemsFoundLabel, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextItemsFound = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextItemsFound->Wrap( -1 );
+ m_staticTextItemsFound->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer7->Add( m_staticTextItemsFound, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextItemsRemainingLabel = new wxStaticText( m_panelStatistics, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextItemsRemainingLabel->Wrap( -1 );
+ fgSizer7->Add( m_staticTextItemsRemainingLabel, 0, wxALIGN_BOTTOM, 5 );
+
+ bSizerItemsRemaining = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticTextItemsRemaining = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextItemsRemaining->Wrap( -1 );
+ m_staticTextItemsRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizerItemsRemaining->Add( m_staticTextItemsRemaining, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextDataRemaining = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDataRemaining->Wrap( -1 );
+ bSizerItemsRemaining->Add( m_staticTextDataRemaining, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
+
+
+ fgSizer7->Add( bSizerItemsRemaining, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticTextTimeRemainingLabel = new wxStaticText( m_panelStatistics, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTimeRemainingLabel->Wrap( -1 );
+ fgSizer7->Add( m_staticTextTimeRemainingLabel, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextTimeRemaining = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTimeRemaining->Wrap( -1 );
+ m_staticTextTimeRemaining->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer7->Add( m_staticTextTimeRemaining, 0, wxALIGN_BOTTOM, 5 );
+
+ wxStaticText* m_staticText37;
+ m_staticText37 = new wxStaticText( m_panelStatistics, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText37->Wrap( -1 );
+ fgSizer7->Add( m_staticText37, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextTimeElapsed = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTimeElapsed->Wrap( -1 );
+ m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ fgSizer7->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM, 5 );
+
+
+ bSizer187->Add( fgSizer7, 0, wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer187->Add( 0, 5, 0, 0, 5 );
+
+
+ m_panelStatistics->SetSizer( bSizer187 );
+ m_panelStatistics->Layout();
+ bSizer187->Fit( m_panelStatistics );
+ bSizer40->Add( m_panelStatistics, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ wxBoxSizer* bSizer181;
+ bSizer181 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextStatus = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatus->Wrap( -1 );
+ bSizer181->Add( m_staticTextStatus, 0, 0, 5 );
+
+ m_gauge2 = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,14 ), wxGA_HORIZONTAL|wxGA_SMOOTH );
+ bSizer181->Add( m_gauge2, 0, wxEXPAND|wxTOP, 5 );
+
+ m_staticTextSpeed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextSpeed->Wrap( -1 );
+ m_staticTextSpeed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer181->Add( m_staticTextSpeed, 0, wxALIGN_BOTTOM|wxTOP, 5 );
+
+
+ bSizer40->Add( bSizer181, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+
+ this->SetSizer( bSizer40 );
+ this->Layout();
+ bSizer40->Fit( this );
}
CompareProgressDlgGenerated::~CompareProgressDlgGenerated()
@@ -2234,320 +2234,320 @@ CompareProgressDlgGenerated::~CompareProgressDlgGenerated()
SyncProgressPanelGenerated::SyncProgressPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
{
- bSizerRoot = new wxBoxSizer( wxVERTICAL );
-
- bSizer42 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer42->Add( 32, 0, 0, 0, 5 );
-
-
- bSizer42->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_bitmapStatus = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 );
- bSizer42->Add( m_bitmapStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 );
-
- m_staticTextPhase = new wxStaticText( this, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextPhase->Wrap( -1 );
- m_staticTextPhase->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer42->Add( m_staticTextPhase, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
-
- m_animCtrlSyncing = new wxAnimationCtrl( this, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( 32,32 ), wxAC_DEFAULT_STYLE );
- bSizer42->Add( m_animCtrlSyncing, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 );
-
-
- bSizer42->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_bpButtonMinimizeToTray = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), wxBU_AUTODRAW );
- m_bpButtonMinimizeToTray->SetToolTip( _("Minimize to notification area") );
-
- bSizer42->Add( m_bpButtonMinimizeToTray, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizerRoot->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- bSizerStatusText = new wxBoxSizer( wxVERTICAL );
-
- m_staticTextStatus = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextStatus->Wrap( -1 );
- bSizerStatusText->Add( m_staticTextStatus, 0, wxEXPAND|wxLEFT, 10 );
-
-
- bSizerStatusText->Add( 0, 5, 0, 0, 5 );
-
-
- bSizerRoot->Add( bSizerStatusText, 0, wxEXPAND, 5 );
-
- wxStaticLine* m_staticlineHeader;
- m_staticlineHeader = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizerRoot->Add( m_staticlineHeader, 0, wxEXPAND, 5 );
-
- m_panelProgress = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelProgress->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer173;
- bSizer173 = new wxBoxSizer( wxVERTICAL );
-
- bSizer171 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer171->Add( 10, 0, 0, 0, 5 );
-
- wxBoxSizer* bSizer164;
- bSizer164 = new wxBoxSizer( wxVERTICAL );
-
- m_panelItemsProcessed = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
- m_panelItemsProcessed->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-
- wxBoxSizer* bSizer165;
- bSizer165 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer165->Add( 0, 5, 0, 0, 5 );
-
- wxStaticText* m_staticText96;
- m_staticText96 = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("Items processed:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText96->Wrap( -1 );
- bSizer165->Add( m_staticText96, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
-
- wxBoxSizer* bSizer169;
- bSizer169 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticTextProcessedObj = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_staticTextProcessedObj->Wrap( -1 );
- m_staticTextProcessedObj->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer169->Add( m_staticTextProcessedObj, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextDataProcessed = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextDataProcessed->Wrap( -1 );
- bSizer169->Add( m_staticTextDataProcessed, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
-
-
- bSizer165->Add( bSizer169, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer165->Add( 0, 5, 0, 0, 5 );
-
-
- m_panelItemsProcessed->SetSizer( bSizer165 );
- m_panelItemsProcessed->Layout();
- bSizer165->Fit( m_panelItemsProcessed );
- bSizer164->Add( m_panelItemsProcessed, 0, wxEXPAND|wxTOP, 7 );
-
- m_panelItemsRemaining = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
- m_panelItemsRemaining->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-
- wxBoxSizer* bSizer166;
- bSizer166 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer166->Add( 0, 5, 0, 0, 5 );
-
- wxStaticText* m_staticText97;
- m_staticText97 = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText97->Wrap( -1 );
- bSizer166->Add( m_staticText97, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
-
- wxBoxSizer* bSizer170;
- bSizer170 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticTextRemainingObj = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_staticTextRemainingObj->Wrap( -1 );
- m_staticTextRemainingObj->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer170->Add( m_staticTextRemainingObj, 0, wxALIGN_BOTTOM, 5 );
-
- m_staticTextDataRemaining = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextDataRemaining->Wrap( -1 );
- bSizer170->Add( m_staticTextDataRemaining, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
-
-
- bSizer166->Add( bSizer170, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer166->Add( 0, 5, 0, 0, 5 );
-
-
- m_panelItemsRemaining->SetSizer( bSizer166 );
- m_panelItemsRemaining->Layout();
- bSizer166->Fit( m_panelItemsRemaining );
- bSizer164->Add( m_panelItemsRemaining, 0, wxTOP|wxEXPAND, 7 );
-
- m_panelTimeRemaining = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
- m_panelTimeRemaining->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-
- wxBoxSizer* bSizer167;
- bSizer167 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer167->Add( 0, 5, 0, 0, 5 );
-
- wxStaticText* m_staticText98;
- m_staticText98 = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText98->Wrap( -1 );
- bSizer167->Add( m_staticText98, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_staticTextRemTime = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextRemTime->Wrap( -1 );
- m_staticTextRemTime->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer167->Add( m_staticTextRemTime, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer167->Add( 0, 5, 0, 0, 5 );
-
-
- m_panelTimeRemaining->SetSizer( bSizer167 );
- m_panelTimeRemaining->Layout();
- bSizer167->Fit( m_panelTimeRemaining );
- bSizer164->Add( m_panelTimeRemaining, 0, wxTOP|wxEXPAND, 7 );
-
- wxPanel* m_panelTimeElapsed;
- m_panelTimeElapsed = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
- m_panelTimeElapsed->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-
- wxBoxSizer* bSizer168;
- bSizer168 = new wxBoxSizer( wxVERTICAL );
-
-
- bSizer168->Add( 0, 5, 0, 0, 5 );
-
- wxStaticText* m_staticText961;
- m_staticText961 = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText961->Wrap( -1 );
- bSizer168->Add( m_staticText961, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_staticTextTimeElapsed = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextTimeElapsed->Wrap( -1 );
- m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer168->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer168->Add( 0, 5, 0, 0, 5 );
-
-
- m_panelTimeElapsed->SetSizer( bSizer168 );
- m_panelTimeElapsed->Layout();
- bSizer168->Fit( m_panelTimeElapsed );
- bSizer164->Add( m_panelTimeElapsed, 0, wxTOP|wxEXPAND, 7 );
-
-
- bSizer171->Add( bSizer164, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer171->Add( 10, 0, 0, 0, 5 );
-
- wxBoxSizer* bSizer161;
- bSizer161 = new wxBoxSizer( wxVERTICAL );
-
- 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|wxTOP|wxBOTTOM, 5 );
-
- wxStaticText* m_staticText99;
- m_staticText99 = new wxStaticText( m_panelProgress, wxID_ANY, _("Bytes copied:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText99->Wrap( -1 );
- bSizer175->Add( m_staticText99, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer161->Add( bSizer175, 0, 0, 5 );
-
- m_panelGraphBytes = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_panelGraphBytes->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- bSizer161->Add( m_panelGraphBytes, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 15 );
-
- 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|wxTOP|wxBOTTOM, 5 );
-
- wxStaticText* m_staticText100;
- m_staticText100 = new wxStaticText( m_panelProgress, wxID_ANY, _("Items processed:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText100->Wrap( -1 );
- bSizer174->Add( m_staticText100, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer161->Add( bSizer174, 0, 0, 5 );
-
- m_panelGraphItems = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_panelGraphItems->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- bSizer161->Add( m_panelGraphItems, 1, wxEXPAND, 15 );
-
-
- bSizer161->Add( 450, 0, 0, 0, 5 );
-
-
- bSizer171->Add( bSizer161, 1, wxEXPAND, 5 );
-
-
- bSizer171->Add( 0, 310, 0, 0, 5 );
-
-
- bSizer173->Add( bSizer171, 1, wxEXPAND, 5 );
-
-
- m_panelProgress->SetSizer( bSizer173 );
- m_panelProgress->Layout();
- bSizer173->Fit( m_panelProgress );
- bSizerRoot->Add( m_panelProgress, 1, wxEXPAND, 5 );
-
- m_notebookResult = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_FIXEDWIDTH );
-
- bSizerRoot->Add( m_notebookResult, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_staticlineFooter = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizerRoot->Add( m_staticlineFooter, 0, wxEXPAND, 5 );
-
- bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer160;
- bSizer160 = new wxBoxSizer( wxHORIZONTAL );
-
- bSizerOnCompletion = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText87 = new wxStaticText( this, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText87->Wrap( -1 );
- bSizerOnCompletion->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_comboBoxOnCompletion = new OnCompletionBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizerOnCompletion->Add( m_comboBoxOnCompletion, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer160->Add( bSizerOnCompletion, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer160->Add( 0, 0, 0, 0, 5 );
-
-
- bSizerStdButtons->Add( bSizer160, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonClose->SetDefault();
- m_buttonClose->Enable( false );
-
- bSizerStdButtons->Add( m_buttonClose, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_buttonPause = new wxButton( this, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( -1,-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 );
-
-
- bSizerRoot->Add( bSizerStdButtons, 0, wxALIGN_RIGHT|wxEXPAND, 5 );
-
-
- this->SetSizer( bSizerRoot );
- this->Layout();
- bSizerRoot->Fit( this );
+ bSizerRoot = new wxBoxSizer( wxVERTICAL );
+
+ bSizer42 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer42->Add( 32, 0, 0, 0, 5 );
+
+
+ bSizer42->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_bitmapStatus = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 );
+ bSizer42->Add( m_bitmapStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 );
+
+ m_staticTextPhase = new wxStaticText( this, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextPhase->Wrap( -1 );
+ m_staticTextPhase->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer42->Add( m_staticTextPhase, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
+
+ m_animCtrlSyncing = new wxAnimationCtrl( this, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( 32,32 ), wxAC_DEFAULT_STYLE );
+ bSizer42->Add( m_animCtrlSyncing, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 );
+
+
+ bSizer42->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_bpButtonMinimizeToTray = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), wxBU_AUTODRAW );
+ m_bpButtonMinimizeToTray->SetToolTip( _("Minimize to notification area") );
+
+ bSizer42->Add( m_bpButtonMinimizeToTray, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerRoot->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ bSizerStatusText = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextStatus = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextStatus->Wrap( -1 );
+ bSizerStatusText->Add( m_staticTextStatus, 0, wxEXPAND|wxLEFT, 10 );
+
+
+ bSizerStatusText->Add( 0, 5, 0, 0, 5 );
+
+
+ bSizerRoot->Add( bSizerStatusText, 0, wxEXPAND, 5 );
+
+ wxStaticLine* m_staticlineHeader;
+ m_staticlineHeader = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerRoot->Add( m_staticlineHeader, 0, wxEXPAND, 5 );
+
+ m_panelProgress = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelProgress->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer173;
+ bSizer173 = new wxBoxSizer( wxVERTICAL );
+
+ bSizer171 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer171->Add( 10, 0, 0, 0, 5 );
+
+ wxBoxSizer* bSizer164;
+ bSizer164 = new wxBoxSizer( wxVERTICAL );
+
+ m_panelItemsProcessed = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+ m_panelItemsProcessed->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer165;
+ bSizer165 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer165->Add( 0, 5, 0, 0, 5 );
+
+ wxStaticText* m_staticText96;
+ m_staticText96 = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("Items processed:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText96->Wrap( -1 );
+ bSizer165->Add( m_staticText96, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer169;
+ bSizer169 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticTextProcessedObj = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_staticTextProcessedObj->Wrap( -1 );
+ m_staticTextProcessedObj->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer169->Add( m_staticTextProcessedObj, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextDataProcessed = new wxStaticText( m_panelItemsProcessed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDataProcessed->Wrap( -1 );
+ bSizer169->Add( m_staticTextDataProcessed, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
+
+
+ bSizer165->Add( bSizer169, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer165->Add( 0, 5, 0, 0, 5 );
+
+
+ m_panelItemsProcessed->SetSizer( bSizer165 );
+ m_panelItemsProcessed->Layout();
+ bSizer165->Fit( m_panelItemsProcessed );
+ bSizer164->Add( m_panelItemsProcessed, 0, wxEXPAND|wxTOP, 7 );
+
+ m_panelItemsRemaining = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+ m_panelItemsRemaining->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer166;
+ bSizer166 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer166->Add( 0, 5, 0, 0, 5 );
+
+ wxStaticText* m_staticText97;
+ m_staticText97 = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText97->Wrap( -1 );
+ bSizer166->Add( m_staticText97, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer170;
+ bSizer170 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticTextRemainingObj = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_staticTextRemainingObj->Wrap( -1 );
+ m_staticTextRemainingObj->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer170->Add( m_staticTextRemainingObj, 0, wxALIGN_BOTTOM, 5 );
+
+ m_staticTextDataRemaining = new wxStaticText( m_panelItemsRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDataRemaining->Wrap( -1 );
+ bSizer170->Add( m_staticTextDataRemaining, 0, wxLEFT|wxALIGN_BOTTOM, 5 );
+
+
+ bSizer166->Add( bSizer170, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer166->Add( 0, 5, 0, 0, 5 );
+
+
+ m_panelItemsRemaining->SetSizer( bSizer166 );
+ m_panelItemsRemaining->Layout();
+ bSizer166->Fit( m_panelItemsRemaining );
+ bSizer164->Add( m_panelItemsRemaining, 0, wxTOP|wxEXPAND, 7 );
+
+ m_panelTimeRemaining = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+ m_panelTimeRemaining->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer167;
+ bSizer167 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer167->Add( 0, 5, 0, 0, 5 );
+
+ wxStaticText* m_staticText98;
+ m_staticText98 = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText98->Wrap( -1 );
+ bSizer167->Add( m_staticText98, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_staticTextRemTime = new wxStaticText( m_panelTimeRemaining, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextRemTime->Wrap( -1 );
+ m_staticTextRemTime->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer167->Add( m_staticTextRemTime, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer167->Add( 0, 5, 0, 0, 5 );
+
+
+ m_panelTimeRemaining->SetSizer( bSizer167 );
+ m_panelTimeRemaining->Layout();
+ bSizer167->Fit( m_panelTimeRemaining );
+ bSizer164->Add( m_panelTimeRemaining, 0, wxTOP|wxEXPAND, 7 );
+
+ wxPanel* m_panelTimeElapsed;
+ m_panelTimeElapsed = new wxPanel( m_panelProgress, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+ m_panelTimeElapsed->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer168;
+ bSizer168 = new wxBoxSizer( wxVERTICAL );
+
+
+ bSizer168->Add( 0, 5, 0, 0, 5 );
+
+ wxStaticText* m_staticText961;
+ m_staticText961 = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText961->Wrap( -1 );
+ bSizer168->Add( m_staticText961, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_staticTextTimeElapsed = new wxStaticText( m_panelTimeElapsed, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextTimeElapsed->Wrap( -1 );
+ m_staticTextTimeElapsed->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer168->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer168->Add( 0, 5, 0, 0, 5 );
+
+
+ m_panelTimeElapsed->SetSizer( bSizer168 );
+ m_panelTimeElapsed->Layout();
+ bSizer168->Fit( m_panelTimeElapsed );
+ bSizer164->Add( m_panelTimeElapsed, 0, wxTOP|wxEXPAND, 7 );
+
+
+ bSizer171->Add( bSizer164, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer171->Add( 10, 0, 0, 0, 5 );
+
+ wxBoxSizer* bSizer161;
+ bSizer161 = new wxBoxSizer( wxVERTICAL );
+
+ 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|wxTOP|wxBOTTOM, 5 );
+
+ wxStaticText* m_staticText99;
+ m_staticText99 = new wxStaticText( m_panelProgress, wxID_ANY, _("Bytes copied:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText99->Wrap( -1 );
+ bSizer175->Add( m_staticText99, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer161->Add( bSizer175, 0, 0, 5 );
+
+ m_panelGraphBytes = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_panelGraphBytes->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ bSizer161->Add( m_panelGraphBytes, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 15 );
+
+ 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|wxTOP|wxBOTTOM, 5 );
+
+ wxStaticText* m_staticText100;
+ m_staticText100 = new wxStaticText( m_panelProgress, wxID_ANY, _("Items processed:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText100->Wrap( -1 );
+ bSizer174->Add( m_staticText100, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer161->Add( bSizer174, 0, 0, 5 );
+
+ m_panelGraphItems = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_panelGraphItems->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ bSizer161->Add( m_panelGraphItems, 1, wxEXPAND, 15 );
+
+
+ bSizer161->Add( 450, 0, 0, 0, 5 );
+
+
+ bSizer171->Add( bSizer161, 1, wxEXPAND, 5 );
+
+
+ bSizer171->Add( 0, 310, 0, 0, 5 );
+
+
+ bSizer173->Add( bSizer171, 1, wxEXPAND, 5 );
+
+
+ m_panelProgress->SetSizer( bSizer173 );
+ m_panelProgress->Layout();
+ bSizer173->Fit( m_panelProgress );
+ bSizerRoot->Add( m_panelProgress, 1, wxEXPAND, 5 );
+
+ m_notebookResult = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_FIXEDWIDTH );
+
+ bSizerRoot->Add( m_notebookResult, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_staticlineFooter = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerRoot->Add( m_staticlineFooter, 0, wxEXPAND, 5 );
+
+ bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer160;
+ bSizer160 = new wxBoxSizer( wxHORIZONTAL );
+
+ bSizerOnCompletion = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText87 = new wxStaticText( this, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText87->Wrap( -1 );
+ bSizerOnCompletion->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_comboBoxOnCompletion = new OnCompletionBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizerOnCompletion->Add( m_comboBoxOnCompletion, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer160->Add( bSizerOnCompletion, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer160->Add( 0, 0, 0, 0, 5 );
+
+
+ bSizerStdButtons->Add( bSizer160, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonClose->SetDefault();
+ m_buttonClose->Enable( false );
+
+ bSizerStdButtons->Add( m_buttonClose, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_buttonPause = new wxButton( this, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( -1,-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 );
+
+
+ bSizerRoot->Add( bSizerStdButtons, 0, wxALIGN_RIGHT|wxEXPAND, 5 );
+
+
+ this->SetSizer( bSizerRoot );
+ this->Layout();
+ bSizerRoot->Fit( this );
}
SyncProgressPanelGenerated::~SyncProgressPanelGenerated()
@@ -2556,48 +2556,48 @@ SyncProgressPanelGenerated::~SyncProgressPanelGenerated()
LogPanelGenerated::LogPanelGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
{
- this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-
- wxBoxSizer* bSizer179;
- bSizer179 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer153;
- bSizer153 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer154;
- bSizer154 = new wxBoxSizer( wxVERTICAL );
-
- m_bpButtonErrors = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW );
- bSizer154->Add( m_bpButtonErrors, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonWarnings = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW );
- bSizer154->Add( m_bpButtonWarnings, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_bpButtonInfo = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW );
- bSizer154->Add( m_bpButtonInfo, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer153->Add( bSizer154, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer153->Add( m_staticline13, 0, wxEXPAND, 5 );
-
- m_gridMessages = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
- m_gridMessages->SetScrollRate( 5, 5 );
- bSizer153->Add( m_gridMessages, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer179->Add( bSizer153, 1, wxEXPAND, 5 );
-
-
- this->SetSizer( bSizer179 );
- this->Layout();
- bSizer179->Fit( this );
-
- // Connect Events
- m_bpButtonErrors->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnErrors ), NULL, this );
- m_bpButtonWarnings->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnWarnings ), NULL, this );
- m_bpButtonInfo->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnInfo ), NULL, this );
+ this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer179;
+ bSizer179 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer153;
+ bSizer153 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer154;
+ bSizer154 = new wxBoxSizer( wxVERTICAL );
+
+ m_bpButtonErrors = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW );
+ bSizer154->Add( m_bpButtonErrors, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonWarnings = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW );
+ bSizer154->Add( m_bpButtonWarnings, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_bpButtonInfo = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 49,49 ), wxBU_AUTODRAW );
+ bSizer154->Add( m_bpButtonInfo, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizer153->Add( bSizer154, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer153->Add( m_staticline13, 0, wxEXPAND, 5 );
+
+ m_gridMessages = new zen::Grid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
+ m_gridMessages->SetScrollRate( 5, 5 );
+ bSizer153->Add( m_gridMessages, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer179->Add( bSizer153, 1, wxEXPAND, 5 );
+
+
+ this->SetSizer( bSizer179 );
+ this->Layout();
+ bSizer179->Fit( this );
+
+ // Connect Events
+ m_bpButtonErrors->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnErrors ), NULL, this );
+ m_bpButtonWarnings->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnWarnings ), NULL, this );
+ m_bpButtonInfo->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogPanelGenerated::OnInfo ), NULL, this );
}
LogPanelGenerated::~LogPanelGenerated()
@@ -2606,184 +2606,184 @@ LogPanelGenerated::~LogPanelGenerated()
BatchDlgGenerated::BatchDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
- this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-
- wxBoxSizer* bSizer54;
- bSizer54 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer72;
- bSizer72 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapBatchJob = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
- bSizer72->Add( m_bitmapBatchJob, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 );
-
- m_staticTextDescr = new wxStaticText( this, wxID_ANY, _("Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextDescr->Wrap( 520 );
- bSizer72->Add( m_staticTextDescr, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 );
-
-
- bSizer54->Add( bSizer72, 0, 0, 5 );
-
- m_staticline18 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer54->Add( m_staticline18, 0, wxEXPAND, 5 );
-
- m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer172;
- bSizer172 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer180;
- bSizer180 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer171;
- bSizer171 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText82 = new wxStaticText( m_panel35, wxID_ANY, _("Handle errors:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText82->Wrap( -1 );
- bSizer171->Add( m_staticText82, 0, wxALL, 5 );
-
- wxBoxSizer* bSizer169;
- bSizer169 = new wxBoxSizer( wxHORIZONTAL );
-
- m_toggleBtnErrorIgnore = new wxToggleButton( m_panel35, wxID_ANY, _("&Ignore"), wxDefaultPosition, wxDefaultSize, 0 );
- m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") );
-
- bSizer169->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_toggleBtnErrorPopup = new wxToggleButton( m_panel35, wxID_ANY, _("&Pop-up"), wxDefaultPosition, wxDefaultSize, 0 );
- m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") );
-
- bSizer169->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_toggleBtnErrorStop = new wxToggleButton( m_panel35, wxID_ANY, _("&Stop"), wxDefaultPosition, wxDefaultSize, 0 );
- m_toggleBtnErrorStop->SetToolTip( _("Stop synchronization at first error") );
-
- bSizer169->Add( m_toggleBtnErrorStop, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer171->Add( bSizer169, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer180->Add( bSizer171, 0, wxALL, 5 );
-
- m_staticline26 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer180->Add( m_staticline26, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer170;
- bSizer170 = new wxBoxSizer( wxVERTICAL );
-
- m_checkBoxRunMinimized = new wxCheckBox( m_panel35, wxID_ANY, _("Run minimized"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer170->Add( m_checkBoxRunMinimized, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALL, 5 );
-
- wxBoxSizer* bSizer179;
- bSizer179 = new wxBoxSizer( wxHORIZONTAL );
-
- m_staticText81 = new wxStaticText( m_panel35, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText81->Wrap( -1 );
- bSizer179->Add( m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_comboBoxOnCompletion = new OnCompletionBox( m_panel35, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer179->Add( m_comboBoxOnCompletion, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer170->Add( bSizer179, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer180->Add( bSizer170, 1, wxALL, 5 );
-
-
- bSizer172->Add( bSizer180, 0, wxEXPAND, 5 );
-
- m_staticline25 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer172->Add( m_staticline25, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer191;
- bSizer191 = new wxBoxSizer( wxVERTICAL );
-
- m_checkBoxGenerateLogfile = new wxCheckBox( m_panel35, wxID_ANY, _("Save log:"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer191->Add( m_checkBoxGenerateLogfile, 0, wxEXPAND|wxALL, 5 );
-
- m_panelLogfile = new wxPanel( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelLogfile->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer1721;
- bSizer1721 = new wxBoxSizer( wxHORIZONTAL );
-
- m_logfileDir = new FolderHistoryBox( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- bSizer1721->Add( m_logfileDir, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_buttonSelectLogfileDir = new wxButton( m_panelLogfile, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
- m_buttonSelectLogfileDir->SetToolTip( _("Select a folder") );
-
- bSizer1721->Add( m_buttonSelectLogfileDir, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_checkBoxLogfilesLimit = new wxCheckBox( m_panelLogfile, wxID_ANY, _("Limit:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxLogfilesLimit->SetToolTip( _("Limit maximum number of log files") );
-
- bSizer1721->Add( m_checkBoxLogfilesLimit, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_spinCtrlLogfileLimit = new wxSpinCtrl( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 70,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 );
- m_spinCtrlLogfileLimit->SetToolTip( _("Limit maximum number of log files") );
-
- bSizer1721->Add( m_spinCtrlLogfileLimit, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- m_panelLogfile->SetSizer( bSizer1721 );
- m_panelLogfile->Layout();
- bSizer1721->Fit( m_panelLogfile );
- bSizer191->Add( m_panelLogfile, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer172->Add( bSizer191, 0, wxEXPAND|wxALL, 5 );
-
- m_hyperlink17 = new wxHyperlinkCtrl( m_panel35, wxID_ANY, _("How can I schedule a batch job?"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- bSizer172->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 );
-
-
- m_panel35->SetSizer( bSizer172 );
- m_panel35->Layout();
- bSizer172->Fit( m_panel35 );
- bSizer54->Add( m_panel35, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer54->Add( m_staticline13, 0, wxEXPAND, 5 );
-
- bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizerStdButtons->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_buttonSaveAs = new wxButton( this, wxID_SAVE, _("Save &as..."), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonSaveAs->SetDefault();
- m_buttonSaveAs->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizerStdButtons->Add( m_buttonSaveAs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
-
-
- bSizer54->Add( bSizerStdButtons, 0, wxALIGN_RIGHT|wxEXPAND, 5 );
-
-
- this->SetSizer( bSizer54 );
- this->Layout();
- bSizer54->Fit( this );
-
- this->Centre( wxBOTH );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) );
- m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorIgnore ), NULL, this );
- m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorPopup ), NULL, this );
- m_toggleBtnErrorStop->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorStop ), NULL, this );
- m_checkBoxGenerateLogfile->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleGenerateLogfile ), NULL, this );
- m_checkBoxLogfilesLimit->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleLogfilesLimit ), NULL, this );
- m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( BatchDlgGenerated::OnHelpScheduleBatch ), NULL, this );
- m_buttonSaveAs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this );
- m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
+ this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer54;
+ bSizer54 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer72;
+ bSizer72 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapBatchJob = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ bSizer72->Add( m_bitmapBatchJob, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 );
+
+ m_staticTextDescr = new wxStaticText( this, wxID_ANY, _("Create a batch file for unattended synchronization. To start, double-click this file or schedule in a task planner: %x"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDescr->Wrap( 520 );
+ bSizer72->Add( m_staticTextDescr, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 );
+
+
+ bSizer54->Add( bSizer72, 0, 0, 5 );
+
+ m_staticline18 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer54->Add( m_staticline18, 0, wxEXPAND, 5 );
+
+ m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer172;
+ bSizer172 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer180;
+ bSizer180 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer171;
+ bSizer171 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText82 = new wxStaticText( m_panel35, wxID_ANY, _("Handle errors:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText82->Wrap( -1 );
+ bSizer171->Add( m_staticText82, 0, wxALL, 5 );
+
+ wxBoxSizer* bSizer169;
+ bSizer169 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_toggleBtnErrorIgnore = new wxToggleButton( m_panel35, wxID_ANY, _("&Ignore"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") );
+
+ bSizer169->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_toggleBtnErrorPopup = new wxToggleButton( m_panel35, wxID_ANY, _("&Pop-up"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") );
+
+ bSizer169->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_toggleBtnErrorStop = new wxToggleButton( m_panel35, wxID_ANY, _("&Stop"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_toggleBtnErrorStop->SetToolTip( _("Stop synchronization at first error") );
+
+ bSizer169->Add( m_toggleBtnErrorStop, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer171->Add( bSizer169, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer180->Add( bSizer171, 0, wxALL, 5 );
+
+ m_staticline26 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer180->Add( m_staticline26, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer170;
+ bSizer170 = new wxBoxSizer( wxVERTICAL );
+
+ m_checkBoxRunMinimized = new wxCheckBox( m_panel35, wxID_ANY, _("Run minimized"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer170->Add( m_checkBoxRunMinimized, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALL, 5 );
+
+ wxBoxSizer* bSizer179;
+ bSizer179 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText81 = new wxStaticText( m_panel35, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText81->Wrap( -1 );
+ bSizer179->Add( m_staticText81, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_comboBoxOnCompletion = new OnCompletionBox( m_panel35, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer179->Add( m_comboBoxOnCompletion, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer170->Add( bSizer179, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer180->Add( bSizer170, 1, wxALL, 5 );
+
+
+ bSizer172->Add( bSizer180, 0, wxEXPAND, 5 );
+
+ m_staticline25 = new wxStaticLine( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer172->Add( m_staticline25, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer191;
+ bSizer191 = new wxBoxSizer( wxVERTICAL );
+
+ m_checkBoxGenerateLogfile = new wxCheckBox( m_panel35, wxID_ANY, _("Save log:"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer191->Add( m_checkBoxGenerateLogfile, 0, wxEXPAND|wxALL, 5 );
+
+ m_panelLogfile = new wxPanel( m_panel35, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelLogfile->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer1721;
+ bSizer1721 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_logfileDir = new FolderHistoryBox( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ bSizer1721->Add( m_logfileDir, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_buttonSelectLogfileDir = new wxButton( m_panelLogfile, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonSelectLogfileDir->SetToolTip( _("Select a folder") );
+
+ bSizer1721->Add( m_buttonSelectLogfileDir, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_checkBoxLogfilesLimit = new wxCheckBox( m_panelLogfile, wxID_ANY, _("Limit:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxLogfilesLimit->SetToolTip( _("Limit maximum number of log files") );
+
+ bSizer1721->Add( m_checkBoxLogfilesLimit, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_spinCtrlLogfileLimit = new wxSpinCtrl( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 70,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 );
+ m_spinCtrlLogfileLimit->SetToolTip( _("Limit maximum number of log files") );
+
+ bSizer1721->Add( m_spinCtrlLogfileLimit, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ m_panelLogfile->SetSizer( bSizer1721 );
+ m_panelLogfile->Layout();
+ bSizer1721->Fit( m_panelLogfile );
+ bSizer191->Add( m_panelLogfile, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer172->Add( bSizer191, 0, wxEXPAND|wxALL, 5 );
+
+ m_hyperlink17 = new wxHyperlinkCtrl( m_panel35, wxID_ANY, _("How can I schedule a batch job?"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ bSizer172->Add( m_hyperlink17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 );
+
+
+ m_panel35->SetSizer( bSizer172 );
+ m_panel35->Layout();
+ bSizer172->Fit( m_panel35 );
+ bSizer54->Add( m_panel35, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer54->Add( m_staticline13, 0, wxEXPAND, 5 );
+
+ bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizerStdButtons->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_buttonSaveAs = new wxButton( this, wxID_SAVE, _("Save &as..."), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonSaveAs->SetDefault();
+ m_buttonSaveAs->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizerStdButtons->Add( m_buttonSaveAs, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
+
+
+ bSizer54->Add( bSizerStdButtons, 0, wxALIGN_RIGHT|wxEXPAND, 5 );
+
+
+ this->SetSizer( bSizer54 );
+ this->Layout();
+ bSizer54->Fit( this );
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) );
+ m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorIgnore ), NULL, this );
+ m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorPopup ), NULL, this );
+ m_toggleBtnErrorStop->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorStop ), NULL, this );
+ m_checkBoxGenerateLogfile->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleGenerateLogfile ), NULL, this );
+ m_checkBoxLogfilesLimit->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleLogfilesLimit ), NULL, this );
+ m_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( BatchDlgGenerated::OnHelpScheduleBatch ), NULL, this );
+ m_buttonSaveAs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this );
+ m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this );
}
BatchDlgGenerated::~BatchDlgGenerated()
@@ -2792,81 +2792,81 @@ BatchDlgGenerated::~BatchDlgGenerated()
DeleteDlgGenerated::DeleteDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
- this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-
- wxBoxSizer* bSizer24;
- bSizer24 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer72;
- bSizer72 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapDeleteType = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- bSizer72->Add( m_bitmapDeleteType, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 );
-
- m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0|wxNO_BORDER );
- m_staticTextHeader->Wrap( -1 );
- bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 );
-
-
- bSizer24->Add( bSizer72, 0, 0, 5 );
-
- m_staticline91 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer24->Add( m_staticline91, 0, wxEXPAND, 5 );
-
- m_panel31 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panel31->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer185;
- bSizer185 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer185->Add( 60, 0, 0, 0, 5 );
-
- m_staticline42 = new wxStaticLine( m_panel31, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer185->Add( m_staticline42, 0, wxEXPAND, 5 );
-
- m_textCtrlFileList = new wxTextCtrl( m_panel31, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 500,200 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER );
- bSizer185->Add( m_textCtrlFileList, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- m_panel31->SetSizer( bSizer185 );
- m_panel31->Layout();
- bSizer185->Fit( m_panel31 );
- bSizer24->Add( m_panel31, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 );
-
- bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
-
- m_checkBoxUseRecycler = new wxCheckBox( this, wxID_ANY, _("&Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizerStdButtons->Add( m_checkBoxUseRecycler, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_buttonOK = new wxButton( this, wxID_OK, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonOK->SetDefault();
- m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- 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 );
-
-
- bSizer24->Add( bSizerStdButtons, 0, wxEXPAND, 5 );
-
-
- this->SetSizer( bSizer24 );
- this->Layout();
- bSizer24->Fit( this );
-
- this->Centre( wxBOTH );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) );
- m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this );
- m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this );
- m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
+ this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer24;
+ bSizer24 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer72;
+ bSizer72 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapDeleteType = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer72->Add( m_bitmapDeleteType, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 );
+
+ m_staticTextHeader = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0|wxNO_BORDER );
+ m_staticTextHeader->Wrap( -1 );
+ bSizer72->Add( m_staticTextHeader, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 );
+
+
+ bSizer24->Add( bSizer72, 0, 0, 5 );
+
+ m_staticline91 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer24->Add( m_staticline91, 0, wxEXPAND, 5 );
+
+ m_panel31 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panel31->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer185;
+ bSizer185 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer185->Add( 60, 0, 0, 0, 5 );
+
+ m_staticline42 = new wxStaticLine( m_panel31, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer185->Add( m_staticline42, 0, wxEXPAND, 5 );
+
+ m_textCtrlFileList = new wxTextCtrl( m_panel31, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 500,200 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER );
+ bSizer185->Add( m_textCtrlFileList, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ m_panel31->SetSizer( bSizer185 );
+ m_panel31->Layout();
+ bSizer185->Fit( m_panel31 );
+ bSizer24->Add( m_panel31, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 );
+
+ bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
+
+ m_checkBoxUseRecycler = new wxCheckBox( this, wxID_ANY, _("&Recycle bin"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerStdButtons->Add( m_checkBoxUseRecycler, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_buttonOK = new wxButton( this, wxID_OK, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonOK->SetDefault();
+ m_buttonOK->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ 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 );
+
+
+ bSizer24->Add( bSizerStdButtons, 0, wxEXPAND, 5 );
+
+
+ this->SetSizer( bSizer24 );
+ this->Layout();
+ bSizer24->Fit( this );
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) );
+ m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this );
+ m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this );
+ m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this );
}
DeleteDlgGenerated::~DeleteDlgGenerated()
@@ -2875,258 +2875,258 @@ DeleteDlgGenerated::~DeleteDlgGenerated()
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 ) );
-
- wxBoxSizer* bSizer95;
- bSizer95 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer72;
- bSizer72 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapSettings = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
- bSizer72->Add( m_bitmapSettings, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 );
-
- m_staticText44 = new wxStaticText( this, wxID_ANY, _("The following settings are used for all synchronization jobs."), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_staticText44->Wrap( 500 );
- bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 );
-
-
- bSizer95->Add( bSizer72, 0, 0, 5 );
-
- m_staticline20 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer95->Add( m_staticline20, 0, wxEXPAND, 5 );
-
- m_panel39 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panel39->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer166;
- bSizer166 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer186;
- bSizer186 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer160;
- bSizer160 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer176;
- bSizer176 = new wxBoxSizer( wxHORIZONTAL );
-
- m_checkBoxFailSafe = new wxCheckBox( m_panel39, wxID_ANY, _("Fail-safe file copy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxFailSafe->SetValue(true);
- m_checkBoxFailSafe->SetToolTip( _("Copy to a temporary file (*.ffs_tmp) before overwriting target.\nThis guarantees a consistent state even in case of a serious error.") );
-
- bSizer176->Add( m_checkBoxFailSafe, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticText91 = new wxStaticText( m_panel39, wxID_ANY, _("(recommended)"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText91->Wrap( -1 );
- m_staticText91->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
-
- bSizer176->Add( m_staticText91, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
-
-
- bSizer160->Add( bSizer176, 0, wxEXPAND, 5 );
-
- bSizerLockedFiles = new wxBoxSizer( wxHORIZONTAL );
-
- m_checkBoxCopyLocked = new wxCheckBox( m_panel39, wxID_ANY, _("Copy locked files"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxCopyLocked->SetValue(true);
- m_checkBoxCopyLocked->SetToolTip( _("Copy shared or locked files using the Volume Shadow Copy Service.") );
-
- bSizerLockedFiles->Add( m_checkBoxCopyLocked, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticText92 = new wxStaticText( m_panel39, wxID_ANY, _("(requires administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText92->Wrap( -1 );
- m_staticText92->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
-
- bSizerLockedFiles->Add( m_staticText92, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
-
-
- bSizer160->Add( bSizerLockedFiles, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer178;
- bSizer178 = new wxBoxSizer( wxHORIZONTAL );
-
- m_checkBoxCopyPermissions = new wxCheckBox( m_panel39, wxID_ANY, _("Copy file access permissions"), wxDefaultPosition, wxDefaultSize, 0 );
- m_checkBoxCopyPermissions->SetValue(true);
- m_checkBoxCopyPermissions->SetToolTip( _("Transfer file and folder permissions.") );
-
- bSizer178->Add( m_checkBoxCopyPermissions, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_staticText93 = new wxStaticText( m_panel39, wxID_ANY, _("(requires administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText93->Wrap( -1 );
- m_staticText93->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
-
- bSizer178->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
-
-
- bSizer160->Add( bSizer178, 0, wxEXPAND, 5 );
-
-
- bSizer186->Add( bSizer160, 0, wxEXPAND|wxALL, 5 );
-
- m_staticline39 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer186->Add( m_staticline39, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer188;
- bSizer188 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText95 = new wxStaticText( m_panel39, wxID_ANY, _("Automatic retry on error:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText95->Wrap( -1 );
- bSizer188->Add( m_staticText95, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
-
- wxFlexGridSizer* fgSizer6;
- fgSizer6 = new wxFlexGridSizer( 0, 2, 5, 5 );
- fgSizer6->SetFlexibleDirection( wxBOTH );
- fgSizer6->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_staticText96 = new wxStaticText( m_panel39, wxID_ANY, _("Retry count:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText96->Wrap( -1 );
- fgSizer6->Add( m_staticText96, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_spinCtrlAutoRetryCount = new wxSpinCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 0, 2000000000, 4 );
- fgSizer6->Add( m_spinCtrlAutoRetryCount, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextAutoRetryDelay = new wxStaticText( m_panel39, wxID_ANY, _("Delay (in seconds):"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextAutoRetryDelay->Wrap( -1 );
- fgSizer6->Add( m_staticTextAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_spinCtrlAutoRetryDelay = new wxSpinCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 0, 2000000000, 0 );
- fgSizer6->Add( m_spinCtrlAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer188->Add( fgSizer6, 0, wxLEFT, 10 );
-
-
- bSizer186->Add( bSizer188, 0, wxALL, 10 );
-
-
- bSizer166->Add( bSizer186, 0, wxEXPAND, 5 );
-
- m_staticline191 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer166->Add( m_staticline191, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer181;
- bSizer181 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText85 = new wxStaticText( m_panel39, wxID_ANY, _("Customize context menu:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText85->Wrap( -1 );
- bSizer181->Add( m_staticText85, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
-
- m_gridCustomCommand = new wxGrid( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
-
- // Grid
- m_gridCustomCommand->CreateGrid( 5, 2 );
- m_gridCustomCommand->EnableEditing( true );
- m_gridCustomCommand->EnableGridLines( true );
- m_gridCustomCommand->EnableDragGridSize( false );
- m_gridCustomCommand->SetMargins( 0, 0 );
-
- // Columns
- m_gridCustomCommand->SetColSize( 0, 165 );
- m_gridCustomCommand->SetColSize( 1, 196 );
- m_gridCustomCommand->EnableDragColMove( false );
- m_gridCustomCommand->EnableDragColSize( true );
- m_gridCustomCommand->SetColLabelSize( 20 );
- m_gridCustomCommand->SetColLabelValue( 0, _("Description") );
- m_gridCustomCommand->SetColLabelValue( 1, _("Command line") );
- m_gridCustomCommand->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
-
- // Rows
- m_gridCustomCommand->EnableDragRowSize( false );
- m_gridCustomCommand->SetRowLabelSize( 1 );
- m_gridCustomCommand->SetRowLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
-
- // Label Appearance
-
- // Cell Defaults
- m_gridCustomCommand->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP );
- bSizer181->Add( m_gridCustomCommand, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- wxBoxSizer* bSizer193;
- bSizer193 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bpButtonAddRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- bSizer193->Add( m_bpButtonAddRow, 0, 0, 5 );
-
- m_bpButtonRemoveRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
- bSizer193->Add( m_bpButtonRemoveRow, 0, 0, 5 );
-
-
- bSizer193->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_hyperlink17 = new wxHyperlinkCtrl( m_panel39, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- bSizer193->Add( m_hyperlink17, 0, wxLEFT, 5 );
-
-
- bSizer181->Add( bSizer193, 0, wxTOP|wxEXPAND, 5 );
-
-
- bSizer166->Add( bSizer181, 1, wxEXPAND|wxALL, 10 );
-
- m_staticline192 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer166->Add( m_staticline192, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer1881;
- bSizer1881 = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonResetDialogs = new zen::BitmapTextButton( m_panel39, wxID_ANY, _("Show hidden dialogs again"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonResetDialogs->SetToolTip( _("Show all permanently hidden dialogs and warning messages again") );
-
- bSizer1881->Add( m_buttonResetDialogs, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 );
-
- m_staticline40 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer1881->Add( m_staticline40, 0, wxEXPAND, 5 );
-
-
- bSizer166->Add( bSizer1881, 0, 0, 5 );
-
-
- m_panel39->SetSizer( bSizer166 );
- m_panel39->Layout();
- bSizer166->Fit( m_panel39 );
- bSizer95->Add( m_panel39, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer95->Add( m_staticline36, 0, wxEXPAND, 5 );
-
- bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonDefault = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,-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(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-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_spinCtrlAutoRetryCount->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( OptionsDlgGenerated::OnToggleAutoRetryCount ), 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_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( OptionsDlgGenerated::OnHelpShowExamples ), NULL, this );
- m_buttonResetDialogs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::OnResetDialogs ), 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 );
+ this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
+ this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer95;
+ bSizer95 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer72;
+ bSizer72 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapSettings = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ bSizer72->Add( m_bitmapSettings, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 10 );
+
+ m_staticText44 = new wxStaticText( this, wxID_ANY, _("The following settings are used for all synchronization jobs."), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_staticText44->Wrap( 500 );
+ bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 10 );
+
+
+ bSizer95->Add( bSizer72, 0, 0, 5 );
+
+ m_staticline20 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer95->Add( m_staticline20, 0, wxEXPAND, 5 );
+
+ m_panel39 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panel39->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer166;
+ bSizer166 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer186;
+ bSizer186 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer160;
+ bSizer160 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer176;
+ bSizer176 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_checkBoxFailSafe = new wxCheckBox( m_panel39, wxID_ANY, _("Fail-safe file copy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxFailSafe->SetValue(true);
+ m_checkBoxFailSafe->SetToolTip( _("Copy to a temporary file (*.ffs_tmp) before overwriting target.\nThis guarantees a consistent state even in case of a serious error.") );
+
+ bSizer176->Add( m_checkBoxFailSafe, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticText91 = new wxStaticText( m_panel39, wxID_ANY, _("(recommended)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText91->Wrap( -1 );
+ m_staticText91->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+
+ bSizer176->Add( m_staticText91, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
+
+
+ bSizer160->Add( bSizer176, 0, wxEXPAND, 5 );
+
+ bSizerLockedFiles = new wxBoxSizer( wxHORIZONTAL );
+
+ m_checkBoxCopyLocked = new wxCheckBox( m_panel39, wxID_ANY, _("Copy locked files"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxCopyLocked->SetValue(true);
+ m_checkBoxCopyLocked->SetToolTip( _("Copy shared or locked files using the Volume Shadow Copy Service.") );
+
+ bSizerLockedFiles->Add( m_checkBoxCopyLocked, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticText92 = new wxStaticText( m_panel39, wxID_ANY, _("(requires administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText92->Wrap( -1 );
+ m_staticText92->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+
+ bSizerLockedFiles->Add( m_staticText92, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
+
+
+ bSizer160->Add( bSizerLockedFiles, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer178;
+ bSizer178 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_checkBoxCopyPermissions = new wxCheckBox( m_panel39, wxID_ANY, _("Copy file access permissions"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_checkBoxCopyPermissions->SetValue(true);
+ m_checkBoxCopyPermissions->SetToolTip( _("Transfer file and folder permissions.") );
+
+ bSizer178->Add( m_checkBoxCopyPermissions, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_staticText93 = new wxStaticText( m_panel39, wxID_ANY, _("(requires administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText93->Wrap( -1 );
+ m_staticText93->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
+
+ bSizer178->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
+
+
+ bSizer160->Add( bSizer178, 0, wxEXPAND, 5 );
+
+
+ bSizer186->Add( bSizer160, 0, wxEXPAND|wxALL, 5 );
+
+ m_staticline39 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer186->Add( m_staticline39, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer188;
+ bSizer188 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText95 = new wxStaticText( m_panel39, wxID_ANY, _("Automatic retry on error:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText95->Wrap( -1 );
+ bSizer188->Add( m_staticText95, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+ wxFlexGridSizer* fgSizer6;
+ fgSizer6 = new wxFlexGridSizer( 0, 2, 5, 5 );
+ fgSizer6->SetFlexibleDirection( wxBOTH );
+ fgSizer6->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_staticText96 = new wxStaticText( m_panel39, wxID_ANY, _("Retry count:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText96->Wrap( -1 );
+ fgSizer6->Add( m_staticText96, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_spinCtrlAutoRetryCount = new wxSpinCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 0, 2000000000, 4 );
+ fgSizer6->Add( m_spinCtrlAutoRetryCount, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticTextAutoRetryDelay = new wxStaticText( m_panel39, wxID_ANY, _("Delay (in seconds):"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextAutoRetryDelay->Wrap( -1 );
+ fgSizer6->Add( m_staticTextAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_spinCtrlAutoRetryDelay = new wxSpinCtrl( m_panel39, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), wxSP_ARROW_KEYS, 0, 2000000000, 0 );
+ fgSizer6->Add( m_spinCtrlAutoRetryDelay, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer188->Add( fgSizer6, 0, wxLEFT, 10 );
+
+
+ bSizer186->Add( bSizer188, 0, wxALL, 10 );
+
+
+ bSizer166->Add( bSizer186, 0, wxEXPAND, 5 );
+
+ m_staticline191 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer166->Add( m_staticline191, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer181;
+ bSizer181 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText85 = new wxStaticText( m_panel39, wxID_ANY, _("Customize context menu:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText85->Wrap( -1 );
+ bSizer181->Add( m_staticText85, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+ m_gridCustomCommand = new wxGrid( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+
+ // Grid
+ m_gridCustomCommand->CreateGrid( 5, 2 );
+ m_gridCustomCommand->EnableEditing( true );
+ m_gridCustomCommand->EnableGridLines( true );
+ m_gridCustomCommand->EnableDragGridSize( false );
+ m_gridCustomCommand->SetMargins( 0, 0 );
+
+ // Columns
+ m_gridCustomCommand->SetColSize( 0, 165 );
+ m_gridCustomCommand->SetColSize( 1, 196 );
+ m_gridCustomCommand->EnableDragColMove( false );
+ m_gridCustomCommand->EnableDragColSize( true );
+ m_gridCustomCommand->SetColLabelSize( 20 );
+ m_gridCustomCommand->SetColLabelValue( 0, _("Description") );
+ m_gridCustomCommand->SetColLabelValue( 1, _("Command line") );
+ m_gridCustomCommand->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
+
+ // Rows
+ m_gridCustomCommand->EnableDragRowSize( false );
+ m_gridCustomCommand->SetRowLabelSize( 1 );
+ m_gridCustomCommand->SetRowLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
+
+ // Label Appearance
+
+ // Cell Defaults
+ m_gridCustomCommand->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP );
+ bSizer181->Add( m_gridCustomCommand, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer193;
+ bSizer193 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bpButtonAddRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ bSizer193->Add( m_bpButtonAddRow, 0, 0, 5 );
+
+ m_bpButtonRemoveRow = new wxBitmapButton( m_panel39, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 25,25 ), wxBU_AUTODRAW );
+ bSizer193->Add( m_bpButtonRemoveRow, 0, 0, 5 );
+
+
+ bSizer193->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_hyperlink17 = new wxHyperlinkCtrl( m_panel39, wxID_ANY, _("Show examples"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ bSizer193->Add( m_hyperlink17, 0, wxLEFT, 5 );
+
+
+ bSizer181->Add( bSizer193, 0, wxTOP|wxEXPAND, 5 );
+
+
+ bSizer166->Add( bSizer181, 1, wxEXPAND|wxALL, 10 );
+
+ m_staticline192 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer166->Add( m_staticline192, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer1881;
+ bSizer1881 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonResetDialogs = new zen::BitmapTextButton( m_panel39, wxID_ANY, _("Show hidden dialogs again"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonResetDialogs->SetToolTip( _("Show all permanently hidden dialogs and warning messages again") );
+
+ bSizer1881->Add( m_buttonResetDialogs, 0, wxALL|wxALIGN_CENTER_VERTICAL, 10 );
+
+ m_staticline40 = new wxStaticLine( m_panel39, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer1881->Add( m_staticline40, 0, wxEXPAND, 5 );
+
+
+ bSizer166->Add( bSizer1881, 0, 0, 5 );
+
+
+ m_panel39->SetSizer( bSizer166 );
+ m_panel39->Layout();
+ bSizer166->Fit( m_panel39 );
+ bSizer95->Add( m_panel39, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer95->Add( m_staticline36, 0, wxEXPAND, 5 );
+
+ bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonDefault = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,-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(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-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_spinCtrlAutoRetryCount->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( OptionsDlgGenerated::OnToggleAutoRetryCount ), 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_hyperlink17->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( OptionsDlgGenerated::OnHelpShowExamples ), NULL, this );
+ m_buttonResetDialogs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( OptionsDlgGenerated::OnResetDialogs ), 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()
@@ -3135,22 +3135,22 @@ OptionsDlgGenerated::~OptionsDlgGenerated()
TooltipDialogGenerated::TooltipDialogGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* bSizer158;
- bSizer158 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmapLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- bSizer158->Add( m_bitmapLeft, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextMain = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextMain->Wrap( 600 );
- bSizer158->Add( m_staticTextMain, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- this->SetSizer( bSizer158 );
- this->Layout();
- bSizer158->Fit( this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bSizer158;
+ bSizer158 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmapLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer158->Add( m_bitmapLeft, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticTextMain = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextMain->Wrap( 600 );
+ bSizer158->Add( m_staticTextMain, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ this->SetSizer( bSizer158 );
+ this->Layout();
+ bSizer158->Fit( this );
}
TooltipDialogGenerated::~TooltipDialogGenerated()
@@ -3159,60 +3159,60 @@ TooltipDialogGenerated::~TooltipDialogGenerated()
SelectTimespanDlgGenerated::SelectTimespanDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
- this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-
- wxBoxSizer* bSizer96;
- bSizer96 = new wxBoxSizer( wxVERTICAL );
-
- m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer98;
- bSizer98 = new wxBoxSizer( wxHORIZONTAL );
-
- m_calendarFrom = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxNO_BORDER );
- bSizer98->Add( m_calendarFrom, 0, wxTOP|wxBOTTOM|wxLEFT, 10 );
-
- m_calendarTo = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxNO_BORDER );
- bSizer98->Add( m_calendarTo, 0, wxALL, 10 );
-
-
- m_panel35->SetSizer( bSizer98 );
- m_panel35->Layout();
- bSizer98->Fit( m_panel35 );
- bSizer96->Add( m_panel35, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_staticline21 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer96->Add( m_staticline21, 0, wxEXPAND, 5 );
-
- bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonOkay->SetDefault();
- m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
-
-
- bSizer96->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 );
-
-
- this->SetSizer( bSizer96 );
- this->Layout();
- bSizer96->Fit( this );
-
- this->Centre( wxBOTH );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) );
- m_calendarFrom->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this );
- m_calendarTo->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this );
- m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this );
- m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+ this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer96;
+ bSizer96 = new wxBoxSizer( wxVERTICAL );
+
+ m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer98;
+ bSizer98 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_calendarFrom = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxNO_BORDER );
+ bSizer98->Add( m_calendarFrom, 0, wxTOP|wxBOTTOM|wxLEFT, 10 );
+
+ m_calendarTo = new wxCalendarCtrl( m_panel35, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS|wxNO_BORDER );
+ bSizer98->Add( m_calendarTo, 0, wxALL, 10 );
+
+
+ m_panel35->SetSizer( bSizer98 );
+ m_panel35->Layout();
+ bSizer98->Fit( m_panel35 );
+ bSizer96->Add( m_panel35, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_staticline21 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer96->Add( m_staticline21, 0, wxEXPAND, 5 );
+
+ bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonOkay->SetDefault();
+ m_buttonOkay->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizerStdButtons->Add( m_buttonOkay, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ bSizerStdButtons->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
+
+
+ bSizer96->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 );
+
+
+ this->SetSizer( bSizer96 );
+ this->Layout();
+ bSizer96->Fit( this );
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) );
+ m_calendarFrom->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this );
+ m_calendarTo->Connect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this );
+ m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this );
+ m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this );
}
SelectTimespanDlgGenerated::~SelectTimespanDlgGenerated()
@@ -3221,306 +3221,306 @@ SelectTimespanDlgGenerated::~SelectTimespanDlgGenerated()
AboutDlgGenerated::AboutDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
- this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
-
- wxBoxSizer* bSizer31;
- bSizer31 = new wxBoxSizer( wxVERTICAL );
-
- m_panel41 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panel41->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- wxBoxSizer* bSizer162;
- bSizer162 = new wxBoxSizer( wxVERTICAL );
-
- m_bitmapLogo = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
- bSizer162->Add( m_bitmapLogo, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticline341 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer162->Add( m_staticline341, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer174;
- bSizer174 = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bSizer181;
- bSizer181 = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizer187;
- bSizer187 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText96 = new wxStaticText( m_panel41, wxID_ANY, _("Source code written in C++ using:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText96->Wrap( -1 );
- bSizer187->Add( m_staticText96, 0, wxALL, 5 );
-
- wxBoxSizer* bSizer171;
- bSizer171 = new wxBoxSizer( wxHORIZONTAL );
-
- m_hyperlink11 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("MS Visual C++"), wxT("http://www.visualstudio.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink11->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
- m_hyperlink11->SetToolTip( _("http://www.visualstudio.com") );
-
- bSizer171->Add( m_hyperlink11, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink9 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("MinGW"), wxT("http://www.mingw.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink9->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
- m_hyperlink9->SetToolTip( _("http://www.mingw.org") );
-
- bSizer171->Add( m_hyperlink9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink10 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Code::Blocks"), wxT("http://www.codeblocks.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink10->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
- m_hyperlink10->SetToolTip( _("http://www.codeblocks.org") );
-
- bSizer171->Add( m_hyperlink10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink7 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("wxWidgets"), wxT("http://www.wxwidgets.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink7->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
- m_hyperlink7->SetToolTip( _("http://www.wxwidgets.org") );
-
- bSizer171->Add( m_hyperlink7, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink14 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("wxFormBuilder"), wxT("http://wxformbuilder.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink14->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
- m_hyperlink14->SetToolTip( _("http://wxformbuilder.org") );
-
- bSizer171->Add( m_hyperlink14, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer187->Add( bSizer171, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- wxBoxSizer* bSizer172;
- bSizer172 = new wxBoxSizer( wxHORIZONTAL );
-
- m_hyperlink15 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zen::Xml"), wxT("http://zenxml.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink15->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
- m_hyperlink15->SetToolTip( _("http://zenxml.sourceforge.net") );
-
- bSizer172->Add( m_hyperlink15, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink13 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Boost"), wxT("http://www.boost.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink13->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
- m_hyperlink13->SetToolTip( _("http://www.boost.org") );
-
- bSizer172->Add( m_hyperlink13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink16 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Artistic Style"), wxT("http://astyle.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink16->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
- m_hyperlink16->SetToolTip( _("http://astyle.sourceforge.net") );
-
- bSizer172->Add( m_hyperlink16, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink12 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Google Test"), wxT("http://code.google.com/p/googletest"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink12->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
- m_hyperlink12->SetToolTip( _("http://code.google.com/p/googletest") );
-
- bSizer172->Add( m_hyperlink12, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink18 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Unicode NSIS"), wxT("http://www.scratchpaper.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink18->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
- m_hyperlink18->SetToolTip( _("http://www.scratchpaper.com") );
-
- bSizer172->Add( m_hyperlink18, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer187->Add( bSizer172, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer181->Add( bSizer187, 0, wxALL|wxEXPAND, 5 );
-
- m_panelDonate = new wxPanel( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panelDonate->SetBackgroundColour( wxColour( 153, 170, 187 ) );
-
- wxBoxSizer* bSizer183;
- bSizer183 = new wxBoxSizer( wxVERTICAL );
-
- m_panel39 = new wxPanel( m_panelDonate, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
- m_panel39->SetBackgroundColour( wxColour( 221, 221, 255 ) );
-
- wxBoxSizer* bSizer184;
- bSizer184 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer184->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_animCtrlWink = new wxAnimationCtrl( m_panel39, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( 48,48 ), wxAC_DEFAULT_STYLE );
- bSizer184->Add( m_animCtrlWink, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- wxBoxSizer* bSizer178;
- bSizer178 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText83 = new wxStaticText( m_panel39, wxID_ANY, _("If you like FreeFileSync"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText83->Wrap( -1 );
- m_staticText83->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
- m_staticText83->SetForegroundColour( wxColour( 0, 0, 0 ) );
-
- bSizer178->Add( m_staticText83, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_buttonDonate = new wxButton( m_panel39, wxID_ANY, _("Donate with PayPal"), wxDefaultPosition, wxDefaultSize, 0 );
- m_buttonDonate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) );
- m_buttonDonate->SetToolTip( _("http://www.freefilesync.org/donate.php") );
-
- bSizer178->Add( m_buttonDonate, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- bSizer184->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer184->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- m_panel39->SetSizer( bSizer184 );
- m_panel39->Layout();
- bSizer184->Fit( m_panel39 );
- bSizer183->Add( m_panel39, 0, wxEXPAND|wxALL, 5 );
-
-
- m_panelDonate->SetSizer( bSizer183 );
- m_panelDonate->Layout();
- bSizer183->Fit( m_panelDonate );
- bSizer181->Add( m_panelDonate, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- wxBoxSizer* bSizer186;
- bSizer186 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText94 = new wxStaticText( m_panel41, wxID_ANY, _("Feedback and suggestions are welcome"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText94->Wrap( -1 );
- bSizer186->Add( m_staticText94, 0, wxALL, 5 );
-
- wxBoxSizer* bSizer166;
- bSizer166 = new wxBoxSizer( wxHORIZONTAL );
-
-
- bSizer166->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_bitmap9 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_bitmap9->SetToolTip( _("Homepage") );
-
- bSizer166->Add( m_bitmap9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_hyperlink1 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("FreeFileSync.org"), wxT("http://www.freefilesync.org/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) );
- m_hyperlink1->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- bSizer166->Add( m_hyperlink1, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer166->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_bitmap10 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_bitmap10->SetToolTip( _("Email") );
-
- bSizer166->Add( m_bitmap10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_hyperlink2 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zenju@gmx.de"), wxT("mailto:zenju@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink2->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) );
- m_hyperlink2->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- bSizer166->Add( m_hyperlink2, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer166->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- bSizer186->Add( bSizer166, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer181->Add( bSizer186, 0, wxALL|wxEXPAND, 5 );
-
- m_staticline34 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer181->Add( m_staticline34, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer185;
- bSizer185 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText93 = new wxStaticText( m_panel41, wxID_ANY, _("Published under the GNU General Public License"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText93->Wrap( -1 );
- bSizer185->Add( m_staticText93, 0, wxALL, 5 );
-
- wxBoxSizer* bSizer1671;
- bSizer1671 = new wxBoxSizer( wxHORIZONTAL );
-
- m_bitmap13 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
- bSizer1671->Add( m_bitmap13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_hyperlink5 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("http://www.gnu.org/licenses/gpl-3.0"), wxT("http://www.gnu.org/licenses/gpl-3.0"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
- m_hyperlink5->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
-
- bSizer1671->Add( m_hyperlink5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer185->Add( bSizer1671, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizer181->Add( bSizer185, 0, wxALL|wxEXPAND, 5 );
-
-
- bSizer174->Add( bSizer181, 0, 0, 5 );
-
- m_staticline37 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
- bSizer174->Add( m_staticline37, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizer177;
- bSizer177 = new wxBoxSizer( wxVERTICAL );
-
- m_staticText54 = new wxStaticText( m_panel41, wxID_ANY, _("Many thanks for localization:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText54->Wrap( 200 );
- m_staticText54->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
-
- bSizer177->Add( m_staticText54, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
-
-
- bSizer177->Add( 0, 5, 0, 0, 5 );
-
- m_scrolledWindowTranslators = new wxScrolledWindow( m_panel41, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxVSCROLL );
- m_scrolledWindowTranslators->SetScrollRate( 10, 10 );
- m_scrolledWindowTranslators->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
- m_scrolledWindowTranslators->SetMinSize( wxSize( 220,-1 ) );
-
- fgSizerTranslators = new wxFlexGridSizer( 0, 2, 2, 10 );
- fgSizerTranslators->SetFlexibleDirection( wxBOTH );
- fgSizerTranslators->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
-
- m_scrolledWindowTranslators->SetSizer( fgSizerTranslators );
- m_scrolledWindowTranslators->Layout();
- fgSizerTranslators->Fit( m_scrolledWindowTranslators );
- bSizer177->Add( m_scrolledWindowTranslators, 1, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxEXPAND, 5 );
-
-
- bSizer174->Add( bSizer177, 0, wxEXPAND|wxTOP|wxLEFT, 5 );
-
-
- bSizer162->Add( bSizer174, 0, 0, 5 );
-
-
- m_panel41->SetSizer( bSizer162 );
- m_panel41->Layout();
- bSizer162->Fit( m_panel41 );
- bSizer31->Add( m_panel41, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- bSizer31->Add( m_staticline36, 0, wxEXPAND, 5 );
-
- bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
-
- m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
- m_buttonClose->SetDefault();
- bSizerStdButtons->Add( m_buttonClose, 0, wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- bSizer31->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 );
-
-
- this->SetSizer( bSizer31 );
- this->Layout();
- bSizer31->Fit( this );
-
- this->Centre( wxBOTH );
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) );
- m_buttonDonate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnDonate ), NULL, this );
- m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this );
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+ this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+ wxBoxSizer* bSizer31;
+ bSizer31 = new wxBoxSizer( wxVERTICAL );
+
+ m_panel41 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panel41->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ wxBoxSizer* bSizer162;
+ bSizer162 = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapLogo = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ bSizer162->Add( m_bitmapLogo, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_staticline341 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer162->Add( m_staticline341, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer174;
+ bSizer174 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizer181;
+ bSizer181 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer187;
+ bSizer187 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText96 = new wxStaticText( m_panel41, wxID_ANY, _("Source code written in C++ using:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText96->Wrap( -1 );
+ bSizer187->Add( m_staticText96, 0, wxALL, 5 );
+
+ wxBoxSizer* bSizer171;
+ bSizer171 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_hyperlink11 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("MS Visual C++"), wxT("http://www.visualstudio.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink11->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+ m_hyperlink11->SetToolTip( _("http://www.visualstudio.com") );
+
+ bSizer171->Add( m_hyperlink11, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink9 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("MinGW"), wxT("http://www.mingw.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink9->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+ m_hyperlink9->SetToolTip( _("http://www.mingw.org") );
+
+ bSizer171->Add( m_hyperlink9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink10 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Code::Blocks"), wxT("http://www.codeblocks.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink10->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+ m_hyperlink10->SetToolTip( _("http://www.codeblocks.org") );
+
+ bSizer171->Add( m_hyperlink10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink7 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("wxWidgets"), wxT("http://www.wxwidgets.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink7->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+ m_hyperlink7->SetToolTip( _("http://www.wxwidgets.org") );
+
+ bSizer171->Add( m_hyperlink7, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink14 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("wxFormBuilder"), wxT("http://wxformbuilder.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink14->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+ m_hyperlink14->SetToolTip( _("http://wxformbuilder.org") );
+
+ bSizer171->Add( m_hyperlink14, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer187->Add( bSizer171, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer172;
+ bSizer172 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_hyperlink15 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zen::Xml"), wxT("http://zenxml.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink15->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+ m_hyperlink15->SetToolTip( _("http://zenxml.sourceforge.net") );
+
+ bSizer172->Add( m_hyperlink15, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink13 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Boost"), wxT("http://www.boost.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink13->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+ m_hyperlink13->SetToolTip( _("http://www.boost.org") );
+
+ bSizer172->Add( m_hyperlink13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink16 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Artistic Style"), wxT("http://astyle.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink16->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+ m_hyperlink16->SetToolTip( _("http://astyle.sourceforge.net") );
+
+ bSizer172->Add( m_hyperlink16, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink12 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Google Test"), wxT("http://code.google.com/p/googletest"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink12->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+ m_hyperlink12->SetToolTip( _("http://code.google.com/p/googletest") );
+
+ bSizer172->Add( m_hyperlink12, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink18 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("Unicode NSIS"), wxT("http://www.scratchpaper.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink18->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+ m_hyperlink18->SetToolTip( _("http://www.scratchpaper.com") );
+
+ bSizer172->Add( m_hyperlink18, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer187->Add( bSizer172, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizer181->Add( bSizer187, 0, wxALL|wxEXPAND, 5 );
+
+ m_panelDonate = new wxPanel( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panelDonate->SetBackgroundColour( wxColour( 153, 170, 187 ) );
+
+ wxBoxSizer* bSizer183;
+ bSizer183 = new wxBoxSizer( wxVERTICAL );
+
+ m_panel39 = new wxPanel( m_panelDonate, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ m_panel39->SetBackgroundColour( wxColour( 221, 221, 255 ) );
+
+ wxBoxSizer* bSizer184;
+ bSizer184 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer184->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_animCtrlWink = new wxAnimationCtrl( m_panel39, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( 48,48 ), wxAC_DEFAULT_STYLE );
+ bSizer184->Add( m_animCtrlWink, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxBoxSizer* bSizer178;
+ bSizer178 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText83 = new wxStaticText( m_panel39, wxID_ANY, _("If you like FreeFileSync"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText83->Wrap( -1 );
+ m_staticText83->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+ m_staticText83->SetForegroundColour( wxColour( 0, 0, 0 ) );
+
+ bSizer178->Add( m_staticText83, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_buttonDonate = new wxButton( m_panel39, wxID_ANY, _("Donate with PayPal"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonDonate->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) );
+ m_buttonDonate->SetToolTip( _("http://www.freefilesync.org/donate.php") );
+
+ bSizer178->Add( m_buttonDonate, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ bSizer184->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer184->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ m_panel39->SetSizer( bSizer184 );
+ m_panel39->Layout();
+ bSizer184->Fit( m_panel39 );
+ bSizer183->Add( m_panel39, 0, wxEXPAND|wxALL, 5 );
+
+
+ m_panelDonate->SetSizer( bSizer183 );
+ m_panelDonate->Layout();
+ bSizer183->Fit( m_panelDonate );
+ bSizer181->Add( m_panelDonate, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer186;
+ bSizer186 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText94 = new wxStaticText( m_panel41, wxID_ANY, _("Feedback and suggestions are welcome"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText94->Wrap( -1 );
+ bSizer186->Add( m_staticText94, 0, wxALL, 5 );
+
+ wxBoxSizer* bSizer166;
+ bSizer166 = new wxBoxSizer( wxHORIZONTAL );
+
+
+ bSizer166->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_bitmap9 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_bitmap9->SetToolTip( _("Homepage") );
+
+ bSizer166->Add( m_bitmap9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_hyperlink1 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("FreeFileSync.org"), wxT("http://www.freefilesync.org/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) );
+ m_hyperlink1->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ bSizer166->Add( m_hyperlink1, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer166->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_bitmap10 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_bitmap10->SetToolTip( _("Email") );
+
+ bSizer166->Add( m_bitmap10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_hyperlink2 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("zenju@gmx.de"), wxT("mailto:zenju@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink2->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, true, wxEmptyString ) );
+ m_hyperlink2->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ bSizer166->Add( m_hyperlink2, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer166->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ bSizer186->Add( bSizer166, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer181->Add( bSizer186, 0, wxALL|wxEXPAND, 5 );
+
+ m_staticline34 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer181->Add( m_staticline34, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer185;
+ bSizer185 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText93 = new wxStaticText( m_panel41, wxID_ANY, _("Published under the GNU General Public License"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText93->Wrap( -1 );
+ bSizer185->Add( m_staticText93, 0, wxALL, 5 );
+
+ wxBoxSizer* bSizer1671;
+ bSizer1671 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_bitmap13 = new wxStaticBitmap( m_panel41, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ bSizer1671->Add( m_bitmap13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_hyperlink5 = new wxHyperlinkCtrl( m_panel41, wxID_ANY, _("http://www.gnu.org/licenses/gpl-3.0"), wxT("http://www.gnu.org/licenses/gpl-3.0"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ m_hyperlink5->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+
+ bSizer1671->Add( m_hyperlink5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer185->Add( bSizer1671, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizer181->Add( bSizer185, 0, wxALL|wxEXPAND, 5 );
+
+
+ bSizer174->Add( bSizer181, 0, 0, 5 );
+
+ m_staticline37 = new wxStaticLine( m_panel41, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
+ bSizer174->Add( m_staticline37, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizer177;
+ bSizer177 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText54 = new wxStaticText( m_panel41, wxID_ANY, _("Many thanks for localization:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText54->Wrap( 200 );
+ m_staticText54->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
+
+ bSizer177->Add( m_staticText54, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+
+ bSizer177->Add( 0, 5, 0, 0, 5 );
+
+ m_scrolledWindowTranslators = new wxScrolledWindow( m_panel41, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxVSCROLL );
+ m_scrolledWindowTranslators->SetScrollRate( 10, 10 );
+ m_scrolledWindowTranslators->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) );
+ m_scrolledWindowTranslators->SetMinSize( wxSize( 220,-1 ) );
+
+ fgSizerTranslators = new wxFlexGridSizer( 0, 2, 2, 10 );
+ fgSizerTranslators->SetFlexibleDirection( wxBOTH );
+ fgSizerTranslators->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+
+ m_scrolledWindowTranslators->SetSizer( fgSizerTranslators );
+ m_scrolledWindowTranslators->Layout();
+ fgSizerTranslators->Fit( m_scrolledWindowTranslators );
+ bSizer177->Add( m_scrolledWindowTranslators, 1, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxEXPAND, 5 );
+
+
+ bSizer174->Add( bSizer177, 0, wxEXPAND|wxTOP|wxLEFT, 5 );
+
+
+ bSizer162->Add( bSizer174, 0, 0, 5 );
+
+
+ m_panel41->SetSizer( bSizer162 );
+ m_panel41->Layout();
+ bSizer162->Fit( m_panel41 );
+ bSizer31->Add( m_panel41, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizer31->Add( m_staticline36, 0, wxEXPAND, 5 );
+
+ bSizerStdButtons = new wxBoxSizer( wxHORIZONTAL );
+
+ m_buttonClose = new wxButton( this, wxID_OK, _("Close"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_buttonClose->SetDefault();
+ bSizerStdButtons->Add( m_buttonClose, 0, wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizer31->Add( bSizerStdButtons, 0, wxALIGN_RIGHT, 5 );
+
+
+ this->SetSizer( bSizer31 );
+ this->Layout();
+ bSizer31->Fit( this );
+
+ this->Centre( wxBOTH );
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) );
+ m_buttonDonate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnDonate ), NULL, this );
+ m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this );
}
AboutDlgGenerated::~AboutDlgGenerated()
diff --git a/FreeFileSync/Source/ui/gui_generated.h b/FreeFileSync/Source/ui/gui_generated.h
index 28f67bd8..e95f5fe5 100644
--- a/FreeFileSync/Source/ui/gui_generated.h
+++ b/FreeFileSync/Source/ui/gui_generated.h
@@ -14,10 +14,10 @@
class FolderHistoryBox;
class OnCompletionBox;
class ToggleButton;
-namespace zen { class BitmapTextButton; }
-namespace zen { class Graph2D; }
-namespace zen { class Grid; }
-namespace zen { class TripleSplitter; }
+namespace zen{ class BitmapTextButton; }
+namespace zen{ class Graph2D; }
+namespace zen{ class Grid; }
+namespace zen{ class TripleSplitter; }
#include <wx/string.h>
#include <wx/bitmap.h>
@@ -61,793 +61,793 @@ namespace zen { class TripleSplitter; }
///////////////////////////////////////////////////////////////////////////////
/// Class MainDialogGenerated
///////////////////////////////////////////////////////////////////////////////
-class MainDialogGenerated : public wxFrame
+class MainDialogGenerated : public wxFrame
{
-private:
-
-protected:
- wxMenuBar* m_menubar1;
- wxMenu* m_menuFile;
- wxMenuItem* m_menuItemNew;
- wxMenuItem* m_menuItemLoad;
- wxMenuItem* m_menuItemSave;
- wxMenuItem* m_menuItemSaveAs;
- wxMenuItem* m_menuItemSaveAsBatch;
- wxMenu* m_menu4;
- wxMenuItem* m_menuItemCompare;
- wxMenuItem* m_menuItemCompSettings;
- wxMenuItem* m_menuItemFilter;
- wxMenuItem* m_menuItemSyncSettings;
- wxMenuItem* m_menuItemSynchronize;
- wxMenu* m_menuTools;
- wxMenuItem* m_menuItemOptions;
- wxMenu* m_menuLanguages;
- wxMenu* m_menuHelp;
- wxMenuItem* m_menuItemHelp;
- wxMenu* m_menuCheckVersion;
- wxMenuItem* m_menuItemCheckVersionNow;
- wxMenuItem* m_menuItemCheckVersionAuto;
- wxMenuItem* m_menuItemAbout;
- wxBoxSizer* bSizerPanelHolder;
- wxPanel* m_panelTopButtons;
- wxBoxSizer* bSizerTopButtons;
- zen::BitmapTextButton* m_buttonCancel;
- zen::BitmapTextButton* m_buttonCompare;
- wxBitmapButton* m_bpButtonCmpConfig;
- wxBitmapButton* m_bpButtonFilter;
- wxBitmapButton* m_bpButtonSyncConfig;
- zen::BitmapTextButton* m_buttonSync;
- wxPanel* m_panelDirectoryPairs;
- wxStaticText* m_staticTextResolvedPathL;
- wxBitmapButton* m_bpButtonAddPair;
- wxButton* m_buttonSelectDirLeft;
- wxPanel* m_panelTopMiddle;
- wxBitmapButton* m_bpButtonSwapSides;
- wxStaticText* m_staticTextResolvedPathR;
- wxButton* m_buttonSelectDirRight;
- wxScrolledWindow* m_scrolledWindowFolderPairs;
- wxBoxSizer* bSizerAddFolderPairs;
- zen::Grid* m_gridNavi;
- wxPanel* m_panelCenter;
- zen::TripleSplitter* m_splitterMain;
- zen::Grid* m_gridMainL;
- zen::Grid* m_gridMainC;
- zen::Grid* m_gridMainR;
- wxPanel* m_panelStatusBar;
- wxBoxSizer* bSizerFileStatus;
- wxBoxSizer* bSizerStatusLeft;
- wxBoxSizer* bSizerStatusLeftDirectories;
- wxStaticBitmap* m_bitmapSmallDirectoryLeft;
- wxStaticText* m_staticTextStatusLeftDirs;
- wxBoxSizer* bSizerStatusLeftFiles;
- wxStaticBitmap* m_bitmapSmallFileLeft;
- wxStaticText* m_staticTextStatusLeftFiles;
- wxStaticText* m_staticTextStatusLeftBytes;
- wxStaticLine* m_staticline9;
- wxStaticText* m_staticTextStatusMiddle;
- wxBoxSizer* bSizerStatusRight;
- wxStaticLine* m_staticline10;
- wxBoxSizer* bSizerStatusRightDirectories;
- wxStaticBitmap* m_bitmapSmallDirectoryRight;
- wxStaticText* m_staticTextStatusRightDirs;
- wxBoxSizer* bSizerStatusRightFiles;
- wxStaticBitmap* m_bitmapSmallFileRight;
- wxStaticText* m_staticTextStatusRightFiles;
- wxStaticText* m_staticTextStatusRightBytes;
- wxStaticText* m_staticTextFullStatus;
- wxPanel* m_panelSearch;
- wxBitmapButton* m_bpButtonHideSearch;
- wxStaticText* m_staticText101;
- wxTextCtrl* m_textCtrlSearchTxt;
- wxCheckBox* m_checkBoxMatchCase;
- wxPanel* m_panelConfig;
- wxBoxSizer* bSizerConfig;
- wxBitmapButton* m_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;
- wxListBox* m_listBoxHistory;
- wxPanel* m_panelViewFilter;
- wxBoxSizer* bSizerViewFilter;
- wxStaticText* m_staticTextViewType;
- ToggleButton* m_bpButtonViewTypeSyncAction;
- ToggleButton* m_bpButtonShowExcluded;
- wxStaticText* m_staticTextSelectView;
- ToggleButton* m_bpButtonShowDeleteLeft;
- ToggleButton* m_bpButtonShowUpdateLeft;
- ToggleButton* m_bpButtonShowCreateLeft;
- ToggleButton* m_bpButtonShowLeftOnly;
- ToggleButton* m_bpButtonShowLeftNewer;
- ToggleButton* m_bpButtonShowEqual;
- ToggleButton* m_bpButtonShowDoNothing;
- ToggleButton* m_bpButtonShowDifferent;
- ToggleButton* m_bpButtonShowRightNewer;
- ToggleButton* m_bpButtonShowRightOnly;
- ToggleButton* m_bpButtonShowCreateRight;
- ToggleButton* m_bpButtonShowUpdateRight;
- ToggleButton* m_bpButtonShowDeleteRight;
- ToggleButton* m_bpButtonShowConflict;
- 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, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnConfigNew( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnConfigLoad( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnConfigSave( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnConfigSaveAs( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSaveAsBatchJob( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMenuQuit( 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 OnMenuResetLayout( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMenuExportFileList( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMenuCheckVersionAutomatically( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMenuAbout( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCompSettingsContext( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnGlobalFilterContext( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnSyncSettingsContext( wxMouseEvent& 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 OnHideSearchPanel( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSearchGridEnter( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCfgHistoryKeyEvent( wxKeyEvent& event ) { event.Skip(); }
- virtual void OnLoadFromHistory( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnLoadFromHistoryDoubleClick( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCfgHistoryRightClick( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnToggleViewType( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnToggleViewButton( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnViewButtonRightClick( wxMouseEvent& event ) { event.Skip(); }
-
-
-public:
- wxPanel* m_panelTopLeft;
- wxBitmapButton* m_bpButtonRemovePair;
- FolderHistoryBox* m_directoryLeft;
- wxBitmapButton* m_bpButtonAltCompCfg;
- wxBitmapButton* m_bpButtonLocalFilter;
- wxBitmapButton* m_bpButtonAltSyncCfg;
- wxPanel* m_panelTopRight;
- FolderHistoryBox* m_directoryRight;
- wxBoxSizer* bSizerStatistics;
- wxBoxSizer* bSizerData;
-
- MainDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 900,600 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );
-
- ~MainDialogGenerated();
-
+ private:
+
+ protected:
+ wxMenuBar* m_menubar1;
+ wxMenu* m_menuFile;
+ wxMenuItem* m_menuItemNew;
+ wxMenuItem* m_menuItemLoad;
+ wxMenuItem* m_menuItemSave;
+ wxMenuItem* m_menuItemSaveAs;
+ wxMenuItem* m_menuItemSaveAsBatch;
+ wxMenu* m_menu4;
+ wxMenuItem* m_menuItemCompare;
+ wxMenuItem* m_menuItemCompSettings;
+ wxMenuItem* m_menuItemFilter;
+ wxMenuItem* m_menuItemSyncSettings;
+ wxMenuItem* m_menuItemSynchronize;
+ wxMenu* m_menuTools;
+ wxMenuItem* m_menuItemOptions;
+ wxMenu* m_menuLanguages;
+ wxMenu* m_menuHelp;
+ wxMenuItem* m_menuItemHelp;
+ wxMenu* m_menuCheckVersion;
+ wxMenuItem* m_menuItemCheckVersionNow;
+ wxMenuItem* m_menuItemCheckVersionAuto;
+ wxMenuItem* m_menuItemAbout;
+ wxBoxSizer* bSizerPanelHolder;
+ wxPanel* m_panelTopButtons;
+ wxBoxSizer* bSizerTopButtons;
+ zen::BitmapTextButton* m_buttonCancel;
+ zen::BitmapTextButton* m_buttonCompare;
+ wxBitmapButton* m_bpButtonCmpConfig;
+ wxBitmapButton* m_bpButtonFilter;
+ wxBitmapButton* m_bpButtonSyncConfig;
+ zen::BitmapTextButton* m_buttonSync;
+ wxPanel* m_panelDirectoryPairs;
+ wxStaticText* m_staticTextResolvedPathL;
+ wxBitmapButton* m_bpButtonAddPair;
+ wxButton* m_buttonSelectDirLeft;
+ wxPanel* m_panelTopMiddle;
+ wxBitmapButton* m_bpButtonSwapSides;
+ wxStaticText* m_staticTextResolvedPathR;
+ wxButton* m_buttonSelectDirRight;
+ wxScrolledWindow* m_scrolledWindowFolderPairs;
+ wxBoxSizer* bSizerAddFolderPairs;
+ zen::Grid* m_gridNavi;
+ wxPanel* m_panelCenter;
+ zen::TripleSplitter* m_splitterMain;
+ zen::Grid* m_gridMainL;
+ zen::Grid* m_gridMainC;
+ zen::Grid* m_gridMainR;
+ wxPanel* m_panelStatusBar;
+ wxBoxSizer* bSizerFileStatus;
+ wxBoxSizer* bSizerStatusLeft;
+ wxBoxSizer* bSizerStatusLeftDirectories;
+ wxStaticBitmap* m_bitmapSmallDirectoryLeft;
+ wxStaticText* m_staticTextStatusLeftDirs;
+ wxBoxSizer* bSizerStatusLeftFiles;
+ wxStaticBitmap* m_bitmapSmallFileLeft;
+ wxStaticText* m_staticTextStatusLeftFiles;
+ wxStaticText* m_staticTextStatusLeftBytes;
+ wxStaticLine* m_staticline9;
+ wxStaticText* m_staticTextStatusMiddle;
+ wxBoxSizer* bSizerStatusRight;
+ wxStaticLine* m_staticline10;
+ wxBoxSizer* bSizerStatusRightDirectories;
+ wxStaticBitmap* m_bitmapSmallDirectoryRight;
+ wxStaticText* m_staticTextStatusRightDirs;
+ wxBoxSizer* bSizerStatusRightFiles;
+ wxStaticBitmap* m_bitmapSmallFileRight;
+ wxStaticText* m_staticTextStatusRightFiles;
+ wxStaticText* m_staticTextStatusRightBytes;
+ wxStaticText* m_staticTextFullStatus;
+ wxPanel* m_panelSearch;
+ wxBitmapButton* m_bpButtonHideSearch;
+ wxStaticText* m_staticText101;
+ wxTextCtrl* m_textCtrlSearchTxt;
+ wxCheckBox* m_checkBoxMatchCase;
+ wxPanel* m_panelConfig;
+ wxBoxSizer* bSizerConfig;
+ wxBitmapButton* m_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;
+ wxListBox* m_listBoxHistory;
+ wxPanel* m_panelViewFilter;
+ wxBoxSizer* bSizerViewFilter;
+ wxStaticText* m_staticTextViewType;
+ ToggleButton* m_bpButtonViewTypeSyncAction;
+ ToggleButton* m_bpButtonShowExcluded;
+ wxStaticText* m_staticTextSelectView;
+ ToggleButton* m_bpButtonShowDeleteLeft;
+ ToggleButton* m_bpButtonShowUpdateLeft;
+ ToggleButton* m_bpButtonShowCreateLeft;
+ ToggleButton* m_bpButtonShowLeftOnly;
+ ToggleButton* m_bpButtonShowLeftNewer;
+ ToggleButton* m_bpButtonShowEqual;
+ ToggleButton* m_bpButtonShowDoNothing;
+ ToggleButton* m_bpButtonShowDifferent;
+ ToggleButton* m_bpButtonShowRightNewer;
+ ToggleButton* m_bpButtonShowRightOnly;
+ ToggleButton* m_bpButtonShowCreateRight;
+ ToggleButton* m_bpButtonShowUpdateRight;
+ ToggleButton* m_bpButtonShowDeleteRight;
+ ToggleButton* m_bpButtonShowConflict;
+ 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, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnConfigNew( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnConfigLoad( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnConfigSave( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnConfigSaveAs( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSaveAsBatchJob( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMenuQuit( 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 OnMenuResetLayout( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMenuExportFileList( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMenuCheckVersionAutomatically( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnMenuAbout( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCompSettingsContext( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnGlobalFilterContext( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnSyncSettingsContext( wxMouseEvent& 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 OnHideSearchPanel( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSearchGridEnter( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCfgHistoryKeyEvent( wxKeyEvent& event ) { event.Skip(); }
+ virtual void OnLoadFromHistory( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnLoadFromHistoryDoubleClick( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCfgHistoryRightClick( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnToggleViewType( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnToggleViewButton( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnViewButtonRightClick( wxMouseEvent& event ) { event.Skip(); }
+
+
+ public:
+ wxPanel* m_panelTopLeft;
+ wxBitmapButton* m_bpButtonRemovePair;
+ FolderHistoryBox* m_directoryLeft;
+ wxBitmapButton* m_bpButtonAltCompCfg;
+ wxBitmapButton* m_bpButtonLocalFilter;
+ wxBitmapButton* m_bpButtonAltSyncCfg;
+ wxPanel* m_panelTopRight;
+ FolderHistoryBox* m_directoryRight;
+ wxBoxSizer* bSizerStatistics;
+ wxBoxSizer* bSizerData;
+
+ MainDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 900,600 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );
+
+ ~MainDialogGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class ConfigDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class ConfigDlgGenerated : public wxDialog
+class ConfigDlgGenerated : public wxDialog
{
-private:
-
-protected:
- wxNotebook* m_notebook;
- wxPanel* m_panelCompSettingsHolder;
- wxBoxSizer* bSizerLocalCompSettings;
- wxCheckBox* m_checkBoxUseLocalCmpOptions;
- wxStaticLine* m_staticline59;
- wxPanel* m_panelComparisonSettings;
- wxStaticText* m_staticText91;
- wxStaticBitmap* m_bitmapByTime;
- wxToggleButton* m_toggleBtnTimeSize;
- wxStaticBitmap* m_bitmapByContent;
- wxToggleButton* m_toggleBtnContent;
- wxStaticLine* m_staticline42;
- wxTextCtrl* m_textCtrlCompVarDescription;
- wxStaticLine* m_staticline33;
- wxCheckBox* m_checkBoxTimeShift;
- wxSpinCtrl* m_spinCtrlTimeShift;
- wxHyperlinkCtrl* m_hyperlink241;
- wxStaticLine* m_staticline44;
- wxCheckBox* m_checkBoxSymlinksInclude;
- wxRadioButton* m_radioBtnSymlinksDirect;
- wxRadioButton* m_radioBtnSymlinksFollow;
- wxHyperlinkCtrl* m_hyperlink24;
- wxStaticLine* m_staticline441;
- wxStaticLine* m_staticline331;
- wxPanel* m_panelFilterSettingsHolder;
- wxBoxSizer* bSizerLocalFilterSettings;
- wxStaticText* m_staticText144;
- wxStaticLine* m_staticline61;
- wxPanel* m_panelFilterSettings;
- wxStaticBitmap* m_bitmapInclude;
- wxStaticText* m_staticText78;
- wxTextCtrl* m_textCtrlInclude;
- wxStaticLine* m_staticline22;
- wxStaticBitmap* m_bitmapExclude;
- wxStaticText* m_staticText77;
- wxHyperlinkCtrl* m_hyperlink171;
- wxTextCtrl* m_textCtrlExclude;
- wxStaticLine* m_staticline24;
- wxStaticBitmap* m_bitmapFilterDate;
- wxStaticText* m_staticText79;
- wxSpinCtrl* m_spinCtrlTimespan;
- wxChoice* m_choiceUnitTimespan;
- wxStaticLine* m_staticline23;
- wxStaticBitmap* m_bitmapFilterSize;
- wxStaticText* m_staticText80;
- wxStaticText* m_staticText101;
- wxSpinCtrl* m_spinCtrlMinSize;
- wxChoice* m_choiceUnitMinSize;
- wxStaticText* m_staticText102;
- wxSpinCtrl* m_spinCtrlMaxSize;
- wxChoice* m_choiceUnitMaxSize;
- wxStaticLine* m_staticline62;
- wxStaticText* m_staticText44;
- wxStaticLine* m_staticline46;
- wxButton* m_buttonClear;
- wxPanel* m_panelSyncSettingsHolder;
- wxBoxSizer* bSizerLocalSyncSettings;
- wxCheckBox* m_checkBoxUseLocalSyncOptions;
- wxStaticLine* m_staticline60;
- wxPanel* m_panelSyncSettings;
- wxStaticText* m_staticText86;
- wxToggleButton* m_toggleBtnTwoWay;
- wxToggleButton* m_toggleBtnMirror;
- wxToggleButton* m_toggleBtnUpdate;
- wxToggleButton* m_toggleBtnCustom;
- wxCheckBox* m_checkBoxDetectMove;
- wxStaticLine* m_staticline53;
- wxTextCtrl* m_textCtrlSyncVarDescription;
- wxStaticLine* m_staticline43;
- wxBoxSizer* bSizerSyncConfig;
- wxStaticText* m_staticText119;
- wxStaticText* m_staticText120;
- wxFlexGridSizer* fgSizerSyncDirections;
- 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;
- wxStaticBitmap* m_bitmapDatabase;
- wxStaticLine* m_staticline54;
- wxStaticText* m_staticText87;
- wxToggleButton* m_toggleBtnPermanent;
- wxToggleButton* m_toggleBtnRecycler;
- wxToggleButton* m_toggleBtnVersioning;
- wxBoxSizer* bSizerVersioning;
- wxPanel* m_panelVersioning;
- FolderHistoryBox* m_versioningFolder;
- wxButton* m_buttonSelectDirVersioning;
- wxBoxSizer* bSizer192;
- wxStaticText* m_staticText93;
- wxChoice* m_choiceVersioningStyle;
- wxStaticText* m_staticTextNamingCvtPart1;
- wxStaticText* m_staticTextNamingCvtPart2Bold;
- wxStaticText* m_staticTextNamingCvtPart3;
- wxHyperlinkCtrl* m_hyperlink17;
- wxBoxSizer* bSizerMiscConfig;
- wxStaticLine* m_staticline582;
- wxStaticText* m_staticText88;
- wxToggleButton* m_toggleBtnErrorIgnore;
- wxToggleButton* m_toggleBtnErrorPopup;
- wxStaticLine* m_staticline57;
- wxBoxSizer* bSizerOnCompletion;
- wxStaticText* m_staticText89;
- OnCompletionBox* m_comboBoxOnCompletion;
- wxBoxSizer* bSizerStdButtons;
- wxButton* m_buttonOkay;
- wxButton* m_buttonCancel;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnToggleLocalCompSettings( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnTimeSizeDouble( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnTimeSize( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnContentDouble( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnContent( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnChangeCompOption( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnHelpTimeShift( wxHyperlinkEvent& event ) { event.Skip(); }
- virtual void OnHelpComparisonSettings( wxHyperlinkEvent& event ) { event.Skip(); }
- virtual void OnChangeFilterOption( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnHelpShowExamples( wxHyperlinkEvent& event ) { event.Skip(); }
- virtual void OnFilterReset( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnToggleLocalSyncSettings( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncTwoWayDouble( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnSyncTwoWay( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncMirrorDouble( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnSyncMirror( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncUpdateDouble( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnSyncUpdate( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnSyncCustomDouble( wxMouseEvent& event ) { event.Skip(); }
- virtual void OnSyncCustom( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnToggleDetectMovedFiles( wxCommandEvent& event ) { event.Skip(); }
- virtual void 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 OnDeletionPermanent( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnDeletionRecycler( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnDeletionVersioning( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnChangeSyncOption( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnHelpVersioning( wxHyperlinkEvent& event ) { event.Skip(); }
- virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
-public:
-
- ConfigDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER );
- ~ConfigDlgGenerated();
-
+ private:
+
+ protected:
+ wxNotebook* m_notebook;
+ wxPanel* m_panelCompSettingsHolder;
+ wxBoxSizer* bSizerLocalCompSettings;
+ wxCheckBox* m_checkBoxUseLocalCmpOptions;
+ wxStaticLine* m_staticline59;
+ wxPanel* m_panelComparisonSettings;
+ wxStaticText* m_staticText91;
+ wxStaticBitmap* m_bitmapByTime;
+ wxToggleButton* m_toggleBtnTimeSize;
+ wxStaticBitmap* m_bitmapByContent;
+ wxToggleButton* m_toggleBtnContent;
+ wxStaticLine* m_staticline42;
+ wxTextCtrl* m_textCtrlCompVarDescription;
+ wxStaticLine* m_staticline33;
+ wxCheckBox* m_checkBoxTimeShift;
+ wxSpinCtrl* m_spinCtrlTimeShift;
+ wxHyperlinkCtrl* m_hyperlink241;
+ wxStaticLine* m_staticline44;
+ wxCheckBox* m_checkBoxSymlinksInclude;
+ wxRadioButton* m_radioBtnSymlinksFollow;
+ wxRadioButton* m_radioBtnSymlinksDirect;
+ wxHyperlinkCtrl* m_hyperlink24;
+ wxStaticLine* m_staticline441;
+ wxStaticLine* m_staticline331;
+ wxPanel* m_panelFilterSettingsHolder;
+ wxBoxSizer* bSizerLocalFilterSettings;
+ wxStaticText* m_staticText144;
+ wxStaticLine* m_staticline61;
+ wxPanel* m_panelFilterSettings;
+ wxStaticBitmap* m_bitmapInclude;
+ wxStaticText* m_staticText78;
+ wxTextCtrl* m_textCtrlInclude;
+ wxStaticLine* m_staticline22;
+ wxStaticBitmap* m_bitmapExclude;
+ wxStaticText* m_staticText77;
+ wxHyperlinkCtrl* m_hyperlink171;
+ wxTextCtrl* m_textCtrlExclude;
+ wxStaticLine* m_staticline24;
+ wxStaticBitmap* m_bitmapFilterDate;
+ wxStaticText* m_staticText79;
+ wxSpinCtrl* m_spinCtrlTimespan;
+ wxChoice* m_choiceUnitTimespan;
+ wxStaticLine* m_staticline23;
+ wxStaticBitmap* m_bitmapFilterSize;
+ wxStaticText* m_staticText80;
+ wxStaticText* m_staticText101;
+ wxSpinCtrl* m_spinCtrlMinSize;
+ wxChoice* m_choiceUnitMinSize;
+ wxStaticText* m_staticText102;
+ wxSpinCtrl* m_spinCtrlMaxSize;
+ wxChoice* m_choiceUnitMaxSize;
+ wxStaticLine* m_staticline62;
+ wxStaticText* m_staticText44;
+ wxStaticLine* m_staticline46;
+ wxButton* m_buttonClear;
+ wxPanel* m_panelSyncSettingsHolder;
+ wxBoxSizer* bSizerLocalSyncSettings;
+ wxCheckBox* m_checkBoxUseLocalSyncOptions;
+ wxStaticLine* m_staticline60;
+ wxPanel* m_panelSyncSettings;
+ wxStaticText* m_staticText86;
+ wxToggleButton* m_toggleBtnTwoWay;
+ wxToggleButton* m_toggleBtnMirror;
+ wxToggleButton* m_toggleBtnUpdate;
+ wxToggleButton* m_toggleBtnCustom;
+ wxCheckBox* m_checkBoxDetectMove;
+ wxStaticLine* m_staticline53;
+ wxTextCtrl* m_textCtrlSyncVarDescription;
+ wxStaticLine* m_staticline43;
+ wxBoxSizer* bSizerSyncConfig;
+ wxStaticText* m_staticText119;
+ wxStaticText* m_staticText120;
+ wxFlexGridSizer* fgSizerSyncDirections;
+ 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;
+ wxStaticBitmap* m_bitmapDatabase;
+ wxStaticLine* m_staticline54;
+ wxStaticText* m_staticText87;
+ wxToggleButton* m_toggleBtnPermanent;
+ wxToggleButton* m_toggleBtnRecycler;
+ wxToggleButton* m_toggleBtnVersioning;
+ wxBoxSizer* bSizerVersioning;
+ wxPanel* m_panelVersioning;
+ FolderHistoryBox* m_versioningFolder;
+ wxButton* m_buttonSelectDirVersioning;
+ wxBoxSizer* bSizer192;
+ wxStaticText* m_staticText93;
+ wxChoice* m_choiceVersioningStyle;
+ wxStaticText* m_staticTextNamingCvtPart1;
+ wxStaticText* m_staticTextNamingCvtPart2Bold;
+ wxStaticText* m_staticTextNamingCvtPart3;
+ wxHyperlinkCtrl* m_hyperlink17;
+ wxBoxSizer* bSizerMiscConfig;
+ wxStaticLine* m_staticline582;
+ wxStaticText* m_staticText88;
+ wxToggleButton* m_toggleBtnErrorIgnore;
+ wxToggleButton* m_toggleBtnErrorPopup;
+ wxStaticLine* m_staticline57;
+ wxBoxSizer* bSizerOnCompletion;
+ wxStaticText* m_staticText89;
+ OnCompletionBox* m_comboBoxOnCompletion;
+ wxBoxSizer* bSizerStdButtons;
+ wxButton* m_buttonOkay;
+ wxButton* m_buttonCancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnToggleLocalCompSettings( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnTimeSizeDouble( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnTimeSize( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnContentDouble( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnContent( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnChangeCompOption( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnHelpTimeShift( wxHyperlinkEvent& event ) { event.Skip(); }
+ virtual void OnHelpComparisonSettings( wxHyperlinkEvent& event ) { event.Skip(); }
+ virtual void OnChangeFilterOption( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnHelpShowExamples( wxHyperlinkEvent& event ) { event.Skip(); }
+ virtual void OnFilterReset( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnToggleLocalSyncSettings( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncTwoWayDouble( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnSyncTwoWay( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncMirrorDouble( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnSyncMirror( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncUpdateDouble( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnSyncUpdate( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnSyncCustomDouble( wxMouseEvent& event ) { event.Skip(); }
+ virtual void OnSyncCustom( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnToggleDetectMovedFiles( wxCommandEvent& event ) { event.Skip(); }
+ virtual void 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 OnDeletionPermanent( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnDeletionRecycler( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnDeletionVersioning( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnChangeSyncOption( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnHelpVersioning( wxHyperlinkEvent& event ) { event.Skip(); }
+ virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ ConfigDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("dummy"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER );
+ ~ConfigDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class SyncConfirmationDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class SyncConfirmationDlgGenerated : public wxDialog
+class SyncConfirmationDlgGenerated : public wxDialog
{
-private:
-
-protected:
- wxStaticBitmap* m_bitmapSync;
- wxStaticText* m_staticTextHeader;
- wxStaticLine* m_staticline371;
- wxPanel* m_panelStatistics;
- wxStaticLine* m_staticline38;
- wxStaticText* m_staticText84;
- wxStaticText* m_staticTextVariant;
- wxStaticLine* m_staticline14;
- wxStaticText* m_staticText83;
- wxStaticBitmap* m_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, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
-public:
-
- SyncConfirmationDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("FreeFileSync"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
- ~SyncConfirmationDlgGenerated();
-
+ private:
+
+ protected:
+ wxStaticBitmap* m_bitmapSync;
+ wxStaticText* m_staticTextHeader;
+ wxStaticLine* m_staticline371;
+ wxPanel* m_panelStatistics;
+ wxStaticLine* m_staticline38;
+ wxStaticText* m_staticText84;
+ wxStaticText* m_staticTextVariant;
+ wxStaticLine* m_staticline14;
+ wxStaticText* m_staticText83;
+ wxStaticBitmap* m_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, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ SyncConfirmationDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("FreeFileSync"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
+ ~SyncConfirmationDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class FolderPairPanelGenerated
///////////////////////////////////////////////////////////////////////////////
-class FolderPairPanelGenerated : public wxPanel
+class FolderPairPanelGenerated : public wxPanel
{
-private:
-
-protected:
- wxButton* m_buttonSelectDirLeft;
- wxButton* m_buttonSelectDirRight;
-
-public:
- wxPanel* m_panelLeft;
- wxBitmapButton* m_bpButtonFolderPairOptions;
- wxBitmapButton* m_bpButtonRemovePair;
- FolderHistoryBox* m_directoryLeft;
- wxPanel* m_panel20;
- wxBitmapButton* m_bpButtonAltCompCfg;
- wxBitmapButton* m_bpButtonLocalFilter;
- wxBitmapButton* m_bpButtonAltSyncCfg;
- wxPanel* m_panelRight;
- FolderHistoryBox* m_directoryRight;
-
- FolderPairPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0 );
- ~FolderPairPanelGenerated();
-
+ private:
+
+ protected:
+ wxButton* m_buttonSelectDirLeft;
+ wxButton* m_buttonSelectDirRight;
+
+ public:
+ wxPanel* m_panelLeft;
+ wxBitmapButton* m_bpButtonFolderPairOptions;
+ wxBitmapButton* m_bpButtonRemovePair;
+ FolderHistoryBox* m_directoryLeft;
+ wxPanel* m_panel20;
+ wxBitmapButton* m_bpButtonAltCompCfg;
+ wxBitmapButton* m_bpButtonLocalFilter;
+ wxBitmapButton* m_bpButtonAltSyncCfg;
+ wxPanel* m_panelRight;
+ FolderHistoryBox* m_directoryRight;
+
+ FolderPairPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0 );
+ ~FolderPairPanelGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class CompareProgressDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class CompareProgressDlgGenerated : public wxPanel
+class CompareProgressDlgGenerated : public wxPanel
{
-private:
-
-protected:
- wxPanel* m_panelStatistics;
- wxStaticText* m_staticTextItemsFoundLabel;
- wxStaticText* m_staticTextItemsFound;
- wxStaticText* m_staticTextItemsRemainingLabel;
- wxBoxSizer* bSizerItemsRemaining;
- wxStaticText* m_staticTextItemsRemaining;
- wxStaticText* m_staticTextDataRemaining;
- wxStaticText* m_staticTextTimeRemainingLabel;
- wxStaticText* m_staticTextTimeRemaining;
- wxStaticText* m_staticTextTimeElapsed;
- wxStaticText* m_staticTextStatus;
- wxGauge* m_gauge2;
- wxStaticText* m_staticTextSpeed;
-
-public:
-
- CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxRAISED_BORDER );
- ~CompareProgressDlgGenerated();
-
+ private:
+
+ protected:
+ wxPanel* m_panelStatistics;
+ wxStaticText* m_staticTextItemsFoundLabel;
+ wxStaticText* m_staticTextItemsFound;
+ wxStaticText* m_staticTextItemsRemainingLabel;
+ wxBoxSizer* bSizerItemsRemaining;
+ wxStaticText* m_staticTextItemsRemaining;
+ wxStaticText* m_staticTextDataRemaining;
+ wxStaticText* m_staticTextTimeRemainingLabel;
+ wxStaticText* m_staticTextTimeRemaining;
+ wxStaticText* m_staticTextTimeElapsed;
+ wxStaticText* m_staticTextStatus;
+ wxGauge* m_gauge2;
+ wxStaticText* m_staticTextSpeed;
+
+ public:
+
+ CompareProgressDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxRAISED_BORDER );
+ ~CompareProgressDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class SyncProgressPanelGenerated
///////////////////////////////////////////////////////////////////////////////
-class SyncProgressPanelGenerated : public wxPanel
+class SyncProgressPanelGenerated : public wxPanel
{
-private:
-
-protected:
- wxBoxSizer* bSizer42;
- wxBoxSizer* bSizer171;
- wxStaticText* m_staticText87;
-
-public:
- wxBoxSizer* bSizerRoot;
- wxStaticBitmap* m_bitmapStatus;
- wxStaticText* m_staticTextPhase;
- wxAnimationCtrl* m_animCtrlSyncing;
- wxBitmapButton* m_bpButtonMinimizeToTray;
- wxBoxSizer* bSizerStatusText;
- wxStaticText* m_staticTextStatus;
- wxPanel* m_panelProgress;
- wxPanel* m_panelItemsProcessed;
- wxStaticText* m_staticTextProcessedObj;
- wxStaticText* m_staticTextDataProcessed;
- wxPanel* m_panelItemsRemaining;
- wxStaticText* m_staticTextRemainingObj;
- wxStaticText* m_staticTextDataRemaining;
- wxPanel* m_panelTimeRemaining;
- wxStaticText* m_staticTextRemTime;
- wxStaticText* m_staticTextTimeElapsed;
- wxStaticBitmap* m_bitmapGraphKeyBytes;
- zen::Graph2D* m_panelGraphBytes;
- wxStaticBitmap* m_bitmapGraphKeyItems;
- zen::Graph2D* m_panelGraphItems;
- wxNotebook* m_notebookResult;
- wxStaticLine* m_staticlineFooter;
- wxBoxSizer* bSizerStdButtons;
- wxBoxSizer* bSizerOnCompletion;
- OnCompletionBox* m_comboBoxOnCompletion;
- wxButton* m_buttonClose;
- wxButton* m_buttonPause;
- wxButton* m_buttonStop;
-
- SyncProgressPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
- ~SyncProgressPanelGenerated();
-
+ private:
+
+ protected:
+ wxBoxSizer* bSizer42;
+ wxBoxSizer* bSizer171;
+ wxStaticText* m_staticText87;
+
+ public:
+ wxBoxSizer* bSizerRoot;
+ wxStaticBitmap* m_bitmapStatus;
+ wxStaticText* m_staticTextPhase;
+ wxAnimationCtrl* m_animCtrlSyncing;
+ wxBitmapButton* m_bpButtonMinimizeToTray;
+ wxBoxSizer* bSizerStatusText;
+ wxStaticText* m_staticTextStatus;
+ wxPanel* m_panelProgress;
+ wxPanel* m_panelItemsProcessed;
+ wxStaticText* m_staticTextProcessedObj;
+ wxStaticText* m_staticTextDataProcessed;
+ wxPanel* m_panelItemsRemaining;
+ wxStaticText* m_staticTextRemainingObj;
+ wxStaticText* m_staticTextDataRemaining;
+ wxPanel* m_panelTimeRemaining;
+ wxStaticText* m_staticTextRemTime;
+ wxStaticText* m_staticTextTimeElapsed;
+ wxStaticBitmap* m_bitmapGraphKeyBytes;
+ zen::Graph2D* m_panelGraphBytes;
+ wxStaticBitmap* m_bitmapGraphKeyItems;
+ zen::Graph2D* m_panelGraphItems;
+ wxNotebook* m_notebookResult;
+ wxStaticLine* m_staticlineFooter;
+ wxBoxSizer* bSizerStdButtons;
+ wxBoxSizer* bSizerOnCompletion;
+ OnCompletionBox* m_comboBoxOnCompletion;
+ wxButton* m_buttonClose;
+ wxButton* m_buttonPause;
+ wxButton* m_buttonStop;
+
+ SyncProgressPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
+ ~SyncProgressPanelGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class LogPanelGenerated
///////////////////////////////////////////////////////////////////////////////
-class LogPanelGenerated : public wxPanel
+class LogPanelGenerated : public wxPanel
{
-private:
-
-protected:
- ToggleButton* m_bpButtonErrors;
- ToggleButton* m_bpButtonWarnings;
- ToggleButton* m_bpButtonInfo;
- wxStaticLine* m_staticline13;
- zen::Grid* m_gridMessages;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnErrors( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnWarnings( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnInfo( wxCommandEvent& event ) { event.Skip(); }
-
-
-public:
-
- LogPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL );
- ~LogPanelGenerated();
-
+ private:
+
+ protected:
+ ToggleButton* m_bpButtonErrors;
+ ToggleButton* m_bpButtonWarnings;
+ ToggleButton* m_bpButtonInfo;
+ wxStaticLine* m_staticline13;
+ zen::Grid* m_gridMessages;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnErrors( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnWarnings( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnInfo( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ LogPanelGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL );
+ ~LogPanelGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class BatchDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class BatchDlgGenerated : public wxDialog
+class BatchDlgGenerated : public wxDialog
{
-private:
-
-protected:
- wxStaticBitmap* m_bitmapBatchJob;
- wxStaticText* m_staticTextDescr;
- wxStaticLine* m_staticline18;
- wxPanel* m_panel35;
- wxStaticText* m_staticText82;
- wxToggleButton* m_toggleBtnErrorIgnore;
- wxToggleButton* m_toggleBtnErrorPopup;
- wxToggleButton* m_toggleBtnErrorStop;
- wxStaticLine* m_staticline26;
- wxCheckBox* m_checkBoxRunMinimized;
- wxStaticText* m_staticText81;
- OnCompletionBox* m_comboBoxOnCompletion;
- wxStaticLine* m_staticline25;
- wxCheckBox* m_checkBoxGenerateLogfile;
- wxPanel* m_panelLogfile;
- wxButton* m_buttonSelectLogfileDir;
- wxCheckBox* m_checkBoxLogfilesLimit;
- wxSpinCtrl* m_spinCtrlLogfileLimit;
- wxHyperlinkCtrl* m_hyperlink17;
- wxStaticLine* m_staticline13;
- wxBoxSizer* bSizerStdButtons;
- wxButton* m_buttonSaveAs;
- wxButton* m_buttonCancel;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnErrorStop( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnToggleGenerateLogfile( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnToggleLogfilesLimit( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnHelpScheduleBatch( wxHyperlinkEvent& event ) { event.Skip(); }
- virtual void OnSaveBatchJob( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
-public:
- FolderHistoryBox* m_logfileDir;
-
- BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Save as Batch Job"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
- ~BatchDlgGenerated();
-
+ private:
+
+ protected:
+ wxStaticBitmap* m_bitmapBatchJob;
+ wxStaticText* m_staticTextDescr;
+ wxStaticLine* m_staticline18;
+ wxPanel* m_panel35;
+ wxStaticText* m_staticText82;
+ wxToggleButton* m_toggleBtnErrorIgnore;
+ wxToggleButton* m_toggleBtnErrorPopup;
+ wxToggleButton* m_toggleBtnErrorStop;
+ wxStaticLine* m_staticline26;
+ wxCheckBox* m_checkBoxRunMinimized;
+ wxStaticText* m_staticText81;
+ OnCompletionBox* m_comboBoxOnCompletion;
+ wxStaticLine* m_staticline25;
+ wxCheckBox* m_checkBoxGenerateLogfile;
+ wxPanel* m_panelLogfile;
+ wxButton* m_buttonSelectLogfileDir;
+ wxCheckBox* m_checkBoxLogfilesLimit;
+ wxSpinCtrl* m_spinCtrlLogfileLimit;
+ wxHyperlinkCtrl* m_hyperlink17;
+ wxStaticLine* m_staticline13;
+ wxBoxSizer* bSizerStdButtons;
+ wxButton* m_buttonSaveAs;
+ wxButton* m_buttonCancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnErrorStop( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnToggleGenerateLogfile( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnToggleLogfilesLimit( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnHelpScheduleBatch( wxHyperlinkEvent& event ) { event.Skip(); }
+ virtual void OnSaveBatchJob( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+ FolderHistoryBox* m_logfileDir;
+
+ BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Save as Batch Job"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~BatchDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class DeleteDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class DeleteDlgGenerated : public wxDialog
+class DeleteDlgGenerated : public wxDialog
{
-private:
-
-protected:
- wxStaticBitmap* m_bitmapDeleteType;
- wxStaticText* m_staticTextHeader;
- wxStaticLine* m_staticline91;
- wxPanel* m_panel31;
- wxStaticLine* m_staticline42;
- wxTextCtrl* m_textCtrlFileList;
- wxStaticLine* m_staticline9;
- wxBoxSizer* bSizerStdButtons;
- wxCheckBox* m_checkBoxUseRecycler;
- wxButton* m_buttonOK;
- wxButton* m_buttonCancel;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnUseRecycler( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnOK( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
-public:
-
- DeleteDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Delete Items"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER );
- ~DeleteDlgGenerated();
-
+ private:
+
+ protected:
+ wxStaticBitmap* m_bitmapDeleteType;
+ wxStaticText* m_staticTextHeader;
+ wxStaticLine* m_staticline91;
+ wxPanel* m_panel31;
+ wxStaticLine* m_staticline42;
+ wxTextCtrl* m_textCtrlFileList;
+ wxStaticLine* m_staticline9;
+ wxBoxSizer* bSizerStdButtons;
+ wxCheckBox* m_checkBoxUseRecycler;
+ wxButton* m_buttonOK;
+ wxButton* m_buttonCancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnUseRecycler( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnOK( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ DeleteDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Delete Items"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER );
+ ~DeleteDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class OptionsDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class OptionsDlgGenerated : 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_staticText91;
- wxBoxSizer* bSizerLockedFiles;
- wxCheckBox* m_checkBoxCopyLocked;
- wxStaticText* m_staticText92;
- wxCheckBox* m_checkBoxCopyPermissions;
- wxStaticText* m_staticText93;
- wxStaticLine* m_staticline39;
- wxStaticText* m_staticText95;
- wxStaticText* m_staticText96;
- wxSpinCtrl* m_spinCtrlAutoRetryCount;
- wxStaticText* m_staticTextAutoRetryDelay;
- wxSpinCtrl* m_spinCtrlAutoRetryDelay;
- wxStaticLine* m_staticline191;
- wxStaticText* m_staticText85;
- wxGrid* m_gridCustomCommand;
- wxBitmapButton* m_bpButtonAddRow;
- wxBitmapButton* m_bpButtonRemoveRow;
- wxHyperlinkCtrl* m_hyperlink17;
- wxStaticLine* m_staticline192;
- zen::BitmapTextButton* m_buttonResetDialogs;
- wxStaticLine* m_staticline40;
- wxStaticLine* m_staticline36;
- wxBoxSizer* bSizerStdButtons;
- wxButton* m_buttonDefault;
- wxButton* m_buttonOkay;
- wxButton* m_buttonCancel;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnToggleAutoRetryCount( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnAddRow( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnRemoveRow( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnHelpShowExamples( wxHyperlinkEvent& event ) { event.Skip(); }
- virtual void OnResetDialogs( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
-public:
-
- 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_staticText91;
+ wxBoxSizer* bSizerLockedFiles;
+ wxCheckBox* m_checkBoxCopyLocked;
+ wxStaticText* m_staticText92;
+ wxCheckBox* m_checkBoxCopyPermissions;
+ wxStaticText* m_staticText93;
+ wxStaticLine* m_staticline39;
+ wxStaticText* m_staticText95;
+ wxStaticText* m_staticText96;
+ wxSpinCtrl* m_spinCtrlAutoRetryCount;
+ wxStaticText* m_staticTextAutoRetryDelay;
+ wxSpinCtrl* m_spinCtrlAutoRetryDelay;
+ wxStaticLine* m_staticline191;
+ wxStaticText* m_staticText85;
+ wxGrid* m_gridCustomCommand;
+ wxBitmapButton* m_bpButtonAddRow;
+ wxBitmapButton* m_bpButtonRemoveRow;
+ wxHyperlinkCtrl* m_hyperlink17;
+ wxStaticLine* m_staticline192;
+ zen::BitmapTextButton* m_buttonResetDialogs;
+ wxStaticLine* m_staticline40;
+ wxStaticLine* m_staticline36;
+ wxBoxSizer* bSizerStdButtons;
+ wxButton* m_buttonDefault;
+ wxButton* m_buttonOkay;
+ wxButton* m_buttonCancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnToggleAutoRetryCount( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnAddRow( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnRemoveRow( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnHelpShowExamples( wxHyperlinkEvent& event ) { event.Skip(); }
+ virtual void OnResetDialogs( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ 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();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class TooltipDialogGenerated
///////////////////////////////////////////////////////////////////////////////
-class TooltipDialogGenerated : public wxDialog
+class TooltipDialogGenerated : public wxDialog
{
-private:
-
-protected:
-
-public:
- wxStaticBitmap* m_bitmapLeft;
- wxStaticText* m_staticTextMain;
-
- TooltipDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
- ~TooltipDialogGenerated();
-
+ private:
+
+ protected:
+
+ public:
+ wxStaticBitmap* m_bitmapLeft;
+ wxStaticText* m_staticTextMain;
+
+ TooltipDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
+ ~TooltipDialogGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class SelectTimespanDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class SelectTimespanDlgGenerated : public wxDialog
+class SelectTimespanDlgGenerated : public wxDialog
{
-private:
-
-protected:
- wxPanel* m_panel35;
- wxCalendarCtrl* m_calendarFrom;
- wxCalendarCtrl* m_calendarTo;
- wxStaticLine* m_staticline21;
- wxBoxSizer* bSizerStdButtons;
- wxButton* m_buttonOkay;
- wxButton* m_buttonCancel;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnChangeSelectionFrom( wxCalendarEvent& event ) { event.Skip(); }
- virtual void OnChangeSelectionTo( wxCalendarEvent& event ) { event.Skip(); }
- virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
-
-
-public:
-
- SelectTimespanDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select Time Span"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
- ~SelectTimespanDlgGenerated();
-
+ private:
+
+ protected:
+ wxPanel* m_panel35;
+ wxCalendarCtrl* m_calendarFrom;
+ wxCalendarCtrl* m_calendarTo;
+ wxStaticLine* m_staticline21;
+ wxBoxSizer* bSizerStdButtons;
+ wxButton* m_buttonOkay;
+ wxButton* m_buttonCancel;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnChangeSelectionFrom( wxCalendarEvent& event ) { event.Skip(); }
+ virtual void OnChangeSelectionTo( wxCalendarEvent& event ) { event.Skip(); }
+ virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ SelectTimespanDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select Time Span"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
+ ~SelectTimespanDlgGenerated();
+
};
///////////////////////////////////////////////////////////////////////////////
/// Class AboutDlgGenerated
///////////////////////////////////////////////////////////////////////////////
-class AboutDlgGenerated : public wxDialog
+class AboutDlgGenerated : public wxDialog
{
-private:
-
-protected:
- wxPanel* m_panel41;
- wxStaticBitmap* m_bitmapLogo;
- wxStaticLine* m_staticline341;
- wxStaticText* m_staticText96;
- wxHyperlinkCtrl* m_hyperlink11;
- wxHyperlinkCtrl* m_hyperlink9;
- wxHyperlinkCtrl* m_hyperlink10;
- wxHyperlinkCtrl* m_hyperlink7;
- wxHyperlinkCtrl* m_hyperlink14;
- wxHyperlinkCtrl* m_hyperlink15;
- wxHyperlinkCtrl* m_hyperlink13;
- wxHyperlinkCtrl* m_hyperlink16;
- wxHyperlinkCtrl* m_hyperlink12;
- wxHyperlinkCtrl* m_hyperlink18;
- wxPanel* m_panelDonate;
- wxPanel* m_panel39;
- wxAnimationCtrl* m_animCtrlWink;
- wxStaticText* m_staticText83;
- wxButton* m_buttonDonate;
- wxStaticText* m_staticText94;
- wxStaticBitmap* m_bitmap9;
- wxHyperlinkCtrl* m_hyperlink1;
- wxStaticBitmap* m_bitmap10;
- wxHyperlinkCtrl* m_hyperlink2;
- wxStaticLine* m_staticline34;
- wxStaticText* m_staticText93;
- wxStaticBitmap* m_bitmap13;
- wxHyperlinkCtrl* m_hyperlink5;
- wxStaticLine* m_staticline37;
- wxStaticText* m_staticText54;
- wxScrolledWindow* m_scrolledWindowTranslators;
- wxFlexGridSizer* fgSizerTranslators;
- wxStaticLine* m_staticline36;
- wxBoxSizer* bSizerStdButtons;
- wxButton* m_buttonClose;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnDonate( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnOK( wxCommandEvent& event ) { event.Skip(); }
-
-
-public:
-
- AboutDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
- ~AboutDlgGenerated();
-
+ private:
+
+ protected:
+ wxPanel* m_panel41;
+ wxStaticBitmap* m_bitmapLogo;
+ wxStaticLine* m_staticline341;
+ wxStaticText* m_staticText96;
+ wxHyperlinkCtrl* m_hyperlink11;
+ wxHyperlinkCtrl* m_hyperlink9;
+ wxHyperlinkCtrl* m_hyperlink10;
+ wxHyperlinkCtrl* m_hyperlink7;
+ wxHyperlinkCtrl* m_hyperlink14;
+ wxHyperlinkCtrl* m_hyperlink15;
+ wxHyperlinkCtrl* m_hyperlink13;
+ wxHyperlinkCtrl* m_hyperlink16;
+ wxHyperlinkCtrl* m_hyperlink12;
+ wxHyperlinkCtrl* m_hyperlink18;
+ wxPanel* m_panelDonate;
+ wxPanel* m_panel39;
+ wxAnimationCtrl* m_animCtrlWink;
+ wxStaticText* m_staticText83;
+ wxButton* m_buttonDonate;
+ wxStaticText* m_staticText94;
+ wxStaticBitmap* m_bitmap9;
+ wxHyperlinkCtrl* m_hyperlink1;
+ wxStaticBitmap* m_bitmap10;
+ wxHyperlinkCtrl* m_hyperlink2;
+ wxStaticLine* m_staticline34;
+ wxStaticText* m_staticText93;
+ wxStaticBitmap* m_bitmap13;
+ wxHyperlinkCtrl* m_hyperlink5;
+ wxStaticLine* m_staticline37;
+ wxStaticText* m_staticText54;
+ wxScrolledWindow* m_scrolledWindowTranslators;
+ wxFlexGridSizer* fgSizerTranslators;
+ wxStaticLine* m_staticline36;
+ wxBoxSizer* bSizerStdButtons;
+ wxButton* m_buttonClose;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnDonate( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnOK( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ AboutDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE );
+ ~AboutDlgGenerated();
+
};
#endif //__GUI_GENERATED_H__
diff --git a/FreeFileSync/Source/ui/main_dlg.cpp b/FreeFileSync/Source/ui/main_dlg.cpp
index ed1b1f99..b075b738 100644
--- a/FreeFileSync/Source/ui/main_dlg.cpp
+++ b/FreeFileSync/Source/ui/main_dlg.cpp
@@ -508,14 +508,14 @@ MainDialog::MainDialog(const Zstring& globalConfigFile,
//set icons for this dialog
SetIcon(getFfsIcon()); //set application icon
- m_bpButtonCmpConfig ->SetBitmapLabel(getResourceImage(L"cfg_compare"));
- m_bpButtonSyncConfig->SetBitmapLabel(getResourceImage(L"cfg_sync"));
- m_bpButtonNew ->SetBitmapLabel(getResourceImage(L"new"));
- m_bpButtonOpen ->SetBitmapLabel(getResourceImage(L"load"));
- m_bpButtonSaveAs ->SetBitmapLabel(getResourceImage(L"sync"));
+ m_bpButtonCmpConfig ->SetBitmapLabel(getResourceImage(L"cfg_compare"));
+ m_bpButtonSyncConfig ->SetBitmapLabel(getResourceImage(L"cfg_sync"));
+ m_bpButtonNew ->SetBitmapLabel(getResourceImage(L"new"));
+ m_bpButtonOpen ->SetBitmapLabel(getResourceImage(L"load"));
+ m_bpButtonSaveAs ->SetBitmapLabel(getResourceImage(L"sync"));
m_bpButtonSaveAsBatch->SetBitmapLabel(getResourceImage(L"batch"));
- m_bpButtonAddPair ->SetBitmapLabel(getResourceImage(L"item_add"));
- m_bpButtonHideSearch->SetBitmapLabel(getResourceImage(L"close_panel"));
+ m_bpButtonAddPair ->SetBitmapLabel(getResourceImage(L"item_add"));
+ m_bpButtonHideSearch ->SetBitmapLabel(getResourceImage(L"close_panel"));
warn_static("remove after test")
#ifdef ZEN_MAC
@@ -693,8 +693,18 @@ MainDialog::MainDialog(const Zstring& globalConfigFile,
languageMenuItemMap.emplace(newItem->GetId(), entry.languageID);
//connect event
- this->Connect(newItem->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MainDialog::OnMenuLanguageSwitch));
- m_menuLanguages->Append(newItem);
+ this->Connect(newItem->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MainDialog::OnMenuLanguageSwitch), nullptr, this);
+ m_menuLanguages->Append(newItem); //pass ownership
+ }
+
+ //show FreeFileSync update reminder
+ if (!globalSettings.gui.lastOnlineVersion.empty() && isNewerFreeFileSyncVersion(globalSettings.gui.lastOnlineVersion))
+ {
+ auto menu = new wxMenu();
+ wxMenuItem* newItem = new wxMenuItem(menu, wxID_ANY, _("&Download"));
+ this->Connect(newItem->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MainDialog::OnMenuDownloadNewVersion));
+ menu->Append(newItem); //pass ownership
+ m_menubar1->Append(menu, L"\u21D2" L" " + _("A new version of FreeFileSync is available:") + L" " + globalSettings.gui.lastOnlineVersion + L" " L"\u21D0");
}
//notify about (logical) application main window => program won't quit, but stay on this dialog
@@ -958,7 +968,7 @@ void MainDialog::setGlobalCfgOnInit(const xmlAccess::XmlGlobalSettings& globalSe
auiMgr.GetPane(m_panelSearch).Hide(); //no need to show it on startup
- m_menuItemCheckVersionAuto->Check(globalCfg.gui.lastUpdateCheck != -1);
+ m_menuItemCheckVersionAuto->Check(updateCheckActive(globalCfg.gui.lastUpdateCheck));
auiMgr.Update();
}
@@ -3378,8 +3388,7 @@ inline
wxBitmap buttonPressed(const std::string& name)
{
wxBitmap background = getResourceImage(L"buttonPressed");
- return mirrorIfRtl(
- layOver(getResourceImage(utfCvrtTo<wxString>(name)), background));
+ return mirrorIfRtl(layOver(getResourceImage(utfCvrtTo<wxString>(name)), background));
}
@@ -4594,15 +4603,25 @@ void MainDialog::OnMenuExportFileList(wxCommandEvent& event)
void MainDialog::OnMenuCheckVersion(wxCommandEvent& event)
{
- zen::checkForUpdateNow(this);
+ zen::checkForUpdateNow(this, globalCfg.gui.lastOnlineVersion);
+}
+
+
+void MainDialog::OnMenuDownloadNewVersion(wxCommandEvent& event)
+{
+ wxLaunchDefaultBrowser(L"http://www.freefilesync.org/get_latest.php");
}
void MainDialog::OnMenuCheckVersionAutomatically(wxCommandEvent& event)
{
- globalCfg.gui.lastUpdateCheck = globalCfg.gui.lastUpdateCheck == -1 ? 0 : -1;
- m_menuItemCheckVersionAuto->Check(globalCfg.gui.lastUpdateCheck != -1);
- zen::checkForUpdatePeriodically(this, globalCfg.gui.lastUpdateCheck, [&] { flashStatusInformation(_("Searching for program updates...")); });
+ if (updateCheckActive(globalCfg.gui.lastUpdateCheck))
+ disableUpdateCheck(globalCfg.gui.lastUpdateCheck);
+ else
+ globalCfg.gui.lastUpdateCheck = 0; //reset to GlobalSetting.xml default value!
+
+ m_menuItemCheckVersionAuto->Check(updateCheckActive(globalCfg.gui.lastUpdateCheck));
+ zen::checkForUpdatePeriodically(this, globalCfg.gui.lastUpdateCheck, globalCfg.gui.lastOnlineVersion, [&] { flashStatusInformation(_("Searching for program updates...")); });
}
@@ -4612,7 +4631,7 @@ void MainDialog::OnRegularUpdateCheck(wxIdleEvent& event)
Disconnect(wxEVT_IDLE, wxIdleEventHandler(MainDialog::OnRegularUpdateCheck), nullptr, this);
if (manualProgramUpdateRequired())
- zen::checkForUpdatePeriodically(this, globalCfg.gui.lastUpdateCheck, [&] { flashStatusInformation(_("Searching for program updates...")); });
+ zen::checkForUpdatePeriodically(this, globalCfg.gui.lastUpdateCheck, globalCfg.gui.lastOnlineVersion, [&] { flashStatusInformation(_("Searching for program updates...")); });
}
diff --git a/FreeFileSync/Source/ui/main_dlg.h b/FreeFileSync/Source/ui/main_dlg.h
index 7a2277c4..55f6f6c0 100644
--- a/FreeFileSync/Source/ui/main_dlg.h
+++ b/FreeFileSync/Source/ui/main_dlg.h
@@ -249,6 +249,7 @@ private:
void OnMenuFindItem (wxCommandEvent& event) override;
void OnMenuCheckVersion (wxCommandEvent& event) override;
void OnMenuCheckVersionAutomatically(wxCommandEvent& event) override;
+ void OnMenuDownloadNewVersion (wxCommandEvent& event);
void OnMenuAbout (wxCommandEvent& event) override;
void OnShowHelp (wxCommandEvent& event) override;
void OnMenuQuit (wxCommandEvent& event) override { Close(); }
diff --git a/FreeFileSync/Source/ui/small_dlgs.cpp b/FreeFileSync/Source/ui/small_dlgs.cpp
index 0d98aac3..9693e1e6 100644
--- a/FreeFileSync/Source/ui/small_dlgs.cpp
+++ b/FreeFileSync/Source/ui/small_dlgs.cpp
@@ -66,11 +66,11 @@ AboutDlg::AboutDlg(wxWindow* parent) : AboutDlgGenerated(parent)
for (const ExistingTranslations::Entry& trans : ExistingTranslations::get())
{
//flag
- wxStaticBitmap* staticBitmapFlag = new wxStaticBitmap(m_scrolledWindowTranslators, wxID_ANY, getResourceImage(trans.languageFlag), wxDefaultPosition, wxSize(-1, 11), 0 );
+ wxStaticBitmap* staticBitmapFlag = new wxStaticBitmap(m_scrolledWindowTranslators, wxID_ANY, getResourceImage(trans.languageFlag), wxDefaultPosition, wxSize(-1, 11), 0);
fgSizerTranslators->Add(staticBitmapFlag, 0, wxALIGN_CENTER);
//translator name
- wxStaticText* staticTextTranslator = new wxStaticText(m_scrolledWindowTranslators, wxID_ANY, trans.translatorName, wxDefaultPosition, wxDefaultSize, 0 );
+ wxStaticText* staticTextTranslator = new wxStaticText(m_scrolledWindowTranslators, wxID_ANY, trans.translatorName, wxDefaultPosition, wxDefaultSize, 0);
staticTextTranslator->Wrap(-1);
fgSizerTranslators->Add(staticTextTranslator, 0, wxALIGN_CENTER_VERTICAL);
diff --git a/FreeFileSync/Source/version/version.h b/FreeFileSync/Source/version/version.h
index 7a3a844c..628a367d 100644
--- a/FreeFileSync/Source/version/version.h
+++ b/FreeFileSync/Source/version/version.h
@@ -3,7 +3,7 @@
namespace zen
{
-const wchar_t currentVersion[] = L"6.14"; //internal linkage!
+const wchar_t currentVersion[] = L"6.15"; //internal linkage!
}
#endif
diff --git a/wx+/grid.cpp b/wx+/grid.cpp
index 377510ae..183fc3c3 100644
--- a/wx+/grid.cpp
+++ b/wx+/grid.cpp
@@ -1321,17 +1321,19 @@ void Grid::updateWindowSizes(bool updateScrollbar)
auto getMainWinSize = [&](const wxSize& clientSize) { return wxSize(std::max(0, clientSize.GetWidth() - rowLabelWidth), std::max(0, clientSize.GetHeight() - colLabelHeight)); };
- auto setScrollbars2 = [&](int logWidth, int logHeight) //replace SetScrollbars, which loses precision to pixelsPerUnitX for some brain-dead reason
+ auto setScrollbars2 = [&](int logWidth, int logHeight) //replace SetScrollbars, which loses precision of pixelsPerUnitX for some brain-dead reason
{
- int ppsuX = 0; //pixel per scroll unit
+ mainWin_->SetVirtualSize(logWidth, logHeight); //set before calling SetScrollRate():
+ //else SetScrollRate() would fail to preserve scroll position when "new virtual pixel-pos > old virtual height"
+
+ int ppsuX = 0; //pixel per scroll unit
int ppsuY = 0;
GetScrollPixelsPerUnit(&ppsuX, &ppsuY);
const int ppsuNew = rowLabelWin_->getRowHeight();
if (ppsuX != ppsuNew || ppsuY != ppsuNew) //support polling!
- SetScrollRate(ppsuNew, ppsuNew); //internally calls AdjustScrollbars()!
+ SetScrollRate(ppsuNew, ppsuNew); //internally calls AdjustScrollbars() and GetVirtualSize()!
- mainWin_->SetVirtualSize(logWidth, logHeight);
AdjustScrollbars(); //lousy wxWidgets design decision: internally calls mainWin_->GetClientSize() without considering impact of scrollbars!
//Attention: setting scrollbars triggers *synchronous* resize event if scrollbars are shown or hidden! => updateWindowSizes() recursion! (Windows)
};
diff --git a/wx+/image_resources.cpp b/wx+/image_resources.cpp
index a76a2822..089acf4e 100644
--- a/wx+/image_resources.cpp
+++ b/wx+/image_resources.cpp
@@ -12,6 +12,7 @@
#include <wx/image.h>
#include <wx/mstream.h>
#include <zen/utf.h>
+#include "image_tools.h"
using namespace zen;
@@ -48,7 +49,7 @@ public:
void init(const Zstring& filepath);
- const wxBitmap& getImage(const wxString& name) const;
+ const wxBitmap& getImage (const wxString& name) const;
const wxAnimation& getAnimation(const wxString& name) const;
private:
@@ -84,7 +85,15 @@ void GlobalResources::init(const Zstring& filepath)
//generic image loading
if (endsWith(name, L".png"))
- bitmaps.emplace(name, wxImage(streamIn, wxBITMAP_TYPE_PNG));
+ {
+ wxImage img(streamIn, wxBITMAP_TYPE_PNG);
+
+ //end this alpha/no-alpha/mask/wxDC::DrawBitmap/RTL/high-contrast-scheme interoperability nightmare here and now!!!!
+ //=> there's only one type of png image: with alpha channel, no mask!!!
+ convertToVanillaImage(img);
+
+ bitmaps.emplace(name, img);
+ }
else if (endsWith(name, L".gif"))
loadAnimFromZip(streamIn, anims[name]);
}
diff --git a/wx+/image_tools.cpp b/wx+/image_tools.cpp
index 1dbd5d46..859c9e5a 100644
--- a/wx+/image_tools.cpp
+++ b/wx+/image_tools.cpp
@@ -76,7 +76,6 @@ wxImage zen::stackImages(const wxImage& img1, const wxImage& img2, ImageStackLay
wxImage output(width, height);
output.SetAlpha();
::memset(output.GetAlpha(), wxIMAGE_ALPHA_TRANSPARENT, width * height);
- ::memset(output.GetData (), 0, 3 * width * height); //redundant due to transparent alpha
auto calcPos = [&](int imageExtent, int totalExtent)
{
@@ -185,3 +184,46 @@ wxImage zen::createImageFromText(const wxString& text, const wxFont& font, const
}
return output;
}
+
+
+void zen::convertToVanillaImage(wxImage& img)
+{
+ if (!img.HasAlpha())
+ {
+ unsigned char mask_r = 0;
+ unsigned char mask_g = 0;
+ unsigned char mask_b = 0;
+ const bool haveMask = img.HasMask() && img.GetOrFindMaskColour(&mask_r, &mask_g, &mask_b);
+ //check for mask before calling wxImage::GetOrFindMaskColour() to skip needlessly searching for new mask color
+
+ img.SetAlpha();
+ ::memset(img.GetAlpha(), wxIMAGE_ALPHA_OPAQUE, img.GetWidth() * img.GetHeight());
+
+ //wxWidgets, as always, tries to be more clever than it really is and fucks up wxStaticBitmap if wxBitmap is fully opaque:
+ img.GetAlpha()[img.GetWidth() * img.GetHeight() - 1] = 254;
+
+ if (haveMask)
+ {
+ img.SetMask(false);
+ unsigned char* alphaPtr = img.GetAlpha();
+ const unsigned char* dataPtr = img.GetData();
+
+ const int pixelCount = img.GetWidth() * img.GetHeight();
+ for (int i = 0; i < pixelCount; ++ i)
+ {
+ const unsigned char r = *dataPtr++;
+ const unsigned char g = *dataPtr++;
+ const unsigned char b = *dataPtr++;
+
+ if (r == mask_r &&
+ g == mask_g &&
+ b == mask_b)
+ alphaPtr[i] = wxIMAGE_ALPHA_TRANSPARENT;
+ }
+ }
+ }
+ else
+ {
+ assert(!img.HasMask());
+ }
+} \ No newline at end of file
diff --git a/wx+/image_tools.h b/wx+/image_tools.h
index cb8da60b..b53d42ea 100644
--- a/wx+/image_tools.h
+++ b/wx+/image_tools.h
@@ -33,10 +33,10 @@ wxImage stackImages(const wxImage& img1, const wxImage& img2, ImageStackLayout d
wxImage createImageFromText(const wxString& text, const wxFont& font, const wxColor& col);
+wxBitmap layOver(const wxBitmap& foreground, const wxBitmap& background); //merge
wxImage greyScale(const wxImage& img); //greyscale + brightness adaption
wxBitmap greyScale(const wxBitmap& bmp); //
-wxBitmap layOver(const wxBitmap& foreground, const wxBitmap& background); //merge
//void moveImage(wxImage& img, int right, int up);
void adjustBrightness(wxImage& img, int targetLevel);
@@ -45,6 +45,8 @@ void brighten(wxImage& img, int level); //level: delta per channel in points
bool isEqual(const wxBitmap& lhs, const wxBitmap& rhs); //pixel-wise equality (respecting alpha channel)
+void convertToVanillaImage(wxImage& img); //add alpha channel if missing + remove mask if existing
+
//wxColor gradient(const wxColor& from, const wxColor& to, double fraction); //maps fraction within [0, 1] to an intermediate color
//wxColour hsvColor(double h, double s, double v); //h within [0, 360), s, v within [0, 1]
@@ -147,15 +149,15 @@ void adjustBrightness(wxImage& img, int targetLevel)
inline
wxBitmap layOver(const wxBitmap& foreground, const wxBitmap& background)
{
- wxBitmap output = background;
+ assert(foreground.HasAlpha() == background.HasAlpha()); //we don't support mixed-mode brittleness!
+
+ wxBitmap output(background.ConvertToImage()); //attention: wxBitmap/wxImage use ref-counting without copy on write!
{
- wxMemoryDC dc;
- dc.SelectObject(output);
+ wxMemoryDC dc(output);
const int offsetX = (background.GetWidth () - foreground.GetWidth ()) / 2;
const int offsetY = (background.GetHeight() - foreground.GetHeight()) / 2;
- dc.DrawBitmap(foreground, offsetX, offsetY, true);
- dc.SelectObject(wxNullBitmap);
+ dc.DrawBitmap(foreground, offsetX, offsetY);
}
return output;
}
@@ -179,13 +181,14 @@ bool isEqual(const wxBitmap& lhs, const wxBitmap& rhs)
if (imLhs.HasAlpha() != imRhs.HasAlpha())
return false;
- if (imLhs.HasAlpha())
- {
+ if (!std::equal(imLhs.GetData(), imLhs.GetData() + pixelCount * 3, imRhs.GetData()))
+ return false;
+
+ if (imLhs.HasAlpha())
if (!std::equal(imLhs.GetAlpha(), imLhs.GetAlpha() + pixelCount, imRhs.GetAlpha()))
return false;
- }
- return std::equal(imLhs.GetData(), imLhs.GetData() + pixelCount * 3, imRhs.GetData());
+ return true;
}
/*
diff --git a/zen/file_access.cpp b/zen/file_access.cpp
index ca07e76a..ffbdc813 100644
--- a/zen/file_access.cpp
+++ b/zen/file_access.cpp
@@ -25,7 +25,7 @@
#elif defined ZEN_LINUX
#include <sys/vfs.h> //statfs
- #include <fcntl.h> //AT_SYMLINK_NOFOLLOW, UTIME_OMIT
+ #include <sys/time.h> //lutimes
#ifdef HAVE_SELINUX
#include <selinux/selinux.h>
#endif
@@ -36,8 +36,8 @@
#endif
#if defined ZEN_LINUX || defined ZEN_MAC
+ #include <fcntl.h> //open, close, AT_SYMLINK_NOFOLLOW, UTIME_OMIT
#include <sys/stat.h>
- #include <sys/time.h> //lutimes
#endif
using namespace zen;
@@ -250,7 +250,7 @@ std::uint64_t zen::getFilesize(const Zstring& filepath) //throw FileError
throwFileError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(filepath)), L"CreateFile", getLastError());
ZEN_ON_SCOPE_EXIT(::CloseHandle(hFile));
- //why not use ::GetFileSizeEx() instead???
+ //why not use ::GetFileSizeEx() instead???
BY_HANDLE_FILE_INFORMATION fileInfoHnd = {};
if (!::GetFileInformationByHandle(hFile, &fileInfoHnd))
throwFileError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(filepath)), L"GetFileInformationByHandle", getLastError());
@@ -462,7 +462,8 @@ Zstring findUnused8Dot3Name(const Zstring& filepath) //find a unique 8.3 short n
if (!somethingExists(output)) //ensure uniqueness
return output;
}
- throw std::runtime_error(std::string("100000000 files, one for each number, exist in this directory? You're kidding...") + utfCvrtTo<std::string>(pathPrefix));
+ throw std::runtime_error(std::string("100000000 files, one for each number, exist in this directory? You're kidding...") + utfCvrtTo<std::string>(pathPrefix) +
+ "\n" + std::string(__FILE__) + ":" + numberTo<std::string>(__LINE__));
}
@@ -581,18 +582,18 @@ void removeDirectoryImpl(const Zstring& directory, //throw FileError
{
std::vector<Zstring> fileList;
std::vector<Zstring> dirList;
- //get all files and directories from current directory (WITHOUT subdirectories!)
-traverseFolder(directory,
- [&](const FileInfo& fi){ fileList.push_back(fi.fullPath); },
- [&](const DirInfo& di){ dirList .push_back(di.fullPath); },
- [&](const SymlinkInfo& si)
-{
- if (dirExists(si.fullPath)) //dir symlink
- dirList.push_back(si.fullPath);
- else //file symlink, broken symlink
- fileList.push_back(si.fullPath);
-},
-[&](const std::wstring& errorMsg){ throw FileError(errorMsg); });
+ //get all files and directories from current directory (WITHOUT subdirectories!)
+ traverseFolder(directory,
+ [&](const FileInfo& fi) { fileList.push_back(fi.fullPath); },
+ [&](const DirInfo& di) { dirList .push_back(di.fullPath); },
+ [&](const SymlinkInfo& si)
+ {
+ if (dirExists(si.fullPath)) //dir symlink
+ dirList.push_back(si.fullPath);
+ else //file symlink, broken symlink
+ fileList.push_back(si.fullPath);
+ },
+ [&](const std::wstring& errorMsg) { throw FileError(errorMsg); });
//delete directories recursively
for (const Zstring& dirpath : dirList)
@@ -955,26 +956,52 @@ void zen::setFileTime(const Zstring& filepath, std::int64_t modTime, ProcSymlink
setFileTimeRaw(filepath, nullptr, timetToFileTime(modTime), procSl); //throw FileError
#elif defined ZEN_LINUX
- //sigh, we can't use utimensat on NTFS volumes on Ubuntu: silent failure!!! what morons are programming this shit???
-
- // struct ::timespec newTimes[2] = {};
- // newTimes[0].tv_nsec = UTIME_OMIT; //omit access time
- // newTimes[1].tv_sec = to<time_t>(modTime); //modification time (seconds)
- //
- // if (::utimensat(AT_FDCWD, filepath.c_str(), newTimes, procSl == SYMLINK_DIRECT ? AT_SYMLINK_NOFOLLOW : 0) != 0)
- // throwFileError(replaceCpy(_("Cannot write modification time of %x."), L"%x", fmtFileName(filepath)), L"utimensat", getLastError());
-
+ //[2013-05-01] sigh, we can't use utimensat() on NTFS volumes on Ubuntu: silent failure!!! what morons are programming this shit???
//=> fallback to "retarded-idiot version"! -- DarkByte
+ //
+ //[2015-03-09]
+ // - cannot reproduce issues with NTFS and utimensat() on Ubuntu
+ // - utimensat() is supposed to obsolete utime/utimes and is also used by "touch"
+ //=> let's give utimensat another chance:
+ struct ::timespec newTimes[2] = {};
+ newTimes[0].tv_nsec = UTIME_OMIT; //omit access time
+ newTimes[1].tv_sec = modTime; //modification time (seconds)
- struct ::timeval newTimes[2] = {};
- newTimes[0].tv_sec = ::time(nullptr); //access time (seconds)
- newTimes[1].tv_sec = modTime; //modification time (seconds)
+ if (procSl == ProcSymlink::FOLLOW)
+ {
+ //don't use utimensat() directly, but open file descriptor manually:
+ //=> solves EINVAL bug for certain CIFS/NTFS drives: https://sourceforge.net/p/freefilesync/discussion/help/thread/1ace042d/
+ //=> using utimensat(AT_SYMLINK_NOFOLLOW) for symlinks and open()/futimens() for regular files is consistent with "cp" and "touch"!
+ const int fdFile = ::open(filepath.c_str(), O_WRONLY, 0); //"if O_CREAT is not specified, then mode is ignored"
+ if (fdFile == -1)
+ throwFileError(replaceCpy(_("Cannot write modification time of %x."), L"%x", fmtFileName(filepath)), L"open", getLastError());
+ ZEN_ON_SCOPE_EXIT(::close(fdFile));
+
+ if (::futimens(fdFile, newTimes) != 0)
+ throwFileError(replaceCpy(_("Cannot write modification time of %x."), L"%x", fmtFileName(filepath)), L"futimens", getLastError());
+ }
+ else
+ {
+ if (::utimensat(AT_FDCWD, filepath.c_str(), newTimes, AT_SYMLINK_NOFOLLOW) != 0)
+ throwFileError(replaceCpy(_("Cannot write modification time of %x."), L"%x", fmtFileName(filepath)), L"utimensat", getLastError());
+ }
- const int rv = procSl == ProcSymlink::FOLLOW ?
- :: utimes(filepath.c_str(), newTimes) :
- ::lutimes(filepath.c_str(), newTimes);
- if (rv != 0)
- throwFileError(replaceCpy(_("Cannot write modification time of %x."), L"%x", fmtFileName(filepath)), L"utimes", getLastError());
+ /*
+ struct ::timeval newTimes[2] = {};
+ newTimes[0].tv_sec = ::time(nullptr); //access time (seconds)
+ newTimes[1].tv_sec = modTime; //modification time (seconds)
+
+ if (procSl == ProcSymlink::FOLLOW)
+ {
+ if (::utimes(filepath.c_str(), newTimes) != 0)
+ throwFileError(replaceCpy(_("Cannot write modification time of %x."), L"%x", fmtFileName(filepath)), L"utimes", getLastError());
+ }
+ else
+ {
+ if (::lutimes(filepath.c_str(), newTimes) != 0)
+ throwFileError(replaceCpy(_("Cannot write modification time of %x."), L"%x", fmtFileName(filepath)), L"lutimes", getLastError());
+ }
+ */
#elif defined ZEN_MAC
struct ::timespec writeTime = {};
@@ -1063,15 +1090,15 @@ void copySecurityContext(const Zstring& source, const Zstring& target, ProcSymli
//copy permissions for files, directories or symbolic links: requires admin rights
-void copyObjectPermissions(const Zstring& source, const Zstring& target, ProcSymlink procSl) //throw FileError
+void copyItemPermissions(const Zstring& sourcePath, const Zstring& targetPath, ProcSymlink procSl) //throw FileError
{
#ifdef ZEN_WIN
//in contrast to ::SetSecurityInfo(), ::SetFileSecurity() seems to honor the "inherit DACL/SACL" flags
//CAVEAT: if a file system does not support ACLs, GetFileSecurity() will return successfully with a *valid* security descriptor containing *no* ACL entries!
//NOTE: ::GetFileSecurity()/::SetFileSecurity() do NOT follow Symlinks! getResolvedFilePath() requires Vista or later!
- const Zstring sourceResolved = procSl == ProcSymlink::FOLLOW && symlinkExists(source) ? getResolvedFilePath(source) : source; //throw FileError
- const Zstring targetResolved = procSl == ProcSymlink::FOLLOW && symlinkExists(target) ? getResolvedFilePath(target) : target; //
+ const Zstring sourceResolved = procSl == ProcSymlink::FOLLOW && symlinkExists(sourcePath) ? getResolvedFilePath(sourcePath) : sourcePath; //throw FileError
+ const Zstring targetResolved = procSl == ProcSymlink::FOLLOW && symlinkExists(targetPath) ? getResolvedFilePath(targetPath) : targetPath; //
//setting privileges requires admin rights!
try
@@ -1217,32 +1244,32 @@ void copyObjectPermissions(const Zstring& source, const Zstring& target, ProcSym
#elif defined ZEN_LINUX
#ifdef HAVE_SELINUX //copy SELinux security context
- copySecurityContext(source, target, procSl); //throw FileError
+ copySecurityContext(sourcePath, targetPath, procSl); //throw FileError
#endif
struct ::stat fileInfo = {};
if (procSl == ProcSymlink::FOLLOW)
{
- if (::stat(source.c_str(), &fileInfo) != 0)
- throwFileError(replaceCpy(_("Cannot read permissions of %x."), L"%x", fmtFileName(source)), L"stat", getLastError());
+ if (::stat(sourcePath.c_str(), &fileInfo) != 0)
+ throwFileError(replaceCpy(_("Cannot read permissions of %x."), L"%x", fmtFileName(sourcePath)), L"stat", getLastError());
- if (::chown(target.c_str(), fileInfo.st_uid, fileInfo.st_gid) != 0) // may require admin rights!
- throwFileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtFileName(target)), L"chown", getLastError());
+ if (::chown(targetPath.c_str(), fileInfo.st_uid, fileInfo.st_gid) != 0) // may require admin rights!
+ throwFileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtFileName(targetPath)), L"chown", getLastError());
- if (::chmod(target.c_str(), fileInfo.st_mode) != 0)
- throwFileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtFileName(target)), L"chmod", getLastError());
+ if (::chmod(targetPath.c_str(), fileInfo.st_mode) != 0)
+ throwFileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtFileName(targetPath)), L"chmod", getLastError());
}
else
{
- if (::lstat(source.c_str(), &fileInfo) != 0)
- throwFileError(replaceCpy(_("Cannot read permissions of %x."), L"%x", fmtFileName(source)), L"lstat", getLastError());
+ if (::lstat(sourcePath.c_str(), &fileInfo) != 0)
+ throwFileError(replaceCpy(_("Cannot read permissions of %x."), L"%x", fmtFileName(sourcePath)), L"lstat", getLastError());
- if (::lchown(target.c_str(), fileInfo.st_uid, fileInfo.st_gid) != 0) // may require admin rights!
- throwFileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtFileName(target)), L"lchown", getLastError());
+ if (::lchown(targetPath.c_str(), fileInfo.st_uid, fileInfo.st_gid) != 0) // may require admin rights!
+ throwFileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtFileName(targetPath)), L"lchown", getLastError());
- if (!symlinkExists(target) && //setting access permissions doesn't make sense for symlinks on Linux: there is no lchmod()
- ::chmod(target.c_str(), fileInfo.st_mode) != 0)
- throwFileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtFileName(target)), L"chmod", getLastError());
+ if (!symlinkExists(targetPath) && //setting access permissions doesn't make sense for symlinks on Linux: there is no lchmod()
+ ::chmod(targetPath.c_str(), fileInfo.st_mode) != 0)
+ throwFileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtFileName(targetPath)), L"chmod", getLastError());
}
#elif defined ZEN_MAC
@@ -1250,27 +1277,27 @@ void copyObjectPermissions(const Zstring& source, const Zstring& target, ProcSym
if (procSl == ProcSymlink::DIRECT)
flags |= COPYFILE_NOFOLLOW;
- if (::copyfile(source.c_str(), target.c_str(), 0, flags) != 0)
- throwFileError(replaceCpy(replaceCpy(_("Cannot copy permissions from %x to %y."), L"%x", L"\n" + fmtFileName(source)), L"%y", L"\n" + fmtFileName(target)), L"copyfile", getLastError());
+ if (::copyfile(sourcePath.c_str(), targetPath.c_str(), 0, flags) != 0)
+ throwFileError(replaceCpy(replaceCpy(_("Cannot copy permissions from %x to %y."), L"%x", L"\n" + fmtFileName(sourcePath)), L"%y", L"\n" + fmtFileName(targetPath)), L"copyfile", getLastError());
//owner is *not* copied with ::copyfile():
struct ::stat fileInfo = {};
if (procSl == ProcSymlink::FOLLOW)
{
- if (::stat(source.c_str(), &fileInfo) != 0)
- throwFileError(replaceCpy(_("Cannot read permissions of %x."), L"%x", fmtFileName(source)), L"stat", getLastError());
+ if (::stat(sourcePath.c_str(), &fileInfo) != 0)
+ throwFileError(replaceCpy(_("Cannot read permissions of %x."), L"%x", fmtFileName(sourcePath)), L"stat", getLastError());
- if (::chown(target.c_str(), fileInfo.st_uid, fileInfo.st_gid) != 0) // may require admin rights!
- throwFileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtFileName(target)), L"chown", getLastError());
+ if (::chown(targetPath.c_str(), fileInfo.st_uid, fileInfo.st_gid) != 0) // may require admin rights!
+ throwFileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtFileName(targetPath)), L"chown", getLastError());
}
else
{
- if (::lstat(source.c_str(), &fileInfo) != 0)
- throwFileError(replaceCpy(_("Cannot read permissions of %x."), L"%x", fmtFileName(source)), L"lstat", getLastError());
+ if (::lstat(sourcePath.c_str(), &fileInfo) != 0)
+ throwFileError(replaceCpy(_("Cannot read permissions of %x."), L"%x", fmtFileName(sourcePath)), L"lstat", getLastError());
- if (::lchown(target.c_str(), fileInfo.st_uid, fileInfo.st_gid) != 0) // may require admin rights!
- throwFileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtFileName(target)), L"lchown", getLastError());
+ if (::lchown(targetPath.c_str(), fileInfo.st_uid, fileInfo.st_gid) != 0) // may require admin rights!
+ throwFileError(replaceCpy(_("Cannot write permissions of %x."), L"%x", fmtFileName(targetPath)), L"lchown", getLastError());
}
#endif
}
@@ -1412,7 +1439,7 @@ void zen::makeDirectoryPlain(const Zstring& directory, //throw FileError, ErrorT
mode = dirInfo.st_mode; //analog to "cp" which copies "mode" (considering umask) by default
mode |= S_IRWXU; //FFS only: we need full access to copy child items! "cp" seems to apply permissions *after* copying child items
}
- //=> need copyObjectPermissions() only for "chown" and umask-agnostic permissions
+ //=> need copyItemPermissions() only for "chown" and umask-agnostic permissions
if (::mkdir(directory.c_str(), mode) != 0)
{
@@ -1501,7 +1528,7 @@ void zen::makeDirectoryPlain(const Zstring& directory, //throw FileError, ErrorT
//enforce copying file permissions: it's advertized on GUI...
if (copyFilePermissions)
- copyObjectPermissions(templateDir, directory, ProcSymlink::FOLLOW); //throw FileError
+ copyItemPermissions(templateDir, directory, ProcSymlink::FOLLOW); //throw FileError
guardNewDir.dismiss(); //target has been created successfully!
}
@@ -1561,23 +1588,26 @@ void zen::copySymlink(const Zstring& sourceLink, const Zstring& targetLink, bool
setFileTimeRaw(targetLink, &sourceAttr.ftCreationTime, sourceAttr.ftLastWriteTime, ProcSymlink::DIRECT); //throw FileError
-#elif defined ZEN_LINUX || defined ZEN_MAC
+#elif defined ZEN_LINUX
struct ::stat sourceInfo = {};
if (::lstat(sourceLink.c_str(), &sourceInfo) != 0)
throwFileError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(sourceLink)), L"lstat", getLastError());
-#ifdef ZEN_LINUX
- setFileTime(targetLink, sourceInfo.st_mtime, ProcSymlink::DIRECT); //throw FileError
+ setFileTime(targetLink, sourceInfo.st_mtime, ProcSymlink::DIRECT); //throw FileError
+
#elif defined ZEN_MAC
- setFileTimeRaw(targetLink, &sourceInfo.st_birthtimespec, sourceInfo.st_mtimespec, ProcSymlink::DIRECT); //throw FileError
+ struct ::stat sourceInfo = {};
+ if (::lstat(sourceLink.c_str(), &sourceInfo) != 0)
+ throwFileError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(sourceLink)), L"lstat", getLastError());
if (::copyfile(sourceLink.c_str(), targetLink.c_str(), 0, COPYFILE_XATTR | COPYFILE_NOFOLLOW) != 0)
throwFileError(replaceCpy(replaceCpy(_("Cannot copy attributes from %x to %y."), L"%x", L"\n" + fmtFileName(sourceLink)), L"%y", L"\n" + fmtFileName(targetLink)), L"copyfile", getLastError());
-#endif
+
+ setFileTimeRaw(targetLink, &sourceInfo.st_birthtimespec, sourceInfo.st_mtimespec, ProcSymlink::DIRECT); //throw FileError
#endif
if (copyFilePermissions)
- copyObjectPermissions(sourceLink, targetLink, ProcSymlink::DIRECT); //throw FileError
+ copyItemPermissions(sourceLink, targetLink, ProcSymlink::DIRECT); //throw FileError
guardNewLink.dismiss(); //target has been created successfully!
}
@@ -1903,37 +1933,6 @@ void copyFileWindowsSparse(const Zstring& sourceFile,
DEFINE_NEW_FILE_ERROR(ErrorShouldCopyAsSparse);
-class ErrorHandling
-{
-public:
- ErrorHandling() : shouldCopyAsSparse(false) {}
-
- //call context: copyCallbackInternal()
- void reportErrorShouldCopyAsSparse() { shouldCopyAsSparse = true; }
-
- void reportUserException(const std::exception_ptr& e) { exception = e; }
-
- void reportError(const std::wstring& msg, const std::wstring& description) { errorMsg = std::make_pair(msg, description); }
-
- //call context: copyFileWindowsDefault()
- void evaluateErrors() //throw X
- {
- if (shouldCopyAsSparse)
- throw ErrorShouldCopyAsSparse(L"sparse dummy value");
-
- if (exception)
- std::rethrow_exception(exception);
-
- if (!errorMsg.first.empty())
- throw FileError(errorMsg.first, errorMsg.second);
- }
-
-private:
- bool shouldCopyAsSparse; //
- std::pair<std::wstring, std::wstring> errorMsg; //these are exclusive!
- std::exception_ptr exception;
-};
-
struct CallbackData
{
@@ -1949,10 +1948,10 @@ struct CallbackData
const Zstring& sourceFile_;
const Zstring& targetFile_;
- const std::function<void(std::int64_t bytesDelta)>& onUpdateCopyStatus_;
+ const std::function<void(std::int64_t bytesDelta)>& onUpdateCopyStatus_; //optional
- ErrorHandling errorHandler;
- BY_HANDLE_FILE_INFORMATION fileInfoSrc; //modified by CopyFileEx() at beginning
+ std::exception_ptr exception; //out
+ BY_HANDLE_FILE_INFORMATION fileInfoSrc; //out: modified by CopyFileEx() at beginning
BY_HANDLE_FILE_INFORMATION fileInfoTrg; //
std::int64_t bytesReported; //used internally to calculate bytes transferred delta
@@ -1971,6 +1970,7 @@ DWORD CALLBACK copyCallbackInternal(LARGE_INTEGER totalFileSize,
{
/*
this callback is invoked for block sizes managed by Windows, these may vary from e.g. 64 kB up to 1MB. It seems this depends on file size amongst others.
+ Note: for 0-sized files this callback is invoked just ONCE!
symlink handling:
if source is a symlink and COPY_FILE_COPY_SYMLINK is specified, this callback is NOT invoked!
@@ -1990,71 +1990,60 @@ DWORD CALLBACK copyCallbackInternal(LARGE_INTEGER totalFileSize,
CallbackData& cbd = *static_cast<CallbackData*>(lpData);
- if (dwCallbackReason == CALLBACK_STREAM_SWITCH && //called up-front for every file (even if 0-sized)
- dwStreamNumber == 1) //consider ADS!
+ try
{
- //#################### return source file attributes ################################
- if (!::GetFileInformationByHandle(hSourceFile, &cbd.fileInfoSrc))
+ if (dwCallbackReason == CALLBACK_STREAM_SWITCH && //called up-front for every file (even if 0-sized)
+ dwStreamNumber == 1) //consider ADS!
{
- const DWORD lastError = ::GetLastError(); //copy before directly or indirectly making other system calls!
- cbd.errorHandler.reportError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(cbd.sourceFile_)), formatSystemError(L"GetFileInformationByHandle", lastError));
- return PROGRESS_CANCEL;
- }
+ //#################### return source file attributes ################################
+ if (!::GetFileInformationByHandle(hSourceFile, &cbd.fileInfoSrc))
+ throwFileError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(cbd.sourceFile_)), L"GetFileInformationByHandle", ::GetLastError());
- if (!::GetFileInformationByHandle(hDestinationFile, &cbd.fileInfoTrg))
- {
- const DWORD lastError = ::GetLastError(); //copy before directly or indirectly making other system calls!
- cbd.errorHandler.reportError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(cbd.targetFile_)), formatSystemError(L"GetFileInformationByHandle", lastError));
- return PROGRESS_CANCEL;
- }
+ if (!::GetFileInformationByHandle(hDestinationFile, &cbd.fileInfoTrg))
+ throwFileError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(cbd.targetFile_)), L"GetFileInformationByHandle", ::GetLastError());
- //#################### switch to sparse file copy if req. #######################
- if (canCopyAsSparse(cbd.fileInfoSrc.dwFileAttributes, cbd.targetFile_)) //throw ()
- {
- cbd.errorHandler.reportErrorShouldCopyAsSparse(); //use a different copy routine!
- return PROGRESS_CANCEL;
- }
+ //#################### switch to sparse file copy if req. #######################
+ if (canCopyAsSparse(cbd.fileInfoSrc.dwFileAttributes, cbd.targetFile_)) //throw ()
+ throw ErrorShouldCopyAsSparse(L"sparse dummy value"); //use a different copy routine!
- //#################### copy file creation time ################################
- ::SetFileTime(hDestinationFile, &cbd.fileInfoSrc.ftCreationTime, nullptr, nullptr); //no error handling!
- //=> not really needed here, creation time is set anyway at the end of copyFileWindowsDefault()!
+ //#################### copy file creation time ################################
+ ::SetFileTime(hDestinationFile, &cbd.fileInfoSrc.ftCreationTime, nullptr, nullptr); //no error handling!
+ //=> not really needed here, creation time is set anyway at the end of copyFileWindowsDefault()!
- //#################### copy NTFS compressed attribute #########################
- const bool sourceIsCompressed = (cbd.fileInfoSrc.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) != 0;
- const bool targetIsCompressed = (cbd.fileInfoTrg.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) != 0; //already set by CopyFileEx if target parent folder is compressed!
- if (sourceIsCompressed && !targetIsCompressed)
- {
- USHORT cmpState = COMPRESSION_FORMAT_DEFAULT;
- DWORD bytesReturned = 0;
- if (!::DeviceIoControl(hDestinationFile, //_In_ HANDLE hDevice,
- FSCTL_SET_COMPRESSION, //_In_ DWORD dwIoControlCode,
- &cmpState, //_In_opt_ LPVOID lpInBuffer,
- sizeof(cmpState), //_In_ DWORD nInBufferSize,
- nullptr, //_Out_opt_ LPVOID lpOutBuffer,
- 0, //_In_ DWORD nOutBufferSize,
- &bytesReturned, //_Out_opt_ LPDWORD lpBytesReturned
- nullptr)) //_Inout_opt_ LPOVERLAPPED lpOverlapped
- {} //may legitimately fail with ERROR_INVALID_FUNCTION if
-
- // - if target folder is encrypted
- // - target volume does not support compressed attribute
- //#############################################################################
+ //#################### copy NTFS compressed attribute #########################
+ const bool sourceIsCompressed = (cbd.fileInfoSrc.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) != 0;
+ const bool targetIsCompressed = (cbd.fileInfoTrg.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) != 0; //already set by CopyFileEx if target parent folder is compressed!
+ if (sourceIsCompressed && !targetIsCompressed)
+ {
+ USHORT cmpState = COMPRESSION_FORMAT_DEFAULT;
+ DWORD bytesReturned = 0;
+ if (!::DeviceIoControl(hDestinationFile, //_In_ HANDLE hDevice,
+ FSCTL_SET_COMPRESSION, //_In_ DWORD dwIoControlCode,
+ &cmpState, //_In_opt_ LPVOID lpInBuffer,
+ sizeof(cmpState), //_In_ DWORD nInBufferSize,
+ nullptr, //_Out_opt_ LPVOID lpOutBuffer,
+ 0, //_In_ DWORD nOutBufferSize,
+ &bytesReturned, //_Out_opt_ LPDWORD lpBytesReturned
+ nullptr)) //_Inout_opt_ LPOVERLAPPED lpOverlapped
+ {} //may legitimately fail with ERROR_INVALID_FUNCTION if
+
+ // - if target folder is encrypted
+ // - target volume does not support compressed attribute
+ //#############################################################################
+ }
}
- }
- //called after copy operation is finished - note: for 0-sized files this callback is invoked just ONCE!
- //if (totalFileSize.QuadPart == totalBytesTransferred.QuadPart && dwStreamNumber == 1) {}
- if (cbd.onUpdateCopyStatus_ && totalBytesTransferred.QuadPart >= 0) //should always be true, but let's still check
- try
+ if (cbd.onUpdateCopyStatus_ && totalBytesTransferred.QuadPart >= 0) //should always be true, but let's still check
{
cbd.onUpdateCopyStatus_(totalBytesTransferred.QuadPart - cbd.bytesReported); //throw X!
cbd.bytesReported = totalBytesTransferred.QuadPart;
}
- catch (...)
- {
- cbd.errorHandler.reportUserException(std::current_exception());
- return PROGRESS_CANCEL;
- }
+ }
+ catch (...)
+ {
+ cbd.exception = std::current_exception();
+ return PROGRESS_CANCEL;
+ }
return PROGRESS_CONTINUE;
}
@@ -2083,10 +2072,11 @@ void copyFileWindowsDefault(const Zstring& sourceFile,
copyFlags |= COPY_FILE_ALLOW_DECRYPTED_DESTINATION; //allow copying from encrypted to non-encrypted location
//if (vistaOrLater()) //see http://blogs.technet.com/b/askperf/archive/2007/05/08/slow-large-file-copy-issues.aspx
- // copyFlags |= COPY_FILE_NO_BUFFERING; //no perf difference at worst, huge improvement for large files (20% in test NTFS -> NTFS)
- //It's a shame this flag causes file corruption! https://sourceforge.net/projects/freefilesync/forums/forum/847542/topic/5177950
- //documentation on CopyFile2() even states: "It is not recommended to pause copies that are using this flag." How dangerous is this thing, why offer it at all???
- //perf advantage: ~15% faster
+ // copyFlags |= COPY_FILE_NO_BUFFERING; //no perf difference at worst, improvement for large files (20% in test NTFS -> NTFS)
+ // - this flag may cause file corruption! https://sourceforge.net/p/freefilesync/discussion/open-discussion/thread/65f48357/
+ // - documentation on CopyFile2() even states: "It is not recommended to pause copies that are using this flag."
+ //=> it's not worth it! instead of skipping buffering at kernel-level (=> also NO prefetching!!!), skip it at user-level: memory mapped files!
+ // however, perf-measurements for memory mapped files show: it's also not worth it!
CallbackData cbd(onUpdateCopyStatus, sourceFile, targetFile);
@@ -2096,8 +2086,9 @@ void copyFileWindowsDefault(const Zstring& sourceFile,
&cbd, //__in_opt LPVOID lpData,
nullptr, //__in_opt LPBOOL pbCancel,
copyFlags) != FALSE; //__in DWORD dwCopyFlags
+ if (cbd.exception)
+ std::rethrow_exception(cbd.exception); //throw ?, process errors in callback first!
- cbd.errorHandler.evaluateErrors(); //throw ?, process errors in callback first!
if (!success)
{
const DWORD lastError = ::GetLastError(); //copy before directly or indirectly making other system calls!
@@ -2204,26 +2195,40 @@ void copyFileOsSpecific(const Zstring& sourceFile,
}
-#elif defined ZEN_LINUX
+#elif defined ZEN_LINUX || defined ZEN_MAC
void copyFileOsSpecific(const Zstring& sourceFile,
const Zstring& targetFile,
const std::function<void(std::int64_t bytesDelta)>& onUpdateCopyStatus,
InSyncAttributes* newAttrib) //throw FileError, ErrorTargetExisting
{
- FileInputUnbuffered fileIn(sourceFile); //throw FileError
+ FileInput fileIn(sourceFile); //throw FileError
struct ::stat sourceInfo = {};
- if (::fstat(fileIn.getDescriptor(), &sourceInfo) != 0)
+ if (::fstat(fileIn.getHandle(), &sourceInfo) != 0)
throwFileError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(sourceFile)), L"fstat", getLastError());
- zen::ScopeGuard guardTarget = zen::makeGuard([&] { try { removeFile(targetFile); } catch (FileError&) {} }); //transactional behavior: place guard before lifetime of FileOutput
- try
+ const int fdTarget = ::open(targetFile.c_str(), O_WRONLY | O_CREAT | O_EXCL,
+ sourceInfo.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO)); //analog to "cp" which copies "mode" (considering umask) by default
+ //=> need copyItemPermissions() only for "chown" and umask-agnostic permissions
+ if (fdTarget == -1)
+ {
+ const int ec = errno; //copy before making other system calls!
+ const std::wstring errorMsg = replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(targetFile));
+ const std::wstring errorDescr = formatSystemError(L"open", ec);
+
+ if (ec == EEXIST)
+ throw ErrorTargetExisting(errorMsg, errorDescr);
+
+ throw FileError(errorMsg, errorDescr);
+ }
+
+ zen::ScopeGuard guardTarget = zen::makeGuard([&] { try { removeFile(targetFile); } catch (FileError&) {} });
+ //transactional behavior: place guard after ::open() and before lifetime of FileOutput:
+ //=> don't delete file that existed previously!!!
{
- FileOutputUnbuffered fileOut(targetFile, //throw FileError, ErrorTargetExisting
- sourceInfo.st_mode); //analog to "cp" which copies "mode" (considering umask) by default
- //=> need copyObjectPermissions() only for "chown" and umask-agnostic permissions
+ FileOutput fileOut(fdTarget, targetFile); //pass ownership
- std::vector<char> buffer(128 * 1024); //see comment in FileInputUnbuffered::read
+ std::vector<char> buffer(128 * 1024);
do
{
const size_t bytesRead = fileIn.read(&buffer[0], buffer.size()); //throw FileError
@@ -2235,186 +2240,58 @@ void copyFileOsSpecific(const Zstring& sourceFile,
}
while (!fileIn.eof());
- //adapt target file modification time:
- {
- //read and return file statistics
- struct ::stat targetInfo = {};
- if (::fstat(fileOut.getDescriptor(), &targetInfo) != 0)
- throwFileError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(targetFile)), L"fstat", getLastError());
-
- if (newAttrib)
- {
- newAttrib->fileSize = sourceInfo.st_size;
- newAttrib->modificationTime = sourceInfo.st_mtime;
- newAttrib->sourceFileId = extractFileId(sourceInfo);
- newAttrib->targetFileId = extractFileId(targetInfo);
- }
- }
- }
- catch (const ErrorTargetExisting&)
- {
- guardTarget.dismiss(); //don't delete file that existed previously!
- throw;
- }
-
- //we cannot set the target file times while the file descriptor is still open after a write operation:
- //this triggers bugs on samba shares where the modification time is set to current time instead.
- //http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=340236
- //http://comments.gmane.org/gmane.linux.file-systems.cifs/2854
- //on the other hand we thereby have to reopen https://sourceforge.net/p/freefilesync/bugs/230/
- setFileTime(targetFile, sourceInfo.st_mtime, ProcSymlink::FOLLOW); //throw FileError
-
- guardTarget.dismiss(); //target has been created successfully!
-}
-
-
-#elif defined ZEN_MAC
-struct CallbackData
-{
- CallbackData(const std::function<void(std::int64_t bytesDelta)>& onUpdateCopyStatus,
- const Zstring& sourceFile,
- const Zstring& targetFile) :
- onUpdateCopyStatus_(onUpdateCopyStatus),
- sourceFile_(sourceFile),
- targetFile_(targetFile),
- bytesReported() {}
-
- const std::function<void(std::int64_t bytesDelta)>& onUpdateCopyStatus_; //in
- const Zstring& sourceFile_;
- const Zstring& targetFile_;
-
- std::pair<std::wstring, std::wstring> errorMsg; //out; these are exclusive!
- std::exception_ptr exception; //
-
- std::int64_t bytesReported; //private to callback
-};
-
-
-int copyFileCallback(int what, int stage, copyfile_state_t state, const char* src, const char* dst, void* ctx)
-{
- CallbackData& cbd = *static_cast<CallbackData*>(ctx);
-
- off_t bytesCopied = 0;
- if (::copyfile_state_get(state, COPYFILE_STATE_COPIED, &bytesCopied) != 0)
- {
- cbd.errorMsg = std::make_pair(replaceCpy(replaceCpy(_("Cannot copy file %x to %y."), L"%x", L"\n" + fmtFileName(cbd.sourceFile_)), L"%y", L"\n" + fmtFileName(cbd.targetFile_)),
- formatSystemError(L"copyfile_state_get, COPYFILE_STATE_COPIED", getLastError()));
- return COPYFILE_QUIT;
- }
-
- if (cbd.onUpdateCopyStatus_)
- try
- {
- cbd.onUpdateCopyStatus_(bytesCopied - cbd.bytesReported); //throw X!
- cbd.bytesReported = bytesCopied;
- }
- catch (...)
- {
- cbd.exception = std::current_exception();
- return COPYFILE_QUIT;
- }
- return COPYFILE_CONTINUE;
-}
-
-
-void copyFileOsSpecific(const Zstring& sourceFile,
- const Zstring& targetFile,
- const std::function<void(std::int64_t bytesDelta)>& onUpdateCopyStatus,
- InSyncAttributes* newAttrib) //throw FileError, ErrorTargetExisting
-{
- struct ::stat sourceInfo = {};
-
- //http://blog.plasticsfuture.org/2006/03/05/the-state-of-backup-and-cloning-tools-under-mac-os-x/
- {
- auto getCopyErrorMessage = [&] { return replaceCpy(replaceCpy(_("Cannot copy file %x to %y."), L"%x", L"\n" + fmtFileName(sourceFile)), L"%y", L"\n" + fmtFileName(targetFile)); };
-
- copyfile_state_t copyState = ::copyfile_state_alloc();
- ZEN_ON_SCOPE_EXIT(::copyfile_state_free(copyState));
-
- CallbackData cbd(onUpdateCopyStatus, sourceFile, targetFile);
-
- if (::copyfile_state_set(copyState, COPYFILE_STATE_STATUS_CTX, &cbd) != 0)
- throwFileError(getCopyErrorMessage(), L"copyfile_state_set, COPYFILE_STATE_STATUS_CTX", getLastError());
-
- if (::copyfile_state_set(copyState, COPYFILE_STATE_STATUS_CB, reinterpret_cast<const void*>(&copyFileCallback)) != 0)
- throwFileError(getCopyErrorMessage(), L"copyfile_state_set, COPYFILE_STATE_STATUS_CB", getLastError());
-
- zen::ScopeGuard guardTarget = zen::makeGuard([&] { try { removeFile(targetFile); } catch (FileError&) {} }); //transactional behavior: docs seem to indicate that copyfile does not clean up
-
- //http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/copyfile.3.html
- if (::copyfile(sourceFile.c_str(), targetFile.c_str(),
- copyState,
- COPYFILE_XATTR | COPYFILE_DATA | COPYFILE_EXCL) != 0)
- //- even though we don't use COPYFILE_STAT, "mode" (considering umask) is still copied! => harmonized with Linux file copy!
- //- COPYFILE_STAT does not copy file creation time
- {
- //evaluate first! errno is not set for COPYFILE_QUIT!
- if (cbd.exception)
- std::rethrow_exception(cbd.exception);
-
- if (!cbd.errorMsg.first.empty())
- throw FileError(cbd.errorMsg.first, cbd.errorMsg.second);
-
- const int lastError = errno;
- std::wstring errorDescr = formatSystemError(L"copyfile", lastError);
-
- if (lastError == EEXIST)
- {
- guardTarget.dismiss(); //don't delete file that existed previously!
- throw ErrorTargetExisting(getCopyErrorMessage(), errorDescr);
- }
-
- throw FileError(getCopyErrorMessage(), errorDescr);
- }
-
- int fdSource = 0;
- if (::copyfile_state_get(copyState, COPYFILE_STATE_SRC_FD, &fdSource) != 0)
- throwFileError(getCopyErrorMessage(), L"copyfile_state_get, COPYFILE_STATE_SRC_FD", getLastError());
-
- int fdTarget = 0;
- if (::copyfile_state_get(copyState, COPYFILE_STATE_DST_FD, &fdTarget) != 0)
- throwFileError(getCopyErrorMessage(), L"copyfile_state_get, COPYFILE_STATE_DST_FD", getLastError());
-
- if (::fstat(fdSource, &sourceInfo) != 0)
- throwFileError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(sourceFile)), L"fstat", getLastError());
-
struct ::stat targetInfo = {};
- if (::fstat(fdTarget, &targetInfo) != 0)
+ if (::fstat(fileOut.getHandle(), &targetInfo) != 0)
throwFileError(replaceCpy(_("Cannot read file attributes of %x."), L"%x", fmtFileName(targetFile)), L"fstat", getLastError());
- if (newAttrib)
+ if (newAttrib) //return file statistics
{
newAttrib->fileSize = sourceInfo.st_size;
- newAttrib->modificationTime = sourceInfo.st_mtimespec.tv_sec; //use same time variable as setFileTimeRaw() for consistency
- //newAttrib->modificationTime = sourceInfo.st_mtime; //
+#ifdef ZEN_MAC
+ newAttrib->modificationTime = sourceInfo.st_mtimespec.tv_sec; //use same time variable like setFileTimeRaw() for consistency
+#else
+ newAttrib->modificationTime = sourceInfo.st_mtime;
+#endif
newAttrib->sourceFileId = extractFileId(sourceInfo);
newAttrib->targetFileId = extractFileId(targetInfo);
}
- guardTarget.dismiss();
- } //make sure target file handle is closed before setting modification time!
-
+#ifdef ZEN_MAC
+ //using ::copyfile with COPYFILE_DATA seems to trigger bugs unlike our stream-based copying!
+ //=> use ::copyfile for extended attributes only: https://sourceforge.net/p/freefilesync/discussion/help/thread/91384c8a/
+ //http://blog.plasticsfuture.org/2006/03/05/the-state-of-backup-and-cloning-tools-under-mac-os-x/
+ //docs: http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/copyfile.3.html
+ //source: http://www.opensource.apple.com/source/copyfile/copyfile-103.92.1/copyfile.c
+ if (::fcopyfile(fileIn.getHandle(), fileOut.getHandle(), 0, COPYFILE_XATTR) != 0)
+ throwFileError(replaceCpy(replaceCpy(_("Cannot copy attributes from %x to %y."), L"%x", L"\n" + fmtFileName(sourceFile)), L"%y", L"\n" + fmtFileName(targetFile)), L"copyfile", getLastError());
+#endif
+ } //close output file handle before setting file time
- zen::ScopeGuard guardTarget = zen::makeGuard([&] { try { removeFile(targetFile); } catch (FileError&) {} });
- //same issue like on Linux: we cannot set the target file times (::futimes) while the file descriptor is still open after a write operation:
+ //we cannot set the target file times (::futimes) while the file descriptor is still open after a write operation:
//this triggers bugs on samba shares where the modification time is set to current time instead.
- //https://sourceforge.net/p/freefilesync/discussion/help/thread/881357c0/
- //http://comments.gmane.org/gmane.linux.file-systems.cifs/2854
+ //Linux: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=340236
+ // http://comments.gmane.org/gmane.linux.file-systems.cifs/2854
+ //OS X: https://sourceforge.net/p/freefilesync/discussion/help/thread/881357c0/
+#ifdef ZEN_MAC
setFileTimeRaw(targetFile, &sourceInfo.st_birthtimespec, sourceInfo.st_mtimespec, ProcSymlink::FOLLOW); //throw FileError
- //sourceInfo.st_birthtime; -> only seconds-preicions
- //sourceInfo.st_mtime; ->
- guardTarget.dismiss();
+ //sourceInfo.st_birthtime; -> only seconds-precision
+ //sourceInfo.st_mtime; ->
+#else
+ setFileTime(targetFile, sourceInfo.st_mtime, ProcSymlink::FOLLOW); //throw FileError
+#endif
+
+ guardTarget.dismiss(); //target has been created successfully!
}
#endif
/*
- ------------------
- |File Copy Layers|
- ------------------
+ ------------------
+ |File Copy Layers|
+ ------------------
copyFile (setup transactional behavior)
- |
+ |
copyFileWithPermissions
- |
+ |
copyFileOsSpecific (solve 8.3 issue)
|
copyFileWindowsSelectRoutine
@@ -2436,7 +2313,7 @@ void copyFileWithPermissions(const Zstring& sourceFile,
//at this point we know we created a new file, so it's fine to delete it for cleanup!
zen::ScopeGuard guardTargetFile = zen::makeGuard([&] { try { removeFile(targetFile); } catch (FileError&) {}});
- copyObjectPermissions(sourceFile, targetFile, ProcSymlink::FOLLOW); //throw FileError
+ copyItemPermissions(sourceFile, targetFile, ProcSymlink::FOLLOW); //throw FileError
guardTargetFile.dismiss(); //target has been created successfully!
}
diff --git a/zen/file_access.h b/zen/file_access.h
index 4a36009d..bd1b0168 100644
--- a/zen/file_access.h
+++ b/zen/file_access.h
@@ -34,7 +34,7 @@ std::uint64_t getFreeDiskSpace(const Zstring& path); //throw FileError
bool removeFile(const Zstring& filepath); //throw FileError; return "false" if file is not existing
void removeDirectory(const Zstring& directory, //throw FileError
const std::function<void (const Zstring& filepath)>& onBeforeFileDeletion = nullptr, //optional;
- const std::function<void (const Zstring& dirpath)>& onBeforeDirDeletion = nullptr); //one call for each *existing* object!
+ const std::function<void (const Zstring& dirpath )>& onBeforeDirDeletion = nullptr); //one call for each *existing* object!
//rename file or directory: no copying!!!
void renameFile(const Zstring& oldName, const Zstring& newName); //throw FileError, ErrorDifferentVolume, ErrorTargetExisting
diff --git a/zen/file_io.cpp b/zen/file_io.cpp
index 00e33a60..d4bfdd9b 100644
--- a/zen/file_io.cpp
+++ b/zen/file_io.cpp
@@ -13,6 +13,7 @@
#include "dll.h"
#elif defined ZEN_LINUX || defined ZEN_MAC
+ #include <sys/stat.h>
#include <fcntl.h> //open, close
#include <unistd.h> //read, write
#endif
@@ -44,7 +45,9 @@ Zstring getLockingProcessNames(const Zstring& filepath) //throw(), empty string
}
#elif defined ZEN_LINUX || defined ZEN_MAC
-//"filepath" could be a named pipe which *blocks* forever during "open()"! https://sourceforge.net/p/freefilesync/bugs/221/
+//- "filepath" could be a named pipe which *blocks* forever for open()!
+//- open() with O_NONBLOCK avoids the block, but opens successfully
+//- create sample pipe: "sudo mkfifo named_pipe"
void checkForUnsupportedType(const Zstring& filepath) //throw FileError
{
struct ::stat fileInfo = {};
@@ -78,61 +81,79 @@ FileInput::FileInput(FileHandle handle, const Zstring& filepath) : FileInputBase
FileInput::FileInput(const Zstring& filepath) : FileInputBase(filepath) //throw FileError
{
#ifdef ZEN_WIN
- const wchar_t functionName[] = L"CreateFile";
- fileHandle = ::CreateFile(applyLongPathPrefix(filepath).c_str(), //_In_ LPCTSTR lpFileName,
- GENERIC_READ, //_In_ DWORD dwDesiredAccess,
- FILE_SHARE_READ | FILE_SHARE_DELETE, //_In_ DWORD dwShareMode,
- nullptr, //_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
- OPEN_EXISTING, //_In_ DWORD dwCreationDisposition,
- FILE_FLAG_SEQUENTIAL_SCAN, //_In_ DWORD dwFlagsAndAttributes,
- /* possible values: (Reference http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx#caching_behavior)
- FILE_FLAG_NO_BUFFERING
- FILE_FLAG_RANDOM_ACCESS
- FILE_FLAG_SEQUENTIAL_SCAN
-
- tests on Win7 x64 show that FILE_FLAG_SEQUENTIAL_SCAN provides best performance for binary comparison in all cases:
- - comparing different physical disks (DVD <-> HDD and HDD <-> HDD)
- - even on same physical disk! (HDD <-> HDD)
- - independent from client buffer size!
-
- tests on XP show that FILE_FLAG_SEQUENTIAL_SCAN provides best performance for binary comparison when
- - comparing different physical disks (DVD <-> HDD)
-
- while FILE_FLAG_RANDOM_ACCESS offers best performance for
- - same physical disk (HDD <-> HDD)
-
- Problem: bad XP implementation of prefetch makes flag FILE_FLAG_SEQUENTIAL_SCAN effectively load two files at the same time
- from one drive, swapping every 64 kB (or similar). File access times explode!
- => For XP it is critical to use FILE_FLAG_RANDOM_ACCESS (to disable prefetch) if reading two files on same disk and
- FILE_FLAG_SEQUENTIAL_SCAN when reading from different disk (e.g. massive performance improvement compared to random access for DVD <-> HDD!)
- => there is no compromise that satisfies all cases! (on XP)
-
- for FFS most comparisons are probably between different disks => let's use FILE_FLAG_SEQUENTIAL_SCAN
- */
- nullptr); //_In_opt_ HANDLE hTemplateFile
+ auto createHandle = [&](DWORD dwShareMode)
+ {
+ return ::CreateFile(applyLongPathPrefix(filepath).c_str(), //_In_ LPCTSTR lpFileName,
+ GENERIC_READ, //_In_ DWORD dwDesiredAccess,
+ dwShareMode, //_In_ DWORD dwShareMode,
+ nullptr, //_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ OPEN_EXISTING, //_In_ DWORD dwCreationDisposition,
+ FILE_FLAG_SEQUENTIAL_SCAN, //_In_ DWORD dwFlagsAndAttributes,
+ /* possible values: (Reference http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx#caching_behavior)
+ FILE_FLAG_NO_BUFFERING
+ FILE_FLAG_RANDOM_ACCESS
+ FILE_FLAG_SEQUENTIAL_SCAN
+
+ tests on Win7 x64 show that FILE_FLAG_SEQUENTIAL_SCAN provides best performance for binary comparison in all cases:
+ - comparing different physical disks (DVD <-> HDD and HDD <-> HDD)
+ - even on same physical disk! (HDD <-> HDD)
+ - independent from client buffer size!
+
+ tests on XP show that FILE_FLAG_SEQUENTIAL_SCAN provides best performance for binary comparison when
+ - comparing different physical disks (DVD <-> HDD)
+
+ while FILE_FLAG_RANDOM_ACCESS offers best performance for
+ - same physical disk (HDD <-> HDD)
+
+ Problem: bad XP implementation of prefetch makes flag FILE_FLAG_SEQUENTIAL_SCAN effectively load two files at the same time
+ from one drive, swapping every 64 kB (or similar). File access times explode!
+ => For XP it is critical to use FILE_FLAG_RANDOM_ACCESS (to disable prefetch) if reading two files on same disk and
+ FILE_FLAG_SEQUENTIAL_SCAN when reading from different disk (e.g. massive performance improvement compared to random access for DVD <-> HDD!)
+ => there is no compromise that satisfies all cases! (on XP)
+
+ for FFS most comparisons are probably between different disks => let's use FILE_FLAG_SEQUENTIAL_SCAN
+ */
+ nullptr); //_In_opt_ HANDLE hTemplateFile
+ };
+ fileHandle = createHandle(FILE_SHARE_READ | FILE_SHARE_DELETE);
if (fileHandle == INVALID_HANDLE_VALUE)
-#elif defined ZEN_LINUX || defined ZEN_MAC
- checkForUnsupportedType(filepath); //throw FileError; reading a named pipe would block forever!
- const wchar_t functionName[] = L"fopen";
- fileHandle = ::fopen(filepath.c_str(), "r,type=record,noseek"); //utilize UTF-8 filepath
- if (!fileHandle)
-#endif
{
- const ErrorCode lastError = getLastError(); //copy before making other system calls!
- const std::wstring errorMsg = replaceCpy(_("Cannot open file %x."), L"%x", fmtFileName(filepath));
- std::wstring errorDescr = formatSystemError(functionName, lastError);
+ //=> support reading files which are open for write (e.g. Firefox db files): follow CopyFileEx() by addding FILE_SHARE_WRITE only for second try:
+ if (::GetLastError() == ERROR_SHARING_VIOLATION)
+ fileHandle = createHandle(FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE);
-#ifdef ZEN_WIN
- if (lastError == ERROR_SHARING_VIOLATION || //-> enhance error message!
- lastError == ERROR_LOCK_VIOLATION)
+ //begin of "regular" error reporting
+ if (fileHandle == INVALID_HANDLE_VALUE)
{
- const Zstring procList = getLockingProcessNames(filepath); //throw()
- if (!procList.empty())
- errorDescr = _("The file is locked by another process:") + L"\n" + procList;
+ const DWORD ec = ::GetLastError(); //copy before directly or indirectly making other system calls!
+ const std::wstring errorMsg = replaceCpy(_("Cannot open file %x."), L"%x", fmtFileName(filepath));
+ std::wstring errorDescr = formatSystemError(L"CreateFile", ec);
+
+ if (ec == ERROR_SHARING_VIOLATION || //-> enhance error message!
+ ec == ERROR_LOCK_VIOLATION)
+ {
+ const Zstring procList = getLockingProcessNames(filepath); //throw()
+ if (!procList.empty())
+ errorDescr = _("The file is locked by another process:") + L"\n" + procList;
+ }
+ throw FileError(errorMsg, errorDescr);
}
-#endif
- throw FileError(errorMsg, errorDescr);
}
+
+#elif defined ZEN_LINUX || defined ZEN_MAC
+ checkForUnsupportedType(filepath); //throw FileError; opening a named pipe would block forever!
+
+ //don't use O_DIRECT: http://yarchive.net/comp/linux/o_direct.html
+ fileHandle = ::open(filepath.c_str(), O_RDONLY);
+ if (fileHandle == -1) //don't check "< 0" -> docu seems to allow "-2" to be a valid file handle
+ throwFileError(replaceCpy(_("Cannot open file %x."), L"%x", fmtFileName(filepath)), L"open", getLastError());
+
+#ifndef ZEN_MAC //posix_fadvise not supported on OS X (and "dtruss" doesn't show alternative use of "fcntl() F_RDAHEAD/F_RDADVISE" for "cp")
+ //optimize read-ahead on input file:
+ if (::posix_fadvise(fileHandle, 0, 0, POSIX_FADV_SEQUENTIAL) != 0)
+ throwFileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(filepath)), L"posix_fadvise", getLastError());
+#endif
+#endif
}
@@ -141,60 +162,74 @@ FileInput::~FileInput()
#ifdef ZEN_WIN
::CloseHandle(fileHandle);
#elif defined ZEN_LINUX || defined ZEN_MAC
- ::fclose(fileHandle); //NEVER allow passing nullptr to fclose! -> crash!; fileHandle != nullptr in this context!
+ ::close(fileHandle);
#endif
}
-size_t FileInput::read(void* buffer, size_t bytesToRead) //returns actual number of bytes read; throw FileError
+size_t FileInput::read(void* buffer, size_t bytesToRead) //throw FileError; returns actual number of bytes read
{
- assert(!eof());
- if (bytesToRead == 0) return 0;
+ assert(!eof() || bytesToRead == 0);
#ifdef ZEN_WIN
- const wchar_t functionName[] = L"ReadFile";
+ if (bytesToRead == 0) return 0;
+
DWORD bytesRead = 0;
if (!::ReadFile(fileHandle, //__in HANDLE hFile,
buffer, //__out LPVOID lpBuffer,
static_cast<DWORD>(bytesToRead), //__in DWORD nNumberOfBytesToRead,
&bytesRead, //__out_opt LPDWORD lpNumberOfBytesRead,
nullptr)) //__inout_opt LPOVERLAPPED lpOverlapped
-#elif defined ZEN_LINUX || defined ZEN_MAC
- const wchar_t functionName[] = L"fread";
- const size_t bytesRead = ::fread(buffer, 1, bytesToRead, fileHandle);
- if (::ferror(fileHandle) != 0) //checks status of stream, not fread()!
-#endif
- throwFileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(getFilename())), functionName, getLastError());
+ throwFileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(getFilename())), L"ReadFile", getLastError());
-#ifdef ZEN_WIN
if (bytesRead < bytesToRead) //verify only!
- setEof();
-
-#elif defined ZEN_LINUX || defined ZEN_MAC
- if (::feof(fileHandle) != 0)
- setEof();
-
- if (bytesRead < bytesToRead)
- if (!eof()) //pathologic!?
- throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(getFilename())), L"Incomplete read."); //user should never see this
-#endif
+ setEof(); //
if (bytesRead > bytesToRead)
throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(getFilename())), L"buffer overflow"); //user should never see this
return bytesRead;
+
+#elif defined ZEN_LINUX || defined ZEN_MAC
+ //Compare copy_reg() in copy.c: ftp://ftp.gnu.org/gnu/coreutils/coreutils-8.23.tar.xz
+ size_t bytesReadTotal = 0;
+
+ while (bytesToRead > 0 && !eof()) //"read() with a count of 0 returns zero" => indistinguishable from eof! => check!
+ {
+ ssize_t bytesRead = 0;
+ do
+ {
+ bytesRead = ::read(fileHandle, buffer, bytesToRead);
+ }
+ while (bytesRead < 0 && errno == EINTR);
+
+ if (bytesRead < 0)
+ throwFileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(getFilename())), L"read", getLastError());
+ else if (bytesRead == 0) //"zero indicates end of file"
+ setEof();
+ else if (bytesRead > static_cast<ssize_t>(bytesToRead)) //better safe than sorry
+ throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(getFilename())), L"buffer overflow"); //user should never see this
+
+ //if ::read is interrupted (EINTR) right in the middle, it will return successfully with "bytesRead < bytesToRead" => loop!
+ buffer = static_cast<char*>(buffer) + bytesRead; //suppress warning about pointer arithmetics on void*
+ bytesToRead -= bytesRead;
+ bytesReadTotal += bytesRead;
+ }
+
+ return bytesReadTotal;
+#endif
}
+//----------------------------------------------------------------------------------------------------
FileOutput::FileOutput(FileHandle handle, const Zstring& filepath) : FileOutputBase(filepath), fileHandle(handle) {}
-FileOutput::FileOutput(const Zstring& filepath, AccessFlag access) : //throw FileError, ErrorTargetExisting
- FileOutputBase(filepath)
+FileOutput::FileOutput(const Zstring& filepath, AccessFlag access) : FileOutputBase(filepath) //throw FileError, ErrorTargetExisting
{
#ifdef ZEN_WIN
const DWORD dwCreationDisposition = access == FileOutput::ACC_OVERWRITE ? CREATE_ALWAYS : CREATE_NEW;
- auto getHandle = [&](DWORD dwFlagsAndAttributes)
+ auto createHandle = [&](DWORD dwFlagsAndAttributes)
{
return ::CreateFile(applyLongPathPrefix(filepath).c_str(), //_In_ LPCTSTR lpFileName,
GENERIC_READ | GENERIC_WRITE, //_In_ DWORD dwDesiredAccess,
@@ -212,20 +247,19 @@ FileOutput::FileOutput(const Zstring& filepath, AccessFlag access) : //throw Fil
nullptr); //_In_opt_ HANDLE hTemplateFile
};
- fileHandle = getHandle(FILE_ATTRIBUTE_NORMAL);
+ fileHandle = createHandle(FILE_ATTRIBUTE_NORMAL);
if (fileHandle == INVALID_HANDLE_VALUE)
{
- DWORD lastError = ::GetLastError(); //copy before directly or indirectly making other system calls!
+ DWORD ec = ::GetLastError(); //copy before directly or indirectly making other system calls!
//CREATE_ALWAYS fails with ERROR_ACCESS_DENIED if the existing file is hidden or "system" http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
- if (lastError == ERROR_ACCESS_DENIED &&
- dwCreationDisposition == CREATE_ALWAYS)
+ if (ec == ERROR_ACCESS_DENIED && dwCreationDisposition == CREATE_ALWAYS)
{
const DWORD attrib = ::GetFileAttributes(applyLongPathPrefix(filepath).c_str());
if (attrib != INVALID_FILE_ATTRIBUTES)
{
- fileHandle = getHandle(attrib); //retry: alas this may still fail for hidden file, e.g. accessing shared folder in XP as Virtual Box guest!
- lastError = ::GetLastError();
+ fileHandle = createHandle(attrib); //retry: alas this may still fail for hidden file, e.g. accessing shared folder in XP as Virtual Box guest!
+ ec = ::GetLastError();
}
}
@@ -233,41 +267,39 @@ FileOutput::FileOutput(const Zstring& filepath, AccessFlag access) : //throw Fil
if (fileHandle == INVALID_HANDLE_VALUE)
{
const std::wstring errorMsg = replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(filepath));
- std::wstring errorDescr = formatSystemError(L"CreateFile", lastError);
+ std::wstring errorDescr = formatSystemError(L"CreateFile", ec);
- if (lastError == ERROR_SHARING_VIOLATION || //-> enhance error message!
- lastError == ERROR_LOCK_VIOLATION)
+ if (ec == ERROR_SHARING_VIOLATION || //-> enhance error message!
+ ec == ERROR_LOCK_VIOLATION)
{
const Zstring procList = getLockingProcessNames(filepath); //throw()
if (!procList.empty())
errorDescr = _("The file is locked by another process:") + L"\n" + procList;
}
- if (lastError == ERROR_FILE_EXISTS || //confirmed to be used
- lastError == ERROR_ALREADY_EXISTS) //comment on msdn claims, this one is used on Windows Mobile 6
+ if (ec == ERROR_FILE_EXISTS || //confirmed to be used
+ ec == ERROR_ALREADY_EXISTS) //comment on msdn claims, this one is used on Windows Mobile 6
throw ErrorTargetExisting(errorMsg, errorDescr);
-
- //if (lastError == ERROR_PATH_NOT_FOUND) throw ErrorTargetPathMissing(errorMsg, errorDescr);
+ //if (ec == ERROR_PATH_NOT_FOUND) throw ErrorTargetPathMissing(errorMsg, errorDescr);
throw FileError(errorMsg, errorDescr);
}
}
#elif defined ZEN_LINUX || defined ZEN_MAC
- checkForUnsupportedType(filepath); //throw FileError; writing a named pipe would block forever!
- fileHandle = ::fopen(filepath.c_str(),
- //GNU extension: https://www.securecoding.cert.org/confluence/display/cplusplus/FIO03-CPP.+Do+not+make+assumptions+about+fopen()+and+file+creation
- access == ACC_OVERWRITE ? "w,type=record,noseek" : "wx,type=record,noseek");
- if (!fileHandle)
+ //checkForUnsupportedType(filepath); -> not needed, open() + O_WRONLY should fail fast
+
+ fileHandle = ::open(filepath.c_str(), O_WRONLY | O_CREAT | (access == FileOutput::ACC_CREATE_NEW ? O_EXCL : O_TRUNC),
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
+ if (fileHandle == -1)
{
- const int lastError = errno; //copy before directly or indirectly making other system calls!
- const std::wstring errorMsg = replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(getFilename()));
- const std::wstring errorDescr = formatSystemError(L"fopen", lastError);
+ const int ec = errno; //copy before making other system calls!
+ const std::wstring errorMsg = replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(filepath));
+ const std::wstring errorDescr = formatSystemError(L"open", ec);
- if (lastError == EEXIST)
+ if (ec == EEXIST)
throw ErrorTargetExisting(errorMsg, errorDescr);
-
- //if (lastError == ENOENT) throw ErrorTargetPathMissing(errorMsg, errorDescr);
+ //if (ec == ENOENT) throw ErrorTargetPathMissing(errorMsg, errorDescr);
throw FileError(errorMsg, errorDescr);
}
@@ -280,7 +312,7 @@ FileOutput::~FileOutput()
#ifdef ZEN_WIN
::CloseHandle(fileHandle);
#elif defined ZEN_LINUX || defined ZEN_MAC
- ::fclose(fileHandle); //NEVER allow passing nullptr to fclose! -> crash!
+ ::close(fileHandle);
#endif
}
@@ -288,99 +320,24 @@ FileOutput::~FileOutput()
void FileOutput::write(const void* buffer, size_t bytesToWrite) //throw FileError
{
#ifdef ZEN_WIN
- const wchar_t functionName[] = L"WriteFile";
DWORD bytesWritten = 0; //this parameter is NOT optional: http://blogs.msdn.com/b/oldnewthing/archive/2013/04/04/10407417.aspx
if (!::WriteFile(fileHandle, //__in HANDLE hFile,
buffer, //__out LPVOID lpBuffer,
static_cast<DWORD>(bytesToWrite), //__in DWORD nNumberOfBytesToWrite,
&bytesWritten, //__out_opt LPDWORD lpNumberOfBytesWritten,
nullptr)) //__inout_opt LPOVERLAPPED lpOverlapped
-#elif defined ZEN_LINUX || defined ZEN_MAC
- const wchar_t functionName[] = L"fwrite";
- const size_t bytesWritten = ::fwrite(buffer, 1, bytesToWrite, fileHandle);
- if (::ferror(fileHandle) != 0) //checks status of stream, not fwrite()!
-#endif
- throwFileError(replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(getFilename())), functionName, getLastError());
+ throwFileError(replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(getFilename())), L"WriteFile", getLastError());
if (bytesWritten != bytesToWrite) //must be fulfilled for synchronous writes!
throw FileError(replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(getFilename())), L"Incomplete write."); //user should never see this
-}
-
-
-#if defined ZEN_LINUX || defined ZEN_MAC
-//Compare copy_reg() in copy.c: ftp://ftp.gnu.org/gnu/coreutils/coreutils-5.0.tar.gz
-
-FileInputUnbuffered::FileInputUnbuffered(const Zstring& filepath) : FileInputBase(filepath) //throw FileError
-{
- checkForUnsupportedType(filepath); //throw FileError; reading a named pipe would block forever!
-
- fdFile = ::open(filepath.c_str(), O_RDONLY);
- if (fdFile == -1) //don't check "< 0" -> docu seems to allow "-2" to be a valid file handle
- throwFileError(replaceCpy(_("Cannot open file %x."), L"%x", fmtFileName(filepath)), L"open", getLastError());
-}
-
-
-FileInputUnbuffered::~FileInputUnbuffered() { ::close(fdFile); }
-
-
-size_t FileInputUnbuffered::read(void* buffer, size_t bytesToRead) //throw FileError; returns actual number of bytes read
-{
- assert(!eof());
- if (bytesToRead == 0) return 0; //[!]
-
- ssize_t bytesRead = 0;
- do
- {
- bytesRead = ::read(fdFile, buffer, bytesToRead);
- }
- while (bytesRead < 0 && errno == EINTR);
-
- if (bytesRead < 0)
- throwFileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(getFilename())), L"read", getLastError());
- else if (bytesRead == 0) //"zero indicates end of file"
- setEof();
- else if (bytesRead > static_cast<ssize_t>(bytesToRead)) //better safe than sorry
- throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(getFilename())), L"buffer overflow"); //user should never see this
- //if ::read is interrupted (EINTR) right in the middle, it will return successfully with "bytesRead < bytesToRead"!
- return bytesRead;
-}
-
-
-FileOutputUnbuffered::FileOutputUnbuffered(const Zstring& filepath, mode_t mode) : FileOutputBase(filepath) //throw FileError, ErrorTargetExisting
-{
- //checkForUnsupportedType(filepath); -> not needed, open() + O_EXCL shoul fail fast
-
- //overwrite is: O_CREAT | O_WRONLY | O_TRUNC
- fdFile = ::open(filepath.c_str(), O_CREAT | O_WRONLY | O_EXCL, mode & (S_IRWXU | S_IRWXG | S_IRWXO));
- if (fdFile == -1)
- {
- const int lastError = errno; //copy before making other system calls!
- const std::wstring errorMsg = replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(filepath));
- const std::wstring errorDescr = formatSystemError(L"open", lastError);
-
- if (lastError == EEXIST)
- throw ErrorTargetExisting(errorMsg, errorDescr);
-
- //if (lastError == ENOENT) throw ErrorTargetPathMissing(errorMsg, errorDescr);
-
- throw FileError(errorMsg, errorDescr);
- }
-}
-
-FileOutputUnbuffered::FileOutputUnbuffered(int fd, const Zstring& filepath) : FileOutputBase(filepath), fdFile(fd) {}
-
-FileOutputUnbuffered::~FileOutputUnbuffered() { ::close(fdFile); }
-
-
-void FileOutputUnbuffered::write(const void* buffer, size_t bytesToWrite) //throw FileError
-{
+#elif defined ZEN_LINUX || defined ZEN_MAC
while (bytesToWrite > 0)
{
ssize_t bytesWritten = 0;
do
{
- bytesWritten = ::write(fdFile, buffer, bytesToWrite);
+ bytesWritten = ::write(fileHandle, buffer, bytesToWrite);
}
while (bytesWritten < 0 && errno == EINTR);
@@ -394,9 +351,9 @@ void FileOutputUnbuffered::write(const void* buffer, size_t bytesToWrite) //thro
if (bytesWritten > static_cast<ssize_t>(bytesToWrite)) //better safe than sorry
throw FileError(replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(getFilename())), L"buffer overflow"); //user should never see this
- //if ::write is interrupted (EINTR) right in the middle, it will return successfully with "bytesWritten < bytesToWrite"!
+ //if ::write() is interrupted (EINTR) right in the middle, it will return successfully with "bytesWritten < bytesToWrite"!
buffer = static_cast<const char*>(buffer) + bytesWritten; //suppress warning about pointer arithmetics on void*
bytesToWrite -= bytesWritten;
}
-}
#endif
+}
diff --git a/zen/file_io.h b/zen/file_io.h
index 111d7a09..ee7841ca 100644
--- a/zen/file_io.h
+++ b/zen/file_io.h
@@ -12,9 +12,6 @@
#ifdef ZEN_WIN
#include "win.h" //includes "windows.h"
-#elif defined ZEN_LINUX || defined ZEN_MAC
- #include <cstdio>
- #include <sys/stat.h>
#endif
@@ -26,12 +23,12 @@ namespace zen
static const char LINE_BREAK[] = "\n"; //since OS X apple uses newline, too
#endif
-//buffered file IO optimized for sequential read/write accesses + better error reporting + long path support + following symlinks
+//OS-buffered file IO optimized for sequential read/write accesses + better error reporting + long path support + following symlinks
#ifdef ZEN_WIN
typedef HANDLE FileHandle;
#elif defined ZEN_LINUX || defined ZEN_MAC
- typedef FILE* FileHandle;
+ typedef int FileHandle;
#endif
class FileInput : public FileInputBase
@@ -42,6 +39,7 @@ public:
~FileInput();
size_t read(void* buffer, size_t bytesToRead) override; //throw FileError; returns actual number of bytes read
+ FileHandle getHandle() { return fileHandle; }
private:
FileHandle fileHandle;
@@ -56,45 +54,11 @@ public:
~FileOutput();
void write(const void* buffer, size_t bytesToWrite) override; //throw FileError
+ FileHandle getHandle() { return fileHandle; }
private:
FileHandle fileHandle;
};
-
-#if defined ZEN_LINUX || defined ZEN_MAC
-warn_static("get rid of FileInputUnbuffered/FileOutputUnbuffered, use fdopen instead")
-
-class FileInputUnbuffered : public FileInputBase
-{
-public:
- FileInputUnbuffered(const Zstring& filepath); //throw FileError
- ~FileInputUnbuffered();
-
- //considering safe-read.c it seems buffer size should be a multiple of 8192
- size_t read(void* buffer, size_t bytesToRead) override; //throw FileError; returns actual number of bytes read
- //do NOT rely on partially filled buffer meaning EOF!
-
- int getDescriptor() { return fdFile;}
-
-private:
- int fdFile;
-};
-
-class FileOutputUnbuffered : public FileOutputBase
-{
-public:
- //creates a new file (no overwrite allowed!)
- FileOutputUnbuffered(const Zstring& filepath, mode_t mode); //throw FileError, ErrorTargetExisting
- FileOutputUnbuffered(int fd, const Zstring& filepath); //takes ownership!
- ~FileOutputUnbuffered();
-
- void write(const void* buffer, size_t bytesToWrite) override; //throw FileError
- int getDescriptor() { return fdFile;}
-
-private:
- int fdFile;
-};
-#endif
}
#endif //FILEIO_89578342758342572345
diff --git a/zen/file_traverser.cpp b/zen/file_traverser.cpp
index 2d652d2b..baf40e9e 100644
--- a/zen/file_traverser.cpp
+++ b/zen/file_traverser.cpp
@@ -68,6 +68,8 @@ void zen::traverseFolder(const Zstring& dirPath,
//skip "." and ".."
const Zchar* const shortName = findData.cFileName;
+
+ if (shortName[0] == 0) throw FileError(replaceCpy(_("Cannot enumerate directory %x."), L"%x", fmtFileName(dirPath)), L"Data corruption: Found item without name.");
if (shortName[0] == L'.' &&
(shortName[1] == 0 || (shortName[1] == L'.' && shortName[2] == 0)))
continue;
@@ -125,6 +127,8 @@ void zen::traverseFolder(const Zstring& dirPath,
//don't return "." and ".."
const char* shortName = dirEntry->d_name;
+
+ if (shortName[0] == 0) throw FileError(replaceCpy(_("Cannot enumerate directory %x."), L"%x", fmtFileName(dirPath)), L"Data corruption: Found item without name.");
if (shortName[0] == '.' &&
(shortName[1] == 0 || (shortName[1] == '.' && shortName[2] == 0)))
continue;
diff --git a/zen/fixed_list.h b/zen/fixed_list.h
index 2a577f13..a1f83eb4 100644
--- a/zen/fixed_list.h
+++ b/zen/fixed_list.h
@@ -60,8 +60,8 @@ public:
const_iterator begin() const { return firstInsert; }
const_iterator end () const { return const_iterator(); }
- const_iterator cbegin() const { return firstInsert; }
- const_iterator cend () const { return const_iterator(); }
+ //const_iterator cbegin() const { return firstInsert; }
+ //const_iterator cend () const { return const_iterator(); }
reference front() { return firstInsert->val; }
const_reference front() const { return firstInsert->val; }
diff --git a/zen/perf.h b/zen/perf.h
index 17aeabd0..53519274 100644
--- a/zen/perf.h
+++ b/zen/perf.h
@@ -48,9 +48,9 @@ public:
const std::int64_t delta = 1000 * dist(startTime, now) / ticksPerSec_;
#ifdef ZEN_WIN
- std::ostringstream ss;
- ss << delta << " ms";
- ::MessageBoxA(nullptr, ss.str().c_str(), "Timer", 0);
+ std::wostringstream ss;
+ ss << delta << L" ms";
+ ::MessageBox(nullptr, ss.str().c_str(), L"Timer", MB_OK);
#else
std::clog << "Perf: duration: " << delta << " ms\n";
#endif
diff --git a/zen/recycler.h b/zen/recycler.h
index 2319f7b6..5112444d 100644
--- a/zen/recycler.h
+++ b/zen/recycler.h
@@ -35,7 +35,7 @@ bool recycleOrDelete(const Zstring& itempath); //throw FileError, return "true"
#ifdef ZEN_WIN
-//can take a long time if recycle bin is full and drive is slow!!! => buffer!
+//Win XP: can take a long time if recycle bin is full and drive is slow!!! => buffer result!
bool recycleBinExists(const Zstring& dirpath, const std::function<void ()>& onUpdateGui); //throw FileError
void recycleOrDelete(const std::vector<Zstring>& filepaths, //throw FileError, return "true" if file/dir was actually deleted
diff --git a/zen/string_tools.h b/zen/string_tools.h
index 1b8595c7..35a07b64 100644
--- a/zen/string_tools.h
+++ b/zen/string_tools.h
@@ -560,9 +560,9 @@ Num extractInteger(const S& str, bool& hasMinusSign) //very fast conversion to i
}
Num number = 0;
- for (const CharType* iter = first; iter != last; ++iter)
+ for (const CharType* it = first; it != last; ++it)
{
- const CharType c = *iter;
+ const CharType c = *it;
if (static_cast<CharType>('0') <= c && c <= static_cast<CharType>('9'))
{
number *= 10;
diff --git a/zen/symlink_target.h b/zen/symlink_target.h
index 1a7f45bd..9239385a 100644
--- a/zen/symlink_target.h
+++ b/zen/symlink_target.h
@@ -164,7 +164,7 @@ Zstring getResolvedFilePath_impl(const Zstring& linkPath) //throw FileError
throw FileError(replaceCpy(_("Cannot determine final path for %x."), L"%x", fmtFileName(linkPath)), replaceCpy(_("Cannot find system function %x."), L"%x", L"\"GetFinalPathNameByHandleW\""));
- const HANDLE hDir = ::CreateFile(applyLongPathPrefix(linkPath).c_str(), //_In_ LPCTSTR lpFileName,
+ const HANDLE hFile = ::CreateFile(applyLongPathPrefix(linkPath).c_str(), //_In_ LPCTSTR lpFileName,
0, //_In_ DWORD dwDesiredAccess,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, //_In_ DWORD dwShareMode,
nullptr, //_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
@@ -172,16 +172,16 @@ Zstring getResolvedFilePath_impl(const Zstring& linkPath) //throw FileError
//needed to open a directory:
FILE_FLAG_BACKUP_SEMANTICS, //_In_ DWORD dwFlagsAndAttributes,
nullptr); //_In_opt_ HANDLE hTemplateFile
- if (hDir == INVALID_HANDLE_VALUE)
+ if (hFile == INVALID_HANDLE_VALUE)
throwFileError(replaceCpy(_("Cannot determine final path for %x."), L"%x", fmtFileName(linkPath)), L"CreateFile", getLastError());
- ZEN_ON_SCOPE_EXIT(::CloseHandle(hDir));
+ ZEN_ON_SCOPE_EXIT(::CloseHandle(hFile));
- const DWORD bufferSize = getFinalPathNameByHandle(hDir, nullptr, 0, 0);
+ const DWORD bufferSize = getFinalPathNameByHandle(hFile, nullptr, 0, 0);
if (bufferSize == 0)
throwFileError(replaceCpy(_("Cannot determine final path for %x."), L"%x", fmtFileName(linkPath)), L"GetFinalPathNameByHandle", getLastError());
std::vector<wchar_t> targetPath(bufferSize);
- const DWORD charsWritten = getFinalPathNameByHandle(hDir, //__in HANDLE hFile,
+ const DWORD charsWritten = getFinalPathNameByHandle(hFile, //__in HANDLE hFile,
&targetPath[0], //__out LPTSTR lpszFilePath,
bufferSize, //__in DWORD cchFilePath,
0); //__in DWORD dwFlags
diff --git a/zen/thread.h b/zen/thread.h
index cca2561f..d860abd0 100644
--- a/zen/thread.h
+++ b/zen/thread.h
@@ -23,7 +23,7 @@
#endif
#ifdef _MSC_VER
#pragma warning(push)
- #pragma warning(disable : 4702 4913) //unreachable code; user defined binary operator ',' exists but no overload could convert all operands, default built-in binary operator ',' used
+ #pragma warning(disable: 4702 4913) //unreachable code; user defined binary operator ',' exists but no overload could convert all operands, default built-in binary operator ',' used
#endif
#include <boost/thread.hpp>
@@ -83,6 +83,7 @@ private:
+
//###################### implementation ######################
#ifndef BOOST_HAS_THREADS
#error just some paranoia check...
diff --git a/zen/time.h b/zen/time.h
index 4593c48b..996593c8 100644
--- a/zen/time.h
+++ b/zen/time.h
@@ -89,12 +89,11 @@ struct std::tm toClibTimeComponents(const TimeComp& comp)
ctc.tm_min = comp.minute; //0-59
ctc.tm_sec = comp.second; //0-61
ctc.tm_isdst = -1; //> 0 if DST is active, == 0 if DST is not active, < 0 if the information is not available
-
return ctc;
}
inline
-TimeComp toZenTimeComponents(const struct std::tm& ctc)
+TimeComp toZenTimeComponents(const struct ::tm& ctc)
{
TimeComp comp;
comp.year = ctc.tm_year + 1900;
@@ -219,7 +218,7 @@ String formatTime(const String2& format, const TimeComp& comp, UserDefinedFormat
std::mktime(&ctc); // unfortunately std::strftime() needs all elements of "struct tm" filled, e.g. tm_wday, tm_yday
//note: although std::mktime() explicitly expects "local time", calculating weekday and day of year *should* be time-zone and DST independent
- CharType buffer[256];
+ CharType buffer[256] = {};
const size_t charsWritten = strftimeWrap(buffer, 256, strBegin(format), &ctc);
return String(buffer, charsWritten);
}
@@ -236,16 +235,17 @@ String formatTime(FormatType, const TimeComp& comp, PredefinedFormatTag)
inline
TimeComp localTime(time_t utc)
{
-#ifdef _MSC_VER
- struct tm lt = {};
- errno_t rv = ::localtime_s(&lt, &utc); //more secure?
- if (rv != 0)
- return TimeComp();
- return implementation::toZenTimeComponents(lt);
+ struct ::tm lt = {};
+
+ //use thread-safe variants of localtime()!
+#ifdef ZEN_WIN
+ if (::localtime_s(&lt, &utc) != 0)
#else
- struct tm* lt = std::localtime(&utc); //returns nullptr for invalid time_t on Visual 2010!!! (testvalue "-1")
- return lt ? implementation::toZenTimeComponents(*lt) : TimeComp();
+ if (::localtime_r(&utc, &lt) == nullptr)
#endif
+ return TimeComp();
+
+ return implementation::toZenTimeComponents(lt);
}
diff --git a/zen/win_ver.h b/zen/win_ver.h
index 9cf792f2..611a27c0 100644
--- a/zen/win_ver.h
+++ b/zen/win_ver.h
@@ -28,7 +28,7 @@ inline bool operator==(const OsVersion& lhs, const OsVersion& rhs) { return lhs.
//version overview: http://msdn.microsoft.com/en-us/library/ms724834(VS.85).aspx
-const OsVersion osVersionWin10 (6, 4);
+const OsVersion osVersionWin10 (10, 0);
const OsVersion osVersionWin81 (6, 3);
const OsVersion osVersionWin8 (6, 2);
const OsVersion osVersionWin7 (6, 1);
@@ -40,7 +40,8 @@ const OsVersion osVersionWin2000 (5, 0);
/*
NOTE: there are two basic APIs to check Windows version: (empiric study following)
GetVersionEx -> reports version considering compatibility mode (and compatibility setting in app manifest since Windows 8.1)
- VerifyVersionInfo -> always reports *real* Windows Version
+ VerifyVersionInfo -> always reports *real* Windows Version
+ *) Win10 Technical preview caveat: VerifyVersionInfo returns 6.3 unless manifest entry is added!!!
*/
//GetVersionEx()-based APIs:
@@ -69,13 +70,9 @@ OsVersion getOsVersion()
OSVERSIONINFO osvi = {};
osvi.dwOSVersionInfoSize = sizeof(osvi);
#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4996) //"'GetVersionExW': was declared deprecated"
+#pragma warning(suppress: 4996) //"'GetVersionExW': was declared deprecated"
#endif
if (!::GetVersionEx(&osvi)) //38 ns per call! (yes, that's nano!) -> we do NOT miss C++11 thread-safe statics right now...
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
{
assert(false);
return OsVersion();
@@ -99,7 +96,7 @@ bool isRealOsVersion(const OsVersion& ver)
const bool rv = ::VerifyVersionInfo(&verInfo, VER_MAJORVERSION | VER_MINORVERSION, conditionMask)
== TRUE; //silence VC "performance warnings"
- assert(rv || GetLastError() == ERROR_OLD_WIN_VERSION);
+ assert(rv || ::GetLastError() == ERROR_OLD_WIN_VERSION);
return rv;
}
@@ -125,7 +122,7 @@ inline
bool running64BitWindows() //http://blogs.msdn.com/b/oldnewthing/archive/2005/02/01/364563.aspx
{
static_assert(zen::is32BitBuild || zen::is64BitBuild, "");
- return is64BitBuild || runningWOW64(); //should we bother to make this a compile-time check for the first case?
+ return is64BitBuild || runningWOW64(); //should we bother to give a compile-time result in the first case?
}
}
diff --git a/zen/zstring.cpp b/zen/zstring.cpp
index d87e7989..f803f160 100644
--- a/zen/zstring.cpp
+++ b/zen/zstring.cpp
@@ -92,7 +92,7 @@ private:
#else
std::cerr << message;
#endif
- throw std::logic_error("Memory leak! " + message);
+ throw std::logic_error("Memory leak! " + message + "\n" + std::string(__FILE__) + ":" + numberTo<std::string>(__LINE__));
}
std::mutex lockActStrings;
@@ -158,7 +158,7 @@ int cmpFileName(const Zstring& lhs, const Zstring& rhs)
static_cast<int>(rhs.size()), //__in int cchCount2,
true); //__in BOOL bIgnoreCase
if (rv <= 0)
- throw std::runtime_error("Error comparing strings (CompareStringOrdinal).");
+ throw std::runtime_error("Error comparing strings (CompareStringOrdinal). " + std::string(__FILE__) + ":" + numberTo<std::string>(__LINE__));
else
return rv - 2; //convert to C-style string compare result
}
@@ -184,7 +184,7 @@ int cmpFileName(const Zstring& lhs, const Zstring& rhs)
static_cast<int>(minSize), //__in int cchSrc,
strOut, //__out LPTSTR lpDestStr,
static_cast<int>(minSize)) == 0) //__in int cchDest
- throw std::runtime_error("Error comparing strings (LCMapString).");
+ throw std::runtime_error("Error comparing strings (LCMapString). " + std::string(__FILE__) + ":" + numberTo<std::string>(__LINE__));
};
auto eval = [&](wchar_t* bufL, wchar_t* bufR)
@@ -231,7 +231,7 @@ Zstring makeUpperCopy(const Zstring& str)
len, //__in int cchSrc,
&*output.begin(), //__out LPTSTR lpDestStr,
len) == 0) //__in int cchDest
- throw std::runtime_error("Error comparing strings (LCMapString).");
+ throw std::runtime_error("Error comparing strings (LCMapString). " + std::string(__FILE__) + ":" + numberTo<std::string>(__LINE__));
return output;
}
bgstack15