diff options
130 files changed, 10611 insertions, 10481 deletions
diff --git a/Application.cpp b/Application.cpp index aa2fa856..85606613 100644 --- a/Application.cpp +++ b/Application.cpp @@ -59,8 +59,7 @@ void onTerminationRequested() void crtInvalidParameterHandler(const wchar_t* expression, const wchar_t* function, const wchar_t* file, unsigned int line, uintptr_t pReserved) { assert(false); } #endif } -#endif - +#endif bool Application::OnInit() { @@ -96,12 +95,12 @@ std::vector<wxString> getCommandlineArgs(const wxApp& app) cmdLine.resize(cmdLine.size() - 1); auto iterStart = cmdLine.end(); //end() means: no token - for (auto iter = cmdLine.begin(); iter != cmdLine.end(); ++iter) - if (*iter == L' ') //space commits token + for (auto it = cmdLine.begin(); it != cmdLine.end(); ++it) + if (*it == L' ') //space commits token { if (iterStart != cmdLine.end()) { - args.push_back(std::wstring(iterStart, iter)); + args.push_back(std::wstring(iterStart, it)); iterStart = cmdLine.end(); //expect consecutive blanks! } } @@ -109,12 +108,12 @@ std::vector<wxString> getCommandlineArgs(const wxApp& app) { //start new token if (iterStart == cmdLine.end()) - iterStart = iter; + iterStart = it; - if (*iter == L'\"') + if (*it == L'\"') { - iter = std::find(iter + 1, cmdLine.end(), L'\"'); - if (iter == cmdLine.end()) + it = std::find(it + 1, cmdLine.end(), L'\"'); + if (it == cmdLine.end()) break; } } @@ -188,9 +187,9 @@ void Application::OnStartApplication(wxIdleEvent&) XmlGuiConfig guiCfg; guiCfg.mainCfg.syncCfg.directionCfg.var = DirectionConfig::MIRROR; - for (auto iter = commandArgs.begin(); iter != commandArgs.end(); ++iter) + for (auto it = commandArgs.begin(); it != commandArgs.end(); ++it) { - size_t index = iter - commandArgs.begin(); + size_t index = it - commandArgs.begin(); FolderPairEnh& fp = [&]() -> FolderPairEnh& { @@ -202,25 +201,25 @@ void Application::OnStartApplication(wxIdleEvent&) }(); if (index % 2 == 0) - fp.leftDirectory = toZ(*iter); + fp.leftDirectory = toZ(*it); else - fp.rightDirectory = toZ(*iter); + fp.rightDirectory = toZ(*it); } runGuiMode(guiCfg); } else //mode 2: try to set config/batch-filename set by %1 parameter { - for (auto iter = commandArgs.begin(); iter != commandArgs.end(); ++iter) + for (auto it = commandArgs.begin(); it != commandArgs.end(); ++it) { - const Zstring& filename = toZ(*iter); + const Zstring& filename = toZ(*it); if (!fileExists(filename)) //be a little tolerant { if (fileExists(filename + Zstr(".ffs_batch"))) - *iter += L".ffs_batch"; + *it += L".ffs_batch"; else if (fileExists(filename + Zstr(".ffs_gui"))) - *iter += L".ffs_gui"; + *it += L".ffs_gui"; else { wxMessageBox(replaceCpy(_("Cannot find file %x."), L"%x", fmtFileName(filename)), _("Error"), wxOK | wxICON_ERROR); diff --git a/BUILD/Changelog.txt b/BUILD/Changelog.txt index 21a0bbe1..7c82a459 100644 --- a/BUILD/Changelog.txt +++ b/BUILD/Changelog.txt @@ -2,6 +2,26 @@ |FreeFileSync| -------------- +Changelog v5.11 +--------------- +New file versioning scheme: move to folder replacing existing files +Fixed high CPU consumption after longer syncs +Improved .ffs_batch configuration file handling +Allow to quick save .ffs_batch files on main dialog and program exit +Convert batch-exclusive settings when opening a .ffs_batch file on main dialog +Redesigned configuration dialog layout +Enhanced all file I/O error messages to show locking processes (Windows Vista and later) +Separator in CSV file now locale dependent +Avoid "Windows Error Code 2" for truly empty directories +Macro %month% resolves to decimal number +New macro %timestamp% +Revised sync progress graph +Fixed progress graph graphics glitch for RTL layout +Allow XML element values to contain non-escaped quotation marks +Updated help file +Updated translation files + + Changelog v5.10 --------------- Show synchronization log as a grid in results dialog diff --git a/BUILD/FreeFileSync.chm b/BUILD/FreeFileSync.chm Binary files differindex 07e52459..e511c8e0 100644 --- a/BUILD/FreeFileSync.chm +++ b/BUILD/FreeFileSync.chm diff --git a/BUILD/Help/FreeFileSync.hhp b/BUILD/Help/FreeFileSync.hhp index 1604194a..262f58c1 100644 --- a/BUILD/Help/FreeFileSync.hhp +++ b/BUILD/Help/FreeFileSync.hhp @@ -11,7 +11,7 @@ Title=FreeFileSync - Help [FILES] html\FreeFileSync.html -html\Backup Strategies.html +html\Versioning.html html\Batch Scripting.html html\Compare by File Size.html html\Comparison Settings.html diff --git a/BUILD/Help/Table of Contents.hhc b/BUILD/Help/Table of Contents.hhc index 2995a868..f54645e7 100644 --- a/BUILD/Help/Table of Contents.hhc +++ b/BUILD/Help/Table of Contents.hhc @@ -20,10 +20,6 @@ <param name="Local" value="html\FreeFileSync.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Backup Strategies"> - <param name="Local" value="html\Backup Strategies.html"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> <param name="Name" value="Batch Scripting"> <param name="Local" value="html\Batch Scripting.html"> </OBJECT> @@ -64,6 +60,10 @@ <param name="Local" value="html\Variable Drive Letters.html"> </OBJECT> <LI> <OBJECT type="text/sitemap"> + <param name="Name" value="Versioning"> + <param name="Local" value="html\Versioning.html"> + </OBJECT> + <LI> <OBJECT type="text/sitemap"> <param name="Name" value="Volume Shadow Copy"> <param name="Local" value="html\Volume Shadow Copy.html"> </OBJECT> diff --git a/BUILD/Help/html/Backup Strategies.html b/BUILD/Help/html/Backup Strategies.html deleted file mode 100644 index 4cc4dd46..00000000 --- a/BUILD/Help/html/Backup Strategies.html +++ /dev/null @@ -1,67 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> -<HTML> -<HEAD> - <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> - <TITLE></TITLE> - <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)"> - <META NAME="CREATED" CONTENT="20091206;16574000"> - <META NAME="CHANGED" CONTENT="20121007;13361000"> - <META NAME="Info 1" CONTENT=""> - <META NAME="Info 2" CONTENT=""> - <META NAME="Info 3" CONTENT=""> - <META NAME="Info 4" CONTENT=""> - <STYLE TYPE="text/css"> - <!-- - @page { margin: 2cm } - P { margin-bottom: 0.21cm } - H2.cjk { font-family: "SimSun" } - H2.ctl { font-family: "Mangal" } - A:link { so-language: zxx } - --> - </STYLE> -</HEAD> -<BODY LANG="en-US" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Backup -Strategies</FONT></FONT></H2> -<P STYLE="margin-bottom: 0cm"><BR> -</P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>1. -Full backup with versioning of old files</B></FONT></P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">In -synchronization settings select "Versioning" for deletion -handling. FreeFileSync will move files that have been deleted or -overwritten with newer versions into the provided directory and -append a time-stamp. This is effectively a space-optimized way to -save all older versions of files separately while the recent ones are -available in main source and target directories.</FONT></P> -<P STYLE="margin-bottom: 0cm"><BR> -</P> -<P STYLE="margin-bottom: 0cm"><BR> -</P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>2. -Full backup to different target directories</B></FONT></P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">All -directory input fields may contain environment variables and special -macros that are expanded during synchronization. This allows for -complete backups into different target directories.</FONT></P> -<P STYLE="margin-bottom: 0cm"><BR> -</P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example:</B></FONT></P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">A -directory "C:\Source" requires a daily backup into a -time-stamped target directory like "C:\Target_2009-10-08". -Base directories are set up accordingly:</FONT></P> -<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen5" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> - <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif">Source folder: "<FONT FACE="Courier New, monospace">C:\Source</FONT>"<BR>Target - folder: "<FONT FACE="Courier New, monospace">C:\Target_%date%</FONT>"</FONT></P> -</SPAN><BR CLEAR=LEFT><BR> -</P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Latter -will be dynamically replaced with the current date during -synchronization. In order to further automate this process, you can -create a *.ffs_batch file with this configuration and choose "<I>ignore -errors</I>" to avoid the popup message that target directory is -not (yet) existing.</FONT></P> -</BODY> -</HTML>
\ No newline at end of file diff --git a/BUILD/Help/html/Comparison Settings.html b/BUILD/Help/html/Comparison Settings.html index cf1d9ffa..e30b33f5 100644 --- a/BUILD/Help/html/Comparison Settings.html +++ b/BUILD/Help/html/Comparison Settings.html @@ -132,7 +132,7 @@ offers three options to configure handling of symbolic links (also called symlinks or soft links):</FONT></P> <OL> <LI><P STYLE="margin-bottom: 0cm"><SPAN STYLE="text-decoration: none"><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-style: normal"><B>Exclude:</B></SPAN></FONT></SPAN> - S<FONT FACE="Tahoma, sans-serif">kip symbolic links while scanning + <FONT FACE="Tahoma, sans-serif">Skip symbolic links while scanning directories.<BR></FONT> </P> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Direct:</B></FONT> <FONT FACE="Tahoma, sans-serif">Evaluate the symbolic link object diff --git a/BUILD/Help/html/FreeFileSync.html b/BUILD/Help/html/FreeFileSync.html index 04d18c92..215ec4d1 100644 --- a/BUILD/Help/html/FreeFileSync.html +++ b/BUILD/Help/html/FreeFileSync.html @@ -29,17 +29,17 @@ Folder Comparison and Synchronization -</SPAN></I></FONT></H3> <H3 CLASS="western" ALIGN=LEFT>Usage:</H3> <OL> <LI VALUE=1><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Choose - left and right directories.<BR></FONT><IMG SRC="../img/SourceTarget.png" NAME="Grafik4" ALIGN=TEXTTOP WIDTH=426 HEIGHT=50 BORDER=0></P> + left and right directories.<BR></FONT><IMG SRC="../img/SourceTarget.png" NAME="Grafik4" ALIGN=TEXTTOP BORDER=0></P> <P STYLE="margin-bottom: 0cm"> </P> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">"</FONT><FONT FACE="Tahoma, sans-serif"><I>Compare</I></FONT><FONT FACE="Tahoma, sans-serif">" - them.<BR></FONT><IMG SRC="../img/CompareButton.png" NAME="Grafik1" ALIGN=BOTTOM WIDTH=178 HEIGHT=44 BORDER=0></P> + them.<BR></FONT><IMG SRC="../img/CompareButton.png" NAME="Grafik1" ALIGN=BOTTOM BORDER=0></P> <P STYLE="margin-bottom: 0cm"> </P> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Select - synchronization settings.<BR></FONT><IMG SRC="../img/SyncConfigButton.png" NAME="Grafik3" ALIGN=BOTTOM WIDTH=44 HEIGHT=44 BORDER=0></P> + synchronization settings.<BR></FONT><IMG SRC="../img/SyncConfigButton.png" NAME="Grafik3" ALIGN=BOTTOM BORDER=0></P> <P STYLE="margin-bottom: 0cm"> </P> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Press "</FONT><FONT FACE="Tahoma, sans-serif"><I>Synchronize...</I></FONT><FONT FACE="Tahoma, sans-serif">" - to begin synchronization.<BR></FONT><IMG SRC="../img/SynchronizeButton.png" NAME="Grafik2" ALIGN=BOTTOM WIDTH=178 HEIGHT=44 BORDER=0></P> + to begin synchronization.<BR></FONT><IMG SRC="../img/SynchronizeButton.png" NAME="Grafik2" ALIGN=BOTTOM BORDER=0></P> </OL> <P STYLE="margin-bottom: 0cm; border-top: none; border-bottom: 1px solid #000000; border-left: none; border-right: none; padding-top: 0cm; padding-bottom: 0.07cm; padding-left: 0cm; padding-right: 0cm"> <BR> @@ -49,7 +49,7 @@ Folder Comparison and Synchronization -</SPAN></I></FONT></H3> <H3 CLASS="western" STYLE="page-break-before: always"><FONT FACE="Tahoma, sans-serif">Main Dialog:</FONT></H3> <OL> - <P STYLE="margin-bottom: 0cm"><IMG SRC="../img/MainDialog.png" NAME="Grafik5" ALIGN=BOTTOM WIDTH=671 HEIGHT=428 BORDER=0></P> + <P STYLE="margin-bottom: 0cm"><IMG SRC="../img/MainDialog.png" NAME="Grafik5" ALIGN=BOTTOM BORDER=0></P> </OL> <P STYLE="margin-bottom: 0cm"><BR> </P> diff --git a/BUILD/Help/html/Links.html b/BUILD/Help/html/Links.html index 2616b9ee..ba9daab0 100644 --- a/BUILD/Help/html/Links.html +++ b/BUILD/Help/html/Links.html @@ -3,9 +3,9 @@ <HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> <TITLE></TITLE> - <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)"> + <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Win32)"> <META NAME="CREATED" CONTENT="20091206;16574000"> - <META NAME="CHANGED" CONTENT="20120511;23101500"> + <META NAME="CHANGED" CONTENT="20121201;15395784"> <STYLE TYPE="text/css"> <!-- @page { margin: 2cm } @@ -17,24 +17,24 @@ </STYLE> </HEAD> <BODY LANG="de-DE" DIR="LTR"> -<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">Links</FONT></FONT></H2> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">FreeFileSync +Links</FONT></FONT></H2> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Homepage:<BR></FONT><A HREF="http://freefilesync.sourceforge.net/"><FONT COLOR="#000080"><FONT FACE="Tahoma, sans-serif"><SPAN LANG="zxx"><U>http://freefilesync.sourceforge.net</U></SPAN></FONT></FONT></A></P> <P STYLE="margin-bottom: 0cm"><BR> </P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">FreeFileSync -on SourceForge:<BR><A HREF="http://sourceforge.net/projects/freefilesync">http://sourceforge.net/projects/freefilesync</A></FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Project +on SourceForge: feedback, suggestions and +bug-reports<BR><A HREF="http://sourceforge.net/projects/freefilesync">http://sourceforge.net/projects/freefilesync</A></FONT></P> <P STYLE="margin-bottom: 0cm"><BR> </P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">For -feedback, suggestions or bug-reports you can write an email -to:<BR><A HREF="mailto:zenju@gmx.de">zenju [at] gmx [dot] de</A></FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Direct +email support:<BR><A HREF="mailto:zenju@gmx.de">zenju [at] gmx [dot] +de</A></FONT></P> <P STYLE="margin-bottom: 0cm"><BR> </P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Or -report directly to:<BR><A HREF="http://sourceforge.net/tracker/?group_id=234430">http://sourceforge.net/tracker/?group_id=234430</A></FONT></P> -<P STYLE="margin-bottom: 0cm"><BR> -</P> -<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Support -the FreeFileSync project:<BR><A HREF="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zenju@gmx.de&no_shipping=1&lc=US&currency_code=EUR">Donate via PayPal</A></FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">If you +like FreeFileSync consider supporting the project by a +donation:<BR><A HREF="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zenju@gmx.de&no_shipping=1&lc=US&currency_code=EUR">Donate +via PayPal</A></FONT></P> </BODY> </HTML>
\ No newline at end of file diff --git a/BUILD/Help/html/Macros.html b/BUILD/Help/html/Macros.html index c491c22c..39267590 100644 --- a/BUILD/Help/html/Macros.html +++ b/BUILD/Help/html/Macros.html @@ -3,9 +3,9 @@ <HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> <TITLE></TITLE> - <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)"> + <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Win32)"> <META NAME="CREATED" CONTENT="20091206;16574000"> - <META NAME="CHANGED" CONTENT="20121007;19184600"> + <META NAME="CHANGED" CONTENT="20121226;13095515"> <META NAME="Info 1" CONTENT=""> <META NAME="Info 2" CONTENT=""> <META NAME="Info 3" CONTENT=""> @@ -36,17 +36,19 @@ variables</B></SPAN> can also be used.</FONT></P> macros:</B></FONT></P> <P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> - <FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">%time% - - </FONT>current time, format [hhmmss], e. g. "<FONT FACE="Courier New, monospace">201340</FONT>"<BR><FONT FACE="Courier New, monospace">%date% - - </FONT>current date, e. g. "<FONT FACE="Courier New, monospace">2010-07-13</FONT>"<BR><BR><FONT FACE="Courier New, monospace">%weekday% - - </FONT>day of the week, e. g. "<FONT FACE="Courier New, monospace">Monday</FONT>"<BR><FONT FACE="Courier New, monospace">%week% - - </FONT>calendar week, e. g. "<FONT FACE="Courier New, monospace">28</FONT>"<BR><BR><FONT FACE="Courier New, monospace">%year% - - </FONT>current year, e. g. "<FONT FACE="Courier New, monospace">2010</FONT>"<BR><FONT FACE="Courier New, monospace">%month% - - </FONT>current month, e. g. "<FONT FACE="Courier New, monospace">July</FONT>"<BR><FONT FACE="Courier New, monospace">%day% - - </FONT>current day, e. g. "<FONT FACE="Courier New, monospace">21</FONT>"<BR><BR><FONT FACE="Courier New, monospace">%hour% - - </FONT>current hour, e. g. "<FONT FACE="Courier New, monospace">20</FONT>"<BR><FONT FACE="Courier New, monospace">%min% - - </FONT>current minute, e. g. "<FONT FACE="Courier New, monospace">13</FONT>"<BR><FONT FACE="Courier New, monospace">%sec% - - </FONT>current second, e. g. "<FONT FACE="Courier New, monospace">40</FONT>"</FONT></P> + <FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">%date% - + </FONT>format [YYYY-MM-DD], e. g. "<FONT FACE="Courier New, monospace">2012-12-22</FONT>"<BR><FONT FACE="Courier New, monospace">%time% - + </FONT>format [hhmmss], e. g. "<FONT FACE="Courier New, monospace">123044</FONT>"<BR><FONT FACE="Courier New, monospace">%timestamp% - + </FONT>format [YYYY-MM-DD hhmmss], e. g. "<FONT FACE="Courier New, monospace">2012-12-22 + 123044</FONT>"<BR><BR><FONT FACE="Courier New, monospace">%year% - + </FONT>e. g. "<FONT FACE="Courier New, monospace">2012</FONT>"<BR><FONT FACE="Courier New, monospace">%month% - + </FONT>e. g. "<FONT FACE="Courier New, monospace">12</FONT>"<BR><FONT FACE="Courier New, monospace">%day% - + </FONT>e. g. "<FONT FACE="Courier New, monospace">22</FONT>"<BR><BR><FONT FACE="Courier New, monospace">%hour% - + </FONT>e. g. "<FONT FACE="Courier New, monospace">12</FONT>"<BR><FONT FACE="Courier New, monospace">%min% - + </FONT>e. g. "<FONT FACE="Courier New, monospace">30</FONT>"<BR><FONT FACE="Courier New, monospace">%sec% - + </FONT>e. g. "<FONT FACE="Courier New, monospace">44</FONT>"<BR><BR><FONT FACE="Courier New, monospace">%weekday% - + </FONT>day of the week, e. g. "<FONT FACE="Courier New, monospace">Monday</FONT>"<BR><FONT FACE="Courier New, monospace">%week% - + </FONT>calendar week, e. g. "<FONT FACE="Courier New, monospace">28</FONT>"</FONT></P> </SPAN><BR CLEAR=LEFT><BR> </P> <P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Environment diff --git a/BUILD/Help/html/RealtimeSync.html b/BUILD/Help/html/RealtimeSync.html index 73f9dd60..f7740c09 100644 --- a/BUILD/Help/html/RealtimeSync.html +++ b/BUILD/Help/html/RealtimeSync.html @@ -50,7 +50,7 @@ but also sets up the command line to execute the </FONT><FONT FACE="Courier New, Now press "</FONT><FONT FACE="Tahoma, sans-serif"><I>Start</I></FONT><FONT FACE="Tahoma, sans-serif">" to begin monitoring.</FONT></P> <UL> - <P STYLE="margin-bottom: 0cm"><IMG SRC="../img/RealtimeSync.png" NAME="Grafik3" ALIGN=MIDDLE WIDTH=469 HEIGHT=437 BORDER=0></P> + <P STYLE="margin-bottom: 0cm"><IMG SRC="../img/RealtimeSync.png" NAME="Grafik3" ALIGN=MIDDLE BORDER=0></P> </UL> <P STYLE="margin-bottom: 0cm"><BR> </P> @@ -90,7 +90,7 @@ ffs_batch configuration into the USB stick's root directory and have it called when the stick is mounted. Then configure RealtimeSync as shown in the following:</FONT></P> <UL> - <P><IMG SRC="../img/WatchUsbInsert.png" NAME="Grafik2" ALIGN=BOTTOM WIDTH=446 HEIGHT=411 BORDER=0></P> + <P><IMG SRC="../img/WatchUsbInsert.png" NAME="Grafik2" ALIGN=BOTTOM BORDER=0></P> </UL> <P STYLE="margin-bottom: 0cm"><BR> </P> diff --git a/BUILD/Help/html/Schedule a Batch Job.html b/BUILD/Help/html/Schedule a Batch Job.html index 63533886..3f05268b 100644 --- a/BUILD/Help/html/Schedule a Batch Job.html +++ b/BUILD/Help/html/Schedule a Batch Job.html @@ -93,7 +93,7 @@ a Batch Job</FONT></FONT></H2> <LI><P STYLE="margin-bottom: 0cm; font-weight: normal"><FONT FACE="Tahoma, sans-serif">Enter "Run:" as: <FONT FACE="Courier New, monospace"><FreeFileSync installation directory>\FreeFileSync.exe <job - name>.ffs_batch</FONT><BR><IMG SRC="../img/ScheduleBatch_html_m10bf0d36.gif" NAME="Grafik2" ALIGN=BOTTOM BORDER=0><BR> </FONT></P> + name>.ffs_batch</FONT><BR><IMG SRC="../img/ScheduleBatch.gif" NAME="Grafik2" ALIGN=BOTTOM BORDER=0><BR> </FONT></P> </UL> <LI><P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Ubuntu Linux Gnome-schedule:</B></FONT></P> diff --git a/BUILD/Help/html/Versioning.html b/BUILD/Help/html/Versioning.html new file mode 100644 index 00000000..8b1eeee5 --- /dev/null +++ b/BUILD/Help/html/Versioning.html @@ -0,0 +1,98 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> + <TITLE></TITLE> + <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Win32)"> + <META NAME="CREATED" CONTENT="20091206;16574000"> + <META NAME="CHANGED" CONTENT="20121230;16514190"> + <META NAME="Info 1" CONTENT=""> + <META NAME="Info 2" CONTENT=""> + <META NAME="Info 3" CONTENT=""> + <META NAME="Info 4" CONTENT=""> + <STYLE TYPE="text/css"> + <!-- + @page { margin: 2cm } + P { margin-bottom: 0.21cm } + H2.cjk { font-family: "SimSun" } + H2.ctl { font-family: "Mangal" } + A:link { so-language: zxx } + --> + </STYLE> +</HEAD> +<BODY LANG="en-US" DIR="LTR"> +<H2 CLASS="western"><FONT FACE="Tahoma, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt">File +Versioning</FONT></FONT></H2> +<P STYLE="margin-bottom: 0cm"><BR> +</P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">When +you need to preserve files that have been deleted or overwritten it's +often sufficient to select "Recycle Bin" in synchronization +settings. However this is only available on local drives and offers +little control on how to store and how long to keep the files. +FreeFileSync therefore has an additional option, "Versioning".</FONT></P> +<P STYLE="margin-bottom: 0cm"><BR> +</P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>1. +Keep all versions of old files</B></FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">In +synchronization settings set both deletion handling and naming +convention to "<B>Versioning</B>". FreeFileSync will move +deleted files into the provided folder and add a time stamp to each +file name. The structure of the synchronized folders is preserved so +that old versions of a file can be conveniently accessed via a file +browser.</FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example +</B></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">(A +file "Folder\File.txt" was updated three times and old +versions were moved to folder "C:\Revisions")</SPAN></FONT></P> +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen1" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> + <FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">C:\Revisions\Folder\File.txt + </FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 + 111111</B></FONT><FONT FACE="Courier New, monospace">.txt<BR>C:\Revisions\Folder\File.txt + </FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 + 122222</B></FONT><FONT FACE="Courier New, monospace">.txt<BR>C:\Revisions\Folder\File.txt + </FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 133333</B></FONT><FONT FACE="Courier New, monospace">.txt</FONT></FONT></P> +</SPAN><BR CLEAR=LEFT><BR> +</P> +<P STYLE="margin-bottom: 0cm"><BR> +</P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>2. +Save only most recent version</B></FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">Set +deletion handling to "Versioning" and naming convention to +"<B>Replace</B>". Deleted files will be moved to the +specified folder without any decoration and will replace already +existing older versions.</FONT></P> +<P STYLE="margin-bottom: 0cm"><BR> +</P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>3. +Save versions at certain intervals</B></FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">With +naming convention "</FONT><FONT FACE="Tahoma, sans-serif"><B>Replace</B></FONT><FONT FACE="Tahoma, sans-serif">" +it's possible to refine the granularity of versions to keep by adding +<A HREF="Macros.html">macros</A> to the versioning folder path. For +example you can save deleted files on a per sync session basis by +adding the </FONT><FONT FACE="Tahoma, sans-serif"><B>%timestamp%</B></FONT> +<FONT FACE="Tahoma, sans-serif">macro:</FONT></P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif"><B>Example +</B></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">(Using +the dynamically generated folder name "C:\Revisions\</SPAN></FONT><FONT FACE="Courier New, monospace"><SPAN STYLE="font-weight: normal">%timestamp%</SPAN></FONT><FONT FACE="Tahoma, sans-serif"><SPAN STYLE="font-weight: normal">")</SPAN></FONT></P> +<P STYLE="margin-left: 1.32cm; margin-bottom: 0cm"><SPAN ID="Rahmen2" DIR="LTR" STYLE="float: left; width: 80%; height: 0.14cm; border: none; padding: 0cm; background: #e6e6e6"> + <P ALIGN=LEFT STYLE="margin-left: 0.79cm; margin-right: 0.98cm; margin-bottom: 0cm"> + <FONT FACE="Tahoma, sans-serif"><FONT FACE="Courier New, monospace">C:\Revisions\</FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 + 111111</B></FONT><FONT FACE="Courier New, monospace">\Folder\File.txt<BR>C:\Revisions\</FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 + 122222</B></FONT><FONT FACE="Courier New, monospace">\Folder\File.txt<BR>C:\Revisions\</FONT><FONT FACE="Courier New, monospace"><B>2012-12-12 + 133333</B></FONT><FONT FACE="Courier New, monospace">\Folder\File.txt</FONT></FONT></P> +</SPAN><BR CLEAR=LEFT><BR> +</P> +<P STYLE="margin-bottom: 0cm"><FONT FACE="Tahoma, sans-serif">This +allows for a simple manual undo by moving the deleted files from the +last synchronization session back to their original folders. Other +macros like </FONT><FONT FACE="Tahoma, sans-serif"><B>%date%</B></FONT> +<FONT FACE="Tahoma, sans-serif">or </FONT><FONT FACE="Tahoma, sans-serif"><B>%weekday%</B></FONT> +<FONT FACE="Tahoma, sans-serif">can be used to reduce the granularity +to days and weeks.</FONT></P> +</BODY> +</HTML>
\ No newline at end of file diff --git a/BUILD/Help/img/CmpSettings.png b/BUILD/Help/img/CmpSettings.png Binary files differindex 2b48ad43..da67415a 100644 --- a/BUILD/Help/img/CmpSettings.png +++ b/BUILD/Help/img/CmpSettings.png diff --git a/BUILD/Help/img/RealtimeSync.png b/BUILD/Help/img/RealtimeSync.png Binary files differindex 5a41b939..32706c6f 100644 --- a/BUILD/Help/img/RealtimeSync.png +++ b/BUILD/Help/img/RealtimeSync.png diff --git a/BUILD/Help/img/ScheduleBatch_html_m10bf0d36.gif b/BUILD/Help/img/ScheduleBatch.gif Binary files differindex 20d27d6d..20d27d6d 100644 --- a/BUILD/Help/img/ScheduleBatch_html_m10bf0d36.gif +++ b/BUILD/Help/img/ScheduleBatch.gif diff --git a/BUILD/Help/img/SetupBatch.png b/BUILD/Help/img/SetupBatch.png Binary files differindex 565149b0..980796a9 100644 --- a/BUILD/Help/img/SetupBatch.png +++ b/BUILD/Help/img/SetupBatch.png diff --git a/BUILD/Help/img/SourceTarget.png b/BUILD/Help/img/SourceTarget.png Binary files differindex a9ede2fe..5d8df5a4 100644 --- a/BUILD/Help/img/SourceTarget.png +++ b/BUILD/Help/img/SourceTarget.png diff --git a/BUILD/Help/img/WatchUsbInsert.png b/BUILD/Help/img/WatchUsbInsert.png Binary files differindex b62d9f60..b057d6b0 100644 --- a/BUILD/Help/img/WatchUsbInsert.png +++ b/BUILD/Help/img/WatchUsbInsert.png diff --git a/BUILD/Languages/chinese_simple.lng b/BUILD/Languages/chinese_simple.lng index 656c9079..57458c14 100644 --- a/BUILD/Languages/chinese_simple.lng +++ b/BUILD/Languages/chinese_simple.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>请求中止: 正在等待当前操作完成...</target> +<source>Failure to create time stamp for versioning:</source> +<target></target> + <source>RealtimeSync - Automated Synchronization</source> <target>实时同步 - 自动同步</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>清除过滤器设置</target> -<source>Create a batch job</source> -<target>创建一个批处理作业</target> +<source>Save as batch job</source> +<target></target> <source>Comparison settings</source> <target>比较设置</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>全局设置</target> -<source>Summary</source> -<target>总结</target> - <source>Find</source> <target>查找</target> @@ -268,8 +268,8 @@ <source>Select a folder</source> <target>选择一个文件夹</target> -<source>Delay [seconds]</source> -<target>延时 [秒]</target> +<source>Idle time [seconds]</source> +<target></target> <source>Idle time between last detected change and execution of command</source> <target>最后检测到改变和命令执行之间的空闲时间</target> @@ -318,38 +318,23 @@ The command is triggered if: <source>A folder input field is empty.</source> <target>有一个文件夹输入框为空.</target> -<source>File time and size</source> -<target>文件时间和大小</target> - -<source>File content</source> -<target>文件内容</target> - -<source><Automatic></source> -<target><自动></target> - -<source>Mirror ->></source> -<target>镜像 ->></target> - -<source>Update -></source> -<target>更新 -></target> - -<source>Custom</source> -<target>自定义</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync批处理文件</target> - <source>Synchronization aborted!</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>Synchronization completed successfully.</source> +<target></target> + +<source>Saving log file %x...</source> +<target></target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>请按下"切换"来解决 FreeFileSync主对话框上的问题.</target> @@ -357,9 +342,6 @@ The command is triggered if: <source>Switching to FreeFileSync main dialog...</source> <target>正在切换到 FreeFileSync 主对话框...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>无法链接到 Sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>已经有新版本的FreeFileSync可用:</target> @@ -372,6 +354,12 @@ The command is triggered if: <source>Information</source> <target>信息</target> +<source>Unable to connect to sourceforge.net!</source> +<target>无法链接到 Sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target></target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>要让 FreeFileSync 保持每周检查一次更新吗?</target> @@ -435,27 +423,27 @@ The command is triggered if: <source>Hibernate</source> <target>休眠</target> -<source>1. &Compare</source> -<target>1. 比较(&C)</target> - -<source>2. &Synchronize</source> -<target>2. 同步(&S)</target> - <source>&New</source> <target>新建(&N)</target> <source>&Save</source> <target>保存(&S)</target> +<source>Save as &batch job...</source> +<target></target> + +<source>1. &Compare</source> +<target>1. 比较(&C)</target> + +<source>2. &Synchronize</source> +<target>2. 同步(&S)</target> + <source>&Language</source> <target>切换语言(&L)</target> <source>&Global settings...</source> <target>全局设置(&G)...</target> -<source>&Create batch job...</source> -<target>创建批处理作业(&C)...</target> - <source>&Export file list...</source> <target>导出文件列表(&E)...</target> @@ -489,17 +477,17 @@ The command is triggered if: <source>Swap sides</source> <target>两侧互换</target> -<source>Load configuration from file</source> -<target>从文件加载配置</target> +<source>Open</source> +<target></target> -<source>Save current configuration to file</source> -<target>保存当前配置到文件</target> +<source>Save</source> +<target></target> <source>Last used configurations (press DEL to remove from list)</source> <target>最后使用的配置(按DEL键将其从列表中移除)</target> -<source>Show excluded items</source> -<target>显示已排除项目</target> +<source>Hide excluded items</source> +<target></target> <source>Show filtered or temporarily excluded files</source> <target>显示已被过滤或被临时排除的文件</target> @@ -537,15 +525,6 @@ The command is triggered if: <source>Help</source> <target>帮助</target> -<source>Filter files</source> -<target>过滤器文件</target> - -<source>Left</source> -<target>左侧</target> - -<source>Right</source> -<target>右侧</target> - <source>Error handling</source> <target>错误处理</target> @@ -567,14 +546,14 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>在第一个错误时中止同步</target> -<source>On completion:</source> -<target>完成时:</target> +<source>On completion</source> +<target></target> <source>Show progress dialog</source> <target>显示进度对话框</target> -<source>Generate log file</source> -<target>生成日志文件</target> +<source>Save log</source> +<target></target> <source>Select folder to save log files</source> <target>选择要保存日志文件的文件夹</target> @@ -585,11 +564,8 @@ The command is triggered if: <source>Limit maximum number of log files</source> <target>限制日志文件的量大个数</target> -<source>Batch settings</source> -<target>批处理设置</target> - -<source>Compare by...</source> -<target>比较选项...</target> +<source>Select variant</source> +<target></target> <source> Files are found equal if @@ -604,6 +580,9 @@ are the same 是相同的 </target> +<source>File time and size</source> +<target>文件时间和大小</target> + <source> Files are found equal if - file content @@ -615,24 +594,36 @@ is the same 是相同的 </target> +<source>File content</source> +<target>文件内容</target> + <source>Symbolic Link handling</source> <target>符号连接处理方式</target> <source>OK</source> <target>确定</target> -<source>Select variant:</source> -<target>选择变化的:</target> +<source><- Two way -></source> +<target></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>使用一个数据库来识别和传播两边的改变. 删除,重命名和冲突会自动检测.</target> +<source>Mirror ->></source> +<target>镜像 ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>镜像备份左边的文件夹.同步后右边的文件夹被修改为和左边文件夹精确匹配.</target> +<source>Update -></source> +<target>更新 -></target> + <source>Copy new or updated files to right folder.</source> <target>复制新的或修改过的文件到右侧文件夹</target> +<source>Custom</source> +<target>自定义</target> + <source>Configure your own synchronization rules.</source> <target>配置你自己的同步规则.</target> @@ -648,8 +639,8 @@ is the same <source>Recycle Bin</source> <target>回收站</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>当删除或覆盖文件时使用回收站</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target></target> <source>Versioning</source> <target>保留历史版本</target> @@ -657,8 +648,8 @@ is the same <source>Move time-stamped files into specified folder</source> <target>移动时间标记文件到指定的文件夹</target> -<source>Limit maximum number of versions per file</source> -<target>限制每个文件的最大历史版本数</target> +<source>Naming convention:</source> +<target></target> <source>Configuration</source> <target>配置</target> @@ -807,6 +798,9 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>摘要</target> +<source>Filter files</source> +<target>过滤器文件</target> + <source>Select view</source> <target>选择视图</target> @@ -858,9 +852,15 @@ Note: File names must be relative to base directories! <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>Never save changes</source> <target>永不保存更改</target> @@ -873,9 +873,6 @@ Note: File names must be relative to base directories! <source>Configuration loaded!</source> <target>配置已加载!</target> -<source>Folder Comparison and Synchronization</source> -<target>文件夹比较与同步</target> - <source>Hide files that exist on left side only</source> <target>隐藏仅在左侧的文件</target> @@ -1028,6 +1025,9 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>正在比较文件内容...</target> +<source>Copy</source> +<target></target> + <source>Paused</source> <target>已暂停</target> @@ -1100,14 +1100,14 @@ Note: File names must be relative to base directories! <source>- folder part only</source> <target>- 只对文件夹部分</target> -<source>- Other side's counterpart to %name</source> -<target>- 另一侧参照 %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target></target> -<source>- Other side's counterpart to %dir</source> -<target>- 另一侧参照 %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target></target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>重新让被隐藏的对话框和警告信息变为可见?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target></target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1128,44 +1128,29 @@ Note: File names must be relative to base directories! <source>Leave as unresolved conflict</source> <target>遗留为未解决的冲突</target> -<source>Files</source> -<target>文件</target> +<source>Replace</source> +<target></target> -<source>Percentage</source> -<target>百分比</target> +<source>Move files and replace if existing</source> +<target></target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target></target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target></target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target></target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>%x 分</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target></target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>%x 小时</pluralform> -</target> +<source>Files</source> +<target>文件</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>%x 天</pluralform> -</target> +<source>Percentage</source> +<target>百分比</target> <source>Cannot monitor directory %x.</source> <target>无法监视目录 %x.</target> @@ -1215,6 +1200,9 @@ Note: File names must be relative to base directories! <source>Cannot copy file %x to %y.</source> <target>无法复制文件 %x 到 %y.</target> +<source>Type of item %x is not supported:</source> +<target></target> + <source>Cannot open directory %x.</source> <target>无法打开目录 %x.</target> @@ -1224,6 +1212,39 @@ Note: File names must be relative to base directories! <source>Detected endless directory recursion.</source> <target>检测到无限的目录递归.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>%x 分</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>%x 小时</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>%x 天</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>无法设置 %x 的特权.</target> @@ -1353,6 +1374,9 @@ Note: File names must be relative to base directories! <source>Moving symbolic link %x to %y</source> <target>正在移动符号连接 %x 到 %y</target> +<source>Removing old versions...</source> +<target></target> + <source>Creating file %x</source> <target>正在创建文件 %x</target> @@ -1374,6 +1398,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>更新 %x 的属性</target> +<source>Target folder %x already existing.</source> +<target>目标文件夹 %x 已经存在.</target> + <source>Target folder input field must not be empty.</source> <target>目标文件夹输入框必须不为空.</target> @@ -1383,11 +1410,8 @@ Note: File names must be relative to base directories! <source>Source folder %x not found.</source> <target>无法找到源文件夹 %x.</target> -<source>Unresolved conflicts existing!</source> -<target>存在不可解决的冲突!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>你可忽略冲突并继续同步.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target></target> <source>Significant difference detected:</source> <target>已侦测到显著不同:</target> @@ -1407,12 +1431,15 @@ Note: File names must be relative to base directories! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>一个将被修改的文件夹是多个文件夹对的一部分. 请重新检视同步设置.</target> +<source>Left</source> +<target>左侧</target> + +<source>Right</source> +<target>右侧</target> + <source>Synchronizing folder pair:</source> <target>正在同步成对的文件夹:</target> -<source>Target folder %x already existing.</source> -<target>目标文件夹 %x 已经存在.</target> - <source>Generating database...</source> <target>正在生成数据库...</target> diff --git a/BUILD/Languages/chinese_traditional.lng b/BUILD/Languages/chinese_traditional.lng index 69e79b2d..79391ed1 100644 --- a/BUILD/Languages/chinese_traditional.lng +++ b/BUILD/Languages/chinese_traditional.lng @@ -32,7 +32,7 @@ <target>中止請求:正在等待目前操作完成...</target> <source>Failure to create time stamp for versioning:</source> -<target></target> +<target>無法新建時間戳記的版本控制:</target> <source>RealtimeSync - Automated Synchronization</source> <target>即時同步 - 自動同步</target> @@ -58,8 +58,8 @@ <source>Clear filter settings</source> <target>清除篩選器設定</target> -<source>Create a batch job</source> -<target>新建一個批次處理作業</target> +<source>Save as batch job</source> +<target>另存為批次處理作業</target> <source>Comparison settings</source> <target>比對設定</target> @@ -79,9 +79,6 @@ <source>Global settings</source> <target>整體設定</target> -<source>Summary</source> -<target>概要</target> - <source>Find</source> <target>尋找</target> @@ -174,7 +171,7 @@ </target> <source>Error parsing file %x, row %y, column %z.</source> -<target>解析檔案 %x、行 %y、列 %z 時出現錯誤。</target> +<target>解析 %x 檔案,第 %y 列,第 %z 行出現錯誤。</target> <source>Scanning:</source> <target>正在掃瞄:</target> @@ -224,7 +221,7 @@ <target>開啟(&O)...</target> <source>Save &as...</source> -<target>另存新檔(&a)...</target> +<target>另存新檔(&A)...</target> <source>&Quit</source> <target>離開(&Q)</target> @@ -271,11 +268,11 @@ <source>Select a folder</source> <target>選擇一個資料夾</target> -<source>Delay [seconds]</source> -<target>延遲 [秒]</target> +<source>Idle time [seconds]</source> +<target>閒置時間 [秒]</target> <source>Idle time between last detected change and execution of command</source> -<target>最後檢測到更改和執行命令之間的閒置時間</target> +<target>最後檢測到變更和執行命令之間的閒置時間</target> <source>Command line</source> <target>命令列</target> @@ -287,7 +284,7 @@ The command is triggered if: </source> <target> 假如要觸發該命令: -- 檔案或子資料夾更改 +- 檔案或子資料夾變更 - 新資料夾到來(例如插入USB隨身碟) </target> @@ -321,48 +318,30 @@ The command is triggered if: <source>A folder input field is empty.</source> <target>資料夾輸入欄位是空的。</target> -<source>File time and size</source> -<target>檔案大小和日期</target> - -<source>File content</source> -<target>檔案内容</target> - -<source><Automatic></source> -<target><自動></target> - -<source>Mirror ->></source> -<target>鏡像 ->></target> - -<source>Update -></source> -<target>更新 -></target> - -<source>Custom</source> -<target>自訂</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync批次處理</target> - <source>Synchronization aborted!</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>Synchronization completed successfully.</source> +<target>同步已成功完成。</target> + +<source>Saving log file %x...</source> +<target>正在儲存日誌檔 %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> -<target>在FreeFileSync主對話框,按下"切換"來解決問題。</target> +<target>在FreeFileSync主對話框,按下 "切換" 來解決問題。</target> <source>Switching to FreeFileSync main dialog...</source> <target>切換到FreeFileSync主對話框...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>無法連接到sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>FreeFileSync有新版本可用:</target> @@ -375,6 +354,12 @@ The command is triggered if: <source>Information</source> <target>訊息</target> +<source>Unable to connect to sourceforge.net!</source> +<target>無法連接到sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>目前FreeFileSync版本號碼連線未找到!是否要手動檢查?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>要每週自動檢查更新FreeFileSync嗎?</target> @@ -438,27 +423,27 @@ The command is triggered if: <source>Hibernate</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>1. &Compare</source> <target>1. 比對(&C)</target> <source>2. &Synchronize</source> <target>2. 同步(&S)</target> -<source>&New</source> -<target>新增專案(&N)</target> - -<source>&Save</source> -<target>儲存(&S)</target> - <source>&Language</source> <target>語言(&L)</target> <source>&Global settings...</source> <target>整體設定(&G)...</target> -<source>&Create batch job...</source> -<target>新建批次處理作業(&C)...</target> - <source>&Export file list...</source> <target>匯出檔案清單(&E)...</target> @@ -466,7 +451,7 @@ The command is triggered if: <target>進階(&A)</target> <source>&Check for new version</source> -<target>檢查更新(&C)</target> +<target>檢查是否有新版本(&C)</target> <source>Compare</source> <target>比對</target> @@ -492,17 +477,17 @@ The command is triggered if: <source>Swap sides</source> <target>兩邊交換</target> -<source>Load configuration from file</source> -<target>從檔案載入配置</target> +<source>Open</source> +<target>開啟</target> -<source>Save current configuration to file</source> -<target>將目前配置儲存到檔案</target> +<source>Save</source> +<target>儲存</target> <source>Last used configurations (press DEL to remove from list)</source> <target>上次使用的配置(按DEL鍵,從清單中移除)</target> -<source>Show excluded items</source> -<target>顯示排除的項目</target> +<source>Hide excluded items</source> +<target>隱藏排除項目</target> <source>Show filtered or temporarily excluded files</source> <target>顯示已篩選或暫時排除的檔案</target> @@ -535,20 +520,11 @@ The command is triggered if: <target>批次處理作業</target> <source>Create a batch file to automate synchronization. Double-click this file or schedule in your system's task planner: FreeFileSync.exe <job name>.ffs_batch</source> -<target>新建一個批次檔來自動執行同步。按兩下此檔案或安排在您的系統任務計畫表:FreeFileSync.exe <工作名稱>.ffs_batch</target> +<target>新建一個批次檔來自動執行同步。 按兩下此檔案或安排在您的系統任務計畫表: FreeFileSync.exe <工作名稱>.ffs_batch</target> <source>Help</source> <target>說明</target> -<source>Filter files</source> -<target>篩選檔案</target> - -<source>Left</source> -<target>左邊</target> - -<source>Right</source> -<target>右邊</target> - <source>Error handling</source> <target>錯誤處理</target> @@ -570,14 +546,14 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>在第一個錯誤出現即中止同步</target> -<source>On completion:</source> -<target>完成後:</target> +<source>On completion</source> +<target>完成後</target> <source>Show progress dialog</source> <target>顯示進度對話框</target> -<source>Generate log file</source> -<target>產生日誌檔</target> +<source>Save log</source> +<target>儲存日誌</target> <source>Select folder to save log files</source> <target>選擇要儲存日誌檔的資料夾</target> @@ -588,11 +564,8 @@ The command is triggered if: <source>Limit maximum number of log files</source> <target>限制日誌檔的最大數量</target> -<source>Batch settings</source> -<target>批次處理設定</target> - -<source>Compare by...</source> -<target>比對選項...</target> +<source>Select variant</source> +<target>選擇變數</target> <source> Files are found equal if @@ -602,6 +575,9 @@ are the same </source> <target>如果檔案大小和最後修改時間和日期相同則判斷兩者相同</target> +<source>File time and size</source> +<target>檔案大小和日期</target> + <source> Files are found equal if - file content @@ -609,24 +585,36 @@ is the same </source> <target>如果檔案内容相同則判斷兩者相同</target> +<source>File content</source> +<target>檔案内容</target> + <source>Symbolic Link handling</source> <target>符號連結處理</target> <source>OK</source> <target>確定</target> -<source>Select variant:</source> -<target>選擇變數:</target> +<source><- Two way -></source> +<target><- 雙向 -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>對兩邊使用同一個資料庫來識別和傳送更改。自動檢測刪除、重新命名和衝突部份。</target> +<target>對兩邊使用同一個資料庫來識別和傳送變更。 自動檢測刪除、重新命名和衝突部份。</target> + +<source>Mirror ->></source> +<target>鏡像 ->></target> <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>鏡像備份的左邊的資料夾。同步後,右邊的資料夾進行修改以完全相配左邊的資料夾。</target> +<target>鏡像備份的左邊的資料夾。 同步後,右邊的資料夾進行修改以完全相配左邊的資料夾。</target> + +<source>Update -></source> +<target>更新 -></target> <source>Copy new or updated files to right folder.</source> <target>將新的或更新過的檔案複製到右邊的資料夾中。</target> +<source>Custom</source> +<target>自訂</target> + <source>Configure your own synchronization rules.</source> <target>配置你自己的同步規則。</target> @@ -642,8 +630,8 @@ is the same <source>Recycle Bin</source> <target>資源回收筒</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>當刪除或覆蓋檔案時使用資源回收筒</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>將刪除和覆蓋的檔案移動到資源回收筒</target> <source>Versioning</source> <target>版本控制</target> @@ -651,8 +639,8 @@ is the same <source>Move time-stamped files into specified folder</source> <target>將時間戳記檔案移動到指定的資料夾</target> -<source>Limit maximum number of versions per file</source> -<target>限制每個檔案版本的最大數量</target> +<source>Naming convention:</source> +<target>命名慣例:</target> <source>Configuration</source> <target>配置</target> @@ -748,7 +736,7 @@ Note: File names must be relative to base directories! <target>故障保護檔案複製</target> <source>Write to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of fatal error.</source> -<target>第一次將檔寫入到一個暫存(*.ffs_tmp),順便將它們重新命名。即使在嚴重錯誤的情況下,還可確保一致的狀態。</target> +<target>第一次將檔寫入到一個暫存(*.ffs_tmp),順便將它們重新命名。 即使在嚴重錯誤的情況下,還可確保一致的狀態。</target> <source>Copy locked files</source> <target>複製被鎖定的檔案</target> @@ -801,6 +789,9 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>摘要</target> +<source>Filter files</source> +<target>篩選檔案</target> + <source>Select view</source> <target>選擇檢視</target> @@ -852,24 +843,27 @@ Note: File names must be relative to base directories! <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>Never save changes</source> -<target>從不更改儲存</target> +<target>不要儲存變更</target> <source>Do you want to save changes to %x?</source> -<target>是否要更改儲存到 %x?</target> +<target>是否要儲存變更到 %x?</target> <source>Do&n't save</source> -<target>不儲存(&n)</target> +<target>不儲存(&N)</target> <source>Configuration loaded!</source> <target>配置已載入!</target> -<source>Folder Comparison and Synchronization</source> -<target>資料夾比對和同步</target> - <source>Hide files that exist on left side only</source> <target>隱藏只存在於左邊的檔案</target> @@ -995,7 +989,7 @@ Note: File names must be relative to base directories! <pluralform>%x of %y rows in view</pluralform> </source> <target> -<pluralform>顯示 %y 之 %x 行</pluralform> +<pluralform>檢視中的 %x 之 %y 列</pluralform> </target> <source>Ignore further errors</source> @@ -1022,6 +1016,9 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>正在比對内容...</target> +<source>Copy</source> +<target>複製</target> + <source>Paused</source> <target>已暫停</target> @@ -1080,13 +1077,13 @@ Note: File names must be relative to base directories! <target>直接</target> <source>Follow</source> -<target>遵循</target> +<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> +<target>整合上下文功能表中的外部應用程式。 可以使用下面的巨集:</target> <source>- full file or folder name</source> <target>- 完整檔案或資料夾名稱</target> @@ -1094,14 +1091,14 @@ Note: File names must be relative to base directories! <source>- folder part only</source> <target>- 只有資料夾一部分</target> -<source>- Other side's counterpart to %name</source> -<target>- 另一邊對應到 %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- 另一邊對應到 %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- 另一邊對應到 %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- 另一邊對應到 %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>讓隱藏的對話框和警告訊息再被看見嗎?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>使隱藏的警告和對話框再次可見?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1122,44 +1119,29 @@ Note: File names must be relative to base directories! <source>Leave as unresolved conflict</source> <target>保留給未解決的衝突</target> -<source>Files</source> -<target>檔案</target> +<source>Replace</source> +<target>取代</target> -<source>Percentage</source> -<target>百分比</target> +<source>Move files and replace if existing</source> +<target>如果存在,移動檔案並取代</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>將時間戳記附加到每個檔案名稱上</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>資料夾</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>檔案</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>%x 分</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>YYYY-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>%x 小時</pluralform> -</target> +<source>Files</source> +<target>檔案</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>%x 天</pluralform> -</target> +<source>Percentage</source> +<target>百分比</target> <source>Cannot monitor directory %x.</source> <target>無法監測目錄 %x。</target> @@ -1209,6 +1191,9 @@ Note: File names must be relative to base directories! <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 directory %x.</source> <target>無法開啟目錄 %x。</target> @@ -1218,6 +1203,39 @@ Note: File names must be relative to base directories! <source>Detected endless directory recursion.</source> <target>檢測到無限目錄遞迴。</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>%x 分</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>%x 小時</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>%x 天</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>無法設定權限 %x。</target> @@ -1225,13 +1243,13 @@ Note: File names must be relative to base directories! <target>無法將 %x 移動到資源回收筒!</target> <source>Both sides have changed since last synchronization!</source> -<target>自上次同步後,兩邊均已更改過!</target> +<target>自上次同步後,兩邊均已變更過!</target> <source>Cannot determine sync-direction:</source> <target>無法判斷同步方向:</target> <source>No change since last synchronization!</source> -<target>自上次同步以來都沒有更改!</target> +<target>自上次同步以來都沒有變更!</target> <source>The corresponding database entries are not in sync considering current settings.</source> <target>相應的資料庫條目在同步時,不考慮到目前的設定。</target> @@ -1252,7 +1270,7 @@ Note: File names must be relative to base directories! <target>目錄有依靠性!請小心設定同步規則:</target> <source>Start comparison</source> -<target>開始比較</target> +<target>開始比對</target> <source>Preparing synchronization...</source> <target>正在準備同步...</target> @@ -1348,7 +1366,7 @@ Note: File names must be relative to base directories! <target>正在移動符號連結 %x 到 %y</target> <source>Removing old versions...</source> -<target></target> +<target>正在刪除舊版本...</target> <source>Creating file %x</source> <target>正在新建檔案 %x</target> @@ -1371,6 +1389,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>正在更新 %x 個屬性</target> +<source>Target folder %x already existing.</source> +<target>目標資料夾 %x 已存在。</target> + <source>Target folder input field must not be empty.</source> <target>目標資料夾輸入欄位不能為空。</target> @@ -1380,11 +1401,8 @@ Note: File names must be relative to base directories! <source>Source folder %x not found.</source> <target>來源資料夾 %x 找不到。</target> -<source>Unresolved conflicts existing!</source> -<target>存在未解決的衝突!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>你可以忽略衝突,並繼續同步。</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>下列項目有未解決的衝突,將不會同步:</target> <source>Significant difference detected:</source> <target>檢測到顯著的差異:</target> @@ -1402,14 +1420,17 @@ Note: File names must be relative to base directories! <target>可用:</target> <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> -<target>一個將被修改的資料夾,是多個配對資料夾的一部分。請檢查同步設定。</target> +<target>一個將被修改的資料夾,是多個配對資料夾的一部分。 請檢查同步設定。</target> + +<source>Left</source> +<target>左邊</target> + +<source>Right</source> +<target>右邊</target> <source>Synchronizing folder pair:</source> <target>同步配對資料夾:</target> -<source>Target folder %x already existing.</source> -<target>目標資料夾 %x 已存在。</target> - <source>Generating database...</source> <target>正在產生資料庫...</target> diff --git a/BUILD/Languages/croatian.lng b/BUILD/Languages/croatian.lng index 91e26f43..1c5adb0d 100644 --- a/BUILD/Languages/croatian.lng +++ b/BUILD/Languages/croatian.lng @@ -32,7 +32,7 @@ <target>Prekid zahtjevan: čekam da se trenutna akcija završi...</target> <source>Failure to create time stamp for versioning:</source> -<target></target> +<target>Nije moguća vremenska oznaka za varijantu</target> <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Automatska Sinkronizacija</target> @@ -58,8 +58,8 @@ <source>Clear filter settings</source> <target>Počisti postavke filtera</target> -<source>Create a batch job</source> -<target>Izradi slijedni zadatak</target> +<source>Save as batch job</source> +<target>Spremi kao slijedni zadatak</target> <source>Comparison settings</source> <target>Postavke usporedbe</target> @@ -79,9 +79,6 @@ <source>Global settings</source> <target>Globalne postavke</target> -<source>Summary</source> -<target>Pregled</target> - <source>Find</source> <target>Pronađi</target> @@ -277,8 +274,8 @@ <source>Select a folder</source> <target>Izaberite mapu</target> -<source>Delay [seconds]</source> -<target>Odgoditi [sekunda]</target> +<source>Idle time [seconds]</source> +<target>Vrijeme mirovanja [sekundi]</target> <source>Idle time between last detected change and execution of command</source> <target>Vrijeme čekanja između zadnje prepoznate promjene i izvršenja naredbe</target> @@ -327,38 +324,23 @@ Naredba će biti pokrenuta ako se: <source>A folder input field is empty.</source> <target>Polje za odabir foldera je prazno.</target> -<source>File time and size</source> -<target>Vrijeme i veličina datoteke</target> - -<source>File content</source> -<target>Sadržaj datoteke</target> - -<source><Automatic></source> -<target><Automatski></target> - -<source>Mirror ->></source> -<target>Zrcalno ->></target> - -<source>Update -></source> -<target>Ažuriraj -></target> - -<source>Custom</source> -<target>Uobičajeno</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync slijedni zadatak</target> - <source>Synchronization aborted!</source> <target>Sinkronizacija prekinuta!</target> <source>Synchronization completed with errors!</source> <target>Sinkronizacija završena s greškama!</target> +<source>Synchronization completed with warnings.</source> +<target>Sinkronizacija završena s upozorenjima</target> + <source>Nothing to synchronize!</source> <target>Ništa za sinkronizirati!</target> -<source>Synchronization completed successfully!</source> -<target>Sinkronizacija uspješno završena!</target> +<source>Synchronization completed successfully.</source> +<target>Sinkronizacija uspješno dovršena</target> + +<source>Saving log file %x...</source> +<target>Spremam izješće %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Preisni "Zamjeni" za riješavanje problema u FreeFileSync glavnom dijaloškom okviru</target> @@ -366,9 +348,6 @@ Naredba će biti pokrenuta ako se: <source>Switching to FreeFileSync main dialog...</source> <target>Prebacujem u FreeFileSync glavni dijaloški okvir</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Ne mogu se povezati na sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Nova verzija FreeFileSync je dostupna:</target> @@ -381,6 +360,12 @@ Naredba će biti pokrenuta ako se: <source>Information</source> <target>Informacija</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Ne mogu se povezati na sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Trenutna FreeFileSync verzija nije pronađena online! Da li želite pronaći ručno?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Dali želite da FreeFileSync automatski traži ažuriranja svaki tjedan?</target> @@ -444,27 +429,27 @@ Naredba će biti pokrenuta ako se: <source>Hibernate</source> <target>Hibernacija</target> -<source>1. &Compare</source> -<target>1. &Usporedi</target> - -<source>2. &Synchronize</source> -<target>2. &Sinkroniziraj</target> - <source>&New</source> <target>&Novo</target> <source>&Save</source> <target>&Spremi</target> +<source>Save as &batch job...</source> +<target>Spremi kao &slijedni zadatak...</target> + +<source>1. &Compare</source> +<target>1. &Usporedi</target> + +<source>2. &Synchronize</source> +<target>2. &Sinkroniziraj</target> + <source>&Language</source> <target>&Jezik</target> <source>&Global settings...</source> <target>&Globalne postavke...</target> -<source>&Create batch job...</source> -<target>&Izradi slijedni zadatak...</target> - <source>&Export file list...</source> <target>&Izvoz liste datoteka...</target> @@ -498,17 +483,17 @@ Naredba će biti pokrenuta ako se: <source>Swap sides</source> <target>Zamjeni strane</target> -<source>Load configuration from file</source> -<target>Uvezi postavke iz datoteke</target> +<source>Open</source> +<target>Otvori</target> -<source>Save current configuration to file</source> -<target>Spremi sadašnje postavke u datoteku</target> +<source>Save</source> +<target>Spremi</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Zadnje korištene postavke (pretisite DEL za ukloniti s liste)</target> -<source>Show excluded items</source> -<target>Prikaži isključene stavke</target> +<source>Hide excluded items</source> +<target>Sakrij isključene stavke</target> <source>Show filtered or temporarily excluded files</source> <target>Prikaži filtrirane ili privremeno izdvojene datoteke</target> @@ -546,15 +531,6 @@ Naredba će biti pokrenuta ako se: <source>Help</source> <target>Pomoć</target> -<source>Filter files</source> -<target>Filtriraj datoteke</target> - -<source>Left</source> -<target>Lijevo</target> - -<source>Right</source> -<target>Desno</target> - <source>Error handling</source> <target>Greška pri obradi</target> @@ -576,29 +552,26 @@ Naredba će biti pokrenuta ako se: <source>Abort synchronization on first error</source> <target>Prekini sinkronizaciju pri prvoj pogrešci</target> -<source>On completion:</source> +<source>On completion</source> <target>Pri završetku</target> <source>Show progress dialog</source> <target>Prikaži napredak</target> -<source>Generate log file</source> -<target>Generiraj izvješće</target> +<source>Save log</source> +<target>Spremi izvješće</target> <source>Select folder to save log files</source> <target>Odaberi mapu za spremanje izvješća</target> <source>Limit</source> -<target>Granica</target> +<target>Ograniči</target> <source>Limit maximum number of log files</source> <target>Ograniči maksimalan broj izvješća</target> -<source>Batch settings</source> -<target>Slijedne postavke</target> - -<source>Compare by...</source> -<target>Usporedi prema...</target> +<source>Select variant</source> +<target>Odaberi varijantu</target> <source> Files are found equal if @@ -613,6 +586,9 @@ Datoteke se smatraju jednake ako su im jednaki </target> +<source>File time and size</source> +<target>Vrijeme i veličina datoteke</target> + <source> Files are found equal if - file content @@ -624,24 +600,36 @@ Datoteke se smatraju jednake ako im je jednak </target> +<source>File content</source> +<target>Sadržaj datoteke</target> + <source>Symbolic Link handling</source> <target>Upravljanje simboličnim poveznicama</target> <source>OK</source> <target>U redu</target> -<source>Select variant:</source> -<target>Izaberite varijantu:</target> +<source><- Two way -></source> +<target>Dvosmjerno</target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Identificiraj i izvedi promjene na obje strane koristeći bazu podataka. Brisanja, preimenovanja i sukobi se automatski detektiraju</target> +<source>Mirror ->></source> +<target>Zrcalno ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Zrcalna pričuva lijeve mape. Desna mapa je uređena da bi bila jednaka lijevom folderu nakon sinkronizacije.</target> +<source>Update -></source> +<target>Ažuriraj -></target> + <source>Copy new or updated files to right folder.</source> <target>Kopiraj nove ili ažurirane datoteke u desnu mapu.</target> +<source>Custom</source> +<target>Uobičajeno</target> + <source>Configure your own synchronization rules.</source> <target>Konfigurirajte vaša vlastita sinkronizacijska pravila.</target> @@ -657,17 +645,17 @@ jednak <source>Recycle Bin</source> <target>Koš za smeće</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Koristi Koš za smeće pri brisanju ili prepisivanju datoteka</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Koristi Smeće za izbrisane i prepisane datoteke</target> <source>Versioning</source> -<target>Verzija</target> +<target>Označi</target> <source>Move time-stamped files into specified folder</source> <target>Premjesti vremenski-označene datoteke u određenu mapu</target> -<source>Limit maximum number of versions per file</source> -<target>Ograniči maksimalan broj verzija po datoteci</target> +<source>Naming convention:</source> +<target>Pravilo imena:</target> <source>Configuration</source> <target>Postavke</target> @@ -816,6 +804,9 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Overview</source> <target>Pregled</target> +<source>Filter files</source> +<target>Filtriraj datoteke</target> + <source>Select view</source> <target>Izaberite pogled</target> @@ -867,9 +858,15 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source><Last session></source> <target><Zadnja sesija></target> +<source>Folder Comparison and Synchronization</source> +<target>Usporedba i sinkronizacija mapa</target> + <source>Configuration saved!</source> <target>Postavke spremljene!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync slijedni zadatak</target> + <source>Never save changes</source> <target>Nikad ne spremaj promjene</target> @@ -882,9 +879,6 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Configuration loaded!</source> <target>Postavke učitane!</target> -<source>Folder Comparison and Synchronization</source> -<target>Usporedba i sinkronizacija mapa</target> - <source>Hide files that exist on left side only</source> <target>Sakrij datoteke koje postoje samo na lijevoj strani</target> @@ -1045,6 +1039,9 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Comparing content...</source> <target>Uspoređujem sadržaj...</target> +<source>Copy</source> +<target>Kopiraj</target> + <source>Paused</source> <target>Pauzirano</target> @@ -1117,14 +1114,14 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>- folder part only</source> <target>- samo mapa</target> -<source>- Other side's counterpart to %name</source> -<target>- Duplikat s druge strane k %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- Duplikat s druge strane u %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- Duplikat s druge strane k %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- Duplikat s druge strane u %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Učini skrivene prozore i upozorenja ponovno vidljivima</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Vrati skrivena upozorenja i dijaloški okvir ponovno vidljivim?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1149,50 +1146,29 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Leave as unresolved conflict</source> <target>Ostavi kao neriješeni sukob</target> -<source>Files</source> -<target>Datoteke</target> +<source>Replace</source> +<target>Zamjeni</target> -<source>Percentage</source> -<target>Postotak</target> +<source>Move files and replace if existing</source> +<target>Premjesti datoteke i zamjeni ako već postoji</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Dodaj vremensku oznaku svakom imenu datoteke</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Mapa</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Datoteka</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>%x min</pluralform> -<pluralform>%x min</pluralform> -<pluralform>%x min</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>GGGG-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>%x sat</pluralform> -<pluralform>%x sata</pluralform> -<pluralform>%x sati</pluralform> -</target> +<source>Files</source> +<target>Datoteke</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>%x dan</pluralform> -<pluralform>%x dana</pluralform> -<pluralform>%x dana</pluralform> -</target> +<source>Percentage</source> +<target>Postotak</target> <source>Cannot monitor directory %x.</source> <target>Ne mogu posmatrati direktorij %x.</target> @@ -1242,6 +1218,9 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Cannot copy file %x to %y.</source> <target>Ne mogu kopirati datoteku %x na %y.</target> +<source>Type of item %x is not supported:</source> +<target>Tip stavke %x koji nije podržan:</target> + <source>Cannot open directory %x.</source> <target>Ne mogu otvoriti mapu %x.</target> @@ -1251,6 +1230,45 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Detected endless directory recursion.</source> <target>Detektiran bezograničeni direktorij</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>%x min</pluralform> +<pluralform>%x min</pluralform> +<pluralform>%x min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>%x sat</pluralform> +<pluralform>%x sata</pluralform> +<pluralform>%x sati</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>%x dan</pluralform> +<pluralform>%x dana</pluralform> +<pluralform>%x dana</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Ne mogu postaviti prava za %x.</target> @@ -1381,7 +1399,7 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <target>Premještam simboličnu poveznicu %x u %y</target> <source>Removing old versions...</source> -<target></target> +<target>Uklanjam starije verzije...</target> <source>Creating file %x</source> <target>Izrađujem datoteku %x</target> @@ -1404,6 +1422,9 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Updating attributes of %x</source> <target>Obnavljam atribute od %x</target> +<source>Target folder %x already existing.</source> +<target>Odredišna mapa %x već postoji.</target> + <source>Target folder input field must not be empty.</source> <target>Odredišna mapa ne može biti prazna</target> @@ -1413,11 +1434,8 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>Source folder %x not found.</source> <target>Izvorna mapa %x nije pronađena</target> -<source>Unresolved conflicts existing!</source> -<target>Nerješivi sukob postoji!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Možete ignorirati sukob i nastaviti s sinkronizacijom.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Slijedeće stavke imaju nedefiniranih sukoba te neće biti sinkronizirane:</target> <source>Significant difference detected:</source> <target>Značajna razlika opažena:</target> @@ -1437,12 +1455,15 @@ Napomena: Imena datoteka moraju biti srodni s glavnim mapama! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Mapa će biti uređena koja je dio više pari mapa. Molimo provjerite sinkronizacijske postavke.</target> +<source>Left</source> +<target>Lijevo</target> + +<source>Right</source> +<target>Desno</target> + <source>Synchronizing folder pair:</source> <target>Par sinkronizirane mape:</target> -<source>Target folder %x already existing.</source> -<target>Odredišna mapa %x već postoji.</target> - <source>Generating database...</source> <target>Izrađujem bazu podataka...</target> diff --git a/BUILD/Languages/czech.lng b/BUILD/Languages/czech.lng index 2ff7d45a..4bc84b0a 100644 --- a/BUILD/Languages/czech.lng +++ b/BUILD/Languages/czech.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>Požadavek na přerušení: Čekání na ukončení aktuální operace...</target> +<source>Failure to create time stamp for versioning:</source> +<target>Chyba při vytvoření časové značky verzování:</target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Automatická synchronizace</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Zrušit nastavení filtru</target> -<source>Create a batch job</source> -<target>Vytvořit dávku</target> +<source>Save as batch job</source> +<target>Uložit jako dávku</target> <source>Comparison settings</source> <target>Nastavení porovnání</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Nastavení programu</target> -<source>Summary</source> -<target>Přehled</target> - <source>Find</source> <target>Najít</target> @@ -274,7 +274,7 @@ <source>Select a folder</source> <target>Vyberte adresář</target> -<source>Delay [seconds]</source> +<source>Idle time [seconds]</source> <target>Prodleva (v sekundách)</target> <source>Idle time between last detected change and execution of command</source> @@ -324,38 +324,23 @@ Příkaz je spuštěn když: <source>A folder input field is empty.</source> <target>Není zadána vstupní složka.</target> -<source>File time and size</source> -<target>Podle velikosti a data souboru</target> - -<source>File content</source> -<target>Podle obsahu souboru</target> - -<source><Automatic></source> -<target><- Automaticky -></target> - -<source>Mirror ->></source> -<target>Zrcadlení ->></target> - -<source>Update -></source> -<target>Aktualizuj -></target> - -<source>Custom</source> -<target>Vlastní</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync dávka</target> - <source>Synchronization aborted!</source> <target>Synchronizace zrušena!</target> <source>Synchronization completed with errors!</source> <target>Synchronizace dokončena s chybami.</target> +<source>Synchronization completed with warnings.</source> +<target>Synchronizace dokončena s varováními.</target> + <source>Nothing to synchronize!</source> <target>Není co synchronizovat!</target> -<source>Synchronization completed successfully!</source> -<target>Synchronizace dokončena úspěšně!</target> +<source>Synchronization completed successfully.</source> +<target>Synchronizace dokončena úspěšně.</target> + +<source>Saving log file %x...</source> +<target>Ukládání žurnálu %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Použijte tlačítko "Přepnout" k vyřešení problému pomocí hlavního okna FreeFileSync.</target> @@ -363,9 +348,6 @@ Příkaz je spuštěn když: <source>Switching to FreeFileSync main dialog...</source> <target>Přepínání do hlavního okna FreeFileSync...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Není možné se připojit k sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Je dostupná novější verze FreeFileSync:</target> @@ -378,6 +360,12 @@ Příkaz je spuštěn když: <source>Information</source> <target>Informace</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Není možné se připojit k sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Současná verze FreeFileSync nebyla nalezena online! Chcete verzi zkontrolovat ručně?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Chcete aby FreeFileSync automaticky zjišťoval aktualizace každý týden?</target> @@ -441,27 +429,27 @@ Příkaz je spuštěn když: <source>Hibernate</source> <target>Přepnout do režimu spánku</target> -<source>1. &Compare</source> -<target>1. &Porovnat</target> - -<source>2. &Synchronize</source> -<target>2. &Synchronizovat</target> - <source>&New</source> <target>&Nový</target> <source>&Save</source> <target>&Uložit</target> +<source>Save as &batch job...</source> +<target>Uložit jako &dávku</target> + +<source>1. &Compare</source> +<target>1. &Porovnat</target> + +<source>2. &Synchronize</source> +<target>2. &Synchronizovat</target> + <source>&Language</source> <target>&Jazyk</target> <source>&Global settings...</source> <target>&Nastavení...</target> -<source>&Create batch job...</source> -<target>&Vytvořit dávku...</target> - <source>&Export file list...</source> <target>&Exportovat seznam souborů...</target> @@ -495,17 +483,17 @@ Příkaz je spuštěn když: <source>Swap sides</source> <target>Změna stran</target> -<source>Load configuration from file</source> -<target>Načíst konfiguraci ze souboru</target> +<source>Open</source> +<target>Načíst</target> -<source>Save current configuration to file</source> -<target>Uložit změny do konfiguračního souboru</target> +<source>Save</source> +<target>Uložit</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Posledně použité konfigurace (pomocí DEL můžete položku smazat)</target> -<source>Show excluded items</source> -<target>Zobrazit vynechané položky</target> +<source>Hide excluded items</source> +<target>Skrýt vynechané položky</target> <source>Show filtered or temporarily excluded files</source> <target>Zobrazit filtrované nebo dočasně vynechané soubory</target> @@ -543,15 +531,6 @@ Příkaz je spuštěn když: <source>Help</source> <target>Nápověda</target> -<source>Filter files</source> -<target>Filtr souborů</target> - -<source>Left</source> -<target>Levý</target> - -<source>Right</source> -<target>Pravý</target> - <source>Error handling</source> <target>Zpracování chyb</target> @@ -573,29 +552,26 @@ Příkaz je spuštěn když: <source>Abort synchronization on first error</source> <target>Ukončit synchronizaci při první chybě</target> -<source>On completion:</source> -<target>Po dokončení:</target> +<source>On completion</source> +<target>Po dokončení</target> <source>Show progress dialog</source> <target>Zobrazit průběh zpracování</target> -<source>Generate log file</source> -<target>Vytvořit záznamový soubor</target> +<source>Save log</source> +<target>Uložit žurnál</target> <source>Select folder to save log files</source> -<target>Vyberte složku pro záznamové soubory</target> +<target>Vyberte složku pro žurnály</target> <source>Limit</source> <target>Omezení</target> <source>Limit maximum number of log files</source> -<target>Omezení maximálního počtu záznamových souborů</target> - -<source>Batch settings</source> -<target>Nastavení</target> +<target>Omezení maximálního počtu žurnálů</target> -<source>Compare by...</source> -<target>Porovnat ...</target> +<source>Select variant</source> +<target>Výběr možnosti</target> <source> Files are found equal if @@ -610,6 +586,9 @@ Soubory jsou shodné jestliže jsou stejné </target> +<source>File time and size</source> +<target>Podle velikosti a data souboru</target> + <source> Files are found equal if - file content @@ -621,24 +600,36 @@ Soubory jsou shodné jestliže je stejný </target> +<source>File content</source> +<target>Podle obsahu souboru</target> + <source>Symbolic Link handling</source> <target>Zpracování symbolických odkazů</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Vyberte variantu:</target> +<source><- Two way -></source> +<target><- Databáze -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Rozpoznat a provést změny na obou stranách pomocí databáze. Odstraněné nebo přejmenované soubory a konflikty budou detekovány automaticky.</target> +<source>Mirror ->></source> +<target>Zrcadlení ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Zrcadlení levého adresáře. Pravý adresář bude změněn tak, aby po synchronizaci byl totožný s levým.</target> +<source>Update -></source> +<target>Aktualizace -></target> + <source>Copy new or updated files to right folder.</source> <target>Kopírovat nové nebo aktualizované soubory do adresáře vpravo.</target> +<source>Custom</source> +<target>Vlastní</target> + <source>Configure your own synchronization rules.</source> <target>Nastavení vlastních pravidel synchronizace.</target> @@ -654,7 +645,7 @@ je stejný <source>Recycle Bin</source> <target>Koš</target> -<source>Use Recycle Bin when deleting or overwriting files</source> +<source>Use Recycle Bin for deleted and overwritten files</source> <target>Použít Koš při mazání nebo přepisu souborů</target> <source>Versioning</source> @@ -663,8 +654,8 @@ je stejný <source>Move time-stamped files into specified folder</source> <target>Přesunout časově označení soubory do zvláštního adresáře</target> -<source>Limit maximum number of versions per file</source> -<target>Omezit maximální počet verzí jednoho souboru</target> +<source>Naming convention:</source> +<target>Pojmenování:</target> <source>Configuration</source> <target>Konfigurace</target> @@ -811,7 +802,10 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <target>Adresářové páry</target> <source>Overview</source> -<target>Navigační zobrazení</target> +<target>Přehled</target> + +<source>Filter files</source> +<target>Filtr souborů</target> <source>Select view</source> <target>Vyberte zobrazení</target> @@ -864,9 +858,15 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <source><Last session></source> <target><Poslední sezení></target> +<source>Folder Comparison and Synchronization</source> +<target>Porovnání a Synchronizace adresářů</target> + <source>Configuration saved!</source> <target>Konfigurace uložena.</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync dávka</target> + <source>Never save changes</source> <target>Nikdy neukládat změny</target> @@ -879,9 +879,6 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <source>Configuration loaded!</source> <target>Konfigurace načtena.</target> -<source>Folder Comparison and Synchronization</source> -<target>Porovnání a Synchronizace adresářů</target> - <source>Hide files that exist on left side only</source> <target>Skrýt soubory existující pouze vlevo</target> @@ -1042,6 +1039,9 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <source>Comparing content...</source> <target>Porovnávání obsahu...</target> +<source>Copy</source> +<target>Kopírovat</target> + <source>Paused</source> <target>Pauza</target> @@ -1082,7 +1082,7 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <target>Tento rok</target> <source>Last x days</source> -<target>Za posledních x dní</target> +<target>dní zpětně</target> <source>Byte</source> <target>Byte</target> @@ -1114,13 +1114,13 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <source>- folder part only</source> <target>- pouze cesta</target> -<source>- Other side's counterpart to %name</source> -<target>- celá cesta nebo jméno souboru z opačného panelu</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- celá cesta nebo jméno z opačného panelu pro %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- pouze cesta z opačného panelu</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- pouze cesta z opačného panelu pro %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> +<source>Make hidden warnings and dialogs visible again?</source> <target>Povolit opět zobrazování skrytých dialogů a hlášení?</target> <source> @@ -1146,50 +1146,29 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <source>Leave as unresolved conflict</source> <target>Ponechat jako nevyřešený konflikt</target> -<source>Files</source> -<target>Soubory</target> +<source>Replace</source> +<target>Nahradit</target> -<source>Percentage</source> -<target>Procentní podíl</target> +<source>Move files and replace if existing</source> +<target>Přesunout a nahradit pokud soubory existují</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Přidat časovou značku ke jménu souboru</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Složka</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Soubor</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 minuta</pluralform> -<pluralform>%x minuty</pluralform> -<pluralform>%x minut</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>RRRR-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 hodina</pluralform> -<pluralform>%x hodiny</pluralform> -<pluralform>%x hodin</pluralform> -</target> +<source>Files</source> +<target>Soubory</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 den</pluralform> -<pluralform>%x dny</pluralform> -<pluralform>%x dnů</pluralform> -</target> +<source>Percentage</source> +<target>Procentní podíl</target> <source>Cannot monitor directory %x.</source> <target>Nelze nastavit monitorování adresáře %x.</target> @@ -1239,6 +1218,9 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <source>Cannot copy file %x to %y.</source> <target>Nelze kopírovat soubor %x do %y.</target> +<source>Type of item %x is not supported:</source> +<target>Typ položky %x není podporován:</target> + <source>Cannot open directory %x.</source> <target>Nelze otevřít adresář %x.</target> @@ -1248,6 +1230,45 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <source>Detected endless directory recursion.</source> <target>Nalezena nekonečná adresářová smyčka.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 minuta</pluralform> +<pluralform>%x minuty</pluralform> +<pluralform>%x minut</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 hodina</pluralform> +<pluralform>%x hodiny</pluralform> +<pluralform>%x hodin</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 den</pluralform> +<pluralform>%x dny</pluralform> +<pluralform>%x dnů</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Nelze nastavit práva pro %x.</target> @@ -1377,6 +1398,9 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <source>Moving symbolic link %x to %y</source> <target>Přesouvání symbolického odkazu %x do %y</target> +<source>Removing old versions...</source> +<target>Odstraňování starých verzí...</target> + <source>Creating file %x</source> <target>Vytváření souboru %x</target> @@ -1398,6 +1422,9 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <source>Updating attributes of %x</source> <target>Aktualizace atributů souboru %x</target> +<source>Target folder %x already existing.</source> +<target>Cílova složka %x již existuje.</target> + <source>Target folder input field must not be empty.</source> <target>Cílová složka nesmí být prázdná.</target> @@ -1407,11 +1434,8 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <source>Source folder %x not found.</source> <target>Zdrojovou složku %x nelze najít.</target> -<source>Unresolved conflicts existing!</source> -<target>Nevyřešené konflikty!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Je možné konflikt ignorovat a pokračovat v synchronizaci.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Následující položky jsou nevyřešené konflikty a nebudou synchronizovány:</target> <source>Significant difference detected:</source> <target>Nalezeny významné změny:</target> @@ -1431,12 +1455,15 @@ Poznámka: Filtr je aplikován relativně k základním adresářům. <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Bude změněna složka, která je součástí adresářového páru vícenásobného porovnání. Prosím zkontrolujte si nastavení synchronizacem.</target> +<source>Left</source> +<target>Levý</target> + +<source>Right</source> +<target>Pravý</target> + <source>Synchronizing folder pair:</source> <target>Zpracovávání páru složek:</target> -<source>Target folder %x already existing.</source> -<target>Cílova složka %x již existuje.</target> - <source>Generating database...</source> <target>Vytváření databáze...</target> diff --git a/BUILD/Languages/danish.lng b/BUILD/Languages/danish.lng index da76bd5e..225019ac 100644 --- a/BUILD/Languages/danish.lng +++ b/BUILD/Languages/danish.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>Afbrydelse: Venter på nuværende opgave afsluttes...</target> +<source>Failure to create time stamp for versioning:</source> +<target></target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSynk - Automatisk Synkronisering</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Ryd filter indstillinger</target> -<source>Create a batch job</source> -<target>Lav et batch job</target> +<source>Save as batch job</source> +<target></target> <source>Comparison settings</source> <target>Sammenlignings indstillinger</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Fælles indstillinger</target> -<source>Summary</source> -<target>Opsummering</target> - <source>Find</source> <target>Find</target> @@ -271,8 +271,8 @@ <source>Select a folder</source> <target>Vælg en mappe</target> -<source>Delay [seconds]</source> -<target>Forsinkelse [sekunder]</target> +<source>Idle time [seconds]</source> +<target></target> <source>Idle time between last detected change and execution of command</source> <target>Tid imellem sidste ændring og udførelse</target> @@ -321,38 +321,23 @@ Kommandoen udføres hvis: <source>A folder input field is empty.</source> <target>Et mappe felt er tomt.</target> -<source>File time and size</source> -<target>Fil tid og størrelse</target> - -<source>File content</source> -<target>Fil indhold</target> - -<source><Automatic></source> -<target><Automatisk></target> - -<source>Mirror ->></source> -<target>Spejl ->></target> - -<source>Update -></source> -<target>Opdater -></target> - -<source>Custom</source> -<target>Brugerdefineret</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync batch</target> - <source>Synchronization aborted!</source> <target>Synkronisering afbrudt!</target> <source>Synchronization completed with errors!</source> <target>Synkronisering afsluttet med fejl!</target> +<source>Synchronization completed with warnings.</source> +<target></target> + <source>Nothing to synchronize!</source> <target>Intet at synkronisere!</target> -<source>Synchronization completed successfully!</source> -<target>Synkronisering afsluttet uden fejl!</target> +<source>Synchronization completed successfully.</source> +<target></target> + +<source>Saving log file %x...</source> +<target></target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Tryk "Skift" for at løse problemer i hoved vinduet.</target> @@ -360,9 +345,6 @@ Kommandoen udføres hvis: <source>Switching to FreeFileSync main dialog...</source> <target>Skift til hoved vinduet...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Kan ikke forbinde til sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>En ny version af FreeFilesyns er tilgængelig:</target> @@ -375,6 +357,12 @@ Kommandoen udføres hvis: <source>Information</source> <target>Information</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Kan ikke forbinde til sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target></target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Skal FreeFileSync automatisk checke efter opdateringer hver uge?</target> @@ -438,27 +426,27 @@ Kommandoen udføres hvis: <source>Hibernate</source> <target>Dvale</target> -<source>1. &Compare</source> -<target>1. &Sammenlign</target> - -<source>2. &Synchronize</source> -<target>2. &Synkroniser</target> - <source>&New</source> <target>&Ny</target> <source>&Save</source> <target>&Gem</target> +<source>Save as &batch job...</source> +<target></target> + +<source>1. &Compare</source> +<target>1. &Sammenlign</target> + +<source>2. &Synchronize</source> +<target>2. &Synkroniser</target> + <source>&Language</source> <target>&Sprog</target> <source>&Global settings...</source> <target>&Fælles indstillinger...</target> -<source>&Create batch job...</source> -<target>&Opret batch job...</target> - <source>&Export file list...</source> <target>&Eksporter fil liste...</target> @@ -492,17 +480,17 @@ Kommandoen udføres hvis: <source>Swap sides</source> <target>Byt sider</target> -<source>Load configuration from file</source> -<target>Læs konfiguration fra fil</target> +<source>Open</source> +<target></target> -<source>Save current configuration to file</source> -<target>Gem nuværende konfiguration i fil</target> +<source>Save</source> +<target></target> <source>Last used configurations (press DEL to remove from list)</source> <target>Senest brugte konfigurationer (tryk DEL for at fjerne fra listen)</target> -<source>Show excluded items</source> -<target>Vis afviste emner</target> +<source>Hide excluded items</source> +<target></target> <source>Show filtered or temporarily excluded files</source> <target>Vis filtrerede eller midlertidigt afviste filer</target> @@ -540,15 +528,6 @@ Kommandoen udføres hvis: <source>Help</source> <target>Hjælp</target> -<source>Filter files</source> -<target>Filter filer</target> - -<source>Left</source> -<target>Venstre</target> - -<source>Right</source> -<target>Højre</target> - <source>Error handling</source> <target>Fejl håndtering</target> @@ -570,14 +549,14 @@ Kommandoen udføres hvis: <source>Abort synchronization on first error</source> <target>Stop synkronisering ved første fejl</target> -<source>On completion:</source> -<target>Før færdiggørelse:</target> +<source>On completion</source> +<target></target> <source>Show progress dialog</source> <target>Vis dialog boks</target> -<source>Generate log file</source> -<target>Lav log fil</target> +<source>Save log</source> +<target></target> <source>Select folder to save log files</source> <target>Vælg destinations mappe til log filer</target> @@ -588,11 +567,8 @@ Kommandoen udføres hvis: <source>Limit maximum number of log files</source> <target>Maksimale antal log filer</target> -<source>Batch settings</source> -<target>Batch indstillinger</target> - -<source>Compare by...</source> -<target>Sammenlign ved...</target> +<source>Select variant</source> +<target></target> <source> Files are found equal if @@ -607,6 +583,9 @@ Filer bliver set som ens hvis er ens </target> +<source>File time and size</source> +<target>Fil tid og størrelse</target> + <source> Files are found equal if - file content @@ -618,24 +597,36 @@ Filer er ens hvis er det samme </target> +<source>File content</source> +<target>Fil indhold</target> + <source>Symbolic Link handling</source> <target>Link håndtering</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Vælg variant:</target> +<source><- Two way -></source> +<target></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>find ændringer på begge sider via. database. Sletninger, omdøbninger og konflikter bliver automatisk fundet.</target> +<source>Mirror ->></source> +<target>Spejl ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Spejling af venstre mappe. Højre mappe tilpasses så den ligner den venstre efter synkronisering.</target> +<source>Update -></source> +<target>Opdater -></target> + <source>Copy new or updated files to right folder.</source> <target>Kopier nye eller opdaterede filer til højre mappe.</target> +<source>Custom</source> +<target>Brugerdefineret</target> + <source>Configure your own synchronization rules.</source> <target>Konfigurer dine egne synkroniserings regler.</target> @@ -651,8 +642,8 @@ er det samme <source>Recycle Bin</source> <target>Skralsespand</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Brug skraldespand ved sletning eller overskrivning</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target></target> <source>Versioning</source> <target>Versionering</target> @@ -660,8 +651,8 @@ er det samme <source>Move time-stamped files into specified folder</source> <target>Flyt tids-stemplede filer til den valgte mappe</target> -<source>Limit maximum number of versions per file</source> -<target>Begræns det maksimale antal fil versioner</target> +<source>Naming convention:</source> +<target></target> <source>Configuration</source> <target>Konfiguration</target> @@ -810,6 +801,9 @@ Note: Fil navne må skal passe til grund bibliotekerne! <source>Overview</source> <target>Overblik</target> +<source>Filter files</source> +<target>Filter filer</target> + <source>Select view</source> <target>Vælg udseende</target> @@ -861,9 +855,15 @@ Note: Fil navne må skal passe til grund bibliotekerne! <source><Last session></source> <target><Sidste opgave></target> +<source>Folder Comparison and Synchronization</source> +<target>Mappe sammenligning og synkronisering</target> + <source>Configuration saved!</source> <target>Konfiguration gemt!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync batch</target> + <source>Never save changes</source> <target>Gem aldrig ændringer</target> @@ -876,9 +876,6 @@ Note: Fil navne må skal passe til grund bibliotekerne! <source>Configuration loaded!</source> <target>Konfiguration hentet!</target> -<source>Folder Comparison and Synchronization</source> -<target>Mappe sammenligning og synkronisering</target> - <source>Hide files that exist on left side only</source> <target>Skjul filder der kun findes på venstre side</target> @@ -1035,6 +1032,9 @@ Note: Fil navne må skal passe til grund bibliotekerne! <source>Comparing content...</source> <target>Sammenligner indhold...</target> +<source>Copy</source> +<target></target> + <source>Paused</source> <target>Pauset</target> @@ -1107,14 +1107,14 @@ Note: Fil navne må skal passe til grund bibliotekerne! <source>- folder part only</source> <target>- kun mappe delen</target> -<source>- Other side's counterpart to %name</source> -<target>- Modsatte sides modpart til %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target></target> -<source>- Other side's counterpart to %dir</source> -<target>- Modsatte sides modpart til %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target></target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Lav skjulte dialoger og advarselsbeskeder synlige igen?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target></target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1137,47 +1137,29 @@ Note: Fil navne må skal passe til grund bibliotekerne! <source>Leave as unresolved conflict</source> <target>Efterlad som uløste konflikter</target> -<source>Files</source> -<target>Filer</target> +<source>Replace</source> +<target></target> -<source>Percentage</source> -<target>Procent</target> +<source>Move files and replace if existing</source> +<target></target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target></target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target></target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target></target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target></target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 timer</pluralform> -<pluralform>%x timer</pluralform> -</target> +<source>Files</source> +<target>Filer</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 dag</pluralform> -<pluralform>%x dage</pluralform> -</target> +<source>Percentage</source> +<target>Procent</target> <source>Cannot monitor directory %x.</source> <target>Kan ikke overvåge biblioteket %x.</target> @@ -1227,6 +1209,9 @@ Note: Fil navne må skal passe til grund bibliotekerne! <source>Cannot copy file %x to %y.</source> <target>Kan ikke kopiere filen %x til %y.</target> +<source>Type of item %x is not supported:</source> +<target></target> + <source>Cannot open directory %x.</source> <target>Kan ikke åbne bibliotek %x.</target> @@ -1236,6 +1221,42 @@ Note: Fil navne må skal passe til grund bibliotekerne! <source>Detected endless directory recursion.</source> <target>Opdaget en uendelig biblioteks løkke.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 timer</pluralform> +<pluralform>%x timer</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 dag</pluralform> +<pluralform>%x dage</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Kan ikke sætte privilegier til %x.</target> @@ -1365,6 +1386,9 @@ Note: Fil navne må skal passe til grund bibliotekerne! <source>Moving symbolic link %x to %y</source> <target>Flytter linket %x til %y</target> +<source>Removing old versions...</source> +<target></target> + <source>Creating file %x</source> <target>Opretter filen %x</target> @@ -1386,6 +1410,9 @@ Note: Fil navne må skal passe til grund bibliotekerne! <source>Updating attributes of %x</source> <target>Opdaterer attributter af %x</target> +<source>Target folder %x already existing.</source> +<target>Destinations mappen %x eksisterer allerede.</target> + <source>Target folder input field must not be empty.</source> <target>Destinations mappe feltet må ikke være tomt.</target> @@ -1395,11 +1422,8 @@ Note: Fil navne må skal passe til grund bibliotekerne! <source>Source folder %x not found.</source> <target>Kilde mappen %x blev ikke fundet.</target> -<source>Unresolved conflicts existing!</source> -<target>Er er uløste konflikter!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Du kan ignorere konflikter og fortsætte synkronisering.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target></target> <source>Significant difference detected:</source> <target>Betydelig forskel fundet:</target> @@ -1419,12 +1443,15 @@ Note: Fil navne må skal passe til grund bibliotekerne! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>En mappe som er en del af flere mappe parringer vil blive ændret. Gennemse venligst synkroniserings indstillingerne.</target> +<source>Left</source> +<target>Venstre</target> + +<source>Right</source> +<target>Højre</target> + <source>Synchronizing folder pair:</source> <target>Synkroniserer mappe par:</target> -<source>Target folder %x already existing.</source> -<target>Destinations mappen %x eksisterer allerede.</target> - <source>Generating database...</source> <target>Opretter database...</target> diff --git a/BUILD/Languages/dutch.lng b/BUILD/Languages/dutch.lng index bf6459e1..afe5ce0e 100644 --- a/BUILD/Languages/dutch.lng +++ b/BUILD/Languages/dutch.lng @@ -58,8 +58,8 @@ <source>Clear filter settings</source> <target>Verwijder filterinstellingen</target> -<source>Create a batch job</source> -<target>Creëer een taaklijst</target> +<source>Save as batch job</source> +<target></target> <source>Comparison settings</source> <target>Vergelijksinstellingen</target> @@ -79,9 +79,6 @@ <source>Global settings</source> <target>Algemene instellingen</target> -<source>Summary</source> -<target>Overzicht</target> - <source>Find</source> <target>Vind</target> @@ -274,8 +271,8 @@ <source>Select a folder</source> <target>Selecteer een map</target> -<source>Delay [seconds]</source> -<target>Vertraging [seconden]</target> +<source>Idle time [seconds]</source> +<target></target> <source>Idle time between last detected change and execution of command</source> <target>Tijd tussen de laatste gedetecteerde verandering en de uitvoering van het commando</target> @@ -324,38 +321,23 @@ De opdracht word geactiveerd als: <source>A folder input field is empty.</source> <target>Een map invoerveld is leeg.</target> -<source>File time and size</source> -<target>Bestandstijd- en grootte</target> - -<source>File content</source> -<target>Bestandsinhoud</target> - -<source><Automatic></source> -<target><Automatisch></target> - -<source>Mirror ->></source> -<target>Spiegelen ->></target> - -<source>Update -></source> -<target>Bijwerken -></target> - -<source>Custom</source> -<target>Aangepast</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync taak</target> - <source>Synchronization aborted!</source> <target>Synchronisatie afgebroken!</target> <source>Synchronization completed with errors!</source> <target>Synchronisatie is met fouten afgerond!</target> +<source>Synchronization completed with warnings.</source> +<target></target> + <source>Nothing to synchronize!</source> <target>Niets om te synchroniseren!</target> -<source>Synchronization completed successfully!</source> -<target>Synchronisatie succesvol afgerond!</target> +<source>Synchronization completed successfully.</source> +<target></target> + +<source>Saving log file %x...</source> +<target></target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Druk op "Omschakelen" om problemen op te lossen in het hoofdscherm van FreeFileSync.</target> @@ -363,9 +345,6 @@ De opdracht word geactiveerd als: <source>Switching to FreeFileSync main dialog...</source> <target>Bezig met omschakelen naar het FreeFileSync hoofdscherm.</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Kan geen verbinding maken met sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Er is een nieuwe versie van FreeFileSync beschikbaar:</target> @@ -378,6 +357,12 @@ De opdracht word geactiveerd als: <source>Information</source> <target>Informatie</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Kan geen verbinding maken met sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target></target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Wilt u FreeFileSync elke week automatisch laten controleren of er een nieuwe versie is?</target> @@ -441,27 +426,27 @@ De opdracht word geactiveerd als: <source>Hibernate</source> <target>Slaapstand</target> -<source>1. &Compare</source> -<target>1. &Vergelijk</target> - -<source>2. &Synchronize</source> -<target>2. &Synchroniseer</target> - <source>&New</source> <target>&Nieuw</target> <source>&Save</source> <target>O&pslaan</target> +<source>Save as &batch job...</source> +<target></target> + +<source>1. &Compare</source> +<target>1. &Vergelijk</target> + +<source>2. &Synchronize</source> +<target>2. &Synchroniseer</target> + <source>&Language</source> <target>&Taal</target> <source>&Global settings...</source> <target>&Algemene instellingen...</target> -<source>&Create batch job...</source> -<target>&Creëer taaklijst...</target> - <source>&Export file list...</source> <target>&Exporteer bestandslijst...</target> @@ -495,17 +480,17 @@ De opdracht word geactiveerd als: <source>Swap sides</source> <target>Wissel zijdes</target> -<source>Load configuration from file</source> -<target>Laad configuratie uit bestand</target> +<source>Open</source> +<target></target> -<source>Save current configuration to file</source> -<target>Sla de huidige configuratie op in een bestand</target> +<source>Save</source> +<target></target> <source>Last used configurations (press DEL to remove from list)</source> <target>Laatst gebruikte instellingen (druk op DEL om iets te verwijderen)</target> -<source>Show excluded items</source> -<target>Laat uitgesloten bestanden zien</target> +<source>Hide excluded items</source> +<target></target> <source>Show filtered or temporarily excluded files</source> <target>Laat gefilterde of tijdelijk uitgesloten bestanden zien</target> @@ -543,15 +528,6 @@ De opdracht word geactiveerd als: <source>Help</source> <target>Help</target> -<source>Filter files</source> -<target>Filter bestanden</target> - -<source>Left</source> -<target>Links</target> - -<source>Right</source> -<target>Rechts</target> - <source>Error handling</source> <target>Fout afhandeling</target> @@ -573,14 +549,14 @@ De opdracht word geactiveerd als: <source>Abort synchronization on first error</source> <target>Synchronisatie stoppen bij eerste foutmelding</target> -<source>On completion:</source> -<target>Bij voltooiing:</target> +<source>On completion</source> +<target></target> <source>Show progress dialog</source> <target>Toon voortgangsdialoogvenster</target> -<source>Generate log file</source> -<target>Log bestand aanmaken</target> +<source>Save log</source> +<target></target> <source>Select folder to save log files</source> <target>Selecteer map om log bestanden op te slaan</target> @@ -591,11 +567,8 @@ De opdracht word geactiveerd als: <source>Limit maximum number of log files</source> <target>Limiteer maximaal aantal log bestanden</target> -<source>Batch settings</source> -<target>Batchinstellingen</target> - -<source>Compare by...</source> -<target>Vergelijk met...</target> +<source>Select variant</source> +<target></target> <source> Files are found equal if @@ -610,6 +583,9 @@ Bestanden worden als gelijk bevonden indien gelijk zijn </target> +<source>File time and size</source> +<target>Bestandstijd- en grootte</target> + <source> Files are found equal if - file content @@ -621,24 +597,36 @@ Bestanden worden als gelijk beschouwd indien overeenkomt </target> +<source>File content</source> +<target>Bestandsinhoud</target> + <source>Symbolic Link handling</source> <target>Afhandeling van snelkoppelingen</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Selecteer een variant:</target> +<source><- Two way -></source> +<target></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Identificeer en verspreid veranderingen aan beide kanten met behulp van een database. Verwijderingen, hernoemingen en conflicten worden automatisch gedetecteerd.</target> +<source>Mirror ->></source> +<target>Spiegelen ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Spiegel backup van linker map. Rechter map is na synchronisatie een exacte kopie van de linker map.</target> +<source>Update -></source> +<target>Bijwerken -></target> + <source>Copy new or updated files to right folder.</source> <target>Kopiëer nieuwe of geupdate bestanden naar de rechter map.</target> +<source>Custom</source> +<target>Aangepast</target> + <source>Configure your own synchronization rules.</source> <target>Configureer uw eigen synchronisatieregels.</target> @@ -654,8 +642,8 @@ overeenkomt <source>Recycle Bin</source> <target>Prullenbak</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Gebruik de prullenbak bij verwijderen of overschrijven van bestanden</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target></target> <source>Versioning</source> <target>Versiebeheer</target> @@ -663,8 +651,8 @@ overeenkomt <source>Move time-stamped files into specified folder</source> <target>Verplaats bestanden met tijdstempel naar specifieke map</target> -<source>Limit maximum number of versions per file</source> -<target>Limiteer maximaal aantal versies per bestand</target> +<source>Naming convention:</source> +<target></target> <source>Configuration</source> <target>Configuratie</target> @@ -813,6 +801,9 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Overview</source> <target>Overzicht</target> +<source>Filter files</source> +<target>Filter bestanden</target> + <source>Select view</source> <target>Selecteer weergave</target> @@ -864,9 +855,15 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source><Last session></source> <target><Laatste sessie></target> +<source>Folder Comparison and Synchronization</source> +<target>Mappen vergelijken en synchroniseren</target> + <source>Configuration saved!</source> <target>Configuratie opgeslagen!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync taak</target> + <source>Never save changes</source> <target>Wijzigingen nooit opslaan</target> @@ -879,9 +876,6 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Configuration loaded!</source> <target>Configuratie geladen!</target> -<source>Folder Comparison and Synchronization</source> -<target>Mappen vergelijken en synchroniseren</target> - <source>Hide files that exist on left side only</source> <target>Verberg bestanden die alleen aan de linkerzijde bestaan</target> @@ -1038,6 +1032,9 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Comparing content...</source> <target>Inhoud vergelijken...</target> +<source>Copy</source> +<target></target> + <source>Paused</source> <target>Gepauzeerd</target> @@ -1048,7 +1045,7 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <target>Afgebroken</target> <source>Completed</source> -<target>Volbracht</target> +<target>Voltooid</target> <source>Continue</source> <target>Doorgaan</target> @@ -1110,14 +1107,14 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>- folder part only</source> <target>- alleen het map gedeelte</target> -<source>- Other side's counterpart to %name</source> -<target>- Tegenhanger andere zijde naar %naam</target> +<source>- Other side's counterpart to %item_path%</source> +<target></target> -<source>- Other side's counterpart to %dir</source> -<target>- Tegenhanger andere zijde naar %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target></target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Verborgen dialogen en waarschuwings berichten opnieuw zichtbaar maken?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target></target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1140,47 +1137,29 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Leave as unresolved conflict</source> <target>Beschouw als onopgelost conflict</target> -<source>Files</source> -<target>Bestanden</target> +<source>Replace</source> +<target></target> -<source>Percentage</source> -<target>Percentage</target> +<source>Move files and replace if existing</source> +<target></target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target></target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target></target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target></target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target></target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 uur</pluralform> -<pluralform>%x uren</pluralform> -</target> +<source>Files</source> +<target>Bestanden</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 dag</pluralform> -<pluralform>%x dagen</pluralform> -</target> +<source>Percentage</source> +<target>Percentage</target> <source>Cannot monitor directory %x.</source> <target>Kan locatie %x niet controleren.</target> @@ -1230,6 +1209,9 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Cannot copy file %x to %y.</source> <target>Kan bestand %x niet kopiëren naar %y.</target> +<source>Type of item %x is not supported:</source> +<target></target> + <source>Cannot open directory %x.</source> <target>Kan map %x niet openen.</target> @@ -1239,6 +1221,42 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Detected endless directory recursion.</source> <target>Eindeloze map recursie gedetecteerd.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 uur</pluralform> +<pluralform>%x uren</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 dag</pluralform> +<pluralform>%x dagen</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Kan privilege %x niet instellen.</target> @@ -1392,6 +1410,9 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Updating attributes of %x</source> <target>Attributen bijwerken van %x</target> +<source>Target folder %x already existing.</source> +<target>Doelmap %x bestaat al.</target> + <source>Target folder input field must not be empty.</source> <target>Doelmap mag niet leeg zijn.</target> @@ -1401,11 +1422,8 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>Source folder %x not found.</source> <target>Bronmap %x niet gevonden.</target> -<source>Unresolved conflicts existing!</source> -<target>Er bestaan onopgeloste conflicten!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>U kunt de conflicten negeren en doorgaan met synchronisatie.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target></target> <source>Significant difference detected:</source> <target>Significant verschil gedetecteerd:</target> @@ -1425,12 +1443,15 @@ Opmerking: Bestandsnamen moeten relatief zijn aan de basis mappen! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Een map die onderdeel is van meerdere map paren word aangepast. Kijk alstublieft uw synchronisatie instellingen na.</target> +<source>Left</source> +<target>Links</target> + +<source>Right</source> +<target>Rechts</target> + <source>Synchronizing folder pair:</source> <target>Bezig met synchroniseren van folder paar:</target> -<source>Target folder %x already existing.</source> -<target>Doelmap %x bestaat al.</target> - <source>Generating database...</source> <target>Genereren van database...</target> diff --git a/BUILD/Languages/english_uk.lng b/BUILD/Languages/english_uk.lng index 4d6a5611..35ee5f16 100644 --- a/BUILD/Languages/english_uk.lng +++ b/BUILD/Languages/english_uk.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>Abort requested: Waiting for current operation to finish...</target> +<source>Failure to create time stamp for versioning:</source> +<target>Failure to create time stamp for versioning:</target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Automated Synchronisation</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Clear filter settings</target> -<source>Create a batch job</source> -<target>Create a batch job</target> +<source>Save as batch job</source> +<target>Save as batch job</target> <source>Comparison settings</source> <target>Comparison settings</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Global settings</target> -<source>Summary</source> -<target>Summary</target> - <source>Find</source> <target>Find</target> @@ -271,8 +271,8 @@ <source>Select a folder</source> <target>Select a folder</target> -<source>Delay [seconds]</source> -<target>Delay [seconds]</target> +<source>Idle time [seconds]</source> +<target>Idle time [seconds]</target> <source>Idle time between last detected change and execution of command</source> <target>Idle time between last detected change and execution of command</target> @@ -321,38 +321,23 @@ The command is triggered if: <source>A folder input field is empty.</source> <target>A folder input field is empty.</target> -<source>File time and size</source> -<target>File time and size</target> - -<source>File content</source> -<target>File content</target> - -<source><Automatic></source> -<target><Automatic></target> - -<source>Mirror ->></source> -<target>Mirror ->></target> - -<source>Update -></source> -<target>Update -></target> - -<source>Custom</source> -<target>Custom</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync batch</target> - <source>Synchronization aborted!</source> <target>Synchronisation aborted!</target> <source>Synchronization completed with errors!</source> <target>Synchronisation completed with errors!</target> +<source>Synchronization completed with warnings.</source> +<target>Synchronization completed with warnings.</target> + <source>Nothing to synchronize!</source> <target>Nothing to synchronise!</target> -<source>Synchronization completed successfully!</source> -<target>Synchronisation completed successfully!</target> +<source>Synchronization completed successfully.</source> +<target>Synchronisation completed successfully.</target> + +<source>Saving log file %x...</source> +<target>Saving log file %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Press "Switch" to resolve issues in FreeFileSync main dialogue.</target> @@ -360,9 +345,6 @@ The command is triggered if: <source>Switching to FreeFileSync main dialog...</source> <target>Switching to FreeFileSync main dialogue...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Unable to connect to sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>A new version of FreeFileSync is available:</target> @@ -375,6 +357,12 @@ The command is triggered if: <source>Information</source> <target>Information</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Unable to connect to sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Current FreeFileSync version number was not found online! Do you want to check manually?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Do you want FreeFileSync to automatically check for updates every week?</target> @@ -438,27 +426,27 @@ The command is triggered if: <source>Hibernate</source> <target>Hibernate</target> -<source>1. &Compare</source> -<target>1. &Compare</target> - -<source>2. &Synchronize</source> -<target>2. &Synchronise</target> - <source>&New</source> <target>&New</target> <source>&Save</source> <target>&Save</target> +<source>Save as &batch job...</source> +<target>Save as &batch job...</target> + +<source>1. &Compare</source> +<target>1. &Compare</target> + +<source>2. &Synchronize</source> +<target>2. &Synchronise</target> + <source>&Language</source> <target>&Language</target> <source>&Global settings...</source> <target>&Global settings...</target> -<source>&Create batch job...</source> -<target>&Create batch job...</target> - <source>&Export file list...</source> <target>&Export file list...</target> @@ -492,17 +480,17 @@ The command is triggered if: <source>Swap sides</source> <target>Swap sides</target> -<source>Load configuration from file</source> -<target>Load configuration from file</target> +<source>Open</source> +<target>Open</target> -<source>Save current configuration to file</source> -<target>Save current configuration to file</target> +<source>Save</source> +<target>Save</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Last used configurations (press DEL to remove from list)</target> -<source>Show excluded items</source> -<target>Show excluded items</target> +<source>Hide excluded items</source> +<target>Hide excluded items</target> <source>Show filtered or temporarily excluded files</source> <target>Show filtered or temporarily excluded files</target> @@ -540,15 +528,6 @@ The command is triggered if: <source>Help</source> <target>Help</target> -<source>Filter files</source> -<target>Filter files</target> - -<source>Left</source> -<target>Left</target> - -<source>Right</source> -<target>Right</target> - <source>Error handling</source> <target>Error handling</target> @@ -570,14 +549,14 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>Abort synchronisation on first error</target> -<source>On completion:</source> -<target>On completion:</target> +<source>On completion</source> +<target>On completion</target> <source>Show progress dialog</source> <target>Show progress dialogue</target> -<source>Generate log file</source> -<target>Generate log file</target> +<source>Save log</source> +<target>Save log</target> <source>Select folder to save log files</source> <target>Select folder to save log files</target> @@ -588,11 +567,8 @@ The command is triggered if: <source>Limit maximum number of log files</source> <target>Limit maximum number of log files</target> -<source>Batch settings</source> -<target>Batch settings</target> - -<source>Compare by...</source> -<target>Compare by...</target> +<source>Select variant</source> +<target>Select variant</target> <source> Files are found equal if @@ -607,6 +583,9 @@ Files are found equal if are the same </target> +<source>File time and size</source> +<target>File time and size</target> + <source> Files are found equal if - file content @@ -618,24 +597,36 @@ Files are found equal if is the same </target> +<source>File content</source> +<target>File content</target> + <source>Symbolic Link handling</source> <target>Symbolic Link handling</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Select variant:</target> +<source><- Two way -></source> +<target><- Two way -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</target> +<source>Mirror ->></source> +<target>Mirror ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronisation.</target> +<source>Update -></source> +<target>Update -></target> + <source>Copy new or updated files to right folder.</source> <target>Copy new or updated files to right folder.</target> +<source>Custom</source> +<target>Custom</target> + <source>Configure your own synchronization rules.</source> <target>Configure your own synchronisation rules.</target> @@ -651,8 +642,8 @@ is the same <source>Recycle Bin</source> <target>Recycle Bin</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Use Recycle Bin when deleting or overwriting files</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Use Recycle Bin for deleted and overwritten files</target> <source>Versioning</source> <target>Versioning</target> @@ -660,8 +651,8 @@ is the same <source>Move time-stamped files into specified folder</source> <target>Move time-stamped files into specified folder</target> -<source>Limit maximum number of versions per file</source> -<target>Limit maximum number of versions per file</target> +<source>Naming convention:</source> +<target>Naming convention:</target> <source>Configuration</source> <target>Configuration</target> @@ -810,6 +801,9 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>Overview</target> +<source>Filter files</source> +<target>Filter files</target> + <source>Select view</source> <target>Select view</target> @@ -861,9 +855,15 @@ Note: File names must be relative to base directories! <source><Last session></source> <target><Last session></target> +<source>Folder Comparison and Synchronization</source> +<target>Folder Comparison and Synchronisation</target> + <source>Configuration saved!</source> <target>Configuration saved!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync batch</target> + <source>Never save changes</source> <target>Never save changes</target> @@ -876,9 +876,6 @@ Note: File names must be relative to base directories! <source>Configuration loaded!</source> <target>Configuration loaded!</target> -<source>Folder Comparison and Synchronization</source> -<target>Folder Comparison and Synchronisation</target> - <source>Hide files that exist on left side only</source> <target>Hide files that exist on left side only</target> @@ -1035,6 +1032,9 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>Comparing content...</target> +<source>Copy</source> +<target>Copy</target> + <source>Paused</source> <target>Paused</target> @@ -1107,14 +1107,14 @@ Note: File names must be relative to base directories! <source>- folder part only</source> <target>- folder part only</target> -<source>- Other side's counterpart to %name</source> -<target>- Other side's counterpart to %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- Other side's counterpart to %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- Other side's counterpart to %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- Other side's counterpart to %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Make hidden dialogues and warning messages visible again?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Make hidden warnings and dialogues visible again?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1137,47 +1137,29 @@ Note: File names must be relative to base directories! <source>Leave as unresolved conflict</source> <target>Leave as unresolved conflict</target> -<source>Files</source> -<target>Files</target> +<source>Replace</source> +<target>Replace</target> -<source>Percentage</source> -<target>Percentage</target> +<source>Move files and replace if existing</source> +<target>Move files and replace if existing</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Append a timestamp to each file name</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Folder</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>File</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>YYYY-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</target> +<source>Files</source> +<target>Files</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</target> +<source>Percentage</source> +<target>Percentage</target> <source>Cannot monitor directory %x.</source> <target>Cannot monitor directory %x.</target> @@ -1227,6 +1209,9 @@ Note: File names must be relative to base directories! <source>Cannot copy file %x to %y.</source> <target>Cannot copy file %x to %y.</target> +<source>Type of item %x is not supported:</source> +<target>Type of item %x is not supported:</target> + <source>Cannot open directory %x.</source> <target>Cannot open directory %x.</target> @@ -1236,6 +1221,42 @@ Note: File names must be relative to base directories! <source>Detected endless directory recursion.</source> <target>Detected endless directory recursion.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Cannot set privilege %x.</target> @@ -1365,6 +1386,9 @@ Note: File names must be relative to base directories! <source>Moving symbolic link %x to %y</source> <target>Moving symbolic link %x to %y</target> +<source>Removing old versions...</source> +<target>Removing old versions...</target> + <source>Creating file %x</source> <target>Creating file %x</target> @@ -1386,6 +1410,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>Updating attributes of %x</target> +<source>Target folder %x already existing.</source> +<target>Target folder %x already existing.</target> + <source>Target folder input field must not be empty.</source> <target>Target folder input field must not be empty.</target> @@ -1395,11 +1422,8 @@ Note: File names must be relative to base directories! <source>Source folder %x not found.</source> <target>Source folder %x not found.</target> -<source>Unresolved conflicts existing!</source> -<target>Unresolved conflicts existing!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>You can ignore conflicts and continue synchronisation.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>The following items have unresolved conflicts and will not be synchronised:</target> <source>Significant difference detected:</source> <target>Significant difference detected:</target> @@ -1419,12 +1443,15 @@ Note: File names must be relative to base directories! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>A folder will be modified which is part of multiple folder pairs. Please review synchronisation settings.</target> +<source>Left</source> +<target>Left</target> + +<source>Right</source> +<target>Right</target> + <source>Synchronizing folder pair:</source> <target>Synchronising folder pair:</target> -<source>Target folder %x already existing.</source> -<target>Target folder %x already existing.</target> - <source>Generating database...</source> <target>Generating database...</target> diff --git a/BUILD/Languages/finnish.lng b/BUILD/Languages/finnish.lng index 93220ec4..b4115ad9 100644 --- a/BUILD/Languages/finnish.lng +++ b/BUILD/Languages/finnish.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>Keskeytys pyydetty: Odotetaan toiminnon loppumista...</target> +<source>Failure to create time stamp for versioning:</source> +<target>Ongelma luoda aikaleimaa versionnissa:</target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Automaattisoitu täsmäytys</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Nollaa suodin</target> -<source>Create a batch job</source> -<target>Eräajon luonti</target> +<source>Save as batch job</source> +<target>Tallenna eräajona</target> <source>Comparison settings</source> <target>Vertailun asetukset</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Yleiset asetukset</target> -<source>Summary</source> -<target>Yhteenveto</target> - <source>Find</source> <target>Etsi</target> @@ -271,8 +271,8 @@ <source>Select a folder</source> <target>Valitse hakemisto</target> -<source>Delay [seconds]</source> -<target>Viive [sekunttia]</target> +<source>Idle time [seconds]</source> +<target>Jouto aika [sekunttia]</target> <source>Idle time between last detected change and execution of command</source> <target>Joutoaika edellisen muutoksen ja käskyn suorittamisen välillä</target> @@ -321,38 +321,23 @@ Käsky suoritetaan jos: <source>A folder input field is empty.</source> <target>Hakemiston syöte on tyhjä.</target> -<source>File time and size</source> -<target>Tiedoston aika ja koko</target> - -<source>File content</source> -<target>Tiedoston sisältö</target> - -<source><Automatic></source> -<target><- Automaattinen -></target> - -<source>Mirror ->></source> -<target>Peilaava ->></target> - -<source>Update -></source> -<target>Päivittävä -></target> - -<source>Custom</source> -<target>Oma määritelmä</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync eräajo</target> - <source>Synchronization aborted!</source> <target>Täsmäytys lopetettiin!</target> <source>Synchronization completed with errors!</source> <target>Täsmäytys päättyi virheisiin!</target> +<source>Synchronization completed with warnings.</source> +<target>Täsmäytys päättyi varoituksin.</target> + <source>Nothing to synchronize!</source> <target>Ei mitään täsmäytettävää!</target> -<source>Synchronization completed successfully!</source> -<target>Täsmäytys suoritettu onnistuneesti!</target> +<source>Synchronization completed successfully.</source> +<target>Täsmäytys päättyi onnistuneesti.</target> + +<source>Saving log file %x...</source> +<target>Lokitiedosto: tallennetaan %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Paina "Vaihda" ja korjaa virheet FreeFileSync päävalintaikkunassa</target> @@ -360,9 +345,6 @@ Käsky suoritetaan jos: <source>Switching to FreeFileSync main dialog...</source> <target>Siiry FreeFileSync päävalintaikkunaan ...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Yhteys sourceforge.net:n ei onnistu!</target> - <source>A new version of FreeFileSync is available:</source> <target>FreeFileSync:n uusi verio on saatavilla:</target> @@ -375,6 +357,12 @@ Käsky suoritetaan jos: <source>Information</source> <target>Tietoja</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Yhteys sourceforge.net:n ei onnistu!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Nykyinen FreeFileSync versionumero ei löytynyt online! Haluatko tarkistaa manuaalisesti?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Haluatko että FreeFileSync hakee päivityksiä automaattisesti viikoittain?</target> @@ -438,27 +426,27 @@ Käsky suoritetaan jos: <source>Hibernate</source> <target>Horrostila</target> -<source>1. &Compare</source> -<target>1. &Vertaa</target> - -<source>2. &Synchronize</source> -<target>2. &Täsmäytä</target> - <source>&New</source> <target>&Uusi</target> <source>&Save</source> <target>Tallenna</target> +<source>Save as &batch job...</source> +<target>Tallenna &eräajona...</target> + +<source>1. &Compare</source> +<target>1. &Vertaa</target> + +<source>2. &Synchronize</source> +<target>2. &Täsmäytä</target> + <source>&Language</source> <target>&Kieli</target> <source>&Global settings...</source> <target>&Yleiset asetukset...</target> -<source>&Create batch job...</source> -<target>&Luo eräajo...</target> - <source>&Export file list...</source> <target>&Vie tiedostojoukko...</target> @@ -492,17 +480,17 @@ Käsky suoritetaan jos: <source>Swap sides</source> <target>Puolten vaihto</target> -<source>Load configuration from file</source> -<target>Lataa asetuksia tiedostosta</target> +<source>Open</source> +<target>Avaa</target> -<source>Save current configuration to file</source> -<target>Tallenna nämä asetukset tiedostoon</target> +<source>Save</source> +<target>Tallenna</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Viimeksi käytetty asetus (poista listalta paina DEL)</target> -<source>Show excluded items</source> -<target>Näytä suodatetut</target> +<source>Hide excluded items</source> +<target>Piilota poissuljetus</target> <source>Show filtered or temporarily excluded files</source> <target>Näytä suodatetut/nyt pois suljetut tiedostot</target> @@ -540,15 +528,6 @@ Käsky suoritetaan jos: <source>Help</source> <target>Ohje</target> -<source>Filter files</source> -<target>Suodata tiedostot</target> - -<source>Left</source> -<target>Vasen</target> - -<source>Right</source> -<target>Oikea</target> - <source>Error handling</source> <target>Virheiden käsittely</target> @@ -570,14 +549,14 @@ Käsky suoritetaan jos: <source>Abort synchronization on first error</source> <target>Keskeytä täsmäytys ensimmäisestä virheestä</target> -<source>On completion:</source> -<target>Kun valmis</target> +<source>On completion</source> +<target>Valmistuttua</target> <source>Show progress dialog</source> <target>Näytä etenemä ikkuna</target> -<source>Generate log file</source> -<target>Luo lokitiedosto</target> +<source>Save log</source> +<target>Tallenna loki</target> <source>Select folder to save log files</source> <target>Valitse tallennushakemisto lokeille</target> @@ -588,11 +567,8 @@ Käsky suoritetaan jos: <source>Limit maximum number of log files</source> <target>Lokeja enintäin</target> -<source>Batch settings</source> -<target>Eräajo asetukset</target> - -<source>Compare by...</source> -<target>Vertaile...</target> +<source>Select variant</source> +<target>Valitse tyyppi</target> <source> Files are found equal if @@ -607,6 +583,9 @@ Tiedostot samat jos ovat samat </target> +<source>File time and size</source> +<target>Tiedoston aika ja koko</target> + <source> Files are found equal if - file content @@ -618,24 +597,36 @@ Tiedostot samat jos, on sama </target> +<source>File content</source> +<target>Tiedoston sisältö</target> + <source>Symbolic Link handling</source> <target>Pikakuvakkeiden hallinta</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Valitse vaihtoehto:</target> +<source><- Two way -></source> +<target><- Molemmat -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Tunnista ja monista muutokset tietokannalla molemmille puolille. Poistot, uudelleennimeäminen ja ristiriidat havaitaan automaattisesti.</target> +<source>Mirror ->></source> +<target>Peilaava ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Vasemman peilaava varmuuskopio. Oikeanpuoleinen hakemisto muutetaan täsmäytyksessä vastaamaan tarkasti vasenta.</target> +<source>Update -></source> +<target>Päivittävä -></target> + <source>Copy new or updated files to right folder.</source> <target>Kopioi uudet tai päivitetyt tiedostot oikeaan kansioon.</target> +<source>Custom</source> +<target>Oma määritelmä</target> + <source>Configure your own synchronization rules.</source> <target>Määritä omat täsmäyssäännöt.</target> @@ -651,8 +642,8 @@ on sama <source>Recycle Bin</source> <target>Roskakori</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Käytä Roskakoria kun poistat tai korvaat tiedostoja</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Käytä Roskakoria poistetuille/korvatille tiedostoille</target> <source>Versioning</source> <target>Versiointi</target> @@ -660,8 +651,8 @@ on sama <source>Move time-stamped files into specified folder</source> <target>Siirrä aikaleimatut tiedostot hakemistoon</target> -<source>Limit maximum number of versions per file</source> -<target>Tiedostoversioita enintäin</target> +<source>Naming convention:</source> +<target>Nimeämis käytäntö:</target> <source>Configuration</source> <target>Asetukset</target> @@ -772,7 +763,7 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <target>Kopioi tiedosto ja hakemisto käyttöoikeuksia (Pääkäyttäjän oikeudet tarvitaan)</target> <source>Restore hidden dialogs</source> -<target>Palauta piilotetut ikkunat</target> +<target>Palauta piiloitetut ikkunat</target> <source>External applications</source> <target>Ulkopuolinen sovellus</target> @@ -810,6 +801,9 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Overview</source> <target>Yleiskatsaus</target> +<source>Filter files</source> +<target>Suodata tiedostot</target> + <source>Select view</source> <target>Valitse näkymä</target> @@ -861,9 +855,15 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source><Last session></source> <target><Edellinen istunto></target> +<source>Folder Comparison and Synchronization</source> +<target>Hakemistojen vertailu ja täsmäytys</target> + <source>Configuration saved!</source> <target>Asetukset tallennettu!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync eräajo</target> + <source>Never save changes</source> <target>Älä tallenna muutoksia</target> @@ -876,9 +876,6 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Configuration loaded!</source> <target>Asetukset ladattu!</target> -<source>Folder Comparison and Synchronization</source> -<target>Hakemistojen vertailu ja täsmäytys</target> - <source>Hide files that exist on left side only</source> <target>Piilota vain vasemmalla esiintyvät tiedostot</target> @@ -1035,6 +1032,9 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Comparing content...</source> <target>Sisällön vertailu...</target> +<source>Copy</source> +<target>Monista</target> + <source>Paused</source> <target>Pysäytetty</target> @@ -1107,14 +1107,14 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>- folder part only</source> <target>- vain hakemisto-osa</target> -<source>- Other side's counterpart to %name</source> -<target>- Toisen puolen vastaavuus on %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- Toisen puolen osa liittyy %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- Toisen puolen vastaavuus on %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- Toisen puolen osa liittyy %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Näytetäänkö piiloitetut käskyt ja viestit?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Näytä piiloitetut varoitukset/ikkunnat uudestaan?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1137,47 +1137,29 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Leave as unresolved conflict</source> <target>Jätä ratkaisemattomana virheenä</target> -<source>Files</source> -<target>Tiedostot</target> +<source>Replace</source> +<target>Korvaa</target> -<source>Percentage</source> -<target>Prosenttia</target> +<source>Move files and replace if existing</source> +<target>Siirrä tiedostot ja korvaa tarvittaessa</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Lisää aikaleima tiedostoihin</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Hakemisto</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Tiedosto</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>VVVV-KK-PP ttmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 tunti</pluralform> -<pluralform>%x tuntia</pluralform> -</target> +<source>Files</source> +<target>Tiedostot</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 päivä</pluralform> -<pluralform>%x päivää</pluralform> -</target> +<source>Percentage</source> +<target>Prosenttia</target> <source>Cannot monitor directory %x.</source> <target>Hakemistoa %x ei voida tarkkaila.</target> @@ -1227,6 +1209,9 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Cannot copy file %x to %y.</source> <target>Tiedostoa %x ei voida kopioida kohtaan %y.</target> +<source>Type of item %x is not supported:</source> +<target>Kohteen %x tyyppiä ei tueta:</target> + <source>Cannot open directory %x.</source> <target>Hakemistoa %x ei voida avata.</target> @@ -1236,6 +1221,42 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Detected endless directory recursion.</source> <target>Päättymätön hakemiston toisto.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 tunti</pluralform> +<pluralform>%x tuntia</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 päivä</pluralform> +<pluralform>%x päivää</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Oikeuksia %x ei voitu asettaa.</target> @@ -1365,6 +1386,9 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Moving symbolic link %x to %y</source> <target>Siirrä pikakuvike %x -> %y</target> +<source>Removing old versions...</source> +<target>Vanhat poistetaa...</target> + <source>Creating file %x</source> <target>Luodaan tiedosto %x</target> @@ -1386,6 +1410,9 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Updating attributes of %x</source> <target>Päivitän %x:n ominaisuudet</target> +<source>Target folder %x already existing.</source> +<target>Kohdehakemisto %x on olemassa.</target> + <source>Target folder input field must not be empty.</source> <target>Kohde hakemiston kenttä on annettava.</target> @@ -1395,11 +1422,8 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>Source folder %x not found.</source> <target>Lähdehakemisto %x ei löydy.</target> -<source>Unresolved conflicts existing!</source> -<target>Ratkaisemattomia ristiriitoja!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Voit jatkaa täsmäystä, ristiriidoista huolimatta.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Näissä kohteissa on selvittämättömiä ristiriitoja, niitä ei täsmäytetä:</target> <source>Significant difference detected:</source> <target>Merkittävä eroavavuus todettu:</target> @@ -1419,12 +1443,15 @@ Huom: Tiedostojen nimet täytyy olla suhteessa pää hakemistoihin! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Moniosaisen hakemistoparin hakemistoa muutetaan. Tarkista täsmäytyksen asetuksia.</target> +<source>Left</source> +<target>Vasen</target> + +<source>Right</source> +<target>Oikea</target> + <source>Synchronizing folder pair:</source> <target>Täsmäytetään hakemistoparia:</target> -<source>Target folder %x already existing.</source> -<target>Kohdehakemisto %x on olemassa.</target> - <source>Generating database...</source> <target> Tietokanta luodaan. diff --git a/BUILD/Languages/french.lng b/BUILD/Languages/french.lng index 91d1c1b0..20fddc36 100644 --- a/BUILD/Languages/french.lng +++ b/BUILD/Languages/french.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>Abandon demandé : En attente de la fin de l'opération en cours...</target> +<source>Failure to create time stamp for versioning:</source> +<target>Impossible de créer l'horodatage des versions</target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Synchronisation Automatisée</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Effacer la configuration du filtrage</target> -<source>Create a batch job</source> -<target>Créer un traitement batch</target> +<source>Save as batch job</source> +<target>Enrgistrer en temps que fichier batch</target> <source>Comparison settings</source> <target>Paramètres de comparaison</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Paramètres généraux</target> -<source>Summary</source> -<target>Résumé</target> - <source>Find</source> <target>Chercher</target> @@ -271,8 +271,8 @@ <source>Select a folder</source> <target>Choisissez un dossier</target> -<source>Delay [seconds]</source> -<target>Latence [secondes]</target> +<source>Idle time [seconds]</source> +<target>Pause [secondes]</target> <source>Idle time between last detected change and execution of command</source> <target>Délai entre le dernier changement détecté et la dernière exécution de la commande</target> @@ -321,38 +321,23 @@ La commande est déclenchée si : <source>A folder input field is empty.</source> <target>Une entrée dossier est vide.</target> -<source>File time and size</source> -<target>Heure et taille du fichier</target> - -<source>File content</source> -<target>Contenu du fichier</target> - -<source><Automatic></source> -<target><Automatique></target> - -<source>Mirror ->></source> -<target>Miroir ->></target> - -<source>Update -></source> -<target>Mise à Jour -></target> - -<source>Custom</source> -<target>Personnaliser</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync batch</target> - <source>Synchronization aborted!</source> <target>Synchronisation abandonnée !</target> <source>Synchronization completed with errors!</source> <target>Synchronisation terminée avec des erreurs !</target> +<source>Synchronization completed with warnings.</source> +<target>Synchronisation terminée avec avertissements</target> + <source>Nothing to synchronize!</source> <target>Rien à synchroniser !</target> -<source>Synchronization completed successfully!</source> -<target>Synchronisation terminée avec succès !</target> +<source>Synchronization completed successfully.</source> +<target>Synchronisation terminée sans erreurs</target> + +<source>Saving log file %x...</source> +<target>Enregistrement du fichier log %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Cliquez sur "Permuter" pour résoudre les problèmes dans l'écran principal de FreeFileSync.</target> @@ -360,9 +345,6 @@ La commande est déclenchée si : <source>Switching to FreeFileSync main dialog...</source> <target>Passage à l'écran principal de FreeFileSync...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Impossible de se connecter à sourceforge.net !</target> - <source>A new version of FreeFileSync is available:</source> <target>Une nouvelle version de FreeFileSync est disponible</target> @@ -375,6 +357,12 @@ La commande est déclenchée si : <source>Information</source> <target>Information</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Impossible de se connecter à sourceforge.net !</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Le numéro de la version actuelle de FreeFileSync n'a pas été trouvé en ligne ! Voulez-vous le rechercher manuellement ?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Voulez-vous que FreeFileSync recherche automatiquement une nouvelle version chaque semaine ?</target> @@ -438,27 +426,27 @@ La commande est déclenchée si : <source>Hibernate</source> <target>Figer</target> -<source>1. &Compare</source> -<target>1. &Comparer</target> - -<source>2. &Synchronize</source> -<target>2. &Synchroniser</target> - <source>&New</source> <target>&Nouveau</target> <source>&Save</source> <target>&Sauvegarder</target> +<source>Save as &batch job...</source> +<target>Enregistrer en temps que job &batch...</target> + +<source>1. &Compare</source> +<target>1. &Comparer</target> + +<source>2. &Synchronize</source> +<target>2. &Synchroniser</target> + <source>&Language</source> <target>&Langue</target> <source>&Global settings...</source> <target>&Paramètres généraux...</target> -<source>&Create batch job...</source> -<target>&Créer une tâche de traitement batch...</target> - <source>&Export file list...</source> <target>&Exportation de la liste des fichiers...</target> @@ -492,17 +480,17 @@ La commande est déclenchée si : <source>Swap sides</source> <target>Permuter les côtés</target> -<source>Load configuration from file</source> -<target>Charger la configuration à partir du fichier</target> +<source>Open</source> +<target>Ouvrir</target> -<source>Save current configuration to file</source> -<target>Enregistrer la configuration actuelle</target> +<source>Save</source> +<target>Sauvegarder</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Dernière configuration utilisée (Appuyez sur SUPPR pour l'enlever de la liste)</target> -<source>Show excluded items</source> -<target>Afficher les éléments exclus</target> +<source>Hide excluded items</source> +<target>Cacher les éléments exclus</target> <source>Show filtered or temporarily excluded files</source> <target>Afficher les fichiers filtrés ou temporairement exclus</target> @@ -540,15 +528,6 @@ La commande est déclenchée si : <source>Help</source> <target>Aide</target> -<source>Filter files</source> -<target>Filtrage des fichiers</target> - -<source>Left</source> -<target>Gauche</target> - -<source>Right</source> -<target>Droite</target> - <source>Error handling</source> <target>Erreur de gestion de fichiers</target> @@ -570,14 +549,14 @@ La commande est déclenchée si : <source>Abort synchronization on first error</source> <target>Abandonner la synchronisation dès la première erreur</target> -<source>On completion:</source> -<target>A la fin :</target> +<source>On completion</source> +<target>À la fin</target> <source>Show progress dialog</source> <target>Montrer la fenêtre de progression</target> -<source>Generate log file</source> -<target>Créer le fichier log</target> +<source>Save log</source> +<target>Sauvegarder le fichier log</target> <source>Select folder to save log files</source> <target>Choisir le dossier de sauvegarde des fichiers log</target> @@ -588,11 +567,8 @@ La commande est déclenchée si : <source>Limit maximum number of log files</source> <target>Nombre maximal de fichiers log</target> -<source>Batch settings</source> -<target>Configuration du traitement batch</target> - -<source>Compare by...</source> -<target>Comparaison par...</target> +<source>Select variant</source> +<target>Choisir une variante</target> <source> Files are found equal if @@ -607,6 +583,9 @@ Les fichiers sont considérés comme identiques si sont les mêmes </target> +<source>File time and size</source> +<target>Heure et taille du fichier</target> + <source> Files are found equal if - file content @@ -618,24 +597,36 @@ Les fichiers sont considérés comme identiques si est identique </target> +<source>File content</source> +<target>Contenu du fichier</target> + <source>Symbolic Link handling</source> <target>Gestion des Liens Symboliques</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Choisissez une variante :</target> +<source><- Two way -></source> +<target><- Deux sens -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Identifie et propage les modifications des deux côtés à l'aide d'une base de données. Les suppressions, renommages et conflits sont détectés automatiquement.</target> +<source>Mirror ->></source> +<target>Miroir ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Copie miroir du dossier de gauche. Le dossier de droite est modifié pour être strictement identique après la synchronisation.</target> +<source>Update -></source> +<target>Mise à Jour -></target> + <source>Copy new or updated files to right folder.</source> <target>Copie les fichiers nouveaux ou modifiés dans le dossier de droite.</target> +<source>Custom</source> +<target>Personnaliser</target> + <source>Configure your own synchronization rules.</source> <target>Paramétrage de vos règles de synchronisation.</target> @@ -651,8 +642,8 @@ est identique <source>Recycle Bin</source> <target>Corbeille</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Utiliser la Corbeille lors de la suppression ou du remplacement d'un fichier</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Utiliser la corbeille pour les fichiers supprimés ou écrasés</target> <source>Versioning</source> <target>Gestion des versions</target> @@ -660,8 +651,8 @@ est identique <source>Move time-stamped files into specified folder</source> <target>Déplacer les fichiers horodatés dans le dossier spécifié</target> -<source>Limit maximum number of versions per file</source> -<target>Nombre maximal de versions par fichier</target> +<source>Naming convention:</source> +<target>Convention de nommage :</target> <source>Configuration</source> <target>Configuration</target> @@ -810,6 +801,9 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Overview</source> <target>Présentation</target> +<source>Filter files</source> +<target>Filtrage des fichiers</target> + <source>Select view</source> <target>Choisissez une vue</target> @@ -861,9 +855,15 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source><Last session></source> <target><Dernière session></target> +<source>Folder Comparison and Synchronization</source> +<target>Comparaison de dossiers et Synchronisation</target> + <source>Configuration saved!</source> <target>Configuration enregistrée !</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync batch</target> + <source>Never save changes</source> <target>Ne jamais enregistrer les modifications</target> @@ -876,9 +876,6 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Configuration loaded!</source> <target>Configuration chargée !</target> -<source>Folder Comparison and Synchronization</source> -<target>Comparaison de dossiers et Synchronisation</target> - <source>Hide files that exist on left side only</source> <target>Masquer les fichiers n'existant qu'à gauche</target> @@ -1035,6 +1032,9 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Comparing content...</source> <target>Comparaison du contenu...</target> +<source>Copy</source> +<target>Copier</target> + <source>Paused</source> <target>En pause</target> @@ -1107,14 +1107,14 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>- folder part only</source> <target>- Partie dossier seulement</target> -<source>- Other side's counterpart to %name</source> -<target>- équivalent de %name de l'autre côté</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- Duplication vers %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- équivalent de %dir de l'autre côté</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>Duplication vers %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Rendre de nouveau visibles les boîtes de dialogue et les messages d'avertissement ?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Voulez-vous réafficher les avertissements et les boîtes de dialogue ?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1137,47 +1137,29 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Leave as unresolved conflict</source> <target>Abandonner en tant que conflit non résolu</target> -<source>Files</source> -<target>Fichiers</target> +<source>Replace</source> +<target>Remplacer</target> -<source>Percentage</source> -<target>Pourcentage</target> +<source>Move files and replace if existing</source> +<target>Déplacer les fichiers et remplacer ceux existant</target> -<source>%x TB</source> -<target>%x To</target> +<source>Append a timestamp to each file name</source> +<target>Ajouter un horodatage à chaque fichier</target> -<source>%x PB</source> -<target>%x Po</target> +<source>Folder</source> +<target>Dossier</target> -<source>%x%</source> -<target>%x %</target> +<source>File</source> +<target>Fichier</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>%x min</pluralform> -<pluralform>%x min</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>AAAA-MM-JJ hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>%x heure</pluralform> -<pluralform>%x heures</pluralform> -</target> +<source>Files</source> +<target>Fichiers</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>%x jour</pluralform> -<pluralform>%x jours</pluralform> -</target> +<source>Percentage</source> +<target>Pourcentage</target> <source>Cannot monitor directory %x.</source> <target>Impossible de gérer le répertoire %x.</target> @@ -1227,6 +1209,9 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Cannot copy file %x to %y.</source> <target>Impossible de copier le fichier %X vers %y.</target> +<source>Type of item %x is not supported:</source> +<target>Le type de l'élément %x n'est pas accepté :</target> + <source>Cannot open directory %x.</source> <target>Impossible d'ouvrir le répertoire %x.</target> @@ -1236,6 +1221,42 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Detected endless directory recursion.</source> <target>Une boucle sans fin détectée dans un répertoire.</target> +<source>%x TB</source> +<target>%x To</target> + +<source>%x PB</source> +<target>%x Po</target> + +<source>%x%</source> +<target>%x %</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>%x min</pluralform> +<pluralform>%x min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>%x heure</pluralform> +<pluralform>%x heures</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>%x jour</pluralform> +<pluralform>%x jours</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Impossible de fixer le privilège %x.</target> @@ -1365,6 +1386,9 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Moving symbolic link %x to %y</source> <target>Déplacement du lien symbolique %x vers %y</target> +<source>Removing old versions...</source> +<target>Suppression des anciennes versions...</target> + <source>Creating file %x</source> <target>Création du fichier %x</target> @@ -1386,6 +1410,9 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Updating attributes of %x</source> <target>Mise à jour des attributs de %x</target> +<source>Target folder %x already existing.</source> +<target>Le dossier destination %x existe déjà.</target> + <source>Target folder input field must not be empty.</source> <target>L'entrée dossier de destination ne doit pas être vide.</target> @@ -1395,11 +1422,8 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>Source folder %x not found.</source> <target>Dossier source %x non trouvé.</target> -<source>Unresolved conflicts existing!</source> -<target>Il y a des conflits non résolus !</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Vous pouvez ignorer ces conflits et continuer la synchronisation.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Les éléments suivants sont en conflit non résolu et ne seront pas synchronisés :</target> <source>Significant difference detected:</source> <target>Différence significative détectée :</target> @@ -1419,12 +1443,15 @@ Attention : les noms de fichiers doivent être relatifs aux répertoires de base <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Un dossier faisant partie de paires multiples sera modifié. Veuillez vérifier les paramètres de synchronisation.</target> +<source>Left</source> +<target>Gauche</target> + +<source>Right</source> +<target>Droite</target> + <source>Synchronizing folder pair:</source> <target>Synchronisation de la paire de dossiers</target> -<source>Target folder %x already existing.</source> -<target>Le dossier destination %x existe déjà.</target> - <source>Generating database...</source> <target>Génération de la base de données...</target> diff --git a/BUILD/Languages/german.lng b/BUILD/Languages/german.lng index d2fca6cf..6ca3b96b 100644 --- a/BUILD/Languages/german.lng +++ b/BUILD/Languages/german.lng @@ -59,7 +59,7 @@ <target>Filtereinstellungen löschen</target> <source>Save as batch job</source> -<target>Speichern als Batch-Job</target> +<target>Als Batch-Job speichern</target> <source>Comparison settings</source> <target>Vergleichseinstellungen</target> @@ -79,9 +79,6 @@ <source>Global settings</source> <target>Globale Einstellungen</target> -<source>Summary</source> -<target>Zusammenfassung</target> - <source>Find</source> <target>Suchen</target> @@ -274,8 +271,8 @@ <source>Select a folder</source> <target>Ordner auswählen</target> -<source>Delay [seconds]</source> -<target>Verzögerung [Sekunden]</target> +<source>Idle time [seconds]</source> +<target>Ruhezeit [Sekunden]</target> <source>Idle time between last detected change and execution of command</source> <target>Ruhezeit zwischen der letzten erkannten Änderung und dem Aufruf der Befehlszeile</target> @@ -324,44 +321,23 @@ Die Befehlszeile wird ausgelöst wenn: <source>A folder input field is empty.</source> <target>Ein Ordnereingabefeld ist leer.</target> -<source>File time and size</source> -<target>Datum und Größe</target> - -<source>File content</source> -<target>Dateiinhalt</target> - -<source><Automatic></source> -<target><Automatik></target> - -<source>Mirror ->></source> -<target>Spiegeln ->></target> - -<source>Update -></source> -<target>Aktualisieren -></target> - -<source>Custom</source> -<target>Eigene</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync Batch</target> - -<source>Saving log file %x</source> -<target>Speichere Logdatei %x</target> - <source>Synchronization aborted!</source> <target>Synchronisation abgebrochen!</target> <source>Synchronization completed with errors!</source> <target>Synchronisation mit Fehlern abgeschlossen!</target> -<source>Synchronization completed with warnings!</source> -<target>Synchronisation mit Warnungen abgeschlossen!</target> +<source>Synchronization completed with warnings.</source> +<target>Synchronisation mit Warnungen abgeschlossen.</target> <source>Nothing to synchronize!</source> <target>Es gibt nichts zu synchronisieren!</target> -<source>Synchronization completed successfully!</source> -<target>Synchronisation erfolgreich abgeschlossen!</target> +<source>Synchronization completed successfully.</source> +<target>Synchronisation erfolgreich abgeschlossen.</target> + +<source>Saving log file %x...</source> +<target>Speichere Logdatei %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Drücken Sie "Wechseln", um die Probleme in FreeFileSyncs Hauptdialog zu beheben.</target> @@ -513,8 +489,8 @@ Die Befehlszeile wird ausgelöst wenn: <source>Last used configurations (press DEL to remove from list)</source> <target>Zuletzt benutzte Konfigurationen (Entf-Taste löscht Einträge)</target> -<source>Show excluded items</source> -<target>Ausgeschlossene Elemente anzeigen</target> +<source>Hide excluded items</source> +<target>Ausgeschlossene Elemente verstecken</target> <source>Show filtered or temporarily excluded files</source> <target>Gefilterte oder temporär ausgeschlossene Dateien zeigen</target> @@ -552,15 +528,6 @@ Die Befehlszeile wird ausgelöst wenn: <source>Help</source> <target>Hilfe</target> -<source>Filter files</source> -<target>Dateien filtern</target> - -<source>Left</source> -<target>Links</target> - -<source>Right</source> -<target>Rechts</target> - <source>Error handling</source> <target>Fehlerbehandlung</target> @@ -582,14 +549,14 @@ Die Befehlszeile wird ausgelöst wenn: <source>Abort synchronization on first error</source> <target>Synchronisation beim ersten Fehler abbrechen</target> -<source>On completion:</source> -<target>Nach Abschluss:</target> +<source>On completion</source> +<target>Nach Abschluss</target> <source>Show progress dialog</source> <target>Fortschrittsdialog zeigen</target> -<source>Generate log file</source> -<target>Logdatei erzeugen</target> +<source>Save log</source> +<target>Log speichern</target> <source>Select folder to save log files</source> <target>Ordner zum speichern der Logdateien wählen</target> @@ -600,11 +567,8 @@ Die Befehlszeile wird ausgelöst wenn: <source>Limit maximum number of log files</source> <target>Maximale Anzahl von Logdateien begrenzen</target> -<source>Batch settings</source> -<target>Batch Einstellungen</target> - -<source>Compare by...</source> -<target>Vergleichen nach...</target> +<source>Select variant</source> +<target>Variante auswählen</target> <source> Files are found equal if @@ -619,6 +583,9 @@ Dateien gelten als gleich, wenn gleich sind </target> +<source>File time and size</source> +<target>Datum und Größe</target> + <source> Files are found equal if - file content @@ -630,24 +597,36 @@ Dateien gelten als gleich, wenn gleich ist </target> +<source>File content</source> +<target>Dateiinhalt</target> + <source>Symbolic Link handling</source> -<target>Behandlung Symbolischer Links</target> +<target>Symbolische Links</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Variante auswählen:</target> +<source><- Two way -></source> +<target><- Zwei Wege -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Identifiziere und propagiere Änderungen auf beiden Seiten mit Hilfe einer Datenbank. Löschungen, Umbenennungen und Konflikte werden automatisch erkannt.</target> +<source>Mirror ->></source> +<target>Spiegeln ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Spiegelkopie des linken Ordners erstellen. Der rechte Ordner wird dem linken exakt angeglichen.</target> +<source>Update -></source> +<target>Aktualisieren -></target> + <source>Copy new or updated files to right folder.</source> <target>Neue oder aktualisierte Dateien in den rechten Ordner kopieren.</target> +<source>Custom</source> +<target>Eigene</target> + <source>Configure your own synchronization rules.</source> <target>Eigene Synchronisationsregeln definieren.</target> @@ -655,7 +634,7 @@ gleich ist <target>Behandlung von Löschungen</target> <source>Permanent</source> -<target>Endgültig</target> +<target>Permanent</target> <source>Delete or overwrite files permanently</source> <target>Dateien endgültig löschen oder überschreiben</target> @@ -663,8 +642,8 @@ gleich ist <source>Recycle Bin</source> <target>Papierkorb</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Papierkorb für zu löschende oder zu überschreibende Dateien nutzen</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Verwende den Papierkorb für gelöschte und überschriebene Dateien</target> <source>Versioning</source> <target>Versionierung</target> @@ -672,8 +651,8 @@ gleich ist <source>Move time-stamped files into specified folder</source> <target>Dateien mit Zeitstempel in den angegebenen Ordner verschieben</target> -<source>Limit maximum number of versions per file</source> -<target>Maximale Anzahl von Versionen pro Datei begrenzen</target> +<source>Naming convention:</source> +<target>Namenskonvention:</target> <source>Configuration</source> <target>Konfiguration</target> @@ -822,6 +801,9 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Overview</source> <target>Übersicht</target> +<source>Filter files</source> +<target>Dateien filtern</target> + <source>Select view</source> <target>Ansicht auswählen</target> @@ -879,6 +861,9 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Configuration saved!</source> <target>Konfiguration gespeichert!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync Batch</target> + <source>Never save changes</source> <target>Änderungen niemals speichern</target> @@ -1128,8 +1113,8 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>- Other side's counterpart to %item_folder%</source> <target>- Entsprechung der anderen Seite zu %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Versteckte Dialoge und Warnungen wieder sichtbar machen?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Versteckte Warnungen und Dialoge wieder sichtbar machen?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1152,6 +1137,24 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Leave as unresolved conflict</source> <target>Als unbehandelten Konflikt belassen</target> +<source>Replace</source> +<target>Ersetzen</target> + +<source>Move files and replace if existing</source> +<target>Dateien verschieben und bereits vorhandene ersetzen</target> + +<source>Append a timestamp to each file name</source> +<target>Einen Zeitstempel an jeden Dateinamen hinzufügen</target> + +<source>Folder</source> +<target>Ordner</target> + +<source>File</source> +<target>Datei</target> + +<source>YYYY-MM-DD hhmmss</source> +<target>JJJJ-MM-TT hhmmss</target> + <source>Files</source> <target>Dateien</target> @@ -1419,11 +1422,8 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>Source folder %x not found.</source> <target>Der Quellordner %x wurde nicht gefunden.</target> -<source>Unresolved conflicts existing!</source> -<target>Es existieren ungelöste Konflikte!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Die Konflikte können ignoriert und die Synchronisation fortgesetzt werden.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Die folgenden Elemente haben ungelöste Konflikte und werden nicht synchronisiert werden:</target> <source>Significant difference detected:</source> <target>Ein erheblicher Unterschied wurde festgestellt:</target> @@ -1443,6 +1443,12 @@ Achtung: Dateinamen müssen relativ zu den Basisverzeichnissen sein! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Ein Ordner wird verändert werden, der Teil mehrerer Ordnerpaare ist. Bitte überprüfen Sie die Synchronisationseinstellungen.</target> +<source>Left</source> +<target>Links</target> + +<source>Right</source> +<target>Rechts</target> + <source>Synchronizing folder pair:</source> <target>Synchronisiere Ordnerpaar:</target> diff --git a/BUILD/Languages/greek.lng b/BUILD/Languages/greek.lng index ed8e6f27..fbdf907c 100644 --- a/BUILD/Languages/greek.lng +++ b/BUILD/Languages/greek.lng @@ -58,8 +58,8 @@ <source>Clear filter settings</source> <target>Διαγραφή όλων των ρυθμίσεων φίλτρου</target> -<source>Create a batch job</source> -<target>Δημιουργία μιας δέσμης ενεργειών</target> +<source>Save as batch job</source> +<target></target> <source>Comparison settings</source> <target>Ρυθμίσεις σύγκρισης</target> @@ -79,9 +79,6 @@ <source>Global settings</source> <target>Γενικές ρυθμίσεις</target> -<source>Summary</source> -<target>Σύνοψη</target> - <source>Find</source> <target>Αναζήτηση</target> @@ -274,8 +271,8 @@ <source>Select a folder</source> <target>Επιλογή υποκαταλόγου</target> -<source>Delay [seconds]</source> -<target>Καθυστέρηση [δευτερόλεπτα]</target> +<source>Idle time [seconds]</source> +<target></target> <source>Idle time between last detected change and execution of command</source> <target>Λανθάνων χρόνος μεταξύ τελευταίας αλλαγής που ανιχνεύθηκε και εκτέλεσης της εντολής</target> @@ -324,38 +321,23 @@ The command is triggered if: <source>A folder input field is empty.</source> <target>Ένα πεδίο εισαγωγής υποκαταλόγων είναι άδειο.</target> -<source>File time and size</source> -<target>Ημερομηνία και μέγεθος αρχείων</target> - -<source>File content</source> -<target>Περιεχόμενο αρχείων</target> - -<source><Automatic></source> -<target><Αυτόματα></target> - -<source>Mirror ->></source> -<target>Κατοπτρισμός ->></target> - -<source>Update -></source> -<target>Ενημέρωση -></target> - -<source>Custom</source> -<target>Εξατομίκευση</target> - -<source>FreeFileSync batch</source> -<target>Δέσμη ενεργειών του FreeFileSync</target> - <source>Synchronization aborted!</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>Synchronization completed successfully.</source> +<target></target> + +<source>Saving log file %x...</source> +<target></target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Πατήστε "Εναλλαγή" για να επιλύσετε τα θέματα στο κεντρικό παράθυρο του FreeFileSync.</target> @@ -363,9 +345,6 @@ The command is triggered if: <source>Switching to FreeFileSync main dialog...</source> <target>Επιστρέφοντας στο κεντρικό παράθυρο του FreeFileSync...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Δεν είναι δυνατή η σύνδεση με το sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Μια νέα έκδοση του FreeFileSync είναι διαθέσιμη:</target> @@ -378,6 +357,12 @@ The command is triggered if: <source>Information</source> <target>Πληροφορία</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Δεν είναι δυνατή η σύνδεση με το sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target></target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Θέλετε το FreeFileSync να ελέγχει αυτόματα για ενημερώσεις κάθε εβδομάδα;</target> @@ -441,27 +426,27 @@ The command is triggered if: <source>Hibernate</source> <target>Αδρανοποίηση</target> -<source>1. &Compare</source> -<target>1. &Σύγκριση</target> - -<source>2. &Synchronize</source> -<target>2. Συ&γχρονισμός</target> - <source>&New</source> <target>&Δημιουργία</target> <source>&Save</source> <target>Απο&θήκευση</target> +<source>Save as &batch job...</source> +<target></target> + +<source>1. &Compare</source> +<target>1. &Σύγκριση</target> + +<source>2. &Synchronize</source> +<target>2. Συ&γχρονισμός</target> + <source>&Language</source> <target>&Γλώσσα</target> <source>&Global settings...</source> <target>Γε&νικές ρυθμίσεις...</target> -<source>&Create batch job...</source> -<target>&Δημιουργία μιας δέσμης ενεργειών...</target> - <source>&Export file list...</source> <target>Ε&ξαγωγή καταλόγου αρχείων...</target> @@ -495,17 +480,17 @@ The command is triggered if: <source>Swap sides</source> <target>Ανταλλαγή πλευρών</target> -<source>Load configuration from file</source> -<target>Άνοιγμα διάταξης από αρχείο</target> +<source>Open</source> +<target></target> -<source>Save current configuration to file</source> -<target>Αποθήκευση της τρέχουσας διάταξης</target> +<source>Save</source> +<target></target> <source>Last used configurations (press DEL to remove from list)</source> <target>Διατάξεις που χρησιμοποιήθηκαν τελευταία (πατήστε DEL για διαγραφή από τη λίστα)</target> -<source>Show excluded items</source> -<target>Εμφάνιση εξαιρεθέντων στοιχείων</target> +<source>Hide excluded items</source> +<target></target> <source>Show filtered or temporarily excluded files</source> <target>Εμφάνιση φιλτραρισμένων ή προσωρινά εξαιρεθέντων αρχείων</target> @@ -543,15 +528,6 @@ The command is triggered if: <source>Help</source> <target>Βοήθεια</target> -<source>Filter files</source> -<target>Φιλτράρισμα</target> - -<source>Left</source> -<target>Αριστερά</target> - -<source>Right</source> -<target>Δεξιά</target> - <source>Error handling</source> <target>Διαχείριση σφαλμάτων</target> @@ -573,14 +549,14 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>Ματαίωση του συγχρονισμού με το πρώτο σφάλμα</target> -<source>On completion:</source> -<target>Μετά την ολοκλήρωση:</target> +<source>On completion</source> +<target></target> <source>Show progress dialog</source> <target>Εμφάνιση της αναφοράς προόδου</target> -<source>Generate log file</source> -<target>Δημιουργία αρχείων καταγραφής</target> +<source>Save log</source> +<target></target> <source>Select folder to save log files</source> <target>Επιλογή υποκαταλόγου για την αποθήκευση των αρχείων καταγραφής</target> @@ -591,11 +567,8 @@ The command is triggered if: <source>Limit maximum number of log files</source> <target>Μέγιστος αριθμός αρχείων καταγραφής</target> -<source>Batch settings</source> -<target>Ρυθμίσεις δέσμης ενεργειών</target> - -<source>Compare by...</source> -<target>Σύγκριση με βάση το...</target> +<source>Select variant</source> +<target></target> <source> Files are found equal if @@ -610,6 +583,9 @@ are the same είναι ίδια </target> +<source>File time and size</source> +<target>Ημερομηνία και μέγεθος αρχείων</target> + <source> Files are found equal if - file content @@ -621,24 +597,36 @@ is the same είναι ίδιο </target> +<source>File content</source> +<target>Περιεχόμενο αρχείων</target> + <source>Symbolic Link handling</source> <target>Τρόπος διαχείρισης των συμβολικών δεσμών</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Επιλέξτε μια μέθοδο:</target> +<source><- Two way -></source> +<target></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Αναγνώριση και αναπαραγωγή των αλλαγών και στις δύο πλευρές με τη χρήση μιας βάσης δεδομένων. Διαγραφές, μετονομασίες και διενέξεις ανιχνεύονται αυτόματα.</target> +<source>Mirror ->></source> +<target>Κατοπτρισμός ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Κατοπτρικό αντίγραφο του αριστερού υποκαταλόγου. Ο υποκατάλογος δεξιά θα τροποποιηθεί και θα αντιστοιχεί εξολοκλήρου στον αριστερό μετά το συγχρονισμό</target> +<source>Update -></source> +<target>Ενημέρωση -></target> + <source>Copy new or updated files to right folder.</source> <target>Αντιγραφή των νέων ή πιο πρόσφατων αρχείων στον υποκατάλογο δεξιά.</target> +<source>Custom</source> +<target>Εξατομίκευση</target> + <source>Configure your own synchronization rules.</source> <target>Ορίστε τους δικούς σας κανόνες συγχρονισμού.</target> @@ -654,8 +642,8 @@ is the same <source>Recycle Bin</source> <target>Κάδος Ανακύκλωσης</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Χρήση του Κάδου Ανακύκλωσης κατά τη διαγραφή ή αντικατάσταση αρχείων</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target></target> <source>Versioning</source> <target>Διατήρηση παλιών εκδόσεων</target> @@ -663,8 +651,8 @@ is the same <source>Move time-stamped files into specified folder</source> <target>Μεταφορά χρονοσημασμένων αρχείων σε συγκεκριμένο υποκατάλογο</target> -<source>Limit maximum number of versions per file</source> -<target>Περιορισμός του μέγιστου αριθμού εκδόσεων ανά αρχείο</target> +<source>Naming convention:</source> +<target></target> <source>Configuration</source> <target>Διάταξη</target> @@ -813,6 +801,9 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>Σύνοψη</target> +<source>Filter files</source> +<target>Φιλτράρισμα</target> + <source>Select view</source> <target>Επιλογή εμφάνισης</target> @@ -864,9 +855,15 @@ Note: File names must be relative to base directories! <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>Never save changes</source> <target>Να μην αποθηκεύονται οι αλλαγές</target> @@ -879,9 +876,6 @@ Note: File names must be relative to base directories! <source>Configuration loaded!</source> <target>Η διάταξη έχει ανοιχθεί!</target> -<source>Folder Comparison and Synchronization</source> -<target>Σύγκριση υποκαταλόγων και Συγχρονισμός</target> - <source>Hide files that exist on left side only</source> <target>Απόκρυψη των αρχείων που υπάρχουν μόνο στα αριστερά</target> @@ -1038,6 +1032,9 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>Σύγκριση του περιεχομένου...</target> +<source>Copy</source> +<target></target> + <source>Paused</source> <target>Σε παύση</target> @@ -1110,14 +1107,14 @@ Note: File names must be relative to base directories! <source>- folder part only</source> <target>- μέρος μόνο του υποκαταλόγου</target> -<source>- Other side's counterpart to %name</source> -<target>- Το αντίστοιχο %name της άλλης πλευράς</target> +<source>- Other side's counterpart to %item_path%</source> +<target></target> -<source>- Other side's counterpart to %dir</source> -<target>- Ο αντίστοιχος %dir της άλλης πλευράς</target> +<source>- Other side's counterpart to %item_folder%</source> +<target></target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Να φαίνονται τα παράθυρα και οι αναφορές σφαλμάτων που είχατε διαλέξει να μην εμφανίζονται;</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target></target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1140,47 +1137,29 @@ Note: File names must be relative to base directories! <source>Leave as unresolved conflict</source> <target>Παράβλεψη ως ανεπίλυτη διένεξη</target> -<source>Files</source> -<target>Αρχεία</target> +<source>Replace</source> +<target></target> -<source>Percentage</source> -<target>Ποσοστό</target> +<source>Move files and replace if existing</source> +<target></target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target></target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target></target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target></target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 λεπτό</pluralform> -<pluralform>%x λεπτά</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target></target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 ώρα</pluralform> -<pluralform>%x ώρες</pluralform> -</target> +<source>Files</source> +<target>Αρχεία</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 μέρα</pluralform> -<pluralform>%x μέρες</pluralform> -</target> +<source>Percentage</source> +<target>Ποσοστό</target> <source>Cannot monitor directory %x.</source> <target>Δεν είναι δυνατή η παρακολύθηση του υποκαταλόγου %x.</target> @@ -1230,6 +1209,9 @@ Note: File names must be relative to base directories! <source>Cannot copy file %x to %y.</source> <target>Δεν μπορεί να αντιγραφεί το αρχείο %x στο %y.</target> +<source>Type of item %x is not supported:</source> +<target></target> + <source>Cannot open directory %x.</source> <target>Δεν είναι δυνατό το άνοιγμα του υποκαταλόγου %x.</target> @@ -1239,6 +1221,42 @@ Note: File names must be relative to base directories! <source>Detected endless directory recursion.</source> <target>Ανιχνεύτηκε αέναος βρόχος υποκαταλόγων.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</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>Cannot set privilege %x.</source> <target>Τα δικαιώματα %x δεν μπορούν να οριστούν.</target> @@ -1392,6 +1410,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>Ενημέρωση των χαρακτηριστικών αρχείου του %x</target> +<source>Target folder %x already existing.</source> +<target>Ο υποκατάλογος-στόχος %x υπάρχει ήδη.</target> + <source>Target folder input field must not be empty.</source> <target>Το πεδίο εισαγωγής του υποκαταλόγου-στόχου πρέπει να μην είναι κενό.</target> @@ -1401,11 +1422,8 @@ Note: File names must be relative to base directories! <source>Source folder %x not found.</source> <target>Ο υποκατάλογος %x δε βρέθηκε.</target> -<source>Unresolved conflicts existing!</source> -<target>Υπάρχουν ανεπίλυτες διενέξεις!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Μπορείτε να αγνοήσετε τις διενέξεις και να συνεχίσετε το συγχρονισμό.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target></target> <source>Significant difference detected:</source> <target>Ανιχνεύθηκαν σημαντικές διαφορές:</target> @@ -1425,12 +1443,15 @@ Note: File names must be relative to base directories! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Θα τροποποιηθεί ένας υποκατάλογος που είναι μέρος από πολλαπλά ζεύγη υποκαταλόγων. Παρακαλούμε επανελέγξτε τις ρυθμίσεις συγχρονισμού.</target> +<source>Left</source> +<target>Αριστερά</target> + +<source>Right</source> +<target>Δεξιά</target> + <source>Synchronizing folder pair:</source> <target>Συγχρονίζεται το ζευγάρι υποκαταλόγων:</target> -<source>Target folder %x already existing.</source> -<target>Ο υποκατάλογος-στόχος %x υπάρχει ήδη.</target> - <source>Generating database...</source> <target>Δημιουργία βάσης δεδομένων...</target> diff --git a/BUILD/Languages/hebrew.lng b/BUILD/Languages/hebrew.lng index 16d7919a..532a3bcc 100644 --- a/BUILD/Languages/hebrew.lng +++ b/BUILD/Languages/hebrew.lng @@ -32,7 +32,7 @@ <target>התקבלה בקשת ביטול: מחכה לפעולה הנוכחית להסתיים...</target> <source>Failure to create time stamp for versioning:</source> -<target></target> +<target>נכשל ייצור תג זמן עבור עדכון גרסאות</target> <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - סינכרון אוטומטי</target> @@ -58,8 +58,8 @@ <source>Clear filter settings</source> <target>נקה בחירת מסנן</target> -<source>Create a batch job</source> -<target>יוצר עבודת אצווה</target> +<source>Save as batch job</source> +<target>שמור כעבודת אצווה</target> <source>Comparison settings</source> <target>הגדרות השוואה</target> @@ -79,9 +79,6 @@ <source>Global settings</source> <target>משתנים גלובליים</target> -<source>Summary</source> -<target>תקציר</target> - <source>Find</source> <target>חפש</target> @@ -274,8 +271,8 @@ <source>Select a folder</source> <target>בחר מחיצה</target> -<source>Delay [seconds]</source> -<target>השהייה [שניות]</target> +<source>Idle time [seconds]</source> +<target>זמן סרק [שניות]</target> <source>Idle time between last detected change and execution of command</source> <target>זמן המתנה בין שינויי מאובחן אחרון לבין ביצוע של פקודה</target> @@ -324,38 +321,23 @@ The command is triggered if: <source>A folder input field is empty.</source> <target>שדה קלט תיקייה ריק.</target> -<source>File time and size</source> -<target>זמן וגודל קובץ</target> - -<source>File content</source> -<target>תכולת הקובץ</target> - -<source><Automatic></source> -<target><אוטומטי></target> - -<source>Mirror ->></source> -<target>מראה ->></target> - -<source>Update -></source> -<target>שדרג -></target> - -<source>Custom</source> -<target>מותאם</target> - -<source>FreeFileSync batch</source> -<target>אצוות FreeFileSync</target> - <source>Synchronization aborted!</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>Synchronization completed successfully.</source> +<target>סנכרון הסתיים בהצלחה.</target> + +<source>Saving log file %x...</source> +<target>שומר קובץ יומן %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>לחץ על "החלפה" בכדי לפתור בעיות בדיאלוג הראשי.</target> @@ -363,9 +345,6 @@ The command is triggered if: <source>Switching to FreeFileSync main dialog...</source> <target>עובר לדיאלוג הראשי של FreeFileSync</target> -<source>Unable to connect to sourceforge.net!</source> -<target>אין תקשורת ל sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>גירסה חדשה של FreeFileSync זמינה:</target> @@ -378,6 +357,12 @@ The command is triggered if: <source>Information</source> <target>מידע</target> +<source>Unable to connect to sourceforge.net!</source> +<target>אין תקשורת ל sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>מספר גירסה נוכחית של FreeFileSync לא נמצא באופן מכוון! האם ברצונך לבדוק ידנית?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>האם ברצונך שהתוכנה תבדוק לעדכון בכל שבוע?</target> @@ -441,27 +426,27 @@ The command is triggered if: <source>Hibernate</source> <target>עבור למצב שינה</target> -<source>1. &Compare</source> -<target>1. &השווה</target> - -<source>2. &Synchronize</source> -<target>2. &סנכרן</target> - <source>&New</source> <target>&חדש</target> <source>&Save</source> <target>&שמור</target> +<source>Save as &batch job...</source> +<target>שמור כעבודת &אצווה</target> + +<source>1. &Compare</source> +<target>1. &השווה</target> + +<source>2. &Synchronize</source> +<target>2. &סנכרן</target> + <source>&Language</source> <target>&שפה</target> <source>&Global settings...</source> <target>&משתנים גלובליים...</target> -<source>&Create batch job...</source> -<target>&צור קובץ אצווה...</target> - <source>&Export file list...</source> <target>&יצא רשימת קבצים...</target> @@ -495,17 +480,17 @@ The command is triggered if: <source>Swap sides</source> <target>החלף צדדים</target> -<source>Load configuration from file</source> -<target>טען קונפיגורציה מקובץ</target> +<source>Open</source> +<target>פתח</target> -<source>Save current configuration to file</source> -<target>שמור תצורה נוכחית לקובץ</target> +<source>Save</source> +<target>שמור</target> <source>Last used configurations (press DEL to remove from list)</source> <target>תצורות אחרונות שהיו בשמוש (לחץ DEL להסרה מהרשימה)</target> -<source>Show excluded items</source> -<target>הראה פריטים שלא נכללו</target> +<source>Hide excluded items</source> +<target>הסתר פריטים שלט נכללו</target> <source>Show filtered or temporarily excluded files</source> <target>הראה קבצים שסוננו או לא נכללו זמנית</target> @@ -538,20 +523,11 @@ The command is triggered if: <target>עבודת אצווה</target> <source>Create a batch file to automate synchronization. Double-click this file or schedule in your system's task planner: FreeFileSync.exe <job name>.ffs_batch</source> -<target>יצור קובץ אצווה לסינכרון אוטומטי. הפעל בהקלקה כפולה או תזמן באמצעות מתזמן המשימות של המערכת: FreeFileSync.exe</target> +<target>יצר קובץ אצווה למכן את הסנכרון. הקלק פעמיים על קובץ זה או תזמן במתכנן המשימות: FreeFileSYnc.exe <jobname>.ffs</target> <source>Help</source> <target>עזרה</target> -<source>Filter files</source> -<target>קבצי המסנן</target> - -<source>Left</source> -<target>ימין</target> - -<source>Right</source> -<target>שמאל</target> - <source>Error handling</source> <target>טיפול בשגיאות</target> @@ -573,14 +549,14 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>הפסק פעולת סינכרון בשגיאה ראשונה</target> -<source>On completion:</source> +<source>On completion</source> <target>לאחר סיום:</target> <source>Show progress dialog</source> <target>הראה שיח התקדמות</target> -<source>Generate log file</source> -<target>יצר קובץ יומן</target> +<source>Save log</source> +<target>שמור קובץ יומן</target> <source>Select folder to save log files</source> <target>בחר תיקיה לשמירת קובץ יומן</target> @@ -591,11 +567,8 @@ The command is triggered if: <source>Limit maximum number of log files</source> <target>הגבל מספר מכסימלי של קבצי יומן</target> -<source>Batch settings</source> -<target>הגדרות אצווה</target> - -<source>Compare by...</source> -<target>השווה ע"י...</target> +<source>Select variant</source> +<target>בחר גרסה</target> <source> Files are found equal if @@ -610,6 +583,9 @@ are the same הם זהים </target> +<source>File time and size</source> +<target>זמן וגודל קובץ</target> + <source> Files are found equal if - file content @@ -621,24 +597,36 @@ is the same היא זהה </target> +<source>File content</source> +<target>תכולת הקובץ</target> + <source>Symbolic Link handling</source> <target>טיפול בקישור סימבולי</target> <source>OK</source> <target>אשר</target> -<source>Select variant:</source> -<target>בחר משתנה:</target> +<source><- Two way -></source> +<target>- דו כווני -</target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>זהה והפץ שינויים בשני הצדדים באמצעות שימוש במסד נתונים. מחיקות, שינויי שמות וסתירות מתגלים באופן אוטומטי.</target> +<source>Mirror ->></source> +<target>מראה ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>גיבוי מראה של מחיצה ימנית. מחיצה שמאלית תתעדכן ותהיה זהה לימנית לאחר הסינכרון.</target> +<source>Update -></source> +<target>שדרג -></target> + <source>Copy new or updated files to right folder.</source> <target>העתק קבצים חדשים או מעודכנים למחיצה השמאלית.</target> +<source>Custom</source> +<target>מותאם</target> + <source>Configure your own synchronization rules.</source> <target>סדר את כללי הסנכרון שלך.</target> @@ -654,8 +642,8 @@ is the same <source>Recycle Bin</source> <target>סל מחזור</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>השתמש בסל המיחזור כאשר מוחק או דורס קבצים</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>השתמש בסל המחזור עבור קבצים נמחקים או נדרסים</target> <source>Versioning</source> <target>עדכון גרסאות</target> @@ -663,8 +651,8 @@ is the same <source>Move time-stamped files into specified folder</source> <target>העבר קבצים עם חתימת זמן לתיקיה מיוחדת</target> -<source>Limit maximum number of versions per file</source> -<target>הגבל מספר מכסימלי של גרסאות לקובץ</target> +<source>Naming convention:</source> +<target>מוסכמות לקביעת שמות:</target> <source>Configuration</source> <target>תצורה</target> @@ -813,6 +801,9 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>מבט כללי</target> +<source>Filter files</source> +<target>קבצי המסנן</target> + <source>Select view</source> <target>בחר תצוגה</target> @@ -864,9 +855,15 @@ Note: File names must be relative to base directories! <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>Never save changes</source> <target>אל תשמור שינויים לעולם</target> @@ -879,9 +876,6 @@ Note: File names must be relative to base directories! <source>Configuration loaded!</source> <target>תצורה הוטענה!</target> -<source>Folder Comparison and Synchronization</source> -<target>סנכרון קבצים ומחיצות</target> - <source>Hide files that exist on left side only</source> <target>הסתר קבצים הקימים אך ורק בצד ימין</target> @@ -1038,6 +1032,9 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>משווה תכולה...</target> +<source>Copy</source> +<target>העתק</target> + <source>Paused</source> <target>עצור</target> @@ -1110,14 +1107,14 @@ Note: File names must be relative to base directories! <source>- folder part only</source> <target>- תיקייה בלבד</target> -<source>- Other side's counterpart to %name</source> -<target>- הצד השני מקביל ל- %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- הצד השני מקביל ל %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- הצד השני מקביל ל- %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>הצד השני מקביל ל %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>להפוך דיאלוגים מוסתרים לגלויים שוב?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>להפוך דיאלוגים מוסתרים ואזהרות לגלויים שוב?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1140,47 +1137,29 @@ Note: File names must be relative to base directories! <source>Leave as unresolved conflict</source> <target>השאר כקונפליקט לא מטופל</target> -<source>Files</source> -<target>קבצים</target> +<source>Replace</source> +<target>החלף</target> -<source>Percentage</source> -<target>אחוז</target> +<source>Move files and replace if existing</source> +<target>העבר קבצים והחלף במדה וקיימים</target> -<source>%x TB</source> -<target>%x טרה בייט</target> +<source>Append a timestamp to each file name</source> +<target>הצמד תג זמן לכל שם קובץ</target> -<source>%x PB</source> -<target>%x פטה בייט</target> +<source>Folder</source> +<target>תיקייה</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>קובץ</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 דקה</pluralform> -<pluralform>%x דקות</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>YYYY-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 שעה</pluralform> -<pluralform>%x שעות</pluralform> -</target> +<source>Files</source> +<target>קבצים</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 יום</pluralform> -<pluralform>%x ימים</pluralform> -</target> +<source>Percentage</source> +<target>אחוז</target> <source>Cannot monitor directory %x.</source> <target>לא יכול לנטר מחיצה %x.</target> @@ -1230,6 +1209,9 @@ Note: File names must be relative to base directories! <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 directory %x.</source> <target>לא יכול לפתוח מחיצה %x.</target> @@ -1239,6 +1221,42 @@ Note: File names must be relative to base directories! <source>Detected endless directory recursion.</source> <target>אובחנה רקורסית תיקיות אינסופית.</target> +<source>%x TB</source> +<target>%x טרה בייט</target> + +<source>%x PB</source> +<target>%x פטה בייט</target> + +<source>%x%</source> +<target>%x%</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>Cannot set privilege %x.</source> <target>לא יכול להגדיר זבות %x.</target> @@ -1369,7 +1387,7 @@ Note: File names must be relative to base directories! <target>מעביר קישור סימבולי %x אל %y</target> <source>Removing old versions...</source> -<target></target> +<target>מסיר גרסאות ישנות...</target> <source>Creating file %x</source> <target>יוצר קובץ %x</target> @@ -1392,6 +1410,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>מעדכן תכונות של %x</target> +<source>Target folder %x already existing.</source> +<target>תיקיית מטרה %x כבר קיימת.</target> + <source>Target folder input field must not be empty.</source> <target>קלט תיקיית מטרה אינה יכול להיות ריק.</target> @@ -1401,11 +1422,8 @@ Note: File names must be relative to base directories! <source>Source folder %x not found.</source> <target>תיקיית מקור %x לא נמצאת.</target> -<source>Unresolved conflicts existing!</source> -<target>קיים קונפליקט לא פתור!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>באפשרותך להתעלם מהקונפליקטים ולהמשיך בסנכרון.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>לפריטים הבאים יש קונפליקטים בלתי פתורים והם לא יסונכרנו:</target> <source>Significant difference detected:</source> <target>התגלה שוני גדול מידי:</target> @@ -1425,12 +1443,15 @@ Note: File names must be relative to base directories! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>התיקייה שתשתנה היא חלק מריבוי זוגות תיקיות. אנא סקור מחדש הגדרות סינכרון.</target> +<source>Left</source> +<target>ימין</target> + +<source>Right</source> +<target>שמאל</target> + <source>Synchronizing folder pair:</source> <target>מסנכרן זוג תיקיות:</target> -<source>Target folder %x already existing.</source> -<target>תיקיית מטרה %x כבר קיימת.</target> - <source>Generating database...</source> <target>מייצר מסד נתונים...</target> diff --git a/BUILD/Languages/hungarian.lng b/BUILD/Languages/hungarian.lng index adca1b46..e0ced192 100644 --- a/BUILD/Languages/hungarian.lng +++ b/BUILD/Languages/hungarian.lng @@ -58,8 +58,8 @@ <source>Clear filter settings</source> <target>Szűrőbeállítások törlése</target> -<source>Create a batch job</source> -<target>Kötegelt feladat létrehozása</target> +<source>Save as batch job</source> +<target></target> <source>Comparison settings</source> <target>Összehasonlítási beállítások</target> @@ -79,9 +79,6 @@ <source>Global settings</source> <target>Globális beállítások</target> -<source>Summary</source> -<target>Összegzés</target> - <source>Find</source> <target>Keresés:</target> @@ -274,8 +271,8 @@ <source>Select a folder</source> <target>Mappa kiválasztása</target> -<source>Delay [seconds]</source> -<target>Késleltetés (másodperc)</target> +<source>Idle time [seconds]</source> +<target></target> <source>Idle time between last detected change and execution of command</source> <target>Tétlenség időtartama az utolsó változás észlelése és a parancs végrehajtása között</target> @@ -324,38 +321,23 @@ A parancs végrehajtódik, ha: <source>A folder input field is empty.</source> <target>A mappa beviteli mezeje üres.</target> -<source>File time and size</source> -<target>Fájl dátuma és mérete</target> - -<source>File content</source> -<target>fájl tartalma alapján</target> - -<source><Automatic></source> -<target><Automatikus></target> - -<source>Mirror ->></source> -<target>Tükrözés ->></target> - -<source>Update -></source> -<target>Frissítés -></target> - -<source>Custom</source> -<target>Egyedi</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync kötegelt fájl</target> - <source>Synchronization aborted!</source> <target>A szinkronizáció megszakítva!</target> <source>Synchronization completed with errors!</source> <target>A szinkronizáció befejeződött, de akadtak hibák!</target> +<source>Synchronization completed with warnings.</source> +<target></target> + <source>Nothing to synchronize!</source> <target>Nincs mit szinkronizálni!</target> -<source>Synchronization completed successfully!</source> -<target>A szinkronizáció sikeresen befejeződött!</target> +<source>Synchronization completed successfully.</source> +<target></target> + +<source>Saving log file %x...</source> +<target></target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Nyomg meg a "Váltás" gombot az események kezeléséhez a FreeFileSync fő párbeszédablakában.</target> @@ -363,9 +345,6 @@ A parancs végrehajtódik, ha: <source>Switching to FreeFileSync main dialog...</source> <target>Váltás a FreeFileSync fő párbeszédablakára...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>A csatlakozás a sourceforge.net-hez sikertelen!</target> - <source>A new version of FreeFileSync is available:</source> <target>Elérhető a FreeFileSync új verziója:</target> @@ -378,6 +357,12 @@ A parancs végrehajtódik, ha: <source>Information</source> <target>Információ</target> +<source>Unable to connect to sourceforge.net!</source> +<target>A csatlakozás a sourceforge.net-hez sikertelen!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target></target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Akarod, hogy a FreeFileSync automatikusan minden héten keressen frissítést?</target> @@ -441,27 +426,27 @@ A parancs végrehajtódik, ha: <source>Hibernate</source> <target>Hibernálás</target> -<source>1. &Compare</source> -<target>1. &Összehasonlítás</target> - -<source>2. &Synchronize</source> -<target>2. &Szinkronizálás</target> - <source>&New</source> <target>&Új</target> <source>&Save</source> <target>&Mentés</target> +<source>Save as &batch job...</source> +<target></target> + +<source>1. &Compare</source> +<target>1. &Összehasonlítás</target> + +<source>2. &Synchronize</source> +<target>2. &Szinkronizálás</target> + <source>&Language</source> <target>&Nyelv</target> <source>&Global settings...</source> <target>&Globális beállítások...</target> -<source>&Create batch job...</source> -<target>&Kötegelt feladat létrehozása...</target> - <source>&Export file list...</source> <target>&Fájllista exportálása...</target> @@ -495,17 +480,17 @@ A parancs végrehajtódik, ha: <source>Swap sides</source> <target>Oldalak felcserélése</target> -<source>Load configuration from file</source> -<target>Beállítások betöltése fájlból</target> +<source>Open</source> +<target></target> -<source>Save current configuration to file</source> -<target>Aktuális beállítások mentése fájlba</target> +<source>Save</source> +<target></target> <source>Last used configurations (press DEL to remove from list)</source> <target>Utoljára használt beállítások (DEL billentyűvel törölhető a listából)</target> -<source>Show excluded items</source> -<target>Kizárt elemek mutatása</target> +<source>Hide excluded items</source> +<target></target> <source>Show filtered or temporarily excluded files</source> <target>A szűrt vagy ideiglenesen kizárt fájlok mutatása</target> @@ -543,15 +528,6 @@ A parancs végrehajtódik, ha: <source>Help</source> <target>Súgó</target> -<source>Filter files</source> -<target>Fájlok szűrése</target> - -<source>Left</source> -<target>Bal oldal</target> - -<source>Right</source> -<target>Jobb oldal</target> - <source>Error handling</source> <target>Hibakezelés</target> @@ -573,14 +549,14 @@ A parancs végrehajtódik, ha: <source>Abort synchronization on first error</source> <target>Szinkronizáció leállítása az első hibánál</target> -<source>On completion:</source> -<target>Végrehajtás után:</target> +<source>On completion</source> +<target></target> <source>Show progress dialog</source> <target>Folyamatjelző párbeszédablak mutatása</target> -<source>Generate log file</source> -<target>Naplófájl generálása</target> +<source>Save log</source> +<target></target> <source>Select folder to save log files</source> <target>Válaszd ki a mappát a naplófájlok mentéséhez</target> @@ -591,11 +567,8 @@ A parancs végrehajtódik, ha: <source>Limit maximum number of log files</source> <target>Naplófájlok maximális számának korlátozása</target> -<source>Batch settings</source> -<target>Beállítások</target> - -<source>Compare by...</source> -<target>Összehasonlítás</target> +<source>Select variant</source> +<target></target> <source> Files are found equal if @@ -609,6 +582,9 @@ A fájlok egyezőnek tekintendők, ha megegyezik - a fájlméret </target> +<source>File time and size</source> +<target>Fájl dátuma és mérete</target> + <source> Files are found equal if - file content @@ -619,24 +595,36 @@ A fájlok megegyeznek, ha megegyezik - a fájlok tartalma </target> +<source>File content</source> +<target>fájl tartalma alapján</target> + <source>Symbolic Link handling</source> <target>Symlink kezelés</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Változat kiválasztása:</target> +<source><- Two way -></source> +<target></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Változások azonosítása és végrehajtása mindkét oldalon adatbázis segítségével. Automatikusan felismerődnek a törlések, átnevezések és ütközések.</target> +<source>Mirror ->></source> +<target>Tükrözés ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>A bal oldali mappa tükrözött másolata. A jobb oldali mappa úgy lesz megváltoztatva, hogy a szinkronizáció után pontosan megegyezzen a bal oldalival.</target> +<source>Update -></source> +<target>Frissítés -></target> + <source>Copy new or updated files to right folder.</source> <target>Új vagy frissített fájlok másolása a jobb oldali mappába.</target> +<source>Custom</source> +<target>Egyedi</target> + <source>Configure your own synchronization rules.</source> <target>Saját szinkronizálási szabályok beállítása.</target> @@ -652,8 +640,8 @@ A fájlok megegyeznek, ha megegyezik <source>Recycle Bin</source> <target>Lomtár (Recycle Bin)</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>A Lomtár (Recycle Bin) használata fájlok törlésénél vagy felülírásánál</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target></target> <source>Versioning</source> <target>Verziókövetés</target> @@ -661,8 +649,8 @@ A fájlok megegyeznek, ha megegyezik <source>Move time-stamped files into specified folder</source> <target>Időbélyeges fájlok mozgatása a megadott mappába</target> -<source>Limit maximum number of versions per file</source> -<target>Verziók maximális számának korlátozása fájlonként</target> +<source>Naming convention:</source> +<target></target> <source>Configuration</source> <target>Beállítás</target> @@ -811,6 +799,9 @@ Megjegyzés: A fájlneveknek relatívnak kell lenniük az alap mappához viszony <source>Overview</source> <target>Összefoglaló</target> +<source>Filter files</source> +<target>Fájlok szűrése</target> + <source>Select view</source> <target>Nézet kiválasztása</target> @@ -862,9 +853,15 @@ Megjegyzés: A fájlneveknek relatívnak kell lenniük az alap mappához viszony <source><Last session></source> <target><Utolsó munkamenet></target> +<source>Folder Comparison and Synchronization</source> +<target>Mappa összehasonlítás és szinkronizáció</target> + <source>Configuration saved!</source> <target>Beállítások elmentve!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync kötegelt fájl</target> + <source>Never save changes</source> <target>Változtatások figyelmen kívül hagyása</target> @@ -877,9 +874,6 @@ Megjegyzés: A fájlneveknek relatívnak kell lenniük az alap mappához viszony <source>Configuration loaded!</source> <target>Beállítások betöltve!</target> -<source>Folder Comparison and Synchronization</source> -<target>Mappa összehasonlítás és szinkronizáció</target> - <source>Hide files that exist on left side only</source> <target>Csak a bal oldalon létező fájlok elrejtése</target> @@ -1036,6 +1030,9 @@ Megjegyzés: A fájlneveknek relatívnak kell lenniük az alap mappához viszony <source>Comparing content...</source> <target>Tartalom összehasonlítása...</target> +<source>Copy</source> +<target></target> + <source>Paused</source> <target>Szüneteltetve</target> @@ -1108,14 +1105,14 @@ Megjegyzés: A fájlneveknek relatívnak kell lenniük az alap mappához viszony <source>- folder part only</source> <target>- csak mappa rész</target> -<source>- Other side's counterpart to %name</source> -<target>- A %name másik oldalon szereplő párja</target> +<source>- Other side's counterpart to %item_path%</source> +<target></target> -<source>- Other side's counterpart to %dir</source> -<target>- A %dir másik oldalon szereplő párja</target> +<source>- Other side's counterpart to %item_folder%</source> +<target></target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>A rejtett párbeszédablakok és figyelmeztető üzenetek újra legyenek láthatóak?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target></target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1138,47 +1135,29 @@ Megjegyzés: A fájlneveknek relatívnak kell lenniük az alap mappához viszony <source>Leave as unresolved conflict</source> <target>Feloldatlan ütközésként hagyni</target> -<source>Files</source> -<target>Fájlok</target> +<source>Replace</source> +<target></target> -<source>Percentage</source> -<target>Százalék</target> +<source>Move files and replace if existing</source> +<target></target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target></target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target></target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target></target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 perc</pluralform> -<pluralform>%x perc</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target></target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 óra</pluralform> -<pluralform>%x óra</pluralform> -</target> +<source>Files</source> +<target>Fájlok</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 nap</pluralform> -<pluralform>%x nap</pluralform> -</target> +<source>Percentage</source> +<target>Százalék</target> <source>Cannot monitor directory %x.</source> <target>A következő mappa monitorozása sikertelen: %x.</target> @@ -1228,6 +1207,9 @@ Megjegyzés: A fájlneveknek relatívnak kell lenniük az alap mappához viszony <source>Cannot copy file %x to %y.</source> <target>%x fájl másolása a(z) %y fájlba sikertelen.</target> +<source>Type of item %x is not supported:</source> +<target></target> + <source>Cannot open directory %x.</source> <target>A következő mappa megnyitása sikertelen: %x.</target> @@ -1237,6 +1219,42 @@ Megjegyzés: A fájlneveknek relatívnak kell lenniük az alap mappához viszony <source>Detected endless directory recursion.</source> <target>Végtelen mapparekurzió detektálva.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 perc</pluralform> +<pluralform>%x perc</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 óra</pluralform> +<pluralform>%x óra</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 nap</pluralform> +<pluralform>%x nap</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>A következő privilégium beállítása sikertelen: %x.</target> @@ -1390,6 +1408,9 @@ Megjegyzés: A fájlneveknek relatívnak kell lenniük az alap mappához viszony <source>Updating attributes of %x</source> <target>A(z) %x attribútumainak frissítése</target> +<source>Target folder %x already existing.</source> +<target>A következő célmappa már létezik: %x.</target> + <source>Target folder input field must not be empty.</source> <target>A célmappa beviteli mezeje nem lehet üres.</target> @@ -1399,11 +1420,8 @@ Megjegyzés: A fájlneveknek relatívnak kell lenniük az alap mappához viszony <source>Source folder %x not found.</source> <target>A következő forrásmappa nem található: %x.</target> -<source>Unresolved conflicts existing!</source> -<target>Feloldatlan ütközések vannak!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Figyelmen kívül hagyhatod az ütközéseket és folytathatod a szinkronizálást.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target></target> <source>Significant difference detected:</source> <target>Jelentős különbség érzékelve:</target> @@ -1423,12 +1441,15 @@ Megjegyzés: A fájlneveknek relatívnak kell lenniük az alap mappához viszony <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Egy olyan mappa kerül módosításra, amely része több mappapárnak. Kérjük, ellenőrizze a szinkronizációs beállításokat.</target> +<source>Left</source> +<target>Bal oldal</target> + +<source>Right</source> +<target>Jobb oldal</target> + <source>Synchronizing folder pair:</source> <target>Mappapár szinkronizálása:</target> -<source>Target folder %x already existing.</source> -<target>A következő célmappa már létezik: %x.</target> - <source>Generating database...</source> <target>Adatbázis generálása...</target> diff --git a/BUILD/Languages/italian.lng b/BUILD/Languages/italian.lng index 177ea600..aff424ad 100644 --- a/BUILD/Languages/italian.lng +++ b/BUILD/Languages/italian.lng @@ -32,7 +32,7 @@ <target>Selezionata interruazione: conclusione dell'operazione...</target> <source>Failure to create time stamp for versioning:</source> -<target></target> +<target>Errore nella creazione di data e ora per il controllo delle versioni:</target> <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Sincronizzazione automatizzata</target> @@ -58,8 +58,8 @@ <source>Clear filter settings</source> <target>Azzera impostazioni filtro</target> -<source>Create a batch job</source> -<target>Creazione di un attività batch</target> +<source>Save as batch job</source> +<target>Salva come processo batch</target> <source>Comparison settings</source> <target>Impostazioni di comparazione</target> @@ -79,9 +79,6 @@ <source>Global settings</source> <target>Preferenze</target> -<source>Summary</source> -<target>Sommario</target> - <source>Find</source> <target>Trova</target> @@ -274,8 +271,8 @@ <source>Select a folder</source> <target>Seleziona una cartella</target> -<source>Delay [seconds]</source> -<target>Ritardo [secondi]</target> +<source>Idle time [seconds]</source> +<target>Tempo di attesa [secondi]</target> <source>Idle time between last detected change and execution of command</source> <target>Tempo di attesa tra ultimo cambiamento rilevato ed esecuzione dei comandi</target> @@ -324,38 +321,23 @@ Il comando è attivato se: <source>A folder input field is empty.</source> <target>Un campo cartella input è vuoto.</target> -<source>File time and size</source> -<target>Ora e dimensione file</target> - -<source>File content</source> -<target>Contenuto del file</target> - -<source><Automatic></source> -<target><Automatico></target> - -<source>Mirror ->></source> -<target>Mirror ->></target> - -<source>Update -></source> -<target>Aggiorna -></target> - -<source>Custom</source> -<target>Personalizza</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync batch</target> - <source>Synchronization aborted!</source> <target>Sincronizzazione abortita!</target> <source>Synchronization completed with errors!</source> <target>Sincronizzazione completata con errori!</target> +<source>Synchronization completed with warnings.</source> +<target>Sincronizzazione completata con avvisi.</target> + <source>Nothing to synchronize!</source> <target>Non c'è nulla da sincronizzare!</target> -<source>Synchronization completed successfully!</source> -<target>Sincronizzazione completata con successo!</target> +<source>Synchronization completed successfully.</source> +<target>Sincronizzazione completata con successo.</target> + +<source>Saving log file %x...</source> +<target>Salvataggio file di log %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Premere "Passa" per risolvere i problemi nella finestra principale di FreeFileSync.</target> @@ -363,9 +345,6 @@ Il comando è attivato se: <source>Switching to FreeFileSync main dialog...</source> <target>Sto passando alla finestra principale di FreeFileSync...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Impossibile collegarsi a sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>E' disponibile una nuova versione di FreeFileSync:</target> @@ -378,6 +357,12 @@ Il comando è attivato se: <source>Information</source> <target>Informazioni</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Impossibile collegarsi a sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>La versione aggiornata di FreeFileSync non è stata trovata online! Vuoi controllare manualmente?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Vuoi che FreeFileSync controlli automaticamente gli aggiornamenti ogni settimana?</target> @@ -441,27 +426,27 @@ Il comando è attivato se: <source>Hibernate</source> <target>Iberna</target> -<source>1. &Compare</source> -<target>1. &Compara</target> - -<source>2. &Synchronize</source> -<target>2. &Sincronizza</target> - <source>&New</source> <target>&Nuovo</target> <source>&Save</source> <target>&Salva</target> +<source>Save as &batch job...</source> +<target>Salva come &processo batch...</target> + +<source>1. &Compare</source> +<target>1. &Compara</target> + +<source>2. &Synchronize</source> +<target>2. &Sincronizza</target> + <source>&Language</source> <target>&Lingua</target> <source>&Global settings...</source> <target>&Preferenze...</target> -<source>&Create batch job...</source> -<target>&Crea una attività batch...</target> - <source>&Export file list...</source> <target>&Esporta l'elenco dei file...</target> @@ -495,17 +480,17 @@ Il comando è attivato se: <source>Swap sides</source> <target>Inverti i lati</target> -<source>Load configuration from file</source> -<target>Carica configurazione da file</target> +<source>Open</source> +<target>Apri</target> -<source>Save current configuration to file</source> -<target>Salva la configurazione corrente in un file</target> +<source>Save</source> +<target>Salva</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Ultima configurazione utilizzata (premi CANC per rimuovere dall'elenco)</target> -<source>Show excluded items</source> -<target>Mostra oggetti esclusi</target> +<source>Hide excluded items</source> +<target>Nascondi oggetti esclusi</target> <source>Show filtered or temporarily excluded files</source> <target>Mostra file filtrati o temporaneamente esclusi</target> @@ -543,15 +528,6 @@ Il comando è attivato se: <source>Help</source> <target>?</target> -<source>Filter files</source> -<target>Filtro dei file</target> - -<source>Left</source> -<target>Sinistra</target> - -<source>Right</source> -<target>Destra</target> - <source>Error handling</source> <target>Gestione degli errori</target> @@ -568,19 +544,19 @@ Il comando è attivato se: <target>Mostra popup di errore o avviso</target> <source>Exit</source> -<target></target> +<target>Esci</target> <source>Abort synchronization on first error</source> <target>Abortisci sincronizzazione al primo errore</target> -<source>On completion:</source> -<target>In completamento:</target> +<source>On completion</source> +<target>In completamento</target> <source>Show progress dialog</source> <target>Mostra stato di avanzamento</target> -<source>Generate log file</source> -<target>Genera file log</target> +<source>Save log</source> +<target>Salva log</target> <source>Select folder to save log files</source> <target>Seleziona cartella dove salvare i file log</target> @@ -591,11 +567,8 @@ Il comando è attivato se: <source>Limit maximum number of log files</source> <target>Limita il numero massimo di file log</target> -<source>Batch settings</source> -<target>Impostazioni batch</target> - -<source>Compare by...</source> -<target>Compara per...</target> +<source>Select variant</source> +<target>Seleziona variante</target> <source> Files are found equal if @@ -610,6 +583,9 @@ I file sono considerati identici se sono identici </target> +<source>File time and size</source> +<target>Ora e dimensione file</target> + <source> Files are found equal if - file content @@ -621,24 +597,36 @@ I file sono considerati identici se è identico </target> +<source>File content</source> +<target>Contenuto del file</target> + <source>Symbolic Link handling</source> <target>Gestione Collegamenti</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Seleziona una variante:</target> +<source><- Two way -></source> +<target><- Due vie -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Identifica e propaga modifiche su entrambi i lati usando un database. Cancellazioni, ridenominazioni e conflitti sono rilevati automaticamente.</target> +<source>Mirror ->></source> +<target>Mirror ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Backup mirror della cartella di sinistra. La cartella destra verrà modificata per corrispondere esattamente alla cartella di sinistra dopo la sincronizzazione.</target> +<source>Update -></source> +<target>Aggiorna -></target> + <source>Copy new or updated files to right folder.</source> <target>Copia file nuovi o aggiornati nella cartella di destra.</target> +<source>Custom</source> +<target>Personalizza</target> + <source>Configure your own synchronization rules.</source> <target>Configura le tue regole di sincronizzazione.</target> @@ -654,8 +642,8 @@ I file sono considerati identici se <source>Recycle Bin</source> <target>Cestino</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Usa il Cestino quando si elimina o sovrascrive un file</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Utilizza il Cestino per file cancellati e sovrascritti</target> <source>Versioning</source> <target>Versione</target> @@ -663,8 +651,8 @@ I file sono considerati identici se <source>Move time-stamped files into specified folder</source> <target>Sposta file con indicazione datata nella cartella specifica</target> -<source>Limit maximum number of versions per file</source> -<target>Limita numero massimo di versioni per ogni file</target> +<source>Naming convention:</source> +<target>Modalità di rinomina:</target> <source>Configuration</source> <target>Configurazione</target> @@ -813,6 +801,9 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Overview</source> <target>Anteprima</target> +<source>Filter files</source> +<target>Filtro dei file</target> + <source>Select view</source> <target>Seleziona vista</target> @@ -864,9 +855,15 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source><Last session></source> <target><Ultima sessione></target> +<source>Folder Comparison and Synchronization</source> +<target>Comparazione di cartelle e sincronizzazione</target> + <source>Configuration saved!</source> <target>Configurazione salvata!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync batch</target> + <source>Never save changes</source> <target>Non salvare mai le modifiche</target> @@ -879,9 +876,6 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Configuration loaded!</source> <target>Configurazione caricata!</target> -<source>Folder Comparison and Synchronization</source> -<target>Comparazione di cartelle e sincronizzazione</target> - <source>Hide files that exist on left side only</source> <target>Nascondi i file esistenti solo a sinistra</target> @@ -1038,6 +1032,9 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Comparing content...</source> <target>Comparazione contenuto...</target> +<source>Copy</source> +<target>Copia</target> + <source>Paused</source> <target>In pausa</target> @@ -1110,14 +1107,14 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>- folder part only</source> <target>- solo porzione cartella</target> -<source>- Other side's counterpart to %name</source> -<target>- l'altro lato e' equivalente a %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- Controparte sull'altro lato a %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- l'altro lato e' equivalente a %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- Controparte sull'altro lato a %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Vuoi rendere nuovamente visibili i dialoghi nascosti e i messaggi d'avviso?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Vuoi visualizzare nuovamente i dialoghi e avvisi nascosti?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1140,47 +1137,29 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Leave as unresolved conflict</source> <target>Lascia come conflitti irrisolti</target> -<source>Files</source> -<target>File</target> +<source>Replace</source> +<target>Sostituisci</target> -<source>Percentage</source> -<target>Percentuale</target> +<source>Move files and replace if existing</source> +<target>Sposta file e sostituisci se esistenti</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Accoda data e ora ad ogni nome di file</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Cartella</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>File</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>AAAA-MM-GG hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 ora</pluralform> -<pluralform>%x ore</pluralform> -</target> +<source>Files</source> +<target>File</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 giorno</pluralform> -<pluralform>%x giorni</pluralform> -</target> +<source>Percentage</source> +<target>Percentuale</target> <source>Cannot monitor directory %x.</source> <target>Impossibile monitorare la cartella %x.</target> @@ -1230,6 +1209,9 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Cannot copy file %x to %y.</source> <target>Impossibile copiare file %x in %y.</target> +<source>Type of item %x is not supported:</source> +<target>Il tipo di oggetto %x non è supportato:</target> + <source>Cannot open directory %x.</source> <target>Impossibile aprire cartella %x.</target> @@ -1239,6 +1221,42 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Detected endless directory recursion.</source> <target>Rilevato percorso ricorsivo senza fine.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 ora</pluralform> +<pluralform>%x ore</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 giorno</pluralform> +<pluralform>%x giorni</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Impossibile impostare privilegi %x.</target> @@ -1369,7 +1387,7 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <target>Spostamento collegamento %x in %y</target> <source>Removing old versions...</source> -<target></target> +<target>Rimozione di vecchie versioni...</target> <source>Creating file %x</source> <target>Creazione file %x</target> @@ -1392,6 +1410,9 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Updating attributes of %x</source> <target>Aggiornamento attributi di %x</target> +<source>Target folder %x already existing.</source> +<target>La cartella di destinazione %x è già esistente.</target> + <source>Target folder input field must not be empty.</source> <target>Il campo per la cartella di destinazione non può essere vuoto.</target> @@ -1401,11 +1422,8 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>Source folder %x not found.</source> <target>Cartella sorgente %x non trovata.</target> -<source>Unresolved conflicts existing!</source> -<target>Sono presenti conflitti irrisolti!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Puoi ignorare i conflitti e continuare la sincronizzazione.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>I seguenti oggetti hanno conflitti irrisolti e non saranno sincronizzati:</target> <source>Significant difference detected:</source> <target>Riscontrate differenze significative:</target> @@ -1425,12 +1443,15 @@ Nota: I nomi dei file devono essere relativi alle cartelle di appartenenza! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Verrà modificata una cartella che è parte di molteplici coppie di cartelle. Controlla le impostazioni di sincronizzazione.</target> +<source>Left</source> +<target>Sinistra</target> + +<source>Right</source> +<target>Destra</target> + <source>Synchronizing folder pair:</source> <target>Sincronizzazione della coppia di cartelle:</target> -<source>Target folder %x already existing.</source> -<target>La cartella di destinazione %x è già esistente.</target> - <source>Generating database...</source> <target>Generazione database...</target> diff --git a/BUILD/Languages/japanese.lng b/BUILD/Languages/japanese.lng index 6745cced..f5e7eb49 100644 --- a/BUILD/Languages/japanese.lng +++ b/BUILD/Languages/japanese.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>ユーザによる中断: 現在の処理を終了しています.. お待ちください...</target> +<source>Failure to create time stamp for versioning:</source> +<target>バージョン付けのタイムスタンプ作成に失敗:</target> + <source>RealtimeSync - Automated Synchronization</source> <target>リアルタイム同期 - 自動同期</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>フィルター設定をクリア</target> -<source>Create a batch job</source> -<target>一括ジョブを作成</target> +<source>Save as batch job</source> +<target>一括ジョブで保存</target> <source>Comparison settings</source> <target>比較設定</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>全般的な設定</target> -<source>Summary</source> -<target>概要</target> - <source>Find</source> <target>検索</target> @@ -268,8 +268,8 @@ <source>Select a folder</source> <target>フォルダを選択</target> -<source>Delay [seconds]</source> -<target>遅延[秒]</target> +<source>Idle time [seconds]</source> +<target>待機時間 [秒]</target> <source>Idle time between last detected change and execution of command</source> <target>最後にコマンドを実行してから、次に変更を検出するまでの待機時間</target> @@ -318,38 +318,23 @@ The command is triggered if: <source>A folder input field is empty.</source> <target>フォルダ入力欄が空白です.</target> -<source>File time and size</source> -<target>ファイル時刻とサイズ</target> - -<source>File content</source> -<target>ファイルの内容</target> - -<source><Automatic></source> -<target><自動></target> - -<source>Mirror ->></source> -<target>ミラー >></target> - -<source>Update -></source> -<target>更新 -></target> - -<source>Custom</source> -<target>カスタム</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync 一括</target> - <source>Synchronization aborted!</source> <target>同期処理を中断!</target> <source>Synchronization completed with errors!</source> -<target>同期処理は、エラーで終了しています!</target> +<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>Synchronization completed successfully.</source> +<target>同期処理はすべてが正常に完了しました</target> + +<source>Saving log file %x...</source> +<target>ログファイル %x を保存中...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>"切り替え"を押すと FreeFileSync ダイアログの問題を解決します.</target> @@ -357,9 +342,6 @@ The command is triggered if: <source>Switching to FreeFileSync main dialog...</source> <target>FreeFileSync メインダイアログを切替中...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Sourceforge.net に接続できません!</target> - <source>A new version of FreeFileSync is available:</source> <target>FreeFileSync の新しいバージョンが利用できます:</target> @@ -372,6 +354,12 @@ The command is triggered if: <source>Information</source> <target>インフォメーション</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Sourceforge.net に接続できません!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>FreeFileSync の現在のバージョン番号を取得できませんでした! 手動で確認しますか?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>FreeFileSync の更新確認を毎週自動的に行いますか?</target> @@ -435,27 +423,27 @@ The command is triggered if: <source>Hibernate</source> <target>休止状態</target> -<source>1. &Compare</source> -<target>1. 比較(&C)</target> - -<source>2. &Synchronize</source> -<target>2. 同期処理(&S)</target> - <source>&New</source> <target>新規(&N)</target> <source>&Save</source> <target>保存(&S)</target> +<source>Save as &batch job...</source> +<target>一括ジョブで保存(&B)...</target> + +<source>1. &Compare</source> +<target>1. 比較(&C)</target> + +<source>2. &Synchronize</source> +<target>2. 同期処理(&S)</target> + <source>&Language</source> <target>使用言語(&L)</target> <source>&Global settings...</source> <target>全般的な設定(&G)...</target> -<source>&Create batch job...</source> -<target>一括ジョブを作成(&C)...</target> - <source>&Export file list...</source> <target>ファイル一覧をエクスポート(&E)...</target> @@ -489,17 +477,17 @@ The command is triggered if: <source>Swap sides</source> <target>パネルを入れ替え</target> -<source>Load configuration from file</source> -<target>外部ファイルから構成設定を読み込みます</target> +<source>Open</source> +<target>開く</target> -<source>Save current configuration to file</source> -<target>現在の設定をファイルに保存</target> +<source>Save</source> +<target>保存</target> <source>Last used configurations (press DEL to remove from list)</source> <target>前回使用した構成設定(DEL キーでリストから除去します)</target> -<source>Show excluded items</source> -<target>除外した項目を表示</target> +<source>Hide excluded items</source> +<target>除外対象項目を隠す</target> <source>Show filtered or temporarily excluded files</source> <target>フィルター済、または一時除外ファイルを表示</target> @@ -537,15 +525,6 @@ The command is triggered if: <source>Help</source> <target>ヘルプ</target> -<source>Filter files</source> -<target>ファイルフィルター</target> - -<source>Left</source> -<target>左側</target> - -<source>Right</source> -<target>右側</target> - <source>Error handling</source> <target>ハンドリングのエラー時:</target> @@ -567,14 +546,14 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>最初のエラー発生時に同期を中断する</target> -<source>On completion:</source> -<target>完了時:</target> +<source>On completion</source> +<target>完了時の動作</target> <source>Show progress dialog</source> <target>進捗ダイアログを表示</target> -<source>Generate log file</source> -<target>ログファイルを生成</target> +<source>Save log</source> +<target>ログを保存</target> <source>Select folder to save log files</source> <target>ログファイル保存先フォルダを選択</target> @@ -585,11 +564,8 @@ The command is triggered if: <source>Limit maximum number of log files</source> <target>ログファイルの最大数を制限</target> -<source>Batch settings</source> -<target>一括設定</target> - -<source>Compare by...</source> -<target>比較対象...</target> +<source>Select variant</source> +<target>変数を選択</target> <source> Files are found equal if @@ -604,6 +580,9 @@ are the same で判断する </target> +<source>File time and size</source> +<target>ファイル時刻とサイズ</target> + <source> Files are found equal if - file content @@ -615,24 +594,36 @@ is the same で判断する </target> +<source>File content</source> +<target>ファイルの内容</target> + <source>Symbolic Link handling</source> <target>シンボリック・リンクの取り扱い</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>変数を選択:</target> +<source><- Two way -></source> +<target><- 両方向 -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>両側の識別、プロパティの変更特定にデータベースを使用します。削除、リネーム及び競合などは自動的に検出されます</target> +<source>Mirror ->></source> +<target>ミラー >></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>左側に合わせてバックアップ. 右側のフォルダ内容が同期処理後に左側と同じになるようにします。</target> +<source>Update -></source> +<target>更新 -></target> + <source>Copy new or updated files to right folder.</source> <target>新しい(更新)ファイルを右フォルダにコピー</target> +<source>Custom</source> +<target>カスタム</target> + <source>Configure your own synchronization rules.</source> <target>あなたの設定した同期規則を使用します。</target> @@ -648,7 +639,7 @@ is the same <source>Recycle Bin</source> <target>ゴミ箱に移動</target> -<source>Use Recycle Bin when deleting or overwriting files</source> +<source>Use Recycle Bin for deleted and overwritten files</source> <target>ファイルの削除、上書き時にゴミ箱を使用する</target> <source>Versioning</source> @@ -657,8 +648,8 @@ is the same <source>Move time-stamped files into specified folder</source> <target>ファイルのタイムスタンプで指定フォルダに移動</target> -<source>Limit maximum number of versions per file</source> -<target>ファイル当たりのバージョン番号制限</target> +<source>Naming convention:</source> +<target>命名規則:</target> <source>Configuration</source> <target>構成設定</target> @@ -691,10 +682,10 @@ is the same <target>ソースコードは C++ で書かれています</target> <source>If you like FreeFileSync</source> -<target>FreeFileSync が気に入った場合</target> +<target>FreeFileSync を支援したい!</target> <source>Donate with PayPal</source> -<target>PayPal から寄付する</target> +<target>PayPal から寄付</target> <source>Many thanks for localization:</source> <target>ローカライズのご協力に感謝します:</target> @@ -807,6 +798,9 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>概要</target> +<source>Filter files</source> +<target>ファイルフィルター</target> + <source>Select view</source> <target>表示選択</target> @@ -858,9 +852,15 @@ Note: File names must be relative to base directories! <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>Never save changes</source> <target>変更を保存しない</target> @@ -873,9 +873,6 @@ Note: File names must be relative to base directories! <source>Configuration loaded!</source> <target>構成設定を読み込み中!</target> -<source>Folder Comparison and Synchronization</source> -<target>フォルダの比較と同期</target> - <source>Hide files that exist on left side only</source> <target>左側のみに存在するファイルを非表示</target> @@ -1028,6 +1025,9 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>内容を比較中...</target> +<source>Copy</source> +<target>コピー</target> + <source>Paused</source> <target>一時停止中</target> @@ -1083,10 +1083,10 @@ Note: File names must be relative to base directories! <target>フィルター</target> <source>Direct</source> -<target>方向</target> +<target>ダイレクト</target> <source>Follow</source> -<target>フォロー</target> +<target>考慮する</target> <source>Copy NTFS permissions</source> <target>NTFS パーミッションをコピー</target> @@ -1100,14 +1100,14 @@ Note: File names must be relative to base directories! <source>- folder part only</source> <target>- フォルダ部分のみ</target> -<source>- Other side's counterpart to %name</source> -<target>- %name の反対側の対象</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- %item_path% の反対側の対象</target> -<source>- Other side's counterpart to %dir</source> -<target>- %dir の反対側の対象</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- %item_folder% の反対側の対象</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>現在隠されたダイアログと警告メッセージを再表示しますか?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>非表示にした警告ダイアログを再び表示しますか?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1128,44 +1128,29 @@ Note: File names must be relative to base directories! <source>Leave as unresolved conflict</source> <target>未解決の競合はそのまま残す</target> -<source>Files</source> -<target>ファイル</target> +<source>Replace</source> +<target>置換</target> -<source>Percentage</source> -<target>パーセント</target> +<source>Move files and replace if existing</source> +<target>ファイルを移動、存在する場合は上書き</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>各ファイル名にタイムスタンプを追加</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>フォルダ</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>ファイル</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>%x 分.</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>YYYY-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>%x 時間</pluralform> -</target> +<source>Files</source> +<target>ファイル</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>%x 日</pluralform> -</target> +<source>Percentage</source> +<target>パーセント</target> <source>Cannot monitor directory %x.</source> <target>ディレクトリ %x を監視できません.</target> @@ -1215,6 +1200,9 @@ Note: File names must be relative to base directories! <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 directory %x.</source> <target>ディレクトリ %x を開けません.</target> @@ -1224,6 +1212,39 @@ Note: File names must be relative to base directories! <source>Detected endless directory recursion.</source> <target>ディレクトリ再帰処理でループを検出</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>%x 分.</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>%x 時間</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>%x 日</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>%x の特権をセットできません.</target> @@ -1353,6 +1374,9 @@ Note: File names must be relative to base directories! <source>Moving symbolic link %x to %y</source> <target>シンボリックリンク %x を %y に移動中</target> +<source>Removing old versions...</source> +<target>旧バージョンを除去中...</target> + <source>Creating file %x</source> <target>ファイル %x を作成中</target> @@ -1374,6 +1398,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>%x の属性を更新</target> +<source>Target folder %x already existing.</source> +<target>対象フォルダ %x は既に存在します.</target> + <source>Target folder input field must not be empty.</source> <target>対象フォルダ入力欄が空白になっています.</target> @@ -1383,11 +1410,8 @@ Note: File names must be relative to base directories! <source>Source folder %x not found.</source> <target>ソースフォルダ %x が見つかりません</target> -<source>Unresolved conflicts existing!</source> -<target>未解決の不一致があります!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>この不一致を無視して同期を続行することが出来ます。</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>以下の項目は、未解決の競合が存在するため同期処理を実行できませんでした:</target> <source>Significant difference detected:</source> <target>重大な差異が検出されました:</target> @@ -1407,12 +1431,15 @@ Note: File names must be relative to base directories! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>複数フォルダペアの一部であるフォルダが変更されています. 同期設定を確認してください.</target> +<source>Left</source> +<target>左側</target> + +<source>Right</source> +<target>右側</target> + <source>Synchronizing folder pair:</source> <target>フォルダペアを同期処理中:</target> -<source>Target folder %x already existing.</source> -<target>対象フォルダ %x は既に存在します.</target> - <source>Generating database...</source> <target>データベースを作成中...</target> diff --git a/BUILD/Languages/korean.lng b/BUILD/Languages/korean.lng index db2d73a6..501e38e6 100644 --- a/BUILD/Languages/korean.lng +++ b/BUILD/Languages/korean.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>사용자에 의한 작업 중단 : 현재 작업 종료 대기 중...</target> +<source>Failure to create time stamp for versioning:</source> +<target>버저닝을 위한 타임 스탬프 생성 실패 :</target> + <source>RealtimeSync - Automated Synchronization</source> <target>실시간 동기화 - 자동 동기화</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>필터 설정 지우기</target> -<source>Create a batch job</source> -<target>일괄작업 생성</target> +<source>Save as batch job</source> +<target>일괄 작업으로 저장</target> <source>Comparison settings</source> <target>비교 설정</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>전체 설정</target> -<source>Summary</source> -<target>개요</target> - <source>Find</source> <target>검색</target> @@ -268,8 +268,8 @@ <source>Select a folder</source> <target>폴더 선택</target> -<source>Delay [seconds]</source> -<target>지연 [초]</target> +<source>Idle time [seconds]</source> +<target>유휴시간 [초]</target> <source>Idle time between last detected change and execution of command</source> <target>마지막으로 감지된 변화와 명령 실행 간의 유휴 시간</target> @@ -318,38 +318,23 @@ The command is triggered if: <source>A folder input field is empty.</source> <target>폴더 입력 필드 하나가 비어 있습니다.</target> -<source>File time and size</source> -<target>파일 시간 및 크기</target> - -<source>File content</source> -<target>파일 내용</target> - -<source><Automatic></source> -<target><자동></target> - -<source>Mirror ->></source> -<target>미러 ->></target> - -<source>Update -></source> -<target>업데이트 -></target> - -<source>Custom</source> -<target>개인 설정</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync 일괄처리(배치)</target> - <source>Synchronization aborted!</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>Synchronization completed successfully.</source> +<target>동기화 완료 성공!</target> + +<source>Saving log file %x...</source> +<target>로그 파일 %x 저장 중...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>FreeFileSync 메인 다이얼로그에서 문제 해결을 하려면 "Switch" [전환]을 누르십시오.</target> @@ -357,9 +342,6 @@ The command is triggered if: <source>Switching to FreeFileSync main dialog...</source> <target>FreeFileSync 메인 다이얼로그로 전환 중...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Sourceforge.net에 접속할 수 없습니다!</target> - <source>A new version of FreeFileSync is available:</source> <target>새로운 버전의 FreeFileSync가 나왔습니다 :</target> @@ -372,6 +354,12 @@ The command is triggered if: <source>Information</source> <target>인포메이션 (정보)</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Sourceforge.net에 접속할 수 없습니다!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>현재 사용하고 계신 FreeFileSync 버전 번호를 온라인에서 찾을 수가 없습니다! 수동으로 확인하시겠습니까?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>FreeFileSync가 매주 자동으로 업데이트를 확인하도록 하시겠습니까?</target> @@ -421,7 +409,7 @@ The command is triggered if: <target>드래그 && 드랍 (마우스로 파일 끌어다 놓기)</target> <source>Close progress dialog</source> -<target>프로그레스 다이얼로그 (진행 창) 닫기</target> +<target>프로그레스 다이얼로그 (진행 표시 창) 닫기</target> <source>Standby</source> <target>대기</target> @@ -435,27 +423,27 @@ The command is triggered if: <source>Hibernate</source> <target>최대절전모드</target> -<source>1. &Compare</source> -<target>1. 비교(&C)</target> - -<source>2. &Synchronize</source> -<target>2. 동기화(&S)</target> - <source>&New</source> <target>신규 작업(&N)</target> <source>&Save</source> <target>저장(&S)</target> +<source>Save as &batch job...</source> +<target>일괄 작업으로 저장(&b)</target> + +<source>1. &Compare</source> +<target>1. 비교(&C)</target> + +<source>2. &Synchronize</source> +<target>2. 동기화(&S)</target> + <source>&Language</source> <target>언어 선택(&L)</target> <source>&Global settings...</source> <target>전체 설정(&G)</target> -<source>&Create batch job...</source> -<target>일괄작업 생성(&C)</target> - <source>&Export file list...</source> <target>파일 리스트 내보내기(&E)</target> @@ -489,17 +477,17 @@ The command is triggered if: <source>Swap sides</source> <target>양측 위치 바꾸기</target> -<source>Load configuration from file</source> -<target>외부 파일로부터 설정 로드</target> +<source>Open</source> +<target>열기</target> -<source>Save current configuration to file</source> -<target>현재 설정을 파일로 저장</target> +<source>Save</source> +<target>저장</target> <source>Last used configurations (press DEL to remove from list)</source> <target>마지막으로 사용한 설정 (DEL 키를 누르면 리스트에서 삭제)</target> -<source>Show excluded items</source> -<target>제외 항목 보이기</target> +<source>Hide excluded items</source> +<target>제외 항목 숨기기</target> <source>Show filtered or temporarily excluded files</source> <target>필터링 또는 일시적으로 제외된 파일 보이기</target> @@ -537,15 +525,6 @@ The command is triggered if: <source>Help</source> <target>도움말</target> -<source>Filter files</source> -<target>파일 필터</target> - -<source>Left</source> -<target>좌측</target> - -<source>Right</source> -<target>우측</target> - <source>Error handling</source> <target>오류 발생시 :</target> @@ -567,14 +546,14 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>첫 번째 오류 시 동기화 중지</target> -<source>On completion:</source> -<target>완료 :</target> +<source>On completion</source> +<target>완료 시</target> <source>Show progress dialog</source> -<target>프로그레스 다이얼로그 (진행 창) 보기</target> +<target>프로그레스 다이얼로그 (진행 표시 창) 보기</target> -<source>Generate log file</source> -<target>로그 파일 생성</target> +<source>Save log</source> +<target>로그 저장</target> <source>Select folder to save log files</source> <target>로그 파일을 저장할 폴더 선택</target> @@ -585,11 +564,8 @@ The command is triggered if: <source>Limit maximum number of log files</source> <target>로그 파일의 최대 개수 제한</target> -<source>Batch settings</source> -<target>일괄 설정</target> - -<source>Compare by...</source> -<target>대상 별 비교...</target> +<source>Select variant</source> +<target>변형(베어리언트) 선택</target> <source> Files are found equal if @@ -604,6 +580,9 @@ are the same 동일한 파일로 간주됩니다. </target> +<source>File time and size</source> +<target>파일 시간 및 크기</target> + <source> Files are found equal if - file content @@ -615,24 +594,36 @@ is the same 동일한 파일로 간주됩니다. </target> +<source>File content</source> +<target>파일 내용</target> + <source>Symbolic Link handling</source> <target>심볼릭 링크 처리</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>옵션 선택 :</target> +<source><- Two way -></source> +<target><- 양방/양면 (Two Way) -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>데이터베이스를 활용하여 양측의 변경사항을 확인하고 반영합니다. 파일 삭제/명칭 변경/충돌은 자동으로 감지됩니다.</target> +<source>Mirror ->></source> +<target>미러 ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>좌측 폴더 백업 미러. 동기화 이후 우측 폴더는 좌측 폴더와 완전히 똑같이 매치 되도록 변경 됩니다.</target> +<source>Update -></source> +<target>업데이트 -></target> + <source>Copy new or updated files to right folder.</source> <target>신규 또는 업데이트 된 파일을 우측 폴더로 복사</target> +<source>Custom</source> +<target>개인 설정</target> + <source>Configure your own synchronization rules.</source> <target>개인 동기화 규칙 설정</target> @@ -648,8 +639,8 @@ is the same <source>Recycle Bin</source> <target>휴지통</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>파일을 삭제하거나 덮어쓰기 할 때, 휴지통 사용</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>삭제 또는 덮어 써진 파일들은 휴지통으로 이동</target> <source>Versioning</source> <target>버저닝</target> @@ -657,8 +648,8 @@ is the same <source>Move time-stamped files into specified folder</source> <target>타임스탬핑(생성시간 날인)된 파일을 지정된 폴더로 이동</target> -<source>Limit maximum number of versions per file</source> -<target>파일 당 버전 최대 개수 제한</target> +<source>Naming convention:</source> +<target>이름 지정 :</target> <source>Configuration</source> <target>구성 설정</target> @@ -769,7 +760,7 @@ Note: File names must be relative to base directories! <target>파일 및 폴더 사용 권한 전송 (관리자 권한 필요)</target> <source>Restore hidden dialogs</source> -<target>숨겨진 대화 상자 복원</target> +<target>숨겨진 대화 창 복원</target> <source>External applications</source> <target>외부 응용 프로그램</target> @@ -778,13 +769,13 @@ Note: File names must be relative to base directories! <target>설명</target> <source>Variant</source> -<target>옵션(변수)</target> +<target>변형(베어리언트)</target> <source>Statistics</source> <target>통계</target> <source>Don't show this dialog again</source> -<target>이 대화 상자를 다시 표시하지 않음</target> +<target>이 대화 창을 다시 표시하지 않음</target> <source>Find what:</source> <target>검색어 :</target> @@ -807,6 +798,9 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>개요</target> +<source>Filter files</source> +<target>파일 필터</target> + <source>Select view</source> <target>보기 선택</target> @@ -858,9 +852,15 @@ Note: File names must be relative to base directories! <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>Never save changes</source> <target>변경사항 절대 저장 안 함.</target> @@ -873,9 +873,6 @@ Note: File names must be relative to base directories! <source>Configuration loaded!</source> <target>설정 로드 완료!</target> -<source>Folder Comparison and Synchronization</source> -<target>폴더 비교 및 동기화</target> - <source>Hide files that exist on left side only</source> <target>좌측에만 존재하는 파일 숨기기</target> @@ -1028,6 +1025,9 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>내용 비교 중...</target> +<source>Copy</source> +<target>복사</target> + <source>Paused</source> <target>일시정지 중</target> @@ -1100,14 +1100,14 @@ Note: File names must be relative to base directories! <source>- folder part only</source> <target>- 폴더 부분만</target> -<source>- Other side's counterpart to %name</source> -<target>- %name 의 반대측 대상</target> +<source>- Other side's counterpart to %item_path%</source> +<target>% 항목_경로 %의 반대편 대응부(카운터파트)</target> -<source>- Other side's counterpart to %dir</source> -<target>- %dir 의 반대측 대상</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>% 항목_폴더 %의 반대편 대응부(카운터파트)</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>숨겨진 대화 상자나 경고 메세지를 다시 보이게 하시겠습니까?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>숨겨진 경고 창 또는 대화 창을 다시 보이게 하시겠습니까?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1128,44 +1128,29 @@ Note: File names must be relative to base directories! <source>Leave as unresolved conflict</source> <target>해결되지 않은 충돌로 놔두기</target> -<source>Files</source> -<target>파일</target> +<source>Replace</source> +<target>대체</target> -<source>Percentage</source> -<target>백분율(%)</target> +<source>Move files and replace if existing</source> +<target>파일 이동 및 기존 파일 존재 시에는 대체</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>각 파일 이름마다 타임스탬프 추가</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>폴더</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>파일</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>%x분</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>YYYY-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>%x시간</pluralform> -</target> +<source>Files</source> +<target>파일</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>%x일</pluralform> -</target> +<source>Percentage</source> +<target>백분율(%)</target> <source>Cannot monitor directory %x.</source> <target>디렉토리 %x 을(를) 모니터링 할 수 없습니다.</target> @@ -1215,6 +1200,9 @@ Note: File names must be relative to base directories! <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 directory %x.</source> <target>디렉토리 %x 을(를) 열 수 없습니다.</target> @@ -1224,6 +1212,39 @@ Note: File names must be relative to base directories! <source>Detected endless directory recursion.</source> <target>삭제된 무한 디렉토리 재귀(반복)</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>%x분</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>%x시간</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>%x일</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>권한 %x 을(를) 설정할 수 없습니다.</target> @@ -1353,6 +1374,9 @@ Note: File names must be relative to base directories! <source>Moving symbolic link %x to %y</source> <target>심볼릭 링크 %x을(를) %y(으)로 이동 중</target> +<source>Removing old versions...</source> +<target>구 버전 삭제 중...</target> + <source>Creating file %x</source> <target>파일 %x 생성 중</target> @@ -1374,6 +1398,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>%x 속성 업데이트 중</target> +<source>Target folder %x already existing.</source> +<target>대상 폴더 %x이(가) 이미 존재함.</target> + <source>Target folder input field must not be empty.</source> <target>대상 폴더 입력 필드가 비어 있어서는 안 됩니다.</target> @@ -1383,11 +1410,8 @@ Note: File names must be relative to base directories! <source>Source folder %x not found.</source> <target>소스 폴더 %x을(를) 찾을 수 없음.</target> -<source>Unresolved conflicts existing!</source> -<target>해결되지 않은 충돌이 있습니다!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>충돌을 무시하고 동기화를 계속할 수 있습니다.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>아래의 항목들은 해결치 못 한 충돌로 인해 동기화할 수 없습니다 :</target> <source>Significant difference detected:</source> <target>상당한 차이가 감지됐습니다 :</target> @@ -1407,12 +1431,15 @@ Note: File names must be relative to base directories! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>다중 폴더 페어의 일부인 폴더가 변경됩니다. 동기화 설정을 재검토하세요.</target> +<source>Left</source> +<target>좌측</target> + +<source>Right</source> +<target>우측</target> + <source>Synchronizing folder pair:</source> <target>폴더 페어(짝) 동기화 진행 중</target> -<source>Target folder %x already existing.</source> -<target>대상 폴더 %x이(가) 이미 존재함.</target> - <source>Generating database...</source> <target>데이터베이스 생성 중...</target> diff --git a/BUILD/Languages/lithuanian.lng b/BUILD/Languages/lithuanian.lng index c4e82e6f..9180212b 100644 --- a/BUILD/Languages/lithuanian.lng +++ b/BUILD/Languages/lithuanian.lng @@ -32,7 +32,7 @@ <target>Nutraukti: laukiama kol baigsis esama operacija...</target> <source>Failure to create time stamp for versioning:</source> -<target></target> +<target>Nepavyo sukurti laiko žymės versijavimui:</target> <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Automatizuotas sinchronizavimas</target> @@ -58,8 +58,8 @@ <source>Clear filter settings</source> <target>Išvalyti filtro nustatymus</target> -<source>Create a batch job</source> -<target>Sukurti paketinę užduotį</target> +<source>Save as batch job</source> +<target>Išsaugoti kaip paketinį darbą</target> <source>Comparison settings</source> <target>Sulyginimo nustatymai</target> @@ -79,9 +79,6 @@ <source>Global settings</source> <target>Bendri nustatymai</target> -<source>Summary</source> -<target>Suvestinė</target> - <source>Find</source> <target>Rasti</target> @@ -126,7 +123,7 @@ <pluralform>1 Baitas</pluralform> <pluralform>%x Baitai</pluralform> <pluralform>%x Baitų</pluralform> -<pluralform>%x Baitai</pluralform> +<pluralform>%x Baitas</pluralform> </target> <source>Database file %x is incompatible.</source> @@ -196,7 +193,7 @@ <pluralform>[1 Grėsmė]</pluralform> <pluralform>[%x Grėsmės]</pluralform> <pluralform>[%x Grėsmių]</pluralform> -<pluralform>[%x Grėsmės]</pluralform> +<pluralform>[%x Grėsmė]</pluralform> </target> <source>/sec</source> @@ -280,8 +277,8 @@ <source>Select a folder</source> <target>Pažymėti aplanką</target> -<source>Delay [seconds]</source> -<target>Atidėti [sekundės]</target> +<source>Idle time [seconds]</source> +<target>Neveiklus laikas [sek.]</target> <source>Idle time between last detected change and execution of command</source> <target>Neveiklus laikas tarp paskutinio aptikto pokyčio ir komandos įvykdymo</target> @@ -330,38 +327,23 @@ Komanda inicijuojama jei: <source>A folder input field is empty.</source> <target>Aplanko įvesties laukas yra tuščias.</target> -<source>File time and size</source> -<target>Failo laiką ir dydį</target> - -<source>File content</source> -<target>Failo turinį</target> - -<source><Automatic></source> -<target><Automatiškai></target> - -<source>Mirror ->></source> -<target>Veidrodis ->></target> - -<source>Update -></source> -<target>Atnaujinti -></target> - -<source>Custom</source> -<target>Savitas</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync paketinė užduotis</target> - <source>Synchronization aborted!</source> <target>Synchronizavimas nutrauktas!</target> <source>Synchronization completed with errors!</source> <target>Synchronizavimas baigtas su klaidomis!</target> +<source>Synchronization completed with warnings.</source> +<target>Synchronizavimas baigtas su perspėjimais!</target> + <source>Nothing to synchronize!</source> <target>Nėra ko sinchronizuoti!</target> -<source>Synchronization completed successfully!</source> -<target>Synchronizavimas baigtas sėkmingai!</target> +<source>Synchronization completed successfully.</source> +<target>Synchronizavimas sėkmingai baigtas.</target> + +<source>Saving log file %x...</source> +<target>Saugmas žurnalo failas %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Spauskite „Perjungti“, kad išspręsti problemas pagrindiniame FreeFileSync lange.</target> @@ -369,9 +351,6 @@ Komanda inicijuojama jei: <source>Switching to FreeFileSync main dialog...</source> <target>Perjungiama į pagrindinį FreeFileSync langą...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Nepavyksta prisijungti prie sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Yra nauja FreeFileSync versija:</target> @@ -384,6 +363,12 @@ Komanda inicijuojama jei: <source>Information</source> <target>Informacija</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Nepavyksta prisijungti prie sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Šis FreeFileSync versijos numeris nerastas internete! Ar norite patikrinti rankiniu būdu?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Ar tikrai norite, kad FreeFileSync automatiškai ieškoti atnaujinimų kiekvieną savaitę?</target> @@ -447,27 +432,27 @@ Komanda inicijuojama jei: <source>Hibernate</source> <target>Stabdyti į operatyviąją atmintį</target> -<source>1. &Compare</source> -<target>1. &Sulyginti</target> - -<source>2. &Synchronize</source> -<target>2. &Sinchronizuoti</target> - <source>&New</source> <target>&Naujas</target> <source>&Save</source> <target>&Išsaugoti</target> +<source>Save as &batch job...</source> +<target>Išsaugoti kaip &paketinę užduotį...</target> + +<source>1. &Compare</source> +<target>1. &Sulyginti</target> + +<source>2. &Synchronize</source> +<target>2. &Sinchronizuoti</target> + <source>&Language</source> <target>&Kalba</target> <source>&Global settings...</source> <target>&Bendri nustatymai...</target> -<source>&Create batch job...</source> -<target>&Sukurti paketinę užduotį...</target> - <source>&Export file list...</source> <target>&Eksportuoti failų sąrašą...</target> @@ -501,17 +486,17 @@ Komanda inicijuojama jei: <source>Swap sides</source> <target>Sukeisti puses</target> -<source>Load configuration from file</source> -<target>Įkelti nustatymus iš failo</target> +<source>Open</source> +<target>Atverti</target> -<source>Save current configuration to file</source> -<target>Išsaugoti esamus nustatymus į failą</target> +<source>Save</source> +<target>Išsaugoti</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Paskiausiai naudoti nustatymai (spauskite DEL, kad pašalinti iš sąrašo)</target> -<source>Show excluded items</source> -<target>Rodyti išskirtus elementus</target> +<source>Hide excluded items</source> +<target>Slėpti išskirtus elementus</target> <source>Show filtered or temporarily excluded files</source> <target>Rodyti išfiltruotus ar laikinai išskirtus failus</target> @@ -549,15 +534,6 @@ Komanda inicijuojama jei: <source>Help</source> <target>Pagalba</target> -<source>Filter files</source> -<target>Filtruoti failus</target> - -<source>Left</source> -<target>Kairė</target> - -<source>Right</source> -<target>Dešinė</target> - <source>Error handling</source> <target>Klaidų valdymas</target> @@ -579,14 +555,14 @@ Komanda inicijuojama jei: <source>Abort synchronization on first error</source> <target>Nutraukti sinchronizavimą su pirma klaida</target> -<source>On completion:</source> -<target>Baigus:</target> +<source>On completion</source> +<target>Baigus</target> <source>Show progress dialog</source> <target>Rodyti eigos langą</target> -<source>Generate log file</source> -<target>Bendras ataskaitos failas</target> +<source>Save log</source> +<target>Saugoti žurnalus</target> <source>Select folder to save log files</source> <target>Pasirinkite aplanką ataskaitos failų saugojimui</target> @@ -597,11 +573,8 @@ Komanda inicijuojama jei: <source>Limit maximum number of log files</source> <target>Apriboti ataskaitų failų skaičių</target> -<source>Batch settings</source> -<target>Paketinės užduoties nustatymai</target> - -<source>Compare by...</source> -<target>Sulyginti pagal...</target> +<source>Select variant</source> +<target>Pasirinkti variantą</target> <source> Files are found equal if @@ -616,6 +589,9 @@ Failai laikomi lygiais jei yra tokie patys </target> +<source>File time and size</source> +<target>Failo laiką ir dydį</target> + <source> Files are found equal if - file content @@ -627,24 +603,36 @@ Failai laikomi lygiais jei yra toks pats </target> +<source>File content</source> +<target>Failo turinį</target> + <source>Symbolic Link handling</source> <target>Simbolinių nuorodų valdymas</target> <source>OK</source> <target>Gerai</target> -<source>Select variant:</source> -<target>Pažymėkite variantą:</target> +<source><- Two way -></source> +<target><- Dvipusis -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Nustatyti ir siūlyti pokeitimus abiejose pusėse naudojant duomenų bazę. Trinimai, pervardinimas ir konfliktai yra nustatomi automatiškai.</target> +<source>Mirror ->></source> +<target>Veidrodis ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Veidrodinė kairiojo aplanko kopija. Dešinysis aplankas yra pakeičiamas taip, kad po sinchronizavimo tiksliai atitiktų kairyjį aplanką.</target> +<source>Update -></source> +<target>Atnaujinti -></target> + <source>Copy new or updated files to right folder.</source> <target>Kopijuoti naujus ar atnaujintus failus į dešinyjį aplanką.</target> +<source>Custom</source> +<target>Savitas</target> + <source>Configure your own synchronization rules.</source> <target>Nustatyti Jūsų pačių sinchronizavimo taisykles.</target> @@ -660,8 +648,8 @@ yra toks pats <source>Recycle Bin</source> <target>Šiukšliadėžė</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Naudoti šiukšliadėžę kaii trinami ar perrašomi failai</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Naudoti šiukšliadėžę ištrintiems ir perrašytiems failams</target> <source>Versioning</source> <target>Versijavimas</target> @@ -669,8 +657,8 @@ yra toks pats <source>Move time-stamped files into specified folder</source> <target>Perkelti su laiko žyme failus į nurodytą aplanką</target> -<source>Limit maximum number of versions per file</source> -<target>Apriboti versijų skaičių failui</target> +<source>Naming convention:</source> +<target>Pavadinimų taisyklės:</target> <source>Configuration</source> <target>Nustatymai</target> @@ -819,6 +807,9 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Overview</source> <target>Apžvalga</target> +<source>Filter files</source> +<target>Filtruoti failus</target> + <source>Select view</source> <target>Pasirinkti rodomus</target> @@ -870,9 +861,15 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source><Last session></source> <target><Paskutinė sesija></target> +<source>Folder Comparison and Synchronization</source> +<target>Aplankų sulyginimas ir sinchronizavimas</target> + <source>Configuration saved!</source> <target>Nustatymai išsaugoti!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync paketinė užduotis</target> + <source>Never save changes</source> <target>Niekada nesaugoti pakeitimų</target> @@ -885,9 +882,6 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Configuration loaded!</source> <target>Nustatymai įkelti!</target> -<source>Folder Comparison and Synchronization</source> -<target>Aplankų sulyginimas ir sinchronizavimas</target> - <source>Hide files that exist on left side only</source> <target>Slėpti failus, kurie egzistuoja tik kairėje pusėje</target> @@ -992,7 +986,7 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <pluralform>Objektas sėkmingai ištrintas!</pluralform> <pluralform>%x objektai sėkmingai ištrinti!</pluralform> <pluralform>%x objektų sėkmingai ištrinti!</pluralform> -<pluralform>%x objektai sėkmingai ištrinti!</pluralform> +<pluralform>%x objektas sėkmingai ištrintas!</pluralform> </target> <source> @@ -1003,7 +997,7 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <pluralform>1 katalogas</pluralform> <pluralform>%x katalogai</pluralform> <pluralform>%x katalogų</pluralform> -<pluralform>%x katalogai</pluralform> +<pluralform>%x katalogas</pluralform> </target> <source> @@ -1014,7 +1008,7 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <pluralform>1 failas</pluralform> <pluralform>%x failai</pluralform> <pluralform>%x failų</pluralform> -<pluralform>%x failai</pluralform> +<pluralform>%x failas</pluralform> </target> <source> @@ -1025,7 +1019,7 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <pluralform>%x iš 1 eilės rodmenyje</pluralform> <pluralform>%x iš %y eilių rodmenyje</pluralform> <pluralform>%x iš %y eilių rodmenyje</pluralform> -<pluralform>%x iš %y eilių rodmenyje</pluralform> +<pluralform>%x iš %y eilės rodmenyje</pluralform> </target> <source>Ignore further errors</source> @@ -1052,6 +1046,9 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Comparing content...</source> <target>Sulyginamas turinys...</target> +<source>Copy</source> +<target>Kopijuoti</target> + <source>Paused</source> <target>Pristabdyta</target> @@ -1124,14 +1121,14 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>- folder part only</source> <target>- tik aplanko dalis</target> -<source>- Other side's counterpart to %name</source> -<target>- Kitos pusės atitikmuo %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- Kitos pusės atitikmuo %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- Kitos pusės atitikmuo %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- Kitos pusės atitikmuo %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Padaryti paslėptus langus ir perpėjimo žinutes matomas vėl?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Ar vėl rodyti paslėptus perspėjimus ir langus?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1141,7 +1138,7 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <pluralform>Ar tikrai norite perkelti sekantį objektą į šiukšliadėžę?</pluralform> <pluralform>Ar tikrai norite perkelti sekančius %x objektus į šiukšliadėžę?</pluralform> <pluralform>Ar tikrai norite perkelti sekančius %x objektų į šiukšliadėžę?</pluralform> -<pluralform>Ar tikrai norite perkelti sekančius %x objektus į šiukšliadėžę?</pluralform> +<pluralform>Ar tikrai norite perkelti sekančius %x objektą į šiukšliadėžę?</pluralform> </target> <source> @@ -1152,59 +1149,35 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <pluralform>Ar tikrai norite ištrinti sekantį objektą?</pluralform> <pluralform>Ar tikrai norite ištrinti sekantčius %x objektus?</pluralform> <pluralform>Ar tikrai norite ištrinti sekantčius %x objektų?</pluralform> -<pluralform>Ar tikrai norite ištrinti sekantčius %x objektus?</pluralform> +<pluralform>Ar tikrai norite ištrinti sekantčius %x objektą?</pluralform> </target> <source>Leave as unresolved conflict</source> <target>Palikti kaip neišpręstą konfliktą</target> -<source>Files</source> -<target>Failai</target> +<source>Replace</source> +<target>Pakeisti</target> -<source>Percentage</source> -<target>Procentai</target> +<source>Move files and replace if existing</source> +<target>Perkelti failus ir pakeisti jei egzistuoja</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Pridėti laiko žymę kiekvieno failo pavadinime</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Aplankas</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Failas</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -<pluralform>%x min</pluralform> -<pluralform>%x min</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>YYYY-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 valanda</pluralform> -<pluralform>%x valandos</pluralform> -<pluralform>%x valandų</pluralform> -<pluralform>%x valandos</pluralform> -</target> +<source>Files</source> +<target>Failai</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 diena</pluralform> -<pluralform>%x dienos</pluralform> -<pluralform>%x dienų</pluralform> -<pluralform>%x dienos</pluralform> -</target> +<source>Percentage</source> +<target>Procentai</target> <source>Cannot monitor directory %x.</source> <target>Nepavyko stebėti katalogo %x.</target> @@ -1254,6 +1227,9 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Cannot copy file %x to %y.</source> <target>Nepavyksta nukopijuoti failo %x į %y.</target> +<source>Type of item %x is not supported:</source> +<target>Element tipas %x nepalaikomas:</target> + <source>Cannot open directory %x.</source> <target>Nepavyksta atverti direktorijos %x.</target> @@ -1263,6 +1239,48 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Detected endless directory recursion.</source> <target>Aptikri nesibaigiančią katalogo rekursiją.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +<pluralform>%x min</pluralform> +<pluralform>%x min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 valanda</pluralform> +<pluralform>%x valandos</pluralform> +<pluralform>%x valandų</pluralform> +<pluralform>%x valanda</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 diena</pluralform> +<pluralform>%x dienos</pluralform> +<pluralform>%x dienų</pluralform> +<pluralform>%x diena</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Nepavyksta nustatyti privilegijos %x.</target> @@ -1393,7 +1411,7 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <target>Perkeliama simbolinė nuoroda %x į %y</target> <source>Removing old versions...</source> -<target></target> +<target>Šalinamos senos versijos...</target> <source>Creating file %x</source> <target>Kuriamas failas %x</target> @@ -1416,6 +1434,9 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Updating attributes of %x</source> <target>Atnaujinami atributai %x</target> +<source>Target folder %x already existing.</source> +<target>Tikslo aplankas %x jau yra.</target> + <source>Target folder input field must not be empty.</source> <target>Tikslo aplanko įvesties laukas negali būti tuščias.</target> @@ -1425,11 +1446,8 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>Source folder %x not found.</source> <target>Šaltinio aplankas %x nerastas.</target> -<source>Unresolved conflicts existing!</source> -<target>Yra neišspręstų konfliktų!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Jūs galite ignoruoti konfliktus ir tęsti sinchronizavimą.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Šie elementai turi neišspręstų konfliktų ir nebus sinchronizuoti:</target> <source>Significant difference detected:</source> <target>Žymus skirtumas nustatytas:</target> @@ -1449,12 +1467,15 @@ Pastaba: Failų pavadinimai privalo atitikti bazinius katalogus! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Aplankas, kuris yra dalis keletos aplankų porų, bus pakeistas. Prašome peržiūrėti sinchronizavimo nustatymus.</target> +<source>Left</source> +<target>Kairė</target> + +<source>Right</source> +<target>Dešinė</target> + <source>Synchronizing folder pair:</source> <target>Sinchrinizuojama aplankų pora:</target> -<source>Target folder %x already existing.</source> -<target>Tikslo aplankas %x jau yra.</target> - <source>Generating database...</source> <target>Generuojama duomenų bazė...</target> diff --git a/BUILD/Languages/norwegian.lng b/BUILD/Languages/norwegian.lng index 947406c8..8850a52b 100644 --- a/BUILD/Languages/norwegian.lng +++ b/BUILD/Languages/norwegian.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>Avbrytelse forespurt: Venter på at gjeldende handling avsluttes...</target> +<source>Failure to create time stamp for versioning:</source> +<target></target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Automatisk synkronisering</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Nullstill filterinnstillinger</target> -<source>Create a batch job</source> -<target>Opprett en batch-jobb</target> +<source>Save as batch job</source> +<target></target> <source>Comparison settings</source> <target>Innstillinger for sammenligning</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Felles innstillinger</target> -<source>Summary</source> -<target>Oppsummering</target> - <source>Find</source> <target>Søk</target> @@ -271,8 +271,8 @@ <source>Select a folder</source> <target>Velg en mappe</target> -<source>Delay [seconds]</source> -<target>Vent [sekunder]</target> +<source>Idle time [seconds]</source> +<target></target> <source>Idle time between last detected change and execution of command</source> <target>Ventetid mellom forrige endring og utførelse av kommando</target> @@ -321,38 +321,23 @@ Kommandoen utløses hvis: <source>A folder input field is empty.</source> <target>Et mappefelt er tomt.</target> -<source>File time and size</source> -<target>Fildato og størrelse</target> - -<source>File content</source> -<target>Filinnhold</target> - -<source><Automatic></source> -<target><Automatisk></target> - -<source>Mirror ->></source> -<target>Speile ->></target> - -<source>Update -></source> -<target>Oppdatere -></target> - -<source>Custom</source> -<target>Brukerdefinert</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync batch</target> - <source>Synchronization aborted!</source> <target>Synkronisering avbrutt!</target> <source>Synchronization completed with errors!</source> <target>Synkronisering fullført med feil!</target> +<source>Synchronization completed with warnings.</source> +<target></target> + <source>Nothing to synchronize!</source> <target>Ikke noe å synkronisere!</target> -<source>Synchronization completed successfully!</source> -<target>Synkronisering vellykket fullført!</target> +<source>Synchronization completed successfully.</source> +<target></target> + +<source>Saving log file %x...</source> +<target></target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Trykk "Skift" for å løse problemer i FreeFileSync hovedvindu.</target> @@ -360,9 +345,6 @@ Kommandoen utløses hvis: <source>Switching to FreeFileSync main dialog...</source> <target>Skifter til FreeFileSync hovedvindu...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Ikke i stand til å koble til sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>En ny versjon av FreeFileSync er tilgjengelig</target> @@ -375,6 +357,12 @@ Kommandoen utløses hvis: <source>Information</source> <target>Informasjon</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Ikke i stand til å koble til sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target></target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Skal FreeFileSync automatisk se etter oppdateringer hver uke?</target> @@ -438,27 +426,27 @@ Kommandoen utløses hvis: <source>Hibernate</source> <target>Sett i dvalemodus</target> -<source>1. &Compare</source> -<target>1. Sammen&lign</target> - -<source>2. &Synchronize</source> -<target>2. &Synkroniser</target> - <source>&New</source> <target>&Ny</target> <source>&Save</source> <target>&Lagre</target> +<source>Save as &batch job...</source> +<target></target> + +<source>1. &Compare</source> +<target>1. Sammen&lign</target> + +<source>2. &Synchronize</source> +<target>2. &Synkroniser</target> + <source>&Language</source> <target>&Språk</target> <source>&Global settings...</source> <target>&Felles innstillinger...</target> -<source>&Create batch job...</source> -<target>&Opprett batch-jobb...</target> - <source>&Export file list...</source> <target>&Eksporter filliste...</target> @@ -492,16 +480,16 @@ Kommandoen utløses hvis: <source>Swap sides</source> <target>Bytt sider</target> -<source>Load configuration from file</source> -<target>Last innstilling fra fil</target> +<source>Open</source> +<target></target> -<source>Save current configuration to file</source> -<target>Lagre gjeldende innstilling til fil</target> +<source>Save</source> +<target></target> <source>Last used configurations (press DEL to remove from list)</source> <target>Sist brukte innstillinger (trykk DEL for å fjerne fra liste)</target> -<source>Show excluded items</source> +<source>Hide excluded items</source> <target></target> <source>Show filtered or temporarily excluded files</source> @@ -540,15 +528,6 @@ Kommandoen utløses hvis: <source>Help</source> <target>Hjelp</target> -<source>Filter files</source> -<target>Filtrer filer</target> - -<source>Left</source> -<target>Venstre</target> - -<source>Right</source> -<target>Høyre</target> - <source>Error handling</source> <target>Feilhåndtering</target> @@ -570,13 +549,13 @@ Kommandoen utløses hvis: <source>Abort synchronization on first error</source> <target></target> -<source>On completion:</source> -<target>Ved fullføring:</target> +<source>On completion</source> +<target></target> <source>Show progress dialog</source> <target>Vis dialogboks</target> -<source>Generate log file</source> +<source>Save log</source> <target></target> <source>Select folder to save log files</source> @@ -588,11 +567,8 @@ Kommandoen utløses hvis: <source>Limit maximum number of log files</source> <target></target> -<source>Batch settings</source> -<target>Batch-innstillinger</target> - -<source>Compare by...</source> -<target>Sammenlign etter...</target> +<source>Select variant</source> +<target></target> <source> Files are found equal if @@ -607,6 +583,9 @@ Filer blir funnet like hvis er den samme </target> +<source>File time and size</source> +<target>Fildato og størrelse</target> + <source> Files are found equal if - file content @@ -618,24 +597,36 @@ Filer blir funnet like hvis er det samme </target> +<source>File content</source> +<target>Filinnhold</target> + <source>Symbolic Link handling</source> <target>Symbolsk lenkehåndtering</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Velg variant:</target> +<source><- Two way -></source> +<target></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Identifiser og spre endringer på begge sider ved å bruke en database. Slettinger, navneendringer og konflikter blir automatisk oppdaget.</target> +<source>Mirror ->></source> +<target>Speile ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Speilings-sikkerhetskopi av venstre mappe. Høyre mappe endres slik at den blir helt lik venstre mappe etter synkronisering.</target> +<source>Update -></source> +<target>Oppdatere -></target> + <source>Copy new or updated files to right folder.</source> <target>Kopier nye og endrede filer til høyre mappe.</target> +<source>Custom</source> +<target>Brukerdefinert</target> + <source>Configure your own synchronization rules.</source> <target>Still inn dine egne synkroniseringsregler.</target> @@ -651,8 +642,8 @@ er det samme <source>Recycle Bin</source> <target></target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Bruk papirkurv ved sletting eller filoverskrivning</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target></target> <source>Versioning</source> <target>Versjonshåndtering</target> @@ -660,7 +651,7 @@ er det samme <source>Move time-stamped files into specified folder</source> <target></target> -<source>Limit maximum number of versions per file</source> +<source>Naming convention:</source> <target></target> <source>Configuration</source> @@ -810,6 +801,9 @@ Merk: Filnavn må være relative til basismapper! <source>Overview</source> <target>Oversikt</target> +<source>Filter files</source> +<target>Filtrer filer</target> + <source>Select view</source> <target>Velg visning</target> @@ -861,9 +855,15 @@ Merk: Filnavn må være relative til basismapper! <source><Last session></source> <target><Siste økt></target> +<source>Folder Comparison and Synchronization</source> +<target>Mappesammenligning og synkronisering</target> + <source>Configuration saved!</source> <target>Innstilling lagret!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync batch</target> + <source>Never save changes</source> <target>Aldri lagre endringer</target> @@ -876,9 +876,6 @@ Merk: Filnavn må være relative til basismapper! <source>Configuration loaded!</source> <target>Innstilling lastet!</target> -<source>Folder Comparison and Synchronization</source> -<target>Mappesammenligning og synkronisering</target> - <source>Hide files that exist on left side only</source> <target>Skjul filer som bare finnes på venstre side</target> @@ -1035,6 +1032,9 @@ Merk: Filnavn må være relative til basismapper! <source>Comparing content...</source> <target>Sammenligner innhold...</target> +<source>Copy</source> +<target></target> + <source>Paused</source> <target>Pauset</target> @@ -1107,14 +1107,14 @@ Merk: Filnavn må være relative til basismapper! <source>- folder part only</source> <target>- kun mapper</target> -<source>- Other side's counterpart to %name</source> -<target>- Andre sides motstykke til %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target></target> -<source>- Other side's counterpart to %dir</source> -<target>- Andre sides motstykke til %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target></target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Gjøre skjulte dialoger og advarselsmeldinger synlige igjen?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target></target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1137,47 +1137,29 @@ Merk: Filnavn må være relative til basismapper! <source>Leave as unresolved conflict</source> <target>Etterlat som uløste konflikter</target> -<source>Files</source> -<target>Filer</target> +<source>Replace</source> +<target></target> -<source>Percentage</source> -<target>Prosent</target> +<source>Move files and replace if existing</source> +<target></target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target></target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target></target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target></target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target></target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 time</pluralform> -<pluralform>%x timer</pluralform> -</target> +<source>Files</source> +<target>Filer</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 dag</pluralform> -<pluralform>%x dager</pluralform> -</target> +<source>Percentage</source> +<target>Prosent</target> <source>Cannot monitor directory %x.</source> <target>Kan ikke overvåke mappen %x.</target> @@ -1227,6 +1209,9 @@ Merk: Filnavn må være relative til basismapper! <source>Cannot copy file %x to %y.</source> <target>Kan ikke kopiere filen %x til %y.</target> +<source>Type of item %x is not supported:</source> +<target></target> + <source>Cannot open directory %x.</source> <target></target> @@ -1236,6 +1221,42 @@ Merk: Filnavn må være relative til basismapper! <source>Detected endless directory recursion.</source> <target>Fant uendelig dyp mappestruktur (lenker til mapper høyere opp i strukturen)</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 time</pluralform> +<pluralform>%x timer</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 dag</pluralform> +<pluralform>%x dager</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Kan ikke sette privilegie %x.</target> @@ -1365,6 +1386,9 @@ Merk: Filnavn må være relative til basismapper! <source>Moving symbolic link %x to %y</source> <target>Flytter symbolsk lenke %x til %y</target> +<source>Removing old versions...</source> +<target></target> + <source>Creating file %x</source> <target>Oppretter fil %x</target> @@ -1386,6 +1410,9 @@ Merk: Filnavn må være relative til basismapper! <source>Updating attributes of %x</source> <target>Oppdaterer attributter til %x</target> +<source>Target folder %x already existing.</source> +<target>Målmappe %x eksisterer allerede.</target> + <source>Target folder input field must not be empty.</source> <target>Feltet for målmappe kan ikke være tomt.</target> @@ -1395,11 +1422,8 @@ Merk: Filnavn må være relative til basismapper! <source>Source folder %x not found.</source> <target>Kildemappe %x finnes ikke.</target> -<source>Unresolved conflicts existing!</source> -<target>Uløste konflikter finnes!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Du kan ignorere konflikter og fortsette synkronisering.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target></target> <source>Significant difference detected:</source> <target>Betydelig forskjell oppdaget:</target> @@ -1419,12 +1443,15 @@ Merk: Filnavn må være relative til basismapper! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>En mappe vil endres som er en del av flere mappepar. Se over innstillingene for synkronisering.</target> +<source>Left</source> +<target>Venstre</target> + +<source>Right</source> +<target>Høyre</target> + <source>Synchronizing folder pair:</source> <target></target> -<source>Target folder %x already existing.</source> -<target>Målmappe %x eksisterer allerede.</target> - <source>Generating database...</source> <target>Oppretter database...</target> diff --git a/BUILD/Languages/polish.lng b/BUILD/Languages/polish.lng index d338f97a..cebe529b 100644 --- a/BUILD/Languages/polish.lng +++ b/BUILD/Languages/polish.lng @@ -20,7 +20,7 @@ <target>Całkowity czas:</target> <source>Show in Explorer</source> -<target>Wyświetl w Explorerze</target> +<target>Wyświetl w Eksploratorze</target> <source>Open with default application</source> <target>Otwórz za pomocą domyślnej aplikacji</target> @@ -29,7 +29,10 @@ <target>Przeglądaj katalog</target> <source>Abort requested: Waiting for current operation to finish...</source> -<target>Żądanie przerwania: Czekaj na koniec aktualnie wykonywanego zadania...</target> +<target>Żądanie przerwania: Oczekiwanie na koniec aktualnie wykonywanego zadania...</target> + +<source>Failure to create time stamp for versioning:</source> +<target>Nie można utworzyć sygnatury czasu na potrzeby wersjonowania:</target> <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Automatyczna Synchronizacja</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Wyczyść ustawienia filtra</target> -<source>Create a batch job</source> -<target>Utwórz plik wsadowy</target> +<source>Save as batch job</source> +<target>Zapisz w trybie wsadowym</target> <source>Comparison settings</source> <target>Ustawienia porównywania</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Ustawienia programu</target> -<source>Summary</source> -<target>Podsumowanie</target> - <source>Find</source> <target>Znajdź</target> @@ -101,7 +101,7 @@ <target>Błąd systemu Windows %x:</target> <source>Linux Error Code %x:</source> -<target>Błąd systemu linux %x:</target> +<target>Błąd systemu Linux %x:</target> <source>Cannot resolve symbolic link %x.</source> <target>Nie można określić położenia dowiązania symbolicznego %x.</target> @@ -162,7 +162,7 @@ <target>Blokada katalogu (%x), oczekiwanie...</target> <source>Cannot set directory lock %x.</source> -<target>Nie można zablokować katalogu %x do zapisu.</target> +<target>Nie można utworzyć blokady katalogu %x.</target> <source> <pluralform>1 sec</pluralform> @@ -203,7 +203,7 @@ <target>Plik %x nie zawiera prawidłowej konfiguracji</target> <source>Configuration file %x loaded partially only.</source> -<target>Plik konfiguracyjny %x wczytany tylko częściowo.</target> +<target>Plik konfiguracyjny %x został wczytany tylko częściowo.</target> <source>Cannot access Volume Shadow Copy Service.</source> <target>Nie można uzyskać dostępu do usługi Volume Shadow Copy.</target> @@ -274,8 +274,8 @@ <source>Select a folder</source> <target>Wybierz katalog</target> -<source>Delay [seconds]</source> -<target>Opóźnienie [sekundy]</target> +<source>Idle time [seconds]</source> +<target>Bezczynność [sekundy]</target> <source>Idle time between last detected change and execution of command</source> <target>Czas pomiędzy ostatnią wykrytą zmianą, a uruchomieniem komendy</target> @@ -324,38 +324,23 @@ Komenda jest wykonywana gdy: <source>A folder input field is empty.</source> <target>Pole katalog źródłowy jest puste.</target> -<source>File time and size</source> -<target>Czas modyfikacji i rozmiar</target> - -<source>File content</source> -<target>Zawartość pliku</target> - -<source><Automatic></source> -<target><Automatycznie></target> - -<source>Mirror ->></source> -<target>Lustrzana ->></target> - -<source>Update -></source> -<target>Uaktualnij -></target> - -<source>Custom</source> -<target>Własne</target> - -<source>FreeFileSync batch</source> -<target>Plik wsadowy FreeFileSync</target> - <source>Synchronization aborted!</source> <target>Synchronizacja przerwana!</target> <source>Synchronization completed with errors!</source> <target>Synchronizacja zakończona z błędami!</target> +<source>Synchronization completed with warnings.</source> +<target>Synchronizacja zakończona z ostrzeżeniami!</target> + <source>Nothing to synchronize!</source> <target>Brak plików do synchronizacji!</target> -<source>Synchronization completed successfully!</source> -<target>Synchronizacja zakończona pomyślnie!</target> +<source>Synchronization completed successfully.</source> +<target>Synchronizacja zakończona pomyślnie.</target> + +<source>Saving log file %x...</source> +<target>Zapisywanie pliku logów %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Kliknij "Przełącz" aby rozwiązać wszystkie problemy w głównym oknie FreeFileSync.</target> @@ -363,9 +348,6 @@ Komenda jest wykonywana gdy: <source>Switching to FreeFileSync main dialog...</source> <target>Przełączanie do głównego okna FreeFileSync...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Nie można się połączyć z sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Dostępna jest nowa wersja FreeFileSync:</target> @@ -378,6 +360,12 @@ Komenda jest wykonywana gdy: <source>Information</source> <target>Informacja</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Nie można się połączyć z sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Aktualna wersja FreeFileSync nie została znaleziona! Czy chcesz to sprawdzić ręcznie?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Czy chcesz aby FreeFileSync sprawdzał aktualizacje co tydzień?</target> @@ -441,27 +429,27 @@ Komenda jest wykonywana gdy: <source>Hibernate</source> <target>Przejdź w stan hibernacji</target> -<source>1. &Compare</source> -<target>1. &Porównaj</target> - -<source>2. &Synchronize</source> -<target>2. &Synchronizuj</target> - <source>&New</source> <target>&Nowy</target> <source>&Save</source> <target>&Zapisz</target> +<source>Save as &batch job...</source> +<target>Zapisz w trybie &wsadowym...</target> + +<source>1. &Compare</source> +<target>1. &Porównaj</target> + +<source>2. &Synchronize</source> +<target>2. &Synchronizuj</target> + <source>&Language</source> <target>&Język</target> <source>&Global settings...</source> <target>&Ustawienia programu...</target> -<source>&Create batch job...</source> -<target>&Twórz plik wsadowy...</target> - <source>&Export file list...</source> <target>&Eksportuj listę plików...</target> @@ -495,17 +483,17 @@ Komenda jest wykonywana gdy: <source>Swap sides</source> <target>Zamień stronami</target> -<source>Load configuration from file</source> -<target>Wczytaj konfigurację z pliku</target> +<source>Open</source> +<target>Otwórz</target> -<source>Save current configuration to file</source> -<target>Zapisz konfiguracyję do pliku</target> +<source>Save</source> +<target>Zapisz</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Ostatnio użyta konfiguracja (naciśnij DEL żeby usunąć z listy)</target> -<source>Show excluded items</source> -<target>Pokaż wykluczone elementy</target> +<source>Hide excluded items</source> +<target>Ukryj wykluczone elementy</target> <source>Show filtered or temporarily excluded files</source> <target>Pokaż pliki wykluczone tymczasowo lub pliki wykluczone tymczasowo</target> @@ -543,15 +531,6 @@ Komenda jest wykonywana gdy: <source>Help</source> <target>Pomoc</target> -<source>Filter files</source> -<target>Filtruj pliki</target> - -<source>Left</source> -<target>Lewy</target> - -<source>Right</source> -<target>Prawy</target> - <source>Error handling</source> <target>Obsługa błędów</target> @@ -573,14 +552,14 @@ Komenda jest wykonywana gdy: <source>Abort synchronization on first error</source> <target>Zakończ synchronizację przy pierwszym błędzie</target> -<source>On completion:</source> -<target>Po zakończeniu:</target> +<source>On completion</source> +<target>Po zakończeniu</target> <source>Show progress dialog</source> <target>Pokaż okno postępu</target> -<source>Generate log file</source> -<target>Twórz plik logów</target> +<source>Save log</source> +<target>Zapisz logi</target> <source>Select folder to save log files</source> <target>Określ katalog z logami</target> @@ -591,11 +570,8 @@ Komenda jest wykonywana gdy: <source>Limit maximum number of log files</source> <target>Określ maksymalną liczbę plików z logami</target> -<source>Batch settings</source> -<target>Ustawienia trybu wsadowego</target> - -<source>Compare by...</source> -<target>Porównaj przez...</target> +<source>Select variant</source> +<target>Określ wariant</target> <source> Files are found equal if @@ -610,6 +586,9 @@ Pliki są równe jeżeli są równe </target> +<source>File time and size</source> +<target>Czas modyfikacji i rozmiar</target> + <source> Files are found equal if - file content @@ -621,24 +600,36 @@ Pliki są jednakowe jeżeli jest identyczna </target> +<source>File content</source> +<target>Zawartość pliku</target> + <source>Symbolic Link handling</source> <target>Obsługa dowiązań symbolicznych</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Wybierz wariant:</target> +<source><- Two way -></source> +<target><- Obustronna -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Znajdź i zastosuj zmiany po obu stronach przy pomocy bazy danych. Usunięnia, zmiany nazwy plików oraz konflikty są usuwane automatycznie.</target> +<source>Mirror ->></source> +<target>Lustrzana ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Lustrzana kopia lewego folderu. Prawy folder po synchronizacji jest lustrzaną kopią lewego folderu.</target> +<source>Update -></source> +<target>Uaktualnij -></target> + <source>Copy new or updated files to right folder.</source> <target>Kopiuj nowe lub aktualniejsze pliki na prawą stronę.</target> +<source>Custom</source> +<target>Własne</target> + <source>Configure your own synchronization rules.</source> <target>Skonfiguruj swoje własne reguły synchronizacji.</target> @@ -654,8 +645,8 @@ jest identyczna <source>Recycle Bin</source> <target>Kosz</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Używaj Kosza podczas usuwania lub nadpisywania plików</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Użyj Kosza dla plików usuwanych i nadpisywanych</target> <source>Versioning</source> <target>Wersjonowanie</target> @@ -663,8 +654,8 @@ jest identyczna <source>Move time-stamped files into specified folder</source> <target>Pliki wersji oznaczone datą przenieś do określonego katalogu</target> -<source>Limit maximum number of versions per file</source> -<target>Określ maksymalną liczbę wersji dla pliku</target> +<source>Naming convention:</source> +<target>Konwencja nazewnictwa:</target> <source>Configuration</source> <target>Konfiguracja</target> @@ -813,6 +804,9 @@ Uwaga: Nazwy plików muszą być podane jako relatywne względem katalogu bazowe <source>Overview</source> <target>Przegląd</target> +<source>Filter files</source> +<target>Filtruj pliki</target> + <source>Select view</source> <target>Określ widok</target> @@ -864,9 +858,15 @@ Uwaga: Nazwy plików muszą być podane jako relatywne względem katalogu bazowe <source><Last session></source> <target><Ostatnia sesja></target> +<source>Folder Comparison and Synchronization</source> +<target>Porównywanie i Synchronizacja folderów</target> + <source>Configuration saved!</source> <target>Konfiguracja zapisana!</target> +<source>FreeFileSync batch</source> +<target>Plik wsadowy FreeFileSync</target> + <source>Never save changes</source> <target>Nigdy nie zapisuj zmian</target> @@ -879,9 +879,6 @@ Uwaga: Nazwy plików muszą być podane jako relatywne względem katalogu bazowe <source>Configuration loaded!</source> <target>Konfiguracja wczytana!</target> -<source>Folder Comparison and Synchronization</source> -<target>Porównywanie i Synchronizacja folderów</target> - <source>Hide files that exist on left side only</source> <target>Ukryj pliki, które istnieją tylko po lewej stronie</target> @@ -1042,6 +1039,9 @@ Uwaga: Nazwy plików muszą być podane jako relatywne względem katalogu bazowe <source>Comparing content...</source> <target>Porównywanie zawartości...</target> +<source>Copy</source> +<target>Kopiuj</target> + <source>Paused</source> <target>Pauza</target> @@ -1114,14 +1114,14 @@ Uwaga: Nazwy plików muszą być podane jako relatywne względem katalogu bazowe <source>- folder part only</source> <target>- tylko część katalogu</target> -<source>- Other side's counterpart to %name</source> -<target>- Odpowiednik %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- Odpowiednik %item_path% po drugiej stronie</target> -<source>- Other side's counterpart to %dir</source> -<target>- Odpowiednik %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- Odpowiednik %item_folder% po drugiej stronie</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Czy chcesz ponownie aktywować ukryte powiadomienia i ostrzeżenia?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Przywrócić ukryte powiadomienia i dialogi?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1146,50 +1146,29 @@ Uwaga: Nazwy plików muszą być podane jako relatywne względem katalogu bazowe <source>Leave as unresolved conflict</source> <target>Zostaw jako nierozwiązany konflikt</target> -<source>Files</source> -<target>Pliki</target> +<source>Replace</source> +<target>Zamień</target> -<source>Percentage</source> -<target>Procentowo</target> +<source>Move files and replace if existing</source> +<target>Przenieś pliki i nadpisz jeżeli już istnieją</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Dołącz znacznik czasu do nazwy każdego pliku</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Katalog</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Plik</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 minuta</pluralform> -<pluralform>%x minuty</pluralform> -<pluralform>%x minut</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>YYYY-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 godzina</pluralform> -<pluralform>%x godziny</pluralform> -<pluralform>%x godzin</pluralform> -</target> +<source>Files</source> +<target>Pliki</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 dzień</pluralform> -<pluralform>%x dni</pluralform> -<pluralform>%x dni</pluralform> -</target> +<source>Percentage</source> +<target>Procentowo</target> <source>Cannot monitor directory %x.</source> <target>Nie można monitorować katalogu %x.</target> @@ -1239,6 +1218,9 @@ Uwaga: Nazwy plików muszą być podane jako relatywne względem katalogu bazowe <source>Cannot copy file %x to %y.</source> <target>Nie można skopiować pliku %x do %y.</target> +<source>Type of item %x is not supported:</source> +<target>Element typu %x nie jest wspierany:</target> + <source>Cannot open directory %x.</source> <target>Nie można otworzyć katalogu %x.</target> @@ -1248,6 +1230,45 @@ Uwaga: Nazwy plików muszą być podane jako relatywne względem katalogu bazowe <source>Detected endless directory recursion.</source> <target>Wykryto nieskończoną pętlę katalogów</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 minuta</pluralform> +<pluralform>%x minuty</pluralform> +<pluralform>%x minut</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 godzina</pluralform> +<pluralform>%x godziny</pluralform> +<pluralform>%x godzin</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 dzień</pluralform> +<pluralform>%x dni</pluralform> +<pluralform>%x dni</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Nie można ustawić uprawnień %x.</target> @@ -1377,6 +1398,9 @@ Uwaga: Nazwy plików muszą być podane jako relatywne względem katalogu bazowe <source>Moving symbolic link %x to %y</source> <target>Przenoszenie dowiązania symbolicznego %x do %y</target> +<source>Removing old versions...</source> +<target>Usuwanie starszych wersji...</target> + <source>Creating file %x</source> <target>Tworzenie pliku %x</target> @@ -1398,6 +1422,9 @@ Uwaga: Nazwy plików muszą być podane jako relatywne względem katalogu bazowe <source>Updating attributes of %x</source> <target>Aktualizowanie atrybutów %x</target> +<source>Target folder %x already existing.</source> +<target>Katalog docelowy %x już istnieje.</target> + <source>Target folder input field must not be empty.</source> <target>Pole katalog docelowy nie może być puste.</target> @@ -1407,11 +1434,8 @@ Uwaga: Nazwy plików muszą być podane jako relatywne względem katalogu bazowe <source>Source folder %x not found.</source> <target>Nie znaleziono katalogu docelowego %x.</target> -<source>Unresolved conflicts existing!</source> -<target>Istnieją nierozwiązane konflikty!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Możesz je zignorować i kontynuować synchronizację.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Te elementy znajdują się w konflikcie, którego nie można rozwiązać. Pliki nie zostaną zsynchronizowane:</target> <source>Significant difference detected:</source> <target>Wykryto znaczące zmiany:</target> @@ -1431,12 +1455,15 @@ Uwaga: Nazwy plików muszą być podane jako relatywne względem katalogu bazowe <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Katalog zostanie zmodyfikowany w związku z synchronizacją wielu katalogów. Zweryfikuj ustawienia synchronizacji.</target> +<source>Left</source> +<target>Lewy</target> + +<source>Right</source> +<target>Prawy</target> + <source>Synchronizing folder pair:</source> <target>Synchronizacja katalgów:</target> -<source>Target folder %x already existing.</source> -<target>Katalog docelowy %x już istnieje.</target> - <source>Generating database...</source> <target>Generowanie bazy danych...</target> diff --git a/BUILD/Languages/portuguese.lng b/BUILD/Languages/portuguese.lng index d825097c..dfc29c43 100644 --- a/BUILD/Languages/portuguese.lng +++ b/BUILD/Languages/portuguese.lng @@ -32,7 +32,7 @@ <target>Abortar pedido: À espera do fim da operação atual...</target> <source>Failure to create time stamp for versioning:</source> -<target></target> +<target>Falha ao criar selo temporal para versões anteriores:</target> <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Sincronização Automatizada</target> @@ -58,8 +58,8 @@ <source>Clear filter settings</source> <target>Limpar opções do filtro</target> -<source>Create a batch job</source> -<target>Criar ficheiro batch</target> +<source>Save as batch job</source> +<target>Guardar como batch</target> <source>Comparison settings</source> <target>Opções de comparação</target> @@ -79,9 +79,6 @@ <source>Global settings</source> <target>Opções</target> -<source>Summary</source> -<target>Sumário</target> - <source>Find</source> <target>Procurar</target> @@ -274,8 +271,8 @@ <source>Select a folder</source> <target>Selecione uma pasta</target> -<source>Delay [seconds]</source> -<target>Atraso [segundos]</target> +<source>Idle time [seconds]</source> +<target>Tempo de espera [segundos]</target> <source>Idle time between last detected change and execution of command</source> <target>Tempo de espera entre a última alteração detetada e a execução do comando</target> @@ -324,38 +321,23 @@ O comando é executado se: <source>A folder input field is empty.</source> <target>Um dos campos de directório para comparar está vazio.</target> -<source>File time and size</source> -<target>Data e tamanho do ficheiro</target> - -<source>File content</source> -<target>Conteúdo do ficheiro</target> - -<source><Automatic></source> -<target><Automático></target> - -<source>Mirror ->></source> -<target>Espelhar ->></target> - -<source>Update -></source> -<target>Actualizar -></target> - -<source>Custom</source> -<target>Personalizado</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync batch</target> - <source>Synchronization aborted!</source> <target>Sincronização abortada!</target> <source>Synchronization completed with errors!</source> <target>Sincronização completa com erros!</target> +<source>Synchronization completed with warnings.</source> +<target>Sincronização completa com avisos.</target> + <source>Nothing to synchronize!</source> <target>Nada a sincronizar!</target> -<source>Synchronization completed successfully!</source> -<target>Sincronização completa com sucesso!</target> +<source>Synchronization completed successfully.</source> +<target>Sincronização completa com sucesso.</target> + +<source>Saving log file %x...</source> +<target>A guardar ficheiro log %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Pressionar "Trocar" para resolver problemas com a interface principal do FreeFileSync.</target> @@ -363,9 +345,6 @@ O comando é executado se: <source>Switching to FreeFileSync main dialog...</source> <target>A trocar para a interface principal do FreeFileSync...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Não é possível ligar a sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Uma nova versão do FreeFileSync está disponível:</target> @@ -378,6 +357,12 @@ O comando é executado se: <source>Information</source> <target>Informação</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Não é possível ligar a sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Não foi possível encontrar online a última versão do FreeFileSync! Quer verificar manualmente?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Deseja que o FreeFileSync procure automaticamente actualizações todas as semanas?</target> @@ -441,27 +426,27 @@ O comando é executado se: <source>Hibernate</source> <target>Hibernar</target> -<source>1. &Compare</source> -<target>1. &Comparar</target> - -<source>2. &Synchronize</source> -<target>2. &Sincronizar</target> - <source>&New</source> <target>&Novo</target> <source>&Save</source> <target>G&uardar</target> +<source>Save as &batch job...</source> +<target>Guardar como &batch...</target> + +<source>1. &Compare</source> +<target>1. &Comparar</target> + +<source>2. &Synchronize</source> +<target>2. &Sincronizar</target> + <source>&Language</source> <target>&Língua</target> <source>&Global settings...</source> <target>&Opções...</target> -<source>&Create batch job...</source> -<target>&Criar um ficheiro batch...</target> - <source>&Export file list...</source> <target>&Exportar lista de ficheiros...</target> @@ -495,17 +480,17 @@ O comando é executado se: <source>Swap sides</source> <target>Trocar lados</target> -<source>Load configuration from file</source> -<target>Carregar configuração do ficheiro</target> +<source>Open</source> +<target>Abrir</target> -<source>Save current configuration to file</source> -<target>Guardar configuração actual para ficheiro</target> +<source>Save</source> +<target>Guardar</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Última configuração utilizada (pressione DEL para remover da lista)</target> -<source>Show excluded items</source> -<target>Mostrar itens excluidos</target> +<source>Hide excluded items</source> +<target>Esconder itens excluídos</target> <source>Show filtered or temporarily excluded files</source> <target>Mostrar ficheiros filtrados ou temporariamente excluidos</target> @@ -543,15 +528,6 @@ O comando é executado se: <source>Help</source> <target>Ajuda</target> -<source>Filter files</source> -<target>Filtrar ficheiros</target> - -<source>Left</source> -<target>Esquerda</target> - -<source>Right</source> -<target>Direita</target> - <source>Error handling</source> <target>Controlador de erros</target> @@ -573,14 +549,14 @@ O comando é executado se: <source>Abort synchronization on first error</source> <target>Abortar sincronização ao primeiro erro</target> -<source>On completion:</source> -<target>Ao concluir:</target> +<source>On completion</source> +<target>Ao terminar</target> <source>Show progress dialog</source> <target>Mostrar diálogo de progresso</target> -<source>Generate log file</source> -<target>Gerar ficheiro log</target> +<source>Save log</source> +<target>Guardar log</target> <source>Select folder to save log files</source> <target>Seleccionar pasta para guardar ficheiros log</target> @@ -591,11 +567,8 @@ O comando é executado se: <source>Limit maximum number of log files</source> <target>Limitar o número máximo de ficheiros log</target> -<source>Batch settings</source> -<target>Opções do batch</target> - -<source>Compare by...</source> -<target>Comparar por...</target> +<source>Select variant</source> +<target>Selecionar variante</target> <source> Files are found equal if @@ -610,6 +583,9 @@ Ficheiros considerados iguais se são iguais </target> +<source>File time and size</source> +<target>Data e tamanho do ficheiro</target> + <source> Files are found equal if - file content @@ -620,24 +596,36 @@ Os ficheiros são considerados iguais se - o conteúdo é o mesmo </target> +<source>File content</source> +<target>Conteúdo do ficheiro</target> + <source>Symbolic Link handling</source> <target>Tratamento de links simbólicos</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Selecione uma variante:</target> +<source><- Two way -></source> +<target><- Duas vias -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Identificar e propagar mudanças em ambos os lados utilizando base de dados. Itens eliminados, renomeados e conflitos são detetados automaticamente.</target> +<source>Mirror ->></source> +<target>Espelhar ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Cópia de segurança do directório à esquerda. O directório da direita é alterado para ficar igual ao da esquerda após sincronização.</target> +<source>Update -></source> +<target>Actualizar -></target> + <source>Copy new or updated files to right folder.</source> <target>Copiar ficheiros novos ou actualizados para a direita</target> +<source>Custom</source> +<target>Personalizado</target> + <source>Configure your own synchronization rules.</source> <target>Configure as suas regras de sincronização.</target> @@ -653,8 +641,8 @@ Os ficheiros são considerados iguais se <source>Recycle Bin</source> <target>Reciclagem</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Utilizar Reciclagem ao apagar ou substituir ficheiros</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Usar Reciclagem para ficheiros eliminados ou substituidos</target> <source>Versioning</source> <target>Manter versões anteriores</target> @@ -662,8 +650,8 @@ Os ficheiros são considerados iguais se <source>Move time-stamped files into specified folder</source> <target>Mover ficheiros datados para a pasta especificada</target> -<source>Limit maximum number of versions per file</source> -<target>Limitar número máximo de versões por ficheiro</target> +<source>Naming convention:</source> +<target>Convenção de nomes:</target> <source>Configuration</source> <target>Configuração</target> @@ -812,6 +800,9 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Overview</source> <target>Vista</target> +<source>Filter files</source> +<target>Filtrar ficheiros</target> + <source>Select view</source> <target>Selecionar vista</target> @@ -863,9 +854,15 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source><Last session></source> <target><Última Sessão></target> +<source>Folder Comparison and Synchronization</source> +<target>Comparação e Sincronização de Pastas</target> + <source>Configuration saved!</source> <target>Configuração guardada!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync batch</target> + <source>Never save changes</source> <target>Nunca guardar alterações</target> @@ -878,9 +875,6 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Configuration loaded!</source> <target>Configuração carregada!</target> -<source>Folder Comparison and Synchronization</source> -<target>Comparação e Sincronização de Pastas</target> - <source>Hide files that exist on left side only</source> <target>Ocultar ficheiros existentes somente à esquerda</target> @@ -1037,6 +1031,9 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Comparing content...</source> <target>A comparar...</target> +<source>Copy</source> +<target>Copiar</target> + <source>Paused</source> <target>Em pausa</target> @@ -1109,14 +1106,14 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>- folder part only</source> <target>- nome da pasta parcial</target> -<source>- Other side's counterpart to %name</source> -<target>- Contrapartida de %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- Contrapartida de %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- Contrapartida de %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- Contrapartida de %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Tornar visíveis diálogos e mensagens de aviso novamente?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Tornar visiveis os diálogos e avisos escondidos novamente?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1139,47 +1136,29 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Leave as unresolved conflict</source> <target>Deixar como conflito</target> -<source>Files</source> -<target>Ficheiros</target> +<source>Replace</source> +<target>Substituir</target> -<source>Percentage</source> -<target>Percentagem</target> +<source>Move files and replace if existing</source> +<target>Mover ficheiros e substituir se existirem</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Juntar selo temporal a cada nome de ficheiro</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Pasta</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Ficheiro</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 min</pluralform> -<pluralform>%x mins</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>AAAA-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 hora</pluralform> -<pluralform>%x horas</pluralform> -</target> +<source>Files</source> +<target>Ficheiros</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 dia</pluralform> -<pluralform>%x dias</pluralform> -</target> +<source>Percentage</source> +<target>Percentagem</target> <source>Cannot monitor directory %x.</source> <target>Não é possível monitorizar o directório %x.</target> @@ -1229,6 +1208,9 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Cannot copy file %x to %y.</source> <target>Não é possível copiar o ficheiro %x para %y.</target> +<source>Type of item %x is not supported:</source> +<target>Tipo de item %x não é suportado:</target> + <source>Cannot open directory %x.</source> <target>Não é possível abrir o directório %x.</target> @@ -1238,6 +1220,42 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Detected endless directory recursion.</source> <target>Recursão infinita detetada no directório</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 min</pluralform> +<pluralform>%x mins</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 hora</pluralform> +<pluralform>%x horas</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 dia</pluralform> +<pluralform>%x dias</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Não é possível definir o privilégio %x.</target> @@ -1368,7 +1386,7 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <target>Mover link simbólico %x para %y</target> <source>Removing old versions...</source> -<target></target> +<target>A remover versões antigas...</target> <source>Creating file %x</source> <target>Criar ficheiro %x</target> @@ -1391,6 +1409,9 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Updating attributes of %x</source> <target>Actualizar atributos de %x</target> +<source>Target folder %x already existing.</source> +<target>Directório de destino %x já existe.</target> + <source>Target folder input field must not be empty.</source> <target>Campo de directório de destino não deve estar vazio.</target> @@ -1400,11 +1421,8 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>Source folder %x not found.</source> <target>Directório %x não encontrado.</target> -<source>Unresolved conflicts existing!</source> -<target>Existem conflitos por resolver!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Pode ignorar os conflitos e continuar a sincronização.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Os seguintes itens têm conflitos não resolvidos, e não serão sincronizados:</target> <source>Significant difference detected:</source> <target>Diferença significativa detectada:</target> @@ -1424,12 +1442,15 @@ Nota: Nome dos ficheiros tem que ser relativo aos diretórios base! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Uma pasta que faz parte de vários pares vai ser modificada. Por favor, reveja os parametros de sincronização.</target> +<source>Left</source> +<target>Esquerda</target> + +<source>Right</source> +<target>Direita</target> + <source>Synchronizing folder pair:</source> <target>Sincronizar o par de pastas:</target> -<source>Target folder %x already existing.</source> -<target>Directório de destino %x já existe.</target> - <source>Generating database...</source> <target>A gerar base de dados...</target> diff --git a/BUILD/Languages/portuguese_br.lng b/BUILD/Languages/portuguese_br.lng index e64cdba5..3182c088 100644 --- a/BUILD/Languages/portuguese_br.lng +++ b/BUILD/Languages/portuguese_br.lng @@ -32,7 +32,7 @@ <target>Cancelar solicitado: Esperando fim da operação...</target> <source>Failure to create time stamp for versioning:</source> -<target></target> +<target>Erro ao criar estampa de tempo para controle de versão:</target> <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Sincronização Automatizada</target> @@ -58,8 +58,8 @@ <source>Clear filter settings</source> <target>Limpar configurações do filtro</target> -<source>Create a batch job</source> -<target>Criar arquivo de lote</target> +<source>Save as batch job</source> +<target>Salvar como tarefa em lote</target> <source>Comparison settings</source> <target>Parâmetros de comparação</target> @@ -79,9 +79,6 @@ <source>Global settings</source> <target>Configurações</target> -<source>Summary</source> -<target>Resumo</target> - <source>Find</source> <target>Localizar</target> @@ -274,8 +271,8 @@ <source>Select a folder</source> <target>Selecionar uma pasta</target> -<source>Delay [seconds]</source> -<target>Atraso [segundos]</target> +<source>Idle time [seconds]</source> +<target>Tempo de espera [segundos]</target> <source>Idle time between last detected change and execution of command</source> <target>Tempo de espera entre última mudança detectada e execução do comando</target> @@ -324,38 +321,23 @@ O comando é disparado se: <source>A folder input field is empty.</source> <target>Um campo de entrada de pasta está vazio.</target> -<source>File time and size</source> -<target>Data e tamanho do arquivo</target> - -<source>File content</source> -<target>Conteúdo do arquivo</target> - -<source><Automatic></source> -<target><Automático></target> - -<source>Mirror ->></source> -<target>Espelhar ->></target> - -<source>Update -></source> -<target>Atualizar -></target> - -<source>Custom</source> -<target>Personalizado</target> - -<source>FreeFileSync batch</source> -<target>Tarefa em lote do FreeFileSync</target> - <source>Synchronization aborted!</source> <target>Sincronização cancelada!</target> <source>Synchronization completed with errors!</source> <target>Sincronização finalizada com erros!</target> +<source>Synchronization completed with warnings.</source> +<target>Sincronização finalizada com avisos.</target> + <source>Nothing to synchronize!</source> <target>Nada para sincronizar!</target> -<source>Synchronization completed successfully!</source> -<target>Sincronização finalizada com sucesso!</target> +<source>Synchronization completed successfully.</source> +<target>Sincronização finalizada com sucesso.</target> + +<source>Saving log file %x...</source> +<target>Salvando arquivo de log %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Pressione "Alterar" para resolver os conflitos na tela principal do FreeFileSync.</target> @@ -363,9 +345,6 @@ O comando é disparado se: <source>Switching to FreeFileSync main dialog...</source> <target>Alterando para a tela principal do FreeFileSync...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Não foi possível conectar a sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Uma nova versão do FreeFileSync está disponível:</target> @@ -378,6 +357,12 @@ O comando é disparado se: <source>Information</source> <target>Informação</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Não foi possível conectar a sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>A versão atual do FreeFileSync não foi encontra on-line! Deseja verificar manualmente?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Deseja que o FreeFileSync procure automaticamente novas versões todas as semanas?</target> @@ -441,27 +426,27 @@ O comando é disparado se: <source>Hibernate</source> <target>Hibernar</target> -<source>1. &Compare</source> -<target>1. C&omparar</target> - -<source>2. &Synchronize</source> -<target>2. S&incronizar</target> - <source>&New</source> <target>&Novo</target> <source>&Save</source> <target>&Salvar</target> +<source>Save as &batch job...</source> +<target>Salvar como &tarefa em lote...</target> + +<source>1. &Compare</source> +<target>1. C&omparar</target> + +<source>2. &Synchronize</source> +<target>2. S&incronizar</target> + <source>&Language</source> <target>&Idioma</target> <source>&Global settings...</source> <target>&Configurações...</target> -<source>&Create batch job...</source> -<target>C&riar um arquivo de lote...</target> - <source>&Export file list...</source> <target>&Exportar lista de arquivos...</target> @@ -495,17 +480,17 @@ O comando é disparado se: <source>Swap sides</source> <target>Inverter lados</target> -<source>Load configuration from file</source> -<target>Carregar configuração do arquivo</target> +<source>Open</source> +<target>Abrir</target> -<source>Save current configuration to file</source> -<target>Salvar configuração atual para arquivo</target> +<source>Save</source> +<target>Salvar</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Últimas configurações usadas (pressione DEL para remover da lista)</target> -<source>Show excluded items</source> -<target>Mostrar itens excluídos</target> +<source>Hide excluded items</source> +<target>Ocultar itens excluídos</target> <source>Show filtered or temporarily excluded files</source> <target>Mostra arquivos que foram filtrados ou excluídos temporariamente</target> @@ -543,15 +528,6 @@ O comando é disparado se: <source>Help</source> <target>Ajuda</target> -<source>Filter files</source> -<target>Filtrar arquivos</target> - -<source>Left</source> -<target>Esquerda</target> - -<source>Right</source> -<target>Direita</target> - <source>Error handling</source> <target>Tratamento de erros</target> @@ -573,14 +549,14 @@ O comando é disparado se: <source>Abort synchronization on first error</source> <target>Cancela sincronização no primeiro erro</target> -<source>On completion:</source> -<target>Ao terminar:</target> +<source>On completion</source> +<target>Ao finalizar</target> <source>Show progress dialog</source> <target>Mostrar indicador de progresso</target> -<source>Generate log file</source> -<target>Gerar arquivo de log</target> +<source>Save log</source> +<target>Salvar log</target> <source>Select folder to save log files</source> <target>Seleciona pasta para salvar arquivos de log</target> @@ -591,11 +567,8 @@ O comando é disparado se: <source>Limit maximum number of log files</source> <target>Limita número máximo de arquivos de log</target> -<source>Batch settings</source> -<target>Configurações da tarefa em lote</target> - -<source>Compare by...</source> -<target>Comparar por...</target> +<source>Select variant</source> +<target>Selecionar modo</target> <source> Files are found equal if @@ -610,6 +583,9 @@ Os arquivos são considerados iguais se são os mesmos </target> +<source>File time and size</source> +<target>Data e tamanho do arquivo</target> + <source> Files are found equal if - file content @@ -621,24 +597,36 @@ Os arquivos são considerados iguais se é o mesmo </target> +<source>File content</source> +<target>Conteúdo do arquivo</target> + <source>Symbolic Link handling</source> <target>Tratamento de Links Simbólicos</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Selecione um modo:</target> +<source><- Two way -></source> +<target><- Dois sentidos -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Identifica e propaga as mudanças em ambos os lados usando um banco de dados. Arquivos apagados, renomeados e conflitantes são detectados automaticamente.</target> +<source>Mirror ->></source> +<target>Espelhar ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Backup espelho da pasta da esquerda. A pasta da direita será modificada para ficar exatamente igual à pasta da esquerda após a sincronização.</target> +<target>Cópia espelho da pasta da esquerda. A pasta da direita será modificada para ficar exatamente igual à pasta da esquerda após a sincronização.</target> + +<source>Update -></source> +<target>Atualizar -></target> <source>Copy new or updated files to right folder.</source> <target>Copia arquivos novos ou atualizados para a pasta da direita</target> +<source>Custom</source> +<target>Personalizado</target> + <source>Configure your own synchronization rules.</source> <target>Configure as suas próprias regras de sincronização.</target> @@ -654,8 +642,8 @@ Os arquivos são considerados iguais se <source>Recycle Bin</source> <target>Lixeira</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Usa a Lixeira quando apagar ou substituir arquivos</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Utilizar Lixeira para arquivos apagados ou sobrescritos</target> <source>Versioning</source> <target>Controle de versões</target> @@ -663,8 +651,8 @@ Os arquivos são considerados iguais se <source>Move time-stamped files into specified folder</source> <target>Move os arquivos com estampa de tempo para uma pasta especificada</target> -<source>Limit maximum number of versions per file</source> -<target>Limita número máximo de versões por arquivo</target> +<source>Naming convention:</source> +<target>Convenção de nomenclatura:</target> <source>Configuration</source> <target>Configuração</target> @@ -724,7 +712,7 @@ Os arquivos são considerados iguais se <target>Apagar em ambos os lados</target> <source>Delete on both sides even if the file is selected on one side only</source> -<target>Apagar em ambos os lados mesmo se o arquivo está selecionado só em um lado</target> +<target>Apaga em ambos os lados mesmo se o arquivo está selecionado só em um lado</target> <source> Only files that match all filter settings will be synchronized. @@ -813,6 +801,9 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Overview</source> <target>Parâmetros</target> +<source>Filter files</source> +<target>Filtrar arquivos</target> + <source>Select view</source> <target>Selecionar visualização</target> @@ -864,9 +855,15 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source><Last session></source> <target><Última sessão></target> +<source>Folder Comparison and Synchronization</source> +<target>Comparação e Sincronização de Pastas</target> + <source>Configuration saved!</source> <target>Configuração salva!</target> +<source>FreeFileSync batch</source> +<target>Tarefa em lote do FreeFileSync</target> + <source>Never save changes</source> <target>Nunca salvar alterações</target> @@ -879,9 +876,6 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Configuration loaded!</source> <target>Configuração carregada!</target> -<source>Folder Comparison and Synchronization</source> -<target>Comparação e Sincronização de Pastas</target> - <source>Hide files that exist on left side only</source> <target>Ocultar arquivos que existem somente à esquerda</target> @@ -1038,6 +1032,9 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Comparing content...</source> <target>Comparando conteúdo...</target> +<source>Copy</source> +<target>Copiar</target> + <source>Paused</source> <target>Pausado</target> @@ -1110,14 +1107,14 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>- folder part only</source> <target>- apenas parte da pasta</target> -<source>- Other side's counterpart to %name</source> -<target>- Correspondente do outro lado a %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- Contrapartida do outro lado para %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- Correspondente do outro lado a %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- Contrapartida do outro lado para %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Fazer com que os diálogos ocultados e mensagens de alerta fiquem visíveis novamente?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Tornar avisar e diálogos ocultados visíveis outra vez?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1140,47 +1137,29 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Leave as unresolved conflict</source> <target>Deixar como conflito não resolvido</target> -<source>Files</source> -<target>Arquivos</target> +<source>Replace</source> +<target>Substituir</target> -<source>Percentage</source> -<target>Percentual</target> +<source>Move files and replace if existing</source> +<target>Move arquivos e substitui se existente</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Atribuir uma estampa de tempo para cada nome de arquivo</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Pasta</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Arquivo</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>%x min</pluralform> -<pluralform>%x mins</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>AAAA-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>%x hora</pluralform> -<pluralform>%x horas</pluralform> -</target> +<source>Files</source> +<target>Arquivos</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>%x dia</pluralform> -<pluralform>%x dias</pluralform> -</target> +<source>Percentage</source> +<target>Percentual</target> <source>Cannot monitor directory %x.</source> <target>Não foi possível monitorar o diretório %x.</target> @@ -1189,7 +1168,7 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <target>Erro de conversão:</target> <source>Cannot delete file %x.</source> -<target>Não foi possível excluir o arquivo %x.</target> +<target>Não foi possível apagar o arquivo %x.</target> <source>The file is locked by another process:</source> <target>O arquivo está bloqueado por outro processo:</target> @@ -1198,7 +1177,7 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <target>Não foi possível mover o arquivo %x para %y.</target> <source>Cannot delete directory %x.</source> -<target>Não foi possível excluir o diretório %x.</target> +<target>Não foi possível apagar o diretório %x.</target> <source>Cannot write file attributes of %x.</source> <target>Não foi possível escrever os atributos de arquivo de %x.</target> @@ -1230,6 +1209,9 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Cannot copy file %x to %y.</source> <target>Não foi possível copiar o arquivo %x para %y.</target> +<source>Type of item %x is not supported:</source> +<target>Tipo de item %x não é suportado:</target> + <source>Cannot open directory %x.</source> <target>Não foi possível abrir o diretório %x.</target> @@ -1239,6 +1221,42 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Detected endless directory recursion.</source> <target>Detectada recursão de diretório infinita.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>%x min</pluralform> +<pluralform>%x min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>%x hora</pluralform> +<pluralform>%x horas</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>%x dia</pluralform> +<pluralform>%x dias</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Não foi possível estabelecer o privilégio %x.</target> @@ -1312,10 +1330,10 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <target>Copiar novo item para a direita</target> <source>Delete left item</source> -<target>Deletar item à esquerda</target> +<target>Apagar item à esquerda</target> <source>Delete right item</source> -<target>Deletar item à direita</target> +<target>Apagar item à direita</target> <source>Move file on left</source> <target>Mover arquivo à esquerda</target> @@ -1369,7 +1387,7 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <target>Movendo link simbólico %x para %y</target> <source>Removing old versions...</source> -<target></target> +<target>Removendo versões antigas...</target> <source>Creating file %x</source> <target>Criando arquivo %x</target> @@ -1392,6 +1410,9 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Updating attributes of %x</source> <target>Atualizando atributos de %x</target> +<source>Target folder %x already existing.</source> +<target>Pasta de destino %x já existe.</target> + <source>Target folder input field must not be empty.</source> <target>Campo de entrada da pasta de destino não pode ficar vazio.</target> @@ -1401,11 +1422,8 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>Source folder %x not found.</source> <target>Pasta de origem %x não foi encontrada.</target> -<source>Unresolved conflicts existing!</source> -<target>Conflitos não resolvidos existentes!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Você pode ignorar os conflitos e continuar a sincronização.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Os seguintes itens possuem conflitos não resolvidos e não serão sincronizados:</target> <source>Significant difference detected:</source> <target>Diferença significativa detectada:</target> @@ -1425,12 +1443,15 @@ Nota: Os nomes dos arquivos devem ser relativos aos diretórios base! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Uma pasta que é parte de múltiplos pares de pasta será modificada. Por favor, revise as configurações de sincronização.</target> +<source>Left</source> +<target>Esquerda</target> + +<source>Right</source> +<target>Direita</target> + <source>Synchronizing folder pair:</source> <target>Sincronizando par de pastas:</target> -<source>Target folder %x already existing.</source> -<target>Pasta de destino %x já existe.</target> - <source>Generating database...</source> <target>Gerando banco de dados...</target> diff --git a/BUILD/Languages/romanian.lng b/BUILD/Languages/romanian.lng index 196d9393..c99a2d55 100644 --- a/BUILD/Languages/romanian.lng +++ b/BUILD/Languages/romanian.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>Abandonare solicitată: Se așteaptă terminarea operației în curs...</target> +<source>Failure to create time stamp for versioning:</source> +<target>Crearea marcajului temporal pentru versionare a eșuat</target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Sincronizare Inteligentă</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Curăță Setările Filtrului</target> -<source>Create a batch job</source> -<target>Creează o Sarcină Set [Batch Job]</target> +<source>Save as batch job</source> +<target>Salvează ca Sarcină Set</target> <source>Comparison settings</source> <target>Setările Comparării</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Setări Globale</target> -<source>Summary</source> -<target>Sumar</target> - <source>Find</source> <target>Găsește</target> @@ -274,8 +274,8 @@ <source>Select a folder</source> <target>Selectează un Dosar</target> -<source>Delay [seconds]</source> -<target>Întîrziere [secunde]</target> +<source>Idle time [seconds]</source> +<target>Timp de inactivitate [secunde]</target> <source>Idle time between last detected change and execution of command</source> <target>Timpul de inactivitate între ultima schimbare detectată și executarea comenzii</target> @@ -324,38 +324,23 @@ Comanda este declanșată dacă: <source>A folder input field is empty.</source> <target>Un cîmp de introducere a dosarului este gol.</target> -<source>File time and size</source> -<target>Timpul și Mărimea Filelor</target> - -<source>File content</source> -<target>Conținutul Filelor</target> - -<source><Automatic></source> -<target><Sincronizare Inteligentă></target> - -<source>Mirror ->></source> -<target>Clonare =>></target> - -<source>Update -></source> -<target>Actualizare =></target> - -<source>Custom</source> -<target>Sincronizare Personalizată</target> - -<source>FreeFileSync batch</source> -<target>Set FreeFileSync</target> - <source>Synchronization aborted!</source> <target>Sincronizare abandonată!</target> <source>Synchronization completed with errors!</source> <target>Sincronizare terminată cu erori!</target> +<source>Synchronization completed with warnings.</source> +<target>Sincronizare realizată, dar cu avertismente.</target> + <source>Nothing to synchronize!</source> <target>Nu e nimic de sincronizat!</target> -<source>Synchronization completed successfully!</source> -<target>Sincronizare terminată cu succes!</target> +<source>Synchronization completed successfully.</source> +<target>Sincronizare realizată cu succes.</target> + +<source>Saving log file %x...</source> +<target>Salvez fila jurnal %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Apasă "Comută" pentru a rezolva problemele din dialogul principal FreeFileSync.</target> @@ -363,9 +348,6 @@ Comanda este declanșată dacă: <source>Switching to FreeFileSync main dialog...</source> <target>Comut la dialogul principal FreeFileSync...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Conectarea la situl sourceforge.net nu poate fi realizată!</target> - <source>A new version of FreeFileSync is available:</source> <target>Este disponibilă o versiune nouă a softului:</target> @@ -378,6 +360,12 @@ Comanda este declanșată dacă: <source>Information</source> <target>Informații</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Conectarea la situl sourceforge.net nu poate fi realizată!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Numărul versiunii curente de FreeFileSync nu a fost găsit pe internet! Vrei să verifici manual?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Vrei ca FreeFileSync să caute automat actualizări în fiecare săptămînă ?</target> @@ -441,27 +429,27 @@ Comanda este declanșată dacă: <source>Hibernate</source> <target>Pune Calculatorul în Hibernare</target> -<source>1. &Compare</source> -<target>1. &Compară</target> - -<source>2. &Synchronize</source> -<target>2. &Sincronizează</target> - <source>&New</source> <target>Configurație &Nouă</target> <source>&Save</source> <target>&Salvează</target> +<source>Save as &batch job...</source> +<target>Salvea&ză ca Sarcină Set...</target> + +<source>1. &Compare</source> +<target>1. &Compară</target> + +<source>2. &Synchronize</source> +<target>2. &Sincronizează</target> + <source>&Language</source> <target>&Limbă</target> <source>&Global settings...</source> <target>&Setări Globale...</target> -<source>&Create batch job...</source> -<target>&Creează o Sarcină Set...</target> - <source>&Export file list...</source> <target>&Exportă Lista de File...</target> @@ -495,17 +483,17 @@ Comanda este declanșată dacă: <source>Swap sides</source> <target>Schimbă compartimentele stîng și drept între ele</target> -<source>Load configuration from file</source> -<target>Deschide configurația dintr-o filă</target> +<source>Open</source> +<target>Deschide</target> -<source>Save current configuration to file</source> -<target>Salvează într-o filă modificările configurației curente</target> +<source>Save</source> +<target>Salvează</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Ultimele configurații utilizate (apasă tasta DEL pentru a înlătura din listă)</target> -<source>Show excluded items</source> -<target>Arată itemurile excluse</target> +<source>Hide excluded items</source> +<target>Ascunde elementele excluse</target> <source>Show filtered or temporarily excluded files</source> <target>Arată filele filtrate sau excluse temporar</target> @@ -543,15 +531,6 @@ Comanda este declanșată dacă: <source>Help</source> <target>Ajutor</target> -<source>Filter files</source> -<target>Filtru</target> - -<source>Left</source> -<target>Stînga</target> - -<source>Right</source> -<target>Dreapta</target> - <source>Error handling</source> <target>Gestionarea Erorilor</target> @@ -568,19 +547,19 @@ Comanda este declanșată dacă: <target>În caz de erori sau avertizări este arătată o fereastră popîc [popup]</target> <source>Exit</source> -<target>Ieși</target> +<target>Ieșire</target> <source>Abort synchronization on first error</source> -<target>Abandonează sincronizarea la prima eroare</target> +<target>Sincronizarea e abandonată la prima eroare</target> -<source>On completion:</source> -<target>La Terminare:</target> +<source>On completion</source> +<target>La Terminare</target> <source>Show progress dialog</source> <target>Arată progresul sincronizării</target> -<source>Generate log file</source> -<target>Generează filă jurnal [log]</target> +<source>Save log</source> +<target>Salvează jurnalul acțiunilor</target> <source>Select folder to save log files</source> <target>Selectează dosarul cu filele jurnal</target> @@ -591,11 +570,8 @@ Comanda este declanșată dacă: <source>Limit maximum number of log files</source> <target>Limitează numărul maxim de file jurnal</target> -<source>Batch settings</source> -<target>Setările Setului</target> - -<source>Compare by...</source> -<target>Compară după:</target> +<source>Select variant</source> +<target>Selectează varianta dorită</target> <source> Files are found equal if @@ -610,6 +586,9 @@ Filele sînt considerate identice dacă sînt aceleași </target> +<source>File time and size</source> +<target>Timpul și Mărimea Filelor</target> + <source> Files are found equal if - file content @@ -621,24 +600,36 @@ Filele sînt considerate identice dacă este același </target> +<source>File content</source> +<target>Conținutul Filelor</target> + <source>Symbolic Link handling</source> <target>Gestionarea Legăturilor Simbolice</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Selectează Varianta de Sincronizare:</target> +<source><- Two way -></source> +<target><= Bidirecțională =></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Identificare și propagare a modificărilor din ambele părți folosind o bază de date. Ștergerile, renumirile și conflictele sînt detectate automat.</target> +<source>Mirror ->></source> +<target>Clonare =>></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Conservare [backup] în oglindă a dosarului stîng. Dosarul drept e modificat pentru a fi identic după sincronizare cu cel stîng.</target> +<source>Update -></source> +<target>Actualizare =></target> + <source>Copy new or updated files to right folder.</source> <target>Copiere în dosarul din dreapta a filelor actualizate sau noi.</target> +<source>Custom</source> +<target>Sincronizare Personalizată</target> + <source>Configure your own synchronization rules.</source> <target>Reguli de sincronizare definite de utilizator pentru fiecare situație.</target> @@ -654,7 +645,7 @@ este același <source>Recycle Bin</source> <target>Reciclator</target> -<source>Use Recycle Bin when deleting or overwriting files</source> +<source>Use Recycle Bin for deleted and overwritten files</source> <target>Filele șterse sau suprascrise sînt puse în Reciclator [Recycle Bin], de unde pot fi recuperate la nevoie</target> <source>Versioning</source> @@ -663,8 +654,8 @@ este același <source>Move time-stamped files into specified folder</source> <target>Filelor le este adăugat un marcaj de timp și apoi sînt mutate în dosarul specificat</target> -<source>Limit maximum number of versions per file</source> -<target>Limitează numărul maxim de versiuni per filă</target> +<source>Naming convention:</source> +<target>Convenție de numire:</target> <source>Configuration</source> <target>Configurație</target> @@ -706,7 +697,7 @@ este același <target>Multe mulțumiri pentru localizare:</target> <source>Feedback and suggestions are welcome</source> -<target>Opiniile și sugestiile despre program sînt binevenite</target> +<target>Opiniile și sugestiile despre program sînt binevenite.</target> <source>Homepage</source> <target>Situl Softului</target> @@ -813,6 +804,9 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Overview</source> <target>Panoramă</target> +<source>Filter files</source> +<target>Filtru</target> + <source>Select view</source> <target>Selectează Vederea</target> @@ -864,9 +858,15 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source><Last session></source> <target><Ultima Sesiune></target> +<source>Folder Comparison and Synchronization</source> +<target>Comparare și Sincronizare de Dosare</target> + <source>Configuration saved!</source> <target>Configurație salvată !</target> +<source>FreeFileSync batch</source> +<target>Set FreeFileSync</target> + <source>Never save changes</source> <target>Nu salva niciodată modificările</target> @@ -879,9 +879,6 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Configuration loaded!</source> <target>Configurație deschisă !</target> -<source>Folder Comparison and Synchronization</source> -<target>Comparare și Sincronizare de Dosare</target> - <source>Hide files that exist on left side only</source> <target>Ascunde filele care există doar în stînga</target> @@ -1042,6 +1039,9 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Comparing content...</source> <target>Compar conținutul...</target> +<source>Copy</source> +<target>Copiază</target> + <source>Paused</source> <target>Sincronizare Pauzată</target> @@ -1114,13 +1114,13 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>- folder part only</source> <target>- doar pentru partea dosarului</target> -<source>- Other side's counterpart to %name</source> -<target>- corespondentul din partea opusă al lui %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- corespondentul din partea opusă al lui %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- corespondentul din partea opusă al lui %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- corespondentul din partea opusă al lui %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> +<source>Make hidden warnings and dialogs visible again?</source> <target>Vrei ca dialogurile ascunse și mesajele de avertizare să fie vizibile din nou?</target> <source> @@ -1146,50 +1146,29 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Leave as unresolved conflict</source> <target>Lasă ca Conflict Nerezolvat</target> -<source>Files</source> -<target>File</target> +<source>Replace</source> +<target>Înlocuiește</target> -<source>Percentage</source> -<target>Procent</target> +<source>Move files and replace if existing</source> +<target>Mută filele și înlocuiește-le pe cele existente</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Adaugă un marcaj temporal la numele fiecărei file</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Dosar</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Filă</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -<pluralform>%x de min</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>AAAA-LL-ZZ hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 oră</pluralform> -<pluralform>%x ore</pluralform> -<pluralform>%x de ore</pluralform> -</target> +<source>Files</source> +<target>File</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 zi</pluralform> -<pluralform>%x zile</pluralform> -<pluralform>%x de zile</pluralform> -</target> +<source>Percentage</source> +<target>Procent</target> <source>Cannot monitor directory %x.</source> <target>Nu pot monitoriza dosarul %x.</target> @@ -1239,6 +1218,9 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Cannot copy file %x to %y.</source> <target>Nu pot copia fila %x în %y.</target> +<source>Type of item %x is not supported:</source> +<target>Tipul de element %x nu e suportat:</target> + <source>Cannot open directory %x.</source> <target>Nu pot deschide dosarul %x.</target> @@ -1248,6 +1230,45 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Detected endless directory recursion.</source> <target>A fost detectată o recursivitate infinită a dosarului.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +<pluralform>%x de min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 oră</pluralform> +<pluralform>%x ore</pluralform> +<pluralform>%x de ore</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 zi</pluralform> +<pluralform>%x zile</pluralform> +<pluralform>%x de zile</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Nu pot seta privilegiul %x.</target> @@ -1297,7 +1318,7 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <target>Filele %x au dată identică, dar mărime diferită!</target> <source>Items differ in attributes only</source> -<target>Itemurile diferă doar prin atributele lor</target> +<target>Elementele diferă doar prin atributele lor</target> <source>Symbolic links %x have the same date but a different target.</source> <target>Legăturile simbolice %x au aceeași dată, dar ținte diferite.</target> @@ -1377,6 +1398,9 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Moving symbolic link %x to %y</source> <target>Mut legătura simbolică %x în %y</target> +<source>Removing old versions...</source> +<target>Înlătur versiunile vechi...</target> + <source>Creating file %x</source> <target>Creez fila %x</target> @@ -1398,6 +1422,9 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Updating attributes of %x</source> <target>Actualizez atributele lui %x</target> +<source>Target folder %x already existing.</source> +<target>Dosarul țintă %x există deja.</target> + <source>Target folder input field must not be empty.</source> <target>Cîmpul de introducere a dosarului țintă nu trebuie să fie gol.</target> @@ -1407,11 +1434,8 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>Source folder %x not found.</source> <target>Dosarul sursă %x nu a fost găsit.</target> -<source>Unresolved conflicts existing!</source> -<target>Există conflicte nerezolvate!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Poți ignora conflictele pentru a continua cu sincronizarea.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Elementele următoare au conflicte nerezolvate și nu vor fi sincronizate:</target> <source>Significant difference detected:</source> <target>Diferență semnificativă detectată:</target> @@ -1431,12 +1455,15 @@ Notă: Numele filelor trebuie să fie relative la dosarele bază (rădăcină)! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Va fi modificat un dosar care face parte din mai multe perechi de dosare! Reverifică setările de sincronizare!</target> +<source>Left</source> +<target>Stînga</target> + +<source>Right</source> +<target>Dreapta</target> + <source>Synchronizing folder pair:</source> <target>Sincronizez perechea de dosare:</target> -<source>Target folder %x already existing.</source> -<target>Dosarul țintă %x există deja.</target> - <source>Generating database...</source> <target>Generez baza de date...</target> diff --git a/BUILD/Languages/russian.lng b/BUILD/Languages/russian.lng index 59740f22..0ffed7e4 100644 --- a/BUILD/Languages/russian.lng +++ b/BUILD/Languages/russian.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>Запрос отмены: Ожидайте, пока текущая операция завершится...</target> +<source>Failure to create time stamp for versioning:</source> +<target>Неспособность создать отметку времени для архивации файлов:</target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Автоматическая синхронизация</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Очистить настройки фильтра</target> -<source>Create a batch job</source> -<target>Создать пакетное задание</target> +<source>Save as batch job</source> +<target>Сохранить как пакетное задание</target> <source>Comparison settings</source> <target>Настройки сравнения</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Глобальные настройки</target> -<source>Summary</source> -<target>Сводка</target> - <source>Find</source> <target>Найти</target> @@ -274,8 +274,8 @@ <source>Select a folder</source> <target>Выбрать папку</target> -<source>Delay [seconds]</source> -<target>Задержка [в секундах]</target> +<source>Idle time [seconds]</source> +<target>Время задержки [секунды]</target> <source>Idle time between last detected change and execution of command</source> <target>Время задержки между последним обнаруженным изменением и выполнением командной строки в секундах</target> @@ -324,38 +324,23 @@ The command is triggered if: <source>A folder input field is empty.</source> <target>Поле ввода папки пустое.</target> -<source>File time and size</source> -<target>Дата и размер файла</target> - -<source>File content</source> -<target>Содержимое файла</target> - -<source><Automatic></source> -<target><Автоматический></target> - -<source>Mirror ->></source> -<target>Зеркало ->></target> - -<source>Update -></source> -<target>Обновить -></target> - -<source>Custom</source> -<target>Выборочно</target> - -<source>FreeFileSync batch</source> -<target>Пакетное задание FreeFileSync</target> - <source>Synchronization aborted!</source> <target>Синхронизация отменена!</target> <source>Synchronization completed with errors!</source> -<target>Синхронизация закончена с ошибками!</target> +<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>Synchronization completed successfully.</source> +<target>Синхронизация завершена успешно.</target> + +<source>Saving log file %x...</source> +<target>Сохранение лог-файла %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Нажмите "Переключить" для продолжения работы в главном окне FreeFileSync.</target> @@ -363,9 +348,6 @@ The command is triggered if: <source>Switching to FreeFileSync main dialog...</source> <target>Переключение на главное окно FreeFileSync...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Невозможно соединиться с sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Доступна новая версия FreeFileSync:</target> @@ -378,6 +360,12 @@ The command is triggered if: <source>Information</source> <target>Информация</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Невозможно соединиться с sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Текущая версия FreeFileSync не была найдена онлайн! Вы хотите проверить вручную?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Вы хотите, чтобы FreeFileSync автоматически проверял наличие обновлений каждую неделю?</target> @@ -441,27 +429,27 @@ The command is triggered if: <source>Hibernate</source> <target>Гибернация</target> -<source>1. &Compare</source> -<target>1. С&равнить</target> - -<source>2. &Synchronize</source> -<target>2. С&инхронизировать</target> - <source>&New</source> <target>&Новая</target> <source>&Save</source> <target>&Сохранить</target> +<source>Save as &batch job...</source> +<target>Сохранить как &пакетное задание</target> + +<source>1. &Compare</source> +<target>1. С&равнить</target> + +<source>2. &Synchronize</source> +<target>2. С&инхронизировать</target> + <source>&Language</source> <target>&Язык</target> <source>&Global settings...</source> <target>&Глобальные настройки...</target> -<source>&Create batch job...</source> -<target>&Создать пакетное задание...</target> - <source>&Export file list...</source> <target>&Экспортировать список файлов...</target> @@ -495,11 +483,11 @@ The command is triggered if: <source>Swap sides</source> <target>Поменять направление</target> -<source>Load configuration from file</source> -<target>Загрузить настройки синхронизации из файла</target> +<source>Open</source> +<target>Открыть</target> -<source>Save current configuration to file</source> -<target>Сохранить текущие настройки синхронизации в файл</target> +<source>Save</source> +<target>Сохранить</target> <source>Last used configurations (press DEL to remove from list)</source> <target> @@ -507,8 +495,8 @@ The command is triggered if: (нажмите DEL для удаления из списка) </target> -<source>Show excluded items</source> -<target>Показать исключенные элементы</target> +<source>Hide excluded items</source> +<target>Скрыть исключенные элементы</target> <source>Show filtered or temporarily excluded files</source> <target>Показать отфильтрованные или временно исключенные файлы</target> @@ -546,15 +534,6 @@ The command is triggered if: <source>Help</source> <target>Помощь</target> -<source>Filter files</source> -<target>Фильтр</target> - -<source>Left</source> -<target>Слева</target> - -<source>Right</source> -<target>Справа</target> - <source>Error handling</source> <target>Обработка ошибок</target> @@ -568,7 +547,7 @@ The command is triggered if: <target>Всплывающие окна</target> <source>Show pop-up on errors or warnings</source> -<target>Показывать всплывающие окна при ошибках и замечаниях</target> +<target>Показывать всплывающие окна при ошибках и предупреждениях</target> <source>Exit</source> <target>Выход</target> @@ -576,14 +555,14 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>Отменить синхронизацию при первой ошибке</target> -<source>On completion:</source> -<target>По окончании работы</target> +<source>On completion</source> +<target>По завершению</target> <source>Show progress dialog</source> <target>Показать окно прогресса</target> -<source>Generate log file</source> -<target>Создавать лог-файлы</target> +<source>Save log</source> +<target>Сохранить лог-файл</target> <source>Select folder to save log files</source> <target>Выберите папку для сохранения лог-файлов</target> @@ -594,11 +573,8 @@ The command is triggered if: <source>Limit maximum number of log files</source> <target>Ограничить максимальное количество лог-файлов</target> -<source>Batch settings</source> -<target>Настройки пакетного задания</target> - -<source>Compare by...</source> -<target>Критерии сравнения</target> +<source>Select variant</source> +<target>Выберите вариант</target> <source> Files are found equal if @@ -612,6 +588,9 @@ are the same - размер файла </target> +<source>File time and size</source> +<target>Дата и размер файла</target> + <source> Files are found equal if - file content @@ -619,24 +598,36 @@ is the same </source> <target>Файлы считаются равными, если содержание файлов одинаковое</target> +<source>File content</source> +<target>Содержимое файла</target> + <source>Symbolic Link handling</source> <target>Обращение к символьной ссылке</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Варианты синхронизации</target> +<source><- Two way -></source> +<target><= В обе стороны =></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Выявление и распространение изменений на обе стороны, используя базу данных. Удаленные, переименованные и конфликтные файлы определяются автоматически.</target> +<source>Mirror ->></source> +<target>Зеркало =>></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Зеркальная (резервная) копия левой части. В результате синхронизации правая папка будет изменена до полного соответствия левой.</target> +<source>Update -></source> +<target>Обновить =></target> + <source>Copy new or updated files to right folder.</source> <target>Копировать новые или обновлять файлы на правой стороне.</target> +<source>Custom</source> +<target>Выборочно</target> + <source>Configure your own synchronization rules.</source> <target>Настроить свои собственные правила синхронизации.</target> @@ -644,25 +635,25 @@ is the same <target>Настройки удаления</target> <source>Permanent</source> -<target>Безвозвратно</target> +<target>Удалить безвозвратно</target> <source>Delete or overwrite files permanently</source> <target>Удалить или перезаписать файлы, не помещая в "Корзину"</target> <source>Recycle Bin</source> -<target>В "Корзину"</target> +<target>Переместить в "Корзину"</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Использовать "Корзину" при удалении или перезаписи файлов</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Использовать "Корзину" для удаленных и перезаписанных файлов</target> <source>Versioning</source> -<target>Переместить старые версии файлов в заданную папку</target> +<target>Архивировать</target> <source>Move time-stamped files into specified folder</source> <target>Переместить файлы с отметками времени в указанную папку</target> -<source>Limit maximum number of versions per file</source> -<target>Ограничить максимальное количество версий на файл</target> +<source>Naming convention:</source> +<target>Условие:</target> <source>Configuration</source> <target>Настройки</target> @@ -811,6 +802,9 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>Главная</target> +<source>Filter files</source> +<target>Фильтр</target> + <source>Select view</source> <target>Вид списка файлов</target> @@ -862,9 +856,15 @@ Note: File names must be relative to base directories! <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>Never save changes</source> <target>Никогда не сохранять изменения</target> @@ -877,9 +877,6 @@ Note: File names must be relative to base directories! <source>Configuration loaded!</source> <target>Настройки синхронизации загружены!</target> -<source>Folder Comparison and Synchronization</source> -<target>Сравнение и синхронизация</target> - <source>Hide files that exist on left side only</source> <target>Скрыть файлы, существующие только слева</target> @@ -1040,6 +1037,9 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>Сравнение содержания...</target> +<source>Copy</source> +<target>Копировать</target> + <source>Paused</source> <target>Пауза</target> @@ -1115,14 +1115,14 @@ Note: File names must be relative to base directories! <source>- folder part only</source> <target>- часть пути папки</target> -<source>- Other side's counterpart to %name</source> -<target>- аналогичный файл с другой стороны</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- аналог %item_path% с другой стороны</target> -<source>- Other side's counterpart to %dir</source> -<target>- аналогичная папка с другой стороны</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- аналог %item_folder% с другой стороны</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Сделать скрытые диалоги и предупреждения видимыми вновь?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Сделать скрытые предупреждения и диалоги видимыми снова?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1147,50 +1147,29 @@ Note: File names must be relative to base directories! <source>Leave as unresolved conflict</source> <target>Оставить как нерешенный конфликт</target> -<source>Files</source> -<target>Файлы</target> +<source>Replace</source> +<target>Переместить</target> -<source>Percentage</source> -<target>Проценты</target> +<source>Move files and replace if existing</source> +<target>Переместить файлы и заменить, если существуют</target> -<source>%x TB</source> -<target>%x ТБ</target> +<source>Append a timestamp to each file name</source> +<target>Добавить отметку времени для каждого имени файла</target> -<source>%x PB</source> -<target>%x ПБ</target> +<source>Folder</source> +<target>Папка</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Файл</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>%x минута</pluralform> -<pluralform>%x минуты</pluralform> -<pluralform>%x минут</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>ГГГГ-ММ-ДД ччммсс</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>%x час</pluralform> -<pluralform>%x часа</pluralform> -<pluralform>%x часов</pluralform> -</target> +<source>Files</source> +<target>Файлы</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>%x день</pluralform> -<pluralform>%x дня</pluralform> -<pluralform>%x дней</pluralform> -</target> +<source>Percentage</source> +<target>Проценты</target> <source>Cannot monitor directory %x.</source> <target>Не удается наблюдать папку %x.</target> @@ -1240,6 +1219,9 @@ Note: File names must be relative to base directories! <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 directory %x.</source> <target>Невозможно открыть папку %x.</target> @@ -1249,6 +1231,45 @@ Note: File names must be relative to base directories! <source>Detected endless directory recursion.</source> <target>Обнаружена бесконечная рекурсия папок.</target> +<source>%x TB</source> +<target>%x ТБ</target> + +<source>%x PB</source> +<target>%x ПБ</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>%x минута</pluralform> +<pluralform>%x минуты</pluralform> +<pluralform>%x минут</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>%x час</pluralform> +<pluralform>%x часа</pluralform> +<pluralform>%x часов</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>%x день</pluralform> +<pluralform>%x дня</pluralform> +<pluralform>%x дней</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Не удается установить привелегии %x.</target> @@ -1381,6 +1402,9 @@ Note: File names must be relative to base directories! <source>Moving symbolic link %x to %y</source> <target>Перемещение символьной ссылки %x в %y</target> +<source>Removing old versions...</source> +<target>Удаление старых версий...</target> + <source>Creating file %x</source> <target>Создание файла %x</target> @@ -1402,20 +1426,20 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>Обновление атрибутов %x</target> +<source>Target folder %x already existing.</source> +<target>Целевая папка %x уже существует.</target> + <source>Target folder input field must not be empty.</source> <target>Поле ввода целевой папки не должно быть пустым.</target> <source>Folder input field for versioning must not be empty.</source> -<target>Поле ввода папки для старых версий файлов не должно быть пустым.</target> +<target>Поле ввода папки для архивации файлов не должно быть пустым.</target> <source>Source folder %x not found.</source> <target>Исходная папка %x не найдена.</target> -<source>Unresolved conflicts existing!</source> -<target>Существуют нерешенные конфликты</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Вы можете проигнорировать их и продолжить синхронизацию.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Следующие элементы имеют неурегулированные конфликты и не будут синхронизированы:</target> <source>Significant difference detected:</source> <target>Обнаружено существенное различие:</target> @@ -1435,12 +1459,15 @@ Note: File names must be relative to base directories! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Папка, входящая в несколько пар папок, будет изменена. Пожалуйста, проверьте настройки синхронизации.</target> +<source>Left</source> +<target>Слева</target> + +<source>Right</source> +<target>Справа</target> + <source>Synchronizing folder pair:</source> <target>Синхронизация пары папок:</target> -<source>Target folder %x already existing.</source> -<target>Целевая папка %x уже существует.</target> - <source>Generating database...</source> <target>Создание базы данных...</target> diff --git a/BUILD/Languages/scottish_gaelic.lng b/BUILD/Languages/scottish_gaelic.lng index 24551a41..3e49bc3b 100644 --- a/BUILD/Languages/scottish_gaelic.lng +++ b/BUILD/Languages/scottish_gaelic.lng @@ -26,11 +26,14 @@ <target>Fosgail leis an aplacaid bhunaiteach</target> <source>Browse directory</source> -<target>Rùraich an t-eòlaire</target> +<target>Rùraich am pasgan</target> <source>Abort requested: Waiting for current operation to finish...</source> <target>Tha thu airson sgur dheth: A' feitheamh gus an crìochnaich an gnìomh làithreach...</target> +<source>Failure to create time stamp for versioning:</source> +<target>Cha b' urrainn dhuinn stampa-ama a chruthachadh airson versioning:</target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Sioncronachadh fèin-obrachail</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Falamhaich roghainnean na criathraige</target> -<source>Create a batch job</source> -<target>Cruthaich batch job</target> +<source>Save as batch job</source> +<target>Sàbhail mar obair baidse</target> <source>Comparison settings</source> <target>Roghainnean a' choimeasaidh</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Na roghainnean uile-choitcheann</target> -<source>Summary</source> -<target>Gearr-chunntas</target> - <source>Find</source> <target>Lorg</target> @@ -160,10 +160,10 @@ <target>Chan urrainn dhuinn greim fhaighinn air fiosrachadh a' phròiseis.</target> <source>Waiting while directory is locked (%x)...</source> -<target>A' feitheamh fhad 's a tha an t-eòlaire glaiste (%x)...</target> +<target>A' feitheamh fhad 's a tha am pasgan glaiste (%x)...</target> <source>Cannot set directory lock %x.</source> -<target>Cha ghabh glas an eòlaire %x a shuidheachadh.</target> +<target>Cha ghabh glas a' phasgain %x a shuidheachadh.</target> <source> <pluralform>1 sec</pluralform> @@ -277,8 +277,8 @@ <source>Select a folder</source> <target>Tagh pasgan</target> -<source>Delay [seconds]</source> -<target>Dàil [diogan]</target> +<source>Idle time [seconds]</source> +<target>Ùine 'na thàmh [seconds]</target> <source>Idle time between last detected change and execution of command</source> <target>An tàmh eadar an t-atharrachadh mu dheireadh agus gnìomhachadh na h-àithne</target> @@ -322,43 +322,28 @@ Thèid an loidhne-àithne a chur gu dol: <target>A' cumail sùil...</target> <source>Waiting for missing directories...</source> -<target>A' feitheamh ris na h-eòlairean a tha a dhìth...</target> +<target>A' feitheamh ris na pasgain a tha a dhìth...</target> <source>A folder input field is empty.</source> <target>Tha co-dhiù aon raon pasgain ann a tha falamh.</target> -<source>File time and size</source> -<target>Ceann-là is meud</target> - -<source>File content</source> -<target>Susbaint an fhaidhle</target> - -<source><Automatic></source> -<target><Fèin-obrachail></target> - -<source>Mirror ->></source> -<target>Sgàthanaich ->></target> - -<source>Update -></source> -<target>Ùraich -></target> - -<source>Custom</source> -<target>Gnàthaichte</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync batch</target> - <source>Synchronization aborted!</source> <target>Sguireadh dhen t-sioncronachadh!</target> <source>Synchronization completed with errors!</source> <target>Chaidh an sioncronachadh a choileanadh ach bha mearachdan ann!</target> +<source>Synchronization completed with warnings.</source> +<target>Chaidh a shioncronachadh ach bha rabhaidhean ann.</target> + <source>Nothing to synchronize!</source> <target>Chan eil dad ri shioncronachadh!</target> -<source>Synchronization completed successfully!</source> -<target>Chaidh an sioncronachadh a choileanadh!</target> +<source>Synchronization completed successfully.</source> +<target>Chaidh a shioncronachadh.</target> + +<source>Saving log file %x...</source> +<target>A' sàbhaladh faidhle an loga %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Briog air "Gearr leum" gus duilgheadasan a rèiteachadh sa phrìomh-chòmhradh aig FreeFileSync.</target> @@ -366,9 +351,6 @@ Thèid an loidhne-àithne a chur gu dol: <source>Switching to FreeFileSync main dialog...</source> <target>A' gearradh leum gu prìomh-chòmhradh FreeFileSyncs...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Cha b' urrainn dhuinn ceangal a dhèanamh ri Sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Tha tionndadh ùr de FreeFileSync ann:</target> @@ -381,6 +363,12 @@ Thèid an loidhne-àithne a chur gu dol: <source>Information</source> <target>Fiosrachadh</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Cha b' urrainn dhuinn ceangal a dhèanamh ri Sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Cha do lorg sinn àireamh an tionndaidh làithrich aig FreeFileSync air loidhne! A bheil thu airson a lorg a làimh?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>A bheil thu airson 's gun doir FreeFileSync sùil gach seachdain ach a bheil ùrachadh ann?</target> @@ -439,32 +427,32 @@ Thèid an loidhne-àithne a chur gu dol: <target>Clàraich a-mach</target> <source>Shut down</source> -<target>Dùin sìos</target> +<target>Dùin sìos an siostam</target> <source>Hibernate</source> <target>Geamhraich</target> -<source>1. &Compare</source> -<target>1. &Dèan coimeas</target> - -<source>2. &Synchronize</source> -<target>2. &Dèan sioncronachadh</target> - <source>&New</source> <target>Ù&r</target> <source>&Save</source> <target>&Sàbhail</target> +<source>Save as &batch job...</source> +<target>Sàbhail mar obair &baidse...</target> + +<source>1. &Compare</source> +<target>1. &Dèan coimeas</target> + +<source>2. &Synchronize</source> +<target>2. &Dèan sioncronachadh</target> + <source>&Language</source> <target>&Cànan</target> <source>&Global settings...</source> <target>&Na roghainnean uile-choitcheann...</target> -<source>&Create batch job...</source> -<target>Cr&uthaich batch job...</target> - <source>&Export file list...</source> <target>Às-p&hortaich liosta nam faidhle...</target> @@ -498,17 +486,17 @@ Thèid an loidhne-àithne a chur gu dol: <source>Swap sides</source> <target>Cuir an dà thaobh an àite a chèile</target> -<source>Load configuration from file</source> -<target>Luchdaich an rèiteachadh on fhaidhle</target> +<source>Open</source> +<target>Fosgail</target> -<source>Save current configuration to file</source> -<target>Sàbhail an rèiteachadh làithreach ann am faidhle</target> +<source>Save</source> +<target>Sàbhail</target> <source>Last used configurations (press DEL to remove from list)</source> <target>An rèiteachadh mu dheireadh a chaidh a chleachdadh (brùth DEL gus rudan a thoirt air falbh on liosta)</target> -<source>Show excluded items</source> -<target>Seall an fheadhainn a tha 'ga dhùnadh a-mach</target> +<source>Hide excluded items</source> +<target>Falaich nithean a chaidh a dhùnadh às</target> <source>Show filtered or temporarily excluded files</source> <target>Seall faidhlichean a tha 'gan dùnadh a-mach no air an criathradh a-mach an-dràsta fhèin</target> @@ -538,7 +526,7 @@ Thèid an loidhne-àithne a chur gu dol: <target>An ùine a dh'fhalbh:</target> <source>Batch job</source> -<target>Batch job</target> +<target>Obair baidse</target> <source>Create a batch file to automate synchronization. Double-click this file or schedule in your system's task planner: FreeFileSync.exe <job name>.ffs_batch</source> <target>Cruthaich faidhle batch airson sioncronachadh fèin-obrachail. Dèan briogadh dùbailte air an fhaidhle seo no cuir e air sgeideal an t-siostaim agad: FreeFileSync.exe <Jobname>.ffs_batch.</target> @@ -546,15 +534,6 @@ Thèid an loidhne-àithne a chur gu dol: <source>Help</source> <target>Cobhair</target> -<source>Filter files</source> -<target>Criathraich na faidhlichean</target> - -<source>Left</source> -<target>Clì</target> - -<source>Right</source> -<target>Deas</target> - <source>Error handling</source> <target>Làimhseachadh mhearachdan</target> @@ -576,14 +555,14 @@ Thèid an loidhne-àithne a chur gu dol: <source>Abort synchronization on first error</source> <target>Sguir dhen t-sioncronachadh nuair a thachras a' chiad mhearachd</target> -<source>On completion:</source> -<target>Nuair a bhios e deiseil:</target> +<source>On completion</source> +<target>Nuair a bhios e deiseil</target> <source>Show progress dialog</source> <target>Seall còmhradh an adhartais</target> -<source>Generate log file</source> -<target>Gin faidhle an loga</target> +<source>Save log</source> +<target>Sàbhail an loga</target> <source>Select folder to save log files</source> <target>Tagh pasgan far an dèid faidhlichean an loga a shàbhaladh</target> @@ -594,11 +573,8 @@ Thèid an loidhne-àithne a chur gu dol: <source>Limit maximum number of log files</source> <target>Cuingich an àireamh as motha de dh'fhaidhlichean an loga</target> -<source>Batch settings</source> -<target>Roghainnean a' batch</target> - -<source>Compare by...</source> -<target>Dèan coimeas a-rèir...</target> +<source>Select variant</source> +<target>Tagh fear</target> <source> Files are found equal if @@ -613,6 +589,9 @@ Bidh dà fhaidhle co-ionnann 'nar beachd-sa co-ionnann </target> +<source>File time and size</source> +<target>Ceann-là is meud</target> + <source> Files are found equal if - file content @@ -623,24 +602,36 @@ Bidh dà fhaidhle co-ionnann 'nar beachd-sa - susbaint an dà fhaidhle co-ionnann </target> +<source>File content</source> +<target>Susbaint an fhaidhle</target> + <source>Symbolic Link handling</source> <target>Làimhseachadh nan symbolic links</target> <source>OK</source> <target>Ceart ma-thà</target> -<source>Select variant:</source> -<target>Tagh seòrsa:</target> +<source><- Two way -></source> +<target><- An dà chomhair -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Lorg is cuir an sàs atharraichean air an dà thaobh le stòr-dàta. Mothaichear do rudan a chaidh sguabadh às, a chaidh ainmean ùra a thoirt orra no còmhstrithean gu fèin-obrachail.</target> +<source>Mirror ->></source> +<target>Sgàthanaich ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Dèan lethbhreac-glèidhidh 's tu a' sgàthanadh a' phasgain air an taobh chlì. Thèid am pasgan air an taobh deas a chur air gleus ach am bi e gu tur co-ionnann ris a' phasgan air an taobh chlì as dèidh dha sioncronachadh.</target> +<source>Update -></source> +<target>Ùraich -></target> + <source>Copy new or updated files to right folder.</source> <target>Cuir lethbhreac de dh'fhaidhlichean a tha ùr no ùraichte dhan phasgan air an taobh deas.</target> +<source>Custom</source> +<target>Gnàthaichte</target> + <source>Configure your own synchronization rules.</source> <target>Sònraich riaghailtean sioncronachaidh thu fhèin.</target> @@ -656,8 +647,8 @@ Bidh dà fhaidhle co-ionnann 'nar beachd-sa <source>Recycle Bin</source> <target>Am biona ath-chuairteachaidh</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Cleachd am biona ath-chuairteachaidh nuair a thèid faidhlichean a sguabadh às no ma thèid sgrìobhadh thairis orra</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Cuir na chaidh a sguabadh as no sgrìobhadh thairis air sa bhiona ath-chuairteachaidh</target> <source>Versioning</source> <target>Versioning</target> @@ -665,8 +656,8 @@ Bidh dà fhaidhle co-ionnann 'nar beachd-sa <source>Move time-stamped files into specified folder</source> <target>Gluais faidhlichean air a bheil stampa ama do phasgain shònraichte</target> -<source>Limit maximum number of versions per file</source> -<target>Cuingich an àireamh as motha de thionndaidhean airson gach faidhle</target> +<source>Naming convention:</source> +<target>Gnàthas nan ainmean:</target> <source>Configuration</source> <target>Rèiteachadh</target> @@ -734,7 +725,7 @@ Note: File names must be relative to base directories! </source> <target> Cha dèid ach na faidhlichean a fhreagras ri gach roghainn na criathraige a shioncronachadh. -An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairean aca! +An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-phasgain aca! </target> <source>Include</source> @@ -815,6 +806,9 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <source>Overview</source> <target>Foir-shealladh</target> +<source>Filter files</source> +<target>Criathraich na faidhlichean</target> + <source>Select view</source> <target>Tagh sealladh</target> @@ -866,9 +860,15 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <source><Last session></source> <target><An seisean mu dheireadh></target> +<source>Folder Comparison and Synchronization</source> +<target>Coimeas eadar na pasgain is sioncronachadh</target> + <source>Configuration saved!</source> <target>Chaidh an rèiteachadh a shàbhaladh!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync batch</target> + <source>Never save changes</source> <target>Na sàbhail atharraichean idir</target> @@ -881,9 +881,6 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <source>Configuration loaded!</source> <target>Chaidh an rèiteachadh a luchdadh!</target> -<source>Folder Comparison and Synchronization</source> -<target>Coimeas eadar na pasgain is sioncronachadh</target> - <source>Hide files that exist on left side only</source> <target>Na falaich ach faidhlichean a tha air an taobh chlì a-mhàin</target> @@ -996,10 +993,10 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <pluralform>%x directories</pluralform> </source> <target> -<pluralform>%x eòlaire</pluralform> -<pluralform>%x eòlaire</pluralform> -<pluralform>%x eòlairean</pluralform> -<pluralform>%x eòlaire</pluralform> +<pluralform>%x phasgan</pluralform> +<pluralform>%x phasgan</pluralform> +<pluralform>%x pasgain</pluralform> +<pluralform>%x pasgan</pluralform> </target> <source> @@ -1048,6 +1045,9 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <source>Comparing content...</source> <target>A' dèanamh coimeas eadar an cuid susbaint...</target> +<source>Copy</source> +<target>Dèan lethbhreac</target> + <source>Paused</source> <target>'Na stad</target> @@ -1120,14 +1120,14 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <source>- folder part only</source> <target>- cuid a' phasgain a-mhàin</target> -<source>- Other side's counterpart to %name</source> -<target>- seise %s an taoibh eile</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- Seise %item_folder% aig a' choimpiutair eile</target> -<source>- Other side's counterpart to %dir</source> -<target>- seise %dir an taoibh eile</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- Seise %item_folder% aig a' choimpiutair eile</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>A bheil thu airson na còmhraidhean is rabhaidhean falaichte fhaicinn a-rithist?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>A bheil thus airson na rabhaidhean 's còmraidhean falaichte fhaicinn a-rithist?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1154,53 +1154,29 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <source>Leave as unresolved conflict</source> <target>Fàg mar còmhstri gun rèiteachadh</target> -<source>Files</source> -<target>Faidhlichean</target> +<source>Replace</source> +<target>Cuir 'na àite</target> -<source>Percentage</source> -<target>Ceudad</target> +<source>Move files and replace if existing</source> +<target>Gluais na faidhlichean 's cuir iad an àite na feadhainn làithreach ma tha gin ann</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Cuir stampa-ama ris ainm gach faidhle</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Pasgan</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Faidhle</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>%x mhionaid</pluralform> -<pluralform>%x mhionaid</pluralform> -<pluralform>%x mionaidean</pluralform> -<pluralform>%x mionaid</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>BBBB-MM-LL uummdd</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>%x uair a thìde</pluralform> -<pluralform>%x uair a thìde</pluralform> -<pluralform>%x uairean a thìde</pluralform> -<pluralform>%x uair a thìde</pluralform> -</target> +<source>Files</source> +<target>Faidhlichean</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>%x latha</pluralform> -<pluralform>%x latha</pluralform> -<pluralform>%x làithean</pluralform> -<pluralform>%x latha</pluralform> -</target> +<source>Percentage</source> +<target>Ceudad</target> <source>Cannot monitor directory %x.</source> <target>Chan urrainn dhuinn sùil a chumail air %x.</target> @@ -1218,7 +1194,7 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <target>Cha ghabh am faidhle %x a ghluasad dha %y.</target> <source>Cannot delete directory %x.</source> -<target>Cha ghabh an t-eòlaire %x a sguabadh às.</target> +<target>Cha ghabh am pasgan %x a sguabadh às.</target> <source>Cannot write file attributes of %x.</source> <target>Chan urrainn dhuinn buadhan an fhaidhle %x a sgrìobhadh.</target> @@ -1242,7 +1218,7 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <target>Cha ghabh ceadan %x a sgrìobhadh.</target> <source>Cannot create directory %x.</source> -<target>Cha ghabh an t-eòlaire %x a chruthachadh.</target> +<target>Cha ghabh am pasgan %x a chruthachadh.</target> <source>Cannot copy symbolic link %x to %y.</source> <target>Chan ghabh lethbhreac dhen symbolic link %x a chur gu %y.</target> @@ -1250,14 +1226,59 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <source>Cannot copy file %x to %y.</source> <target>Cha ghabh lethbhreac an fhaidhle %x a chur gu %y.</target> +<source>Type of item %x is not supported:</source> +<target>Chan eil taic ri nì dhen t-seòrsa %x:</target> + <source>Cannot open directory %x.</source> -<target>Cha ghabh an t-eòlaire %x fhosgladh.</target> +<target>Cha ghabh am pasgan %x fhosgladh.</target> <source>Cannot enumerate directory %x.</source> -<target>Cha ghabh an t-eòlaire %x àireamhachadh.</target> +<target>Cha ghabh am pasgan %x àireamhachadh.</target> <source>Detected endless directory recursion.</source> -<target>Mhothaich sinn dha ath-chùrsadh eòlaire gun chrìoch.</target> +<target>Mhothaich sinn dha ath-chùrsadh phasgan gun chrìoch.</target> + +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>%x mhionaid</pluralform> +<pluralform>%x mhionaid</pluralform> +<pluralform>%x mionaidean</pluralform> +<pluralform>%x mionaid</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>%x uair a thìde</pluralform> +<pluralform>%x uair a thìde</pluralform> +<pluralform>%x uairean a thìde</pluralform> +<pluralform>%x uair a thìde</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>%x latha</pluralform> +<pluralform>%x latha</pluralform> +<pluralform>%x làithean</pluralform> +<pluralform>%x latha</pluralform> +</target> <source>Cannot set privilege %x.</source> <target>Cha ghabh a' phribhleid %x a shuidheachadh.</target> @@ -1290,7 +1311,7 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <target>Chan urrainn dhuinn am pasgan %x a lorg.</target> <source>Directories are dependent! Be careful when setting up synchronization rules:</source> -<target>Tha eòlairean an eisimeil a chèile! Bi faiceallach nuair a shuidhicheas tu na riaghailtean sioncronachaidh:</target> +<target>Tha na pasgain an eisimeil a chèile! Bi faiceallach nuair a shuidhicheas tu na riaghailtean sioncronachaidh:</target> <source>Start comparison</source> <target>Dèan coimeas</target> @@ -1388,6 +1409,9 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <source>Moving symbolic link %x to %y</source> <target>A' gluasad an symbolic link %x gu %y</target> +<source>Removing old versions...</source> +<target>A' toirt air falbh nan seann tionndaidhean...</target> + <source>Creating file %x</source> <target>A' cruthachadh an fhaidhle %x</target> @@ -1409,6 +1433,9 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <source>Updating attributes of %x</source> <target>Ag ùrachadh buadhan %x</target> +<source>Target folder %x already existing.</source> +<target>Tha am pasgan-uidhe %x ann mu thràth.</target> + <source>Target folder input field must not be empty.</source> <target>Chan fhaod raon a' phasgain a bhith falamh.</target> @@ -1418,11 +1445,8 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <source>Source folder %x not found.</source> <target>Cha deach am pasgan tùsail %x a lorg.</target> -<source>Unresolved conflicts existing!</source> -<target>Tha còmhstrithean gun rèiteachadh ann!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>'S urrainn dhut na còmhstrithean a leigeil seachad is leantainn air an t-sioncronachadh.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Tha còmstrithean aig na nithean a leanas fhathast is cha dèid an sioncronachadh:</target> <source>Significant difference detected:</source> <target>Chaidh diofar mòr a lorg:</target> @@ -1442,12 +1466,15 @@ An aire: Feumaidh ainmean nam faidhlichean a bhi dàimheach ris na bun-eòlairea <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Thèid pasgan atharrachadh a tha 'na phàirt de dh'iomadh paidhir de phasgain. Nach doir thu sùil air roghainnean an t-sioncronachaidh?</target> +<source>Left</source> +<target>Clì</target> + +<source>Right</source> +<target>Deas</target> + <source>Synchronizing folder pair:</source> <target>A' sioncronachadh paidhir nam pasgan:</target> -<source>Target folder %x already existing.</source> -<target>Tha am pasgan-uidhe %x ann mu thràth.</target> - <source>Generating database...</source> <target>A' gintinn an stòir-dhàta...</target> diff --git a/BUILD/Languages/slovenian.lng b/BUILD/Languages/slovenian.lng index e831aeeb..3abe7273 100644 --- a/BUILD/Languages/slovenian.lng +++ b/BUILD/Languages/slovenian.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>Zahtevana je bila prekinitev: čakam, da se zaključi trenutna operacija...</target> +<source>Failure to create time stamp for versioning:</source> +<target>Napaka pri ustvarjanju časovne oznake pri ustvarjanju različic:</target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Avtomatizirana sinhronizacija</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Počisti nastavitve filtra</target> -<source>Create a batch job</source> -<target>Ustvari paketno opravilo</target> +<source>Save as batch job</source> +<target>Shrani kot paketno opravilo</target> <source>Comparison settings</source> <target>Nastavitve primerjanja</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Globalne nastavitve</target> -<source>Summary</source> -<target>Povzetek</target> - <source>Find</source> <target>Najdi</target> @@ -277,8 +277,8 @@ <source>Select a folder</source> <target>Izberite mapo</target> -<source>Delay [seconds]</source> -<target>Zakasnitev [sekunde]</target> +<source>Idle time [seconds]</source> +<target>Čas nedejavnosti [sekunde]</target> <source>Idle time between last detected change and execution of command</source> <target>Čas nedejavnosti med zadnjo zaznano spremembo in izvršitvijo ukaza</target> @@ -327,38 +327,23 @@ Ukaz se sproži če: <source>A folder input field is empty.</source> <target>Vnosno polje za mapo je prazno.</target> -<source>File time and size</source> -<target>Čas in velikost datoteke</target> - -<source>File content</source> -<target>Vsebini datoteke</target> - -<source><Automatic></source> -<target><Samodejno></target> - -<source>Mirror ->></source> -<target>Zrcalno ->></target> - -<source>Update -></source> -<target>Posodobi -></target> - -<source>Custom</source> -<target>Po meri</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync paket</target> - <source>Synchronization aborted!</source> <target>Sinhronizacija prekinjena!</target> <source>Synchronization completed with errors!</source> <target>Sinhronizacija se je končala z napakami!</target> +<source>Synchronization completed with warnings.</source> +<target>Sinhronizacija se je končala z opozorili.</target> + <source>Nothing to synchronize!</source> <target>Nič za sinhronizirati!</target> -<source>Synchronization completed successfully!</source> -<target>Sinhronizacija uspešno zaključena!</target> +<source>Synchronization completed successfully.</source> +<target>Sinhronizacija se je uspešno končala.</target> + +<source>Saving log file %x...</source> +<target>Shranjujem datoteko beleženja %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Pritisnite "Preklopi", da razrešite vprašanja v glavnem pogovornem oknu FreeFileSync.</target> @@ -366,9 +351,6 @@ Ukaz se sproži če: <source>Switching to FreeFileSync main dialog...</source> <target>Preklapljam na FreeFileSync glavno pogovorno okno...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Ne morem se povezati na sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Nova različica FreeFileSync je na voljo:</target> @@ -381,6 +363,12 @@ Ukaz se sproži če: <source>Information</source> <target>Informacije</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Ne morem se povezati na sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Trenutno različico FreeFileSync ni moč najti na spletu! Ali želite ročno preveriti?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Ali želite, da FreeFileSync samodejno preverja za posodobitve vsak teden?</target> @@ -444,27 +432,27 @@ Ukaz se sproži če: <source>Hibernate</source> <target>Hibernacija</target> -<source>1. &Compare</source> -<target>1. &Primerjaj</target> - -<source>2. &Synchronize</source> -<target>2. &Sinhroniziraj</target> - <source>&New</source> <target>&Novo</target> <source>&Save</source> <target>&Shrani</target> +<source>Save as &batch job...</source> +<target>Shrani kot paketno op&ravilo...</target> + +<source>1. &Compare</source> +<target>1. &Primerjaj</target> + +<source>2. &Synchronize</source> +<target>2. &Sinhroniziraj</target> + <source>&Language</source> <target>&Jezik</target> <source>&Global settings...</source> <target>&Globalne nastavitve...</target> -<source>&Create batch job...</source> -<target>&Ustvari paketno opravilo...</target> - <source>&Export file list...</source> <target>&Izvozi seznam datotek...</target> @@ -498,17 +486,17 @@ Ukaz se sproži če: <source>Swap sides</source> <target>Zamenjaj strani</target> -<source>Load configuration from file</source> -<target>Naloži konfiguracijo iz datoteke</target> +<source>Open</source> +<target>Odpri</target> -<source>Save current configuration to file</source> -<target>Shrani trenutno konfiguracijo v datoteko</target> +<source>Save</source> +<target>Shrani</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Zadnje uporabljene konfiguracije (pritisite DEL za odstranitev s seznama)</target> -<source>Show excluded items</source> -<target>Pokaži izključene elemente</target> +<source>Hide excluded items</source> +<target>Skrij izključene predmete</target> <source>Show filtered or temporarily excluded files</source> <target>Pokaži filtrirane ali začasno izključene datoteke</target> @@ -546,15 +534,6 @@ Ukaz se sproži če: <source>Help</source> <target>Pomoč</target> -<source>Filter files</source> -<target>Filtriraj datoteke</target> - -<source>Left</source> -<target>Levo</target> - -<source>Right</source> -<target>Desno</target> - <source>Error handling</source> <target>Napaka pri obravnavanju</target> @@ -576,14 +555,14 @@ Ukaz se sproži če: <source>Abort synchronization on first error</source> <target>Prekini sinhronizacijo ob prvi napaki</target> -<source>On completion:</source> -<target>Ob zaključku:</target> +<source>On completion</source> +<target>Ob zaključku</target> <source>Show progress dialog</source> <target>Prikazuj pogovorno okno z napredkom</target> -<source>Generate log file</source> -<target>Ustvari datoteko beleženja</target> +<source>Save log</source> +<target>Shrani beleženje</target> <source>Select folder to save log files</source> <target>Izberite mapo za shranjevanje datotek beleženja</target> @@ -594,11 +573,8 @@ Ukaz se sproži če: <source>Limit maximum number of log files</source> <target>Omeji maksimalno število datotek beleženja</target> -<source>Batch settings</source> -<target>Paketne nastavitve</target> - -<source>Compare by...</source> -<target>Primerjaj po...</target> +<source>Select variant</source> +<target>Izberite varianto</target> <source> Files are found equal if @@ -613,6 +589,9 @@ Datoteki sta enaki, če sta enaka </target> +<source>File time and size</source> +<target>Čas in velikost datoteke</target> + <source> Files are found equal if - file content @@ -624,24 +603,36 @@ Datoteki sta enaki, če enaka </target> +<source>File content</source> +<target>Vsebini datoteke</target> + <source>Symbolic Link handling</source> <target>Rokovanje s simboličnimi povezavami</target> <source>OK</source> <target>V redu</target> -<source>Select variant:</source> -<target>Izberite varianto:</target> +<source><- Two way -></source> +<target><- Obojesmerno -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Identificiraj in promoviraj spremembe na obeh straneh z uporabo podatkovne baze. Izbrisi, preimenovanja in spori so samodejno zaznani.</target> +<source>Mirror ->></source> +<target>Zrcalno ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Zrcalna varnostna kopija leve mape. Desna mapa bo spremenjena, da se bo natančno ujemala z levo mapo po sinhronizaciji.</target> +<source>Update -></source> +<target>Posodobi -></target> + <source>Copy new or updated files to right folder.</source> <target>Kopiraj nove ali posodobljene datoteke v desno mapo.</target> +<source>Custom</source> +<target>Po meri</target> + <source>Configure your own synchronization rules.</source> <target>Konfigurirajte vaša lastna sinhronizacijska pravila.</target> @@ -657,8 +648,8 @@ enaka <source>Recycle Bin</source> <target>Koš</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Uporabi Koš pri brisanju ali prepisovanju datotek</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Uporabi Koš za izbrisane in prepisane datoteke</target> <source>Versioning</source> <target>Ustvarjanje različič</target> @@ -666,8 +657,8 @@ enaka <source>Move time-stamped files into specified folder</source> <target>Premakni časovno-označene datoteke v določeno mapo</target> -<source>Limit maximum number of versions per file</source> -<target>Omejitev maksimalnega števila različic na datoteko</target> +<source>Naming convention:</source> +<target>Konvencija poimenovanja:</target> <source>Configuration</source> <target>Konfiguracija</target> @@ -816,6 +807,9 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Overview</source> <target>Pregled</target> +<source>Filter files</source> +<target>Filtriraj datoteke</target> + <source>Select view</source> <target>Izberite pogled</target> @@ -867,9 +861,15 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source><Last session></source> <target><Zadnja seja></target> +<source>Folder Comparison and Synchronization</source> +<target>Primerjava in sinhronizacija imenika</target> + <source>Configuration saved!</source> <target>Konfiguracija shranjena!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync paket</target> + <source>Never save changes</source> <target>Nikoli ne shrani sprememb</target> @@ -882,9 +882,6 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Configuration loaded!</source> <target>Konfiguracija naložena!</target> -<source>Folder Comparison and Synchronization</source> -<target>Primerjava in sinhronizacija imenika</target> - <source>Hide files that exist on left side only</source> <target>Skrij datoteke, ki obstajajo samo na levi strani</target> @@ -1049,6 +1046,9 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Comparing content...</source> <target>Primerjam vsebino...</target> +<source>Copy</source> +<target>Kopiraj</target> + <source>Paused</source> <target>Na premoru</target> @@ -1121,14 +1121,14 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>- folder part only</source> <target>- samo del glede mape</target> -<source>- Other side's counterpart to %name</source> -<target>- Duplikat z druge strani od %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- Na drugi strani nasprotno v %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- Duplikat z druge strani od %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- Na drugi strani nasprotno v %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Ponovno prikažem skrite pogovore in sporočila z opozorili?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Ponovno prikažem vsa skrita obvestila in pogovore?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1155,53 +1155,29 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Leave as unresolved conflict</source> <target>Pusti kot nerešeni spor</target> -<source>Files</source> -<target>Datoteke</target> +<source>Replace</source> +<target>Zamenjaj</target> -<source>Percentage</source> -<target>Odstotek</target> +<source>Move files and replace if existing</source> +<target>Premakne datoteke in jih zamenja, če obstajajo</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Dodaj časovno oznako k vsakemu imenu datoteke</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Mapa</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Datoteka</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>%x min</pluralform> -<pluralform>%x min</pluralform> -<pluralform>%x min</pluralform> -<pluralform>%x min</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>LLLL-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>%x ura</pluralform> -<pluralform>%x uri</pluralform> -<pluralform>%x ure</pluralform> -<pluralform>%x ur</pluralform> -</target> +<source>Files</source> +<target>Datoteke</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>%x dan</pluralform> -<pluralform>%x dni</pluralform> -<pluralform>%x dni</pluralform> -<pluralform>%x dni</pluralform> -</target> +<source>Percentage</source> +<target>Odstotek</target> <source>Cannot monitor directory %x.</source> <target>Ne morem nadzorovati imenika %x.</target> @@ -1251,6 +1227,9 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Cannot copy file %x to %y.</source> <target>Ne morem kopirati datoteke %x v %y.</target> +<source>Type of item %x is not supported:</source> +<target>Predmet tipa %x ni podprt:</target> + <source>Cannot open directory %x.</source> <target>Ne morem odpreti imenika %x.</target> @@ -1260,6 +1239,48 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Detected endless directory recursion.</source> <target>Zaznana neskončna imeniška rekurzija</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>%x min</pluralform> +<pluralform>%x min</pluralform> +<pluralform>%x min</pluralform> +<pluralform>%x min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>%x ura</pluralform> +<pluralform>%x uri</pluralform> +<pluralform>%x ure</pluralform> +<pluralform>%x ur</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>%x dan</pluralform> +<pluralform>%x dni</pluralform> +<pluralform>%x dni</pluralform> +<pluralform>%x dni</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Ne morem nastaviti privilegija %x.</target> @@ -1389,6 +1410,9 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Moving symbolic link %x to %y</source> <target>Premikam simbolično povezavo %x v %y</target> +<source>Removing old versions...</source> +<target>Odstranjujem stare različice...</target> + <source>Creating file %x</source> <target>Ustvarjam datoteko %x</target> @@ -1410,6 +1434,9 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Updating attributes of %x</source> <target>Posodabljam atribute od %x</target> +<source>Target folder %x already existing.</source> +<target>Ciljna mapa %x že obstaja.</target> + <source>Target folder input field must not be empty.</source> <target>Vnosno polje za ciljno mapo ne sme biti prazno.</target> @@ -1419,11 +1446,8 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>Source folder %x not found.</source> <target>Izvorna mapa %x se ne najde.</target> -<source>Unresolved conflicts existing!</source> -<target>Obstajajo nerešeni spori!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Lahko ignorirate spore in nadaljujete s sinhronizacijo.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Naslednji objekti imajo nerešene konflikte in ne bodo sinhronizirani:</target> <source>Significant difference detected:</source> <target>Zaznana je pomembna razlika:</target> @@ -1443,12 +1467,15 @@ Opomba: Imena datoteka morajo biti relativna osnovnim imenikom! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Spremenjena bo mapa, ki je del večkratnih parov map. Prosim preglejte nastavitve sinhronizacije.</target> +<source>Left</source> +<target>Levo</target> + +<source>Right</source> +<target>Desno</target> + <source>Synchronizing folder pair:</source> <target>Sinhroniziram par map:</target> -<source>Target folder %x already existing.</source> -<target>Ciljna mapa %x že obstaja.</target> - <source>Generating database...</source> <target>Ustvarjam podatkovno bazo...</target> diff --git a/BUILD/Languages/spanish.lng b/BUILD/Languages/spanish.lng index 7d310860..7de02d01 100644 --- a/BUILD/Languages/spanish.lng +++ b/BUILD/Languages/spanish.lng @@ -32,7 +32,7 @@ <target>Solicitud de aborto: Esperando a que la operación actual finalice...</target> <source>Failure to create time stamp for versioning:</source> -<target></target> +<target>Fallo al crear fecha y hora para el versionado:</target> <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Sincronización Automática</target> @@ -58,8 +58,8 @@ <source>Clear filter settings</source> <target>Limpiar opciones del filtrado</target> -<source>Create a batch job</source> -<target>Crear una tarea por lotes</target> +<source>Save as batch job</source> +<target>Salvar como tarea batch</target> <source>Comparison settings</source> <target>Opciones de comparación</target> @@ -79,9 +79,6 @@ <source>Global settings</source> <target>Opciones globales</target> -<source>Summary</source> -<target>Resumen</target> - <source>Find</source> <target>Buscar</target> @@ -274,8 +271,8 @@ <source>Select a folder</source> <target>Seleccione una carpeta</target> -<source>Delay [seconds]</source> -<target>Retraso [segundos]</target> +<source>Idle time [seconds]</source> +<target>Tiempo de espera [segundos]</target> <source>Idle time between last detected change and execution of command</source> <target>Tiempo ocioso entre el último cambio detectado y la ejecución del comando</target> @@ -324,38 +321,23 @@ El comando es disparado si:: <source>A folder input field is empty.</source> <target>Un campo de entrada de la carpeta está vacío.</target> -<source>File time and size</source> -<target>Fecha y tamaño del archivo</target> - -<source>File content</source> -<target>Contenido del archivo</target> - -<source><Automatic></source> -<target><Automático></target> - -<source>Mirror ->></source> -<target>Espejo ->></target> - -<source>Update -></source> -<target>Actualizar -></target> - -<source>Custom</source> -<target>Personalizado</target> - -<source>FreeFileSync batch</source> -<target>Batch de FreeFileSync</target> - <source>Synchronization aborted!</source> <target>¡Sincronización abortada!</target> <source>Synchronization completed with errors!</source> <target>¡Sincronización completada con errores!</target> +<source>Synchronization completed with warnings.</source> +<target>Sincronización completada con avisos.</target> + <source>Nothing to synchronize!</source> <target>¡Nada que sincronizar!</target> -<source>Synchronization completed successfully!</source> -<target>¡Sincronización completada con éxito!</target> +<source>Synchronization completed successfully.</source> +<target>Sincronización completada satisfactoriamente.</target> + +<source>Saving log file %x...</source> +<target>Guardando registro %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Presione "Cambiar" para resolver los problemas en el diálogo principal de FreeFileSync.</target> @@ -363,9 +345,6 @@ El comando es disparado si:: <source>Switching to FreeFileSync main dialog...</source> <target>Cambiando al diálogo principal de FreeFileSync...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>¡Incapaz de conectar con sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Una nueva versión de FreeFileSync está disponible:</target> @@ -378,6 +357,12 @@ El comando es disparado si:: <source>Information</source> <target>Información</target> +<source>Unable to connect to sourceforge.net!</source> +<target>¡Incapaz de conectar con sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>El numero de versión de FreeFileSync no se encontro en linea! ¿Desea comprobarlo manualmente?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>¿Quiere que FreeFileSync detecte automáticamente actualizaciones cada semana?</target> @@ -441,27 +426,27 @@ El comando es disparado si:: <source>Hibernate</source> <target>Hibernar</target> -<source>1. &Compare</source> -<target>1. &Comparar</target> - -<source>2. &Synchronize</source> -<target>2. &Sincronizar</target> - <source>&New</source> <target>&Nuevo</target> <source>&Save</source> <target>&Guardar</target> +<source>Save as &batch job...</source> +<target>Guardar como trabajo &batch ...</target> + +<source>1. &Compare</source> +<target>1. &Comparar</target> + +<source>2. &Synchronize</source> +<target>2. &Sincronizar</target> + <source>&Language</source> <target>&Idioma</target> <source>&Global settings...</source> <target>&Opciones globales...</target> -<source>&Create batch job...</source> -<target>&Crear tarea por lotes...</target> - <source>&Export file list...</source> <target>&Exportar lista de archivos...</target> @@ -495,17 +480,17 @@ El comando es disparado si:: <source>Swap sides</source> <target>Intercambiar lados</target> -<source>Load configuration from file</source> -<target>Cargar configuración desde archivo</target> +<source>Open</source> +<target>Abrir</target> -<source>Save current configuration to file</source> -<target>Guardar configuración actual en un archivo</target> +<source>Save</source> +<target>Guardar</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Últimas configuraciones usadas (Pulsar DEL para quitar de la lista)</target> -<source>Show excluded items</source> -<target>Mostrar elementos excluidos</target> +<source>Hide excluded items</source> +<target>Ocultar elementos excluidos</target> <source>Show filtered or temporarily excluded files</source> <target>Mostrar archivos excluidos temporalmente o filtrados</target> @@ -543,15 +528,6 @@ El comando es disparado si:: <source>Help</source> <target>Ayuda</target> -<source>Filter files</source> -<target>Filtrar archivos</target> - -<source>Left</source> -<target>Izquierda</target> - -<source>Right</source> -<target>Derecha</target> - <source>Error handling</source> <target>Gestión de errores</target> @@ -573,14 +549,14 @@ El comando es disparado si:: <source>Abort synchronization on first error</source> <target>Abortar sincronización al primer error</target> -<source>On completion:</source> -<target>Al completarse:</target> +<source>On completion</source> +<target>Al completar</target> <source>Show progress dialog</source> <target>Mostrar diálogo de progreso</target> -<source>Generate log file</source> -<target>Generar archivo de registro</target> +<source>Save log</source> +<target>Guardar registro</target> <source>Select folder to save log files</source> <target>Seleccionar una carpeta para salvar archivos de registro</target> @@ -591,11 +567,8 @@ El comando es disparado si:: <source>Limit maximum number of log files</source> <target>Limitar el número máximo de archivos de registro</target> -<source>Batch settings</source> -<target>Opciones de lotes</target> - -<source>Compare by...</source> -<target>Comparar por...</target> +<source>Select variant</source> +<target>Seleccionar variante</target> <source> Files are found equal if @@ -610,6 +583,9 @@ Los archivos serán considerados iguales si son iguales </target> +<source>File time and size</source> +<target>Fecha y tamaño del archivo</target> + <source> Files are found equal if - file content @@ -621,24 +597,36 @@ Los archivos serán considerados iguales si es el mismo </target> +<source>File content</source> +<target>Contenido del archivo</target> + <source>Symbolic Link handling</source> <target>Gestión de enlaces simbólicos</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Seleccione un tipo:</target> +<source><- Two way -></source> +<target><- Dos formas -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Identificar y propagar cambios en ambos lados usando una base de datos. Borrados, renombraciones y conflictos son detectados automáticamente.</target> +<source>Mirror ->></source> +<target>Espejo ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Copia de seguridad en espejo de la carpeta izquierda. La carpeta derecha es modificada exactamente como la carpeta izquierda después de la sincronización.</target> +<source>Update -></source> +<target>Actualizar -></target> + <source>Copy new or updated files to right folder.</source> <target>Copiar archivos nuevos o actualizados a la carpeta de la derecha.</target> +<source>Custom</source> +<target>Personalizado</target> + <source>Configure your own synchronization rules.</source> <target>Configuración de sus propias reglas de sincronización.</target> @@ -654,8 +642,8 @@ es el mismo <source>Recycle Bin</source> <target>Papelera de reciclaje</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Utilitzar Papelera de Reciclaje al eliminar o sobreescribir archivos</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Utilizar la papelera de reciclaje para archivos eliminados y sobreescritos</target> <source>Versioning</source> <target>Control de versiones</target> @@ -663,8 +651,8 @@ es el mismo <source>Move time-stamped files into specified folder</source> <target>Mover archivos marcados a la carpeta especificada</target> -<source>Limit maximum number of versions per file</source> -<target>Limitar el número máximo de versiones por archivo</target> +<source>Naming convention:</source> +<target>Convención de nomenclatura:</target> <source>Configuration</source> <target>Configuración</target> @@ -813,6 +801,9 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Overview</source> <target>Visión global</target> +<source>Filter files</source> +<target>Filtrar archivos</target> + <source>Select view</source> <target>Seleccione vista</target> @@ -864,9 +855,15 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source><Last session></source> <target><Última sesión></target> +<source>Folder Comparison and Synchronization</source> +<target>Comparación y Sincronización de Carpetas</target> + <source>Configuration saved!</source> <target>¡Configuración guardada!</target> +<source>FreeFileSync batch</source> +<target>Batch de FreeFileSync</target> + <source>Never save changes</source> <target>Nunca guardar cambios</target> @@ -879,9 +876,6 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Configuration loaded!</source> <target>¡Configuración cargada!</target> -<source>Folder Comparison and Synchronization</source> -<target>Comparación y Sincronización de Carpetas</target> - <source>Hide files that exist on left side only</source> <target>Ocultar archivos que existen sólo en el lado izquierdo</target> @@ -1038,6 +1032,9 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Comparing content...</source> <target>Comparando contenido...</target> +<source>Copy</source> +<target>Copiar</target> + <source>Paused</source> <target>Pausado</target> @@ -1110,14 +1107,14 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>- folder part only</source> <target>- sólo parte de la carpeta</target> -<source>- Other side's counterpart to %name</source> -<target>- El otro lado equivale a %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- El otro lado de %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- El otro lado equivale a %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- El otro lado de %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Hacer visibles diálogos y mensajes de advertencia?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>¿Hacer visibles de nuevo los mensajes de alerta y diálogo?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1140,47 +1137,29 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Leave as unresolved conflict</source> <target>Dejar como conflicto sin resolver</target> -<source>Files</source> -<target>Archivos</target> +<source>Replace</source> +<target>Reemplazar</target> -<source>Percentage</source> -<target>Porcentaje</target> +<source>Move files and replace if existing</source> +<target>Mover archivos y reemplazar si ya existen</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Incluir fecha y hora a cada nombre de archivo</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Carpeta</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Archivo</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 minuto</pluralform> -<pluralform>%x minutos</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>YYYY-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 hora</pluralform> -<pluralform>%x horas</pluralform> -</target> +<source>Files</source> +<target>Archivos</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 día</pluralform> -<pluralform>%x días</pluralform> -</target> +<source>Percentage</source> +<target>Porcentaje</target> <source>Cannot monitor directory %x.</source> <target>No se puede monitorizar el directorio %x.</target> @@ -1230,6 +1209,9 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Cannot copy file %x to %y.</source> <target>No se puede copiar el archivo %x a %y.</target> +<source>Type of item %x is not supported:</source> +<target>El tipo de objeto %x no esta soportado:</target> + <source>Cannot open directory %x.</source> <target>No se puede abrir el directorio %x.</target> @@ -1239,6 +1221,42 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Detected endless directory recursion.</source> <target>Detectada recursividad de directorios sin fin.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 minuto</pluralform> +<pluralform>%x minutos</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 hora</pluralform> +<pluralform>%x horas</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 día</pluralform> +<pluralform>%x días</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>No se puede asignar el privilegio %x.</target> @@ -1369,7 +1387,7 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <target>Mover enlace simbólico de %x a %y</target> <source>Removing old versions...</source> -<target></target> +<target>Eliminando versiones antiguas...</target> <source>Creating file %x</source> <target>Creando archivo %x</target> @@ -1392,6 +1410,9 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Updating attributes of %x</source> <target>Actualizar atributos de %x</target> +<source>Target folder %x already existing.</source> +<target>La carpeta de destino %x ya existe.</target> + <source>Target folder input field must not be empty.</source> <target>El campo de entrada de la carpeta de destino no debe estar vacío.</target> @@ -1401,11 +1422,8 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>Source folder %x not found.</source> <target>El archivo de origen %x no ha sido encontrado.</target> -<source>Unresolved conflicts existing!</source> -<target>¡Existen conflictos sin resolver!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Puede ignorar conflictos y continuar con la sincronización.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Los siguientes elementos tienen conflictos sin resolver y no serán sincronizados:</target> <source>Significant difference detected:</source> <target>Diferencia significante detectada:</target> @@ -1425,12 +1443,15 @@ Aviso: ¡Los nombres de archivos deben ser relativos a los directorios base! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Una carpeta, que es parte de múltiple pares de carpetas, será modificada. Por favor, revise las opciones de sincronización.</target> +<source>Left</source> +<target>Izquierda</target> + +<source>Right</source> +<target>Derecha</target> + <source>Synchronizing folder pair:</source> <target>Sincronizando par de carpetas:</target> -<source>Target folder %x already existing.</source> -<target>La carpeta de destino %x ya existe.</target> - <source>Generating database...</source> <target>Generando base de datos...</target> diff --git a/BUILD/Languages/swedish.lng b/BUILD/Languages/swedish.lng index 37b3edf0..64a62e20 100644 --- a/BUILD/Languages/swedish.lng +++ b/BUILD/Languages/swedish.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>Avbryter: Väntar på att aktuell process skall slutföras...</target> +<source>Failure to create time stamp for versioning:</source> +<target>Kunde inte skapa tidsstämpel för versionshantering</target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Automatiserad synkronisering</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Rensa filterinställningar</target> -<source>Create a batch job</source> -<target>Skapa ett batch-jobb</target> +<source>Save as batch job</source> +<target>Spara som batch-fil</target> <source>Comparison settings</source> <target>Jämförelseinställningar</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Allmäna inställningar</target> -<source>Summary</source> -<target>Sammanställning</target> - <source>Find</source> <target>Sök</target> @@ -271,8 +271,8 @@ <source>Select a folder</source> <target>Markera en mapp</target> -<source>Delay [seconds]</source> -<target>Fördröjning [sekunder]</target> +<source>Idle time [seconds]</source> +<target>Inaktivitet [sekunder]</target> <source>Idle time between last detected change and execution of command</source> <target>Väntetid mellan senast upptäckta förändring och kommandoexekvering</target> @@ -321,38 +321,23 @@ Kommandot triggas om: <source>A folder input field is empty.</source> <target>Ett inmatningsfält är tomt</target> -<source>File time and size</source> -<target>Tidsstämpling och storlek</target> - -<source>File content</source> -<target>Filinnehåll</target> - -<source><Automatic></source> -<target><Automatisk></target> - -<source>Mirror ->></source> -<target>Spegla ->></target> - -<source>Update -></source> -<target>Uppdatera -></target> - -<source>Custom</source> -<target>Anpassat</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync batch</target> - <source>Synchronization aborted!</source> <target>Synkronisering avbruten!</target> <source>Synchronization completed with errors!</source> <target>Synkronisering slutförd med fel!</target> +<source>Synchronization completed with warnings.</source> +<target>Synkronisering slutförd med varningar.</target> + <source>Nothing to synchronize!</source> <target>Det finns inget att synkronisera!</target> -<source>Synchronization completed successfully!</source> -<target>Synkronisering slutförd!</target> +<source>Synchronization completed successfully.</source> +<target>Synkronisering slutförd.</target> + +<source>Saving log file %x...</source> +<target>Sparar loggfil %x...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Tryck "Växla" för att lösa problem i FreeFileSyncs huvudfönster</target> @@ -360,9 +345,6 @@ Kommandot triggas om: <source>Switching to FreeFileSync main dialog...</source> <target>Växlar till FreeFileSyncs huvudfönster...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Kan inte ansluta sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Det finns en ny version av FreeFileSync</target> @@ -375,6 +357,12 @@ Kommandot triggas om: <source>Information</source> <target>Information</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Kan inte ansluta sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>Aktuellt FreeFileSync versionsnummer kan inte hittas online! Vill du kontrollera manuellt?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Vill du att FreeFileSync skall söka efter uppdateringar varje vecka?</target> @@ -438,27 +426,27 @@ Kommandot triggas om: <source>Hibernate</source> <target>Viloläge</target> -<source>1. &Compare</source> -<target>1. &Jämför</target> - -<source>2. &Synchronize</source> -<target>2. &Synkronisera</target> - <source>&New</source> <target>&Nytt</target> <source>&Save</source> <target>&Spara</target> +<source>Save as &batch job...</source> +<target>Spara som &batch-fil...</target> + +<source>1. &Compare</source> +<target>1. &Jämför</target> + +<source>2. &Synchronize</source> +<target>2. &Synkronisera</target> + <source>&Language</source> <target>&Språk</target> <source>&Global settings...</source> <target>&Allmäna inställningar...</target> -<source>&Create batch job...</source> -<target>&Skapa batch-jobb...</target> - <source>&Export file list...</source> <target>&Exportera fillista...</target> @@ -492,20 +480,20 @@ Kommandot triggas om: <source>Swap sides</source> <target>Byt sida</target> -<source>Load configuration from file</source> -<target>Hämta inställningar från fil</target> +<source>Open</source> +<target>Öppna</target> -<source>Save current configuration to file</source> -<target>Spara aktuella inställningar till fil</target> +<source>Save</source> +<target>Spara</target> <source>Last used configurations (press DEL to remove from list)</source> <target>Senast använda konfigurationer (Tryck DEL för att ta bort)</target> -<source>Show excluded items</source> -<target>Visa undantagna poster</target> +<source>Hide excluded items</source> +<target>Dölj undantagna objekt</target> <source>Show filtered or temporarily excluded files</source> -<target>Visa filtrerade eller temporärt undantagna filer</target> +<target>Dölj filtrerade eller temporärt undantagna filer</target> <source>Number of files and folders that will be created</source> <target>Antal filer och mappar som kommer att skapas</target> @@ -540,15 +528,6 @@ Kommandot triggas om: <source>Help</source> <target>Hjälp</target> -<source>Filter files</source> -<target>Undantag</target> - -<source>Left</source> -<target>Vänster</target> - -<source>Right</source> -<target>Höger</target> - <source>Error handling</source> <target>Felhantering</target> @@ -570,14 +549,14 @@ Kommandot triggas om: <source>Abort synchronization on first error</source> <target>Avbryt synkronisering vid första felet</target> -<source>On completion:</source> -<target>Vid slutfört:</target> +<source>On completion</source> +<target>Vid slutfört</target> <source>Show progress dialog</source> <target>Visa förloppsindikator</target> -<source>Generate log file</source> -<target>Skapa loggfil</target> +<source>Save log</source> +<target>Spara logg</target> <source>Select folder to save log files</source> <target>Väl en mapp att spara loggfiler i</target> @@ -588,11 +567,8 @@ Kommandot triggas om: <source>Limit maximum number of log files</source> <target>Begränsa antalet loggfiler</target> -<source>Batch settings</source> -<target>Batch-inställningar</target> - -<source>Compare by...</source> -<target>Jämför...</target> +<source>Select variant</source> +<target>Välj variant</target> <source> Files are found equal if @@ -607,6 +583,9 @@ Filer betraktas som likvärdiga om är samma. </target> +<source>File time and size</source> +<target>Tidsstämpling och storlek</target> + <source> Files are found equal if - file content @@ -618,24 +597,36 @@ Filerna betecknas som lika om, är lika </target> +<source>File content</source> +<target>Filinnehåll</target> + <source>Symbolic Link handling</source> <target>Hantering av Symboliska länkar</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Välj variant:</target> +<source><- Two way -></source> +<target><- Tvåvägs -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Använd en databas för att identifiera och sprida ändringar på båda sidor. Borttagning, namnbyte och konflikter upptäcks automatiskt</target> +<source>Mirror ->></source> +<target>Spegla ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Speglar säkerhetskopia av vänster mapp. Höger mapp ändras för att exakt matcha vänster efter synkroniseringen.</target> +<source>Update -></source> +<target>Uppdatera -></target> + <source>Copy new or updated files to right folder.</source> <target>Kopiera nya och uppdaterade filer till höger mapp.</target> +<source>Custom</source> +<target>Anpassat</target> + <source>Configure your own synchronization rules.</source> <target>Konfigurera dina egna synkroniseringsregler.</target> @@ -651,8 +642,8 @@ Filerna betecknas som lika om, <source>Recycle Bin</source> <target>Papperskorgen</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Använd papperskorgen vid borttagning och överskrivning av filer</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Använd papperskorgen för borttagna och överskrivna filer</target> <source>Versioning</source> <target>Versionshantering</target> @@ -660,8 +651,8 @@ Filerna betecknas som lika om, <source>Move time-stamped files into specified folder</source> <target>Flytta tidsstämplade filer till specificerad mapp</target> -<source>Limit maximum number of versions per file</source> -<target>Begränsa antalet versioner per fil</target> +<source>Naming convention:</source> +<target>Regler för namngivning</target> <source>Configuration</source> <target>Inställningar</target> @@ -810,6 +801,9 @@ OBS! Filnamnen måste anges relativt till basmappar <source>Overview</source> <target>Översikt</target> +<source>Filter files</source> +<target>Undantag</target> + <source>Select view</source> <target>Välj vy</target> @@ -861,9 +855,15 @@ OBS! Filnamnen måste anges relativt till basmappar <source><Last session></source> <target><Senaste session></target> +<source>Folder Comparison and Synchronization</source> +<target>Mappjämförelse och synkronisering</target> + <source>Configuration saved!</source> <target>Inställningar sparade!</target> +<source>FreeFileSync batch</source> +<target>FreeFileSync batch</target> + <source>Never save changes</source> <target>Spara aldrig ändringar</target> @@ -876,9 +876,6 @@ OBS! Filnamnen måste anges relativt till basmappar <source>Configuration loaded!</source> <target>Inställningar inlästa!</target> -<source>Folder Comparison and Synchronization</source> -<target>Mappjämförelse och synkronisering</target> - <source>Hide files that exist on left side only</source> <target>Visa inte filer som endast finns till vänster</target> @@ -1035,6 +1032,9 @@ OBS! Filnamnen måste anges relativt till basmappar <source>Comparing content...</source> <target>Jämför innehåll...</target> +<source>Copy</source> +<target>Kopiera</target> + <source>Paused</source> <target>Pausad</target> @@ -1107,14 +1107,14 @@ OBS! Filnamnen måste anges relativt till basmappar <source>- folder part only</source> <target>- endast mappdelen</target> -<source>- Other side's counterpart to %name</source> -<target>- Andra sidans motsvarighet till %name</target> +<source>- Other side's counterpart to %item_path%</source> +<target>- Andra sidans motsvarighet till %item_path%</target> -<source>- Other side's counterpart to %dir</source> -<target>- Andra sidans motsvarighet till %dir</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>- Andra sidans motsvarighet till %item_folder%</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Vill du göra dolda dialoger och varningsmeddelanden synliga igen?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Vill du göra dolda varningar och dialoger, synliga igen?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1137,47 +1137,29 @@ OBS! Filnamnen måste anges relativt till basmappar <source>Leave as unresolved conflict</source> <target>Ignorera konflikt</target> -<source>Files</source> -<target>Filer</target> +<source>Replace</source> +<target>Byt ut</target> -<source>Percentage</source> -<target>Procent</target> +<source>Move files and replace if existing</source> +<target>Flytta filer och byt ut om de redan finns</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Lägg till en tidsstämpel till varje filnamn</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Mapp</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Fil</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>YYYY-MM-DD hhmmss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 timma</pluralform> -<pluralform>%x timmar</pluralform> -</target> +<source>Files</source> +<target>Filer</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 dag</pluralform> -<pluralform>%x dagar</pluralform> -</target> +<source>Percentage</source> +<target>Procent</target> <source>Cannot monitor directory %x.</source> <target>Mappen %x kan inte övervakas.</target> @@ -1227,6 +1209,9 @@ OBS! Filnamnen måste anges relativt till basmappar <source>Cannot copy file %x to %y.</source> <target>Kan inte kopiera filen %x till %y.</target> +<source>Type of item %x is not supported:</source> +<target>Objekttyp %x stöds ej:</target> + <source>Cannot open directory %x.</source> <target>Kan inte öppna %x.</target> @@ -1236,6 +1221,42 @@ OBS! Filnamnen måste anges relativt till basmappar <source>Detected endless directory recursion.</source> <target>Upptäckte ändlös mapprekursion</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 timma</pluralform> +<pluralform>%x timmar</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 dag</pluralform> +<pluralform>%x dagar</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Kan inte att ange behörigheten %x.</target> @@ -1365,6 +1386,9 @@ OBS! Filnamnen måste anges relativt till basmappar <source>Moving symbolic link %x to %y</source> <target>Flyttar den symboliska länken %x till %y</target> +<source>Removing old versions...</source> +<target>Tar bort gamla versioner...</target> + <source>Creating file %x</source> <target>Skapar fil %x</target> @@ -1386,6 +1410,9 @@ OBS! Filnamnen måste anges relativt till basmappar <source>Updating attributes of %x</source> <target>Uppdaterar attribut för %x</target> +<source>Target folder %x already existing.</source> +<target>Målmappen %x finns redan.</target> + <source>Target folder input field must not be empty.</source> <target>Indatafältet för målmapp får inte vara tomt.</target> @@ -1395,11 +1422,8 @@ OBS! Filnamnen måste anges relativt till basmappar <source>Source folder %x not found.</source> <target>Källmappen %x kan inte hittas.</target> -<source>Unresolved conflicts existing!</source> -<target>Obehandlad konflikt upptäckt!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Du kan ignorera konflikter och fortsätta synkroniseringen.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Följande objekt har olösta konflikter, och kommer inte att synkroniseras:</target> <source>Significant difference detected:</source> <target>Betydande skillnad upptäckt:</target> @@ -1419,12 +1443,15 @@ OBS! Filnamnen måste anges relativt till basmappar <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>En mapp som tillhör flera mapp-par är på väg att ändras. Kontrollera synkroniseringsinställningarna</target> +<source>Left</source> +<target>Vänster</target> + +<source>Right</source> +<target>Höger</target> + <source>Synchronizing folder pair:</source> <target>Synkroniserar mapp-par:</target> -<source>Target folder %x already existing.</source> -<target>Målmappen %x finns redan.</target> - <source>Generating database...</source> <target>Skapar databas...</target> diff --git a/BUILD/Languages/turkish.lng b/BUILD/Languages/turkish.lng index 0cf8d9ef..fdbd10b0 100644 --- a/BUILD/Languages/turkish.lng +++ b/BUILD/Languages/turkish.lng @@ -11,13 +11,13 @@ <target>%s klasörü aranıyor...</target> <source>Items processed:</source> -<target>İşlenen bileşenler:</target> +<target>İşlenen öge:</target> <source>Items remaining:</source> -<target>Kalan bileşenler:</target> +<target>Kalan öge:</target> <source>Total time:</source> -<target>Toplam zaman:</target> +<target>Toplam süre:</target> <source>Show in Explorer</source> <target>Tarayıcıda Göster</target> @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>Vazgeçildi: Yürürlükteki işlemin bitmesi bekleniyor...</target> +<source>Failure to create time stamp for versioning:</source> +<target>Eski sürüm için zaman damgası oluşturulamadı:</target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Kendiliğinden Eşleştirme</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Süzgeç ayarlarını temizle</target> -<source>Create a batch job</source> -<target>Toplu iş oluştur</target> +<source>Save as batch job</source> +<target>Toplu iş olarak kaydet</target> <source>Comparison settings</source> <target>Karşılaştırma ayarları</target> @@ -68,17 +71,14 @@ <target>Hakkında</target> <source>Confirm</source> -<target>Doğrula</target> +<target>İşlemi onaylayın</target> <source>Configure filter</source> -<target>Yapılandırma süzgeci</target> +<target>Süzgeci ayarlayın</target> <source>Global settings</source> <target>Genel ayarlar</target> -<source>Summary</source> -<target>Özet</target> - <source>Find</source> <target>Bul</target> @@ -149,7 +149,7 @@ <target>Veritabanı dosyaları ortak bir oturumu paylaşamaz.</target> <source>An exception occurred!</source> -<target>Olağan dışı bir durum oluştu!</target> +<target>Olağan dışı bir durumla karşılaşıldı!</target> <source>Cannot read file attributes of %x.</source> <target>%x dosyasının özellikleri okunamadı.</target> @@ -197,10 +197,10 @@ <target>%x dosyası bulunamadı.</target> <source>File %x does not contain a valid configuration.</source> -<target>%x dosyası geçerli bir yapılandırma bilgisi içermiyor.</target> +<target>%x dosyası geçerli ayar bilgilerini içermiyor.</target> <source>Configuration file %x loaded partially only.</source> -<target>%x yapılandırma dosyası tamamen yüklenemedi.</target> +<target>%x ayarlar dosyası kısmen yüklendi.</target> <source>Cannot access Volume Shadow Copy Service.</source> <target>Birim Gölge Kopya hizmetine erişilemedi.</target> @@ -230,7 +230,7 @@ <target>Çı&k</target> <source>&Program</source> -<target>&Program</target> +<target>&Dosya</target> <source>&Content</source> <target>İçe&rik</target> @@ -271,8 +271,8 @@ <source>Select a folder</source> <target>Bir klasör seçin</target> -<source>Delay [seconds]</source> -<target>Gecikme [saniye}</target> +<source>Idle time [seconds]</source> +<target>Boşta bekleme süresi {saniye]</target> <source>Idle time between last detected change and execution of command</source> <target>Son algılanan değişiklik ile komutun yürütülmesi arasındaki bekleme süresi</target> @@ -321,38 +321,23 @@ Komut şu durumlarda yürütülür: <source>A folder input field is empty.</source> <target>Bir klasör giriş alanı boş.</target> -<source>File time and size</source> -<target>Dosya tarih ve saati</target> - -<source>File content</source> -<target>Dosya içeriği</target> - -<source><Automatic></source> -<target><Kendiliğinden></target> - -<source>Mirror ->></source> -<target>Yansı ->></target> - -<source>Update -></source> -<target>Güncelle -></target> - -<source>Custom</source> -<target>Özel</target> - -<source>FreeFileSync batch</source> -<target>FreeFileSync toplu işi</target> - <source>Synchronization aborted!</source> <target>Eşleştirme durduruldu!</target> <source>Synchronization completed with errors!</source> <target>Eşleştirme hatalarla tamamlandı!</target> +<source>Synchronization completed with warnings.</source> +<target>Eşleştirme işlemi bazı uyarılarla tamamlandı.</target> + <source>Nothing to synchronize!</source> <target>Eşleştirilecek bir şey yok!</target> -<source>Synchronization completed successfully!</source> -<target>Eşleştirme sorunsuz tamamlandı!</target> +<source>Synchronization completed successfully.</source> +<target>Eşleştirme tamamlandı.</target> + +<source>Saving log file %x...</source> +<target>%x günlük dosyası kaydediliyor...</target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>FreeFileSync ana penceresindeki sorunları çözmek için "Değiştir" düğmesine tıklayın.</target> @@ -360,9 +345,6 @@ Komut şu durumlarda yürütülür: <source>Switching to FreeFileSync main dialog...</source> <target>FreeFileSync ana penceresine geçiliyor...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>sourceforge.net sitesine bağlanılamıyor!</target> - <source>A new version of FreeFileSync is available:</source> <target>Yeni bir FreeFileSync sürümü yayınlanmış:</target> @@ -375,6 +357,12 @@ Komut şu durumlarda yürütülür: <source>Information</source> <target>Bilgi</target> +<source>Unable to connect to sourceforge.net!</source> +<target>sourceforge.net sitesine bağlanılamıyor!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target>FreeFileSync sürüm numarası çevrimiçi olarak bulunamadı! El ile denetlemek ister misiniz?</target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>FreeFileSync güncellemelerinin her hafta denetlenmesini ister misiniz?</target> @@ -418,10 +406,10 @@ Komut şu durumlarda yürütülür: <target>İşlem</target> <source>Category</source> -<target>Kategori</target> +<target>Öge tipi</target> <source>Drag && drop</source> -<target>Klasör ya da dosyaları buraya sürükleyip bırakabilirsiniz</target> +<target>Klasör ya da dosyaları sürükleyip buraya bırakabilirsiniz</target> <source>Close progress dialog</source> <target>İşlem penceresini kapat</target> @@ -438,32 +426,32 @@ Komut şu durumlarda yürütülür: <source>Hibernate</source> <target>Hazırda beklet</target> -<source>1. &Compare</source> -<target>1. &Karşılaştır</target> - -<source>2. &Synchronize</source> -<target>2. &Eşleştir</target> - <source>&New</source> <target>Ye&ni</target> <source>&Save</source> <target>&Kaydet</target> +<source>Save as &batch job...</source> +<target>&Toplu iş olarak kaydet...</target> + +<source>1. &Compare</source> +<target>1. &Karşılaştır</target> + +<source>2. &Synchronize</source> +<target>2. &Eşleştir</target> + <source>&Language</source> <target>Di&l</target> <source>&Global settings...</source> <target>&Genel ayarlar...</target> -<source>&Create batch job...</source> -<target>&Toplu iş oluştur...</target> - <source>&Export file list...</source> <target>Dosya list&esini ver...</target> <source>&Advanced</source> -<target>&Gelişmiş</target> +<target>&Araçlar</target> <source>&Check for new version</source> <target>Yeni &sürüm denetimi</target> @@ -472,7 +460,7 @@ Komut şu durumlarda yürütülür: <target>Karşılaştır</target> <source>Compare both sides</source> -<target>İki tarafı da karşılaştır</target> +<target>İki tarafı karşılaştırır</target> <source>&Abort</source> <target>V&azgeç</target> @@ -481,7 +469,7 @@ Komut şu durumlarda yürütülür: <target>Eşleştir</target> <source>Start synchronization</source> -<target>Eşleştirmeyi başlat</target> +<target>Eşleştirmeyi başlatır</target> <source>Add folder pair</source> <target>Klasör çifti ekle</target> @@ -490,25 +478,25 @@ Komut şu durumlarda yürütülür: <target>Klasör çiftini sil</target> <source>Swap sides</source> -<target>Sağ ve sol yanı değiştir</target> +<target>Sağ ve sol tarafları değiştir</target> -<source>Load configuration from file</source> -<target>Yapılandırma dosyasından ayarları alır</target> +<source>Open</source> +<target>Aç</target> -<source>Save current configuration to file</source> -<target>Geçerli yapılandırmayı dosyaya kaydeder</target> +<source>Save</source> +<target>Kaydet</target> <source>Last used configurations (press DEL to remove from list)</source> -<target>Son kullanılan yapılandırmalar (listeden silmek için DEL tuşuna basın)</target> +<target>Son kullanılan ayarlar (listeden silmek için DEL tuşuna basın)</target> -<source>Show excluded items</source> -<target>Katılmayan ögeleri göster</target> +<source>Hide excluded items</source> +<target>Katılmayan ögeler görüntülensin</target> <source>Show filtered or temporarily excluded files</source> -<target>Süzülmüş ya da geçici olarak katılmayan dosyaları göster</target> +<target>Süzülmüş ya da geçici olarak katılmayan dosyalar görüntülenir</target> <source>Number of files and folders that will be created</source> -<target>Oluşturulacak dosya ve klasör sayısı</target> +<target>Eklenecek dosya ve klasör sayısı</target> <source>Number of files that will be overwritten</source> <target>Üzerine yazılacak dosya sayısı</target> @@ -517,10 +505,10 @@ Komut şu durumlarda yürütülür: <target>Silinecek dosya ve klasör sayısı</target> <source>Total bytes to copy</source> -<target>Toplam kopyalayanacak bayt</target> +<target>Toplam kopyalanacak bayt</target> <source>Items found:</source> -<target>Bulunan bileşenler:</target> +<target>Bulunan öge:</target> <source>Speed:</source> <target>Hız:</target> @@ -535,20 +523,11 @@ Komut şu durumlarda yürütülür: <target>Toplu iş</target> <source>Create a batch file to automate synchronization. Double-click this file or schedule in your system's task planner: FreeFileSync.exe <job name>.ffs_batch</source> -<target>Eşleştirmeyi otomatikleştirmek için bir toplu iş komut dosyası oluşturun. Bu dosyaya çift tıklayarak ya da sisteminizdeki görev zamanlayıcıya: FreeFileSync.exe <görev adı>.ffs_batch şeklinde yazarak ekleyin</target> +<target>Toplu iş dosyası ile otomatik eşleştirme yapılabilir. Dosya, çift tıklanarak ya da sisteminizdeki görev zamanlayıcıya; FreeFileSync.exe <görev adı>.ffs_batch şeklinde eklenerek yürütülebilir.</target> <source>Help</source> <target>Yardım</target> -<source>Filter files</source> -<target>Dosyaları süz</target> - -<source>Left</source> -<target>Sol</target> - -<source>Right</source> -<target>Sağ</target> - <source>Error handling</source> <target>Hata olursa:</target> @@ -556,43 +535,40 @@ Komut şu durumlarda yürütülür: <target>Yoksay</target> <source>Hide all error and warning messages</source> -<target>Tüm hata ve uyarı iletilerini gizler</target> +<target>Tüm hata ve uyarı iletileri gizlenir</target> <source>Pop-up</source> -<target>Açılan pencere</target> +<target>Görüntüle</target> <source>Show pop-up on errors or warnings</source> -<target>Hata ya da uyarıları açılır pencerede gösterir</target> +<target>Hata ya da uyarılar açılır pencerede gösterilir</target> <source>Exit</source> <target>Çık</target> <source>Abort synchronization on first error</source> -<target>>Oluşacak ilk hatada eşleştirmeyi durdur</target> +<target>Oluşacak ilk hatada eşleştirme durdurulur</target> -<source>On completion:</source> +<source>On completion</source> <target>İşlem tamamlandığında:</target> <source>Show progress dialog</source> -<target>İşlem penceresini göster</target> +<target>İşlem penceresini görüntüle</target> -<source>Generate log file</source> -<target>Günlük dosyası oluştur</target> +<source>Save log</source> +<target>Günlüğe kaydet</target> <source>Select folder to save log files</source> <target>Günlük dosyalarının kaydedileceği klasörü seçin</target> <source>Limit</source> -<target>Sınır</target> +<target>Sınırla</target> <source>Limit maximum number of log files</source> -<target>Günlük dosyası sayısının üst sınırını belirle</target> - -<source>Batch settings</source> -<target>İş ayarları</target> +<target>Tutulacak en fazla günlük dosyası sayısı</target> -<source>Compare by...</source> -<target>Karşılaştırma ölçütünü seçin:</target> +<source>Select variant</source> +<target>İşlem tipini seçin:</target> <source> Files are found equal if @@ -601,88 +577,103 @@ Files are found equal if are the same </source> <target> -Dosyaların eşit sayılması için - - son yazma tarih ve saati - - dosya boyutu +Dosyaların aynı sayılması için; + - son yazma tarih ve saatleri + - ve dosya boyutları aynı olmalıdır </target> +<source>File time and size</source> +<target>Tarih ve saate göre</target> + <source> Files are found equal if - file content is the same </source> <target> -Dosyaların eşit sayılması için - - dosya içeriği +Dosyaların aynı sayılması için; + - dosya içerikleri aynı olmalıdır </target> +<source>File content</source> +<target>İçeriğe göre</target> + <source>Symbolic Link handling</source> -<target>Sembolik bağlantı işleme</target> +<target>Sembolik bağlantılar:</target> <source>OK</source> <target>Tamam</target> -<source>Select variant:</source> -<target>Davranışı seçin:</target> +<source><- Two way -></source> +<target><- Çift yönlü -></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> -<target>İki yandaki değişiklikleri bir veritabanı kullanarak belirler ve sakla. Silme, yeniden adlandırma ve çakışma işlemleri kendiliğinden algılanır.</target> +<target>İki taraftaki değişiklikler, bir veritabanı kullanarak belirlenir ve görüntülenir. Silme, yeniden adlandırma ve uyuşmazlık durumları kendiliğinden algılanır.</target> + +<source>Mirror ->></source> +<target>Yansıt ->></target> <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> -<target>Sol klasörün yansı yedeği. Eşleştirmeden sonra sağ klasör, sol klasörün tamamen aynısı olur.</target> +<target>Sol taraftaki klasör sağ tarafa yansıtılır. Eşleştirme sonrası sağ klasör, sol klasörün tamamen aynısı olur.</target> + +<source>Update -></source> +<target>Güncelle -></target> <source>Copy new or updated files to right folder.</source> -<target>Yalnız yeni ya da güncellenmiş dosyalar soldan sağa kopyalanır.</target> +<target>Sol taraftaki yeni ya da güncellenmiş dosyalar sağ tarafa kopyalanır.</target> + +<source>Custom</source> +<target>Özel</target> <source>Configure your own synchronization rules.</source> -<target>Buradan kendi eşleştirme kurallarınızı yapılandırabilirsiniz.</target> +<target>Eşleştirme kuralları istendiği şekilde ayarlanabilir.</target> <source>Deletion handling</source> -<target>Silme eyleminde:</target> +<target>Silinen dosyaları:</target> <source>Permanent</source> -<target>Kalıcı</target> +<target>Kalıcı olarak sil</target> <source>Delete or overwrite files permanently</source> -<target>Dosyaları kalıcı olarak siler ya da üzerine yazar</target> +<target>Dosyalar kalıcı olarak silinir ya da üzerine yazılır</target> <source>Recycle Bin</source> -<target>Geri Dönüşüm Kutusu</target> +<target>Geri dönüşüm kutusuna at</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Dosya silme ve üzerine yazma sırasında Geri Dönüşüm Kutusu'nu kullanır</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target>Silinen ve üzerine yazılan dosyalar Geri Dönüşüm Kutusuna atılır</target> <source>Versioning</source> <target>Eski sürüm olarak sakla</target> <source>Move time-stamped files into specified folder</source> -<target>Zaman damgalanmış dosyaları belirtilen klasöre taşı</target> +<target>Dosyalar, zaman damgası eklenerek belirtilen klasöre taşınır</target> -<source>Limit maximum number of versions per file</source> -<target>Her dosya için en fazla sürüm sayısını sınırla</target> +<source>Naming convention:</source> +<target>Adlandırma kuralı:</target> <source>Configuration</source> -<target>Yapılandırma</target> +<target>İşlemler</target> <source>Item exists on left side only</source> -<target>Yalnız sol yanda bulunan ögeler</target> +<target>Sol taraftaki ögeler</target> <source>Item exists on right side only</source> -<target>Yalnız sağ yanda bulunan ögeler</target> +<target>Sağ taraftaki ögeler</target> <source>Left side is newer</source> -<target>Sol yan daha yeni</target> +<target>Sol taraftaki daha yeni ögeler</target> <source>Right side is newer</source> -<target>Sağ yan daha yeni</target> +<target>Sağ taraftaki daha yeni ögeler</target> <source>Items have different content</source> -<target>Ögelerin içeriği farklı</target> +<target>İçeriği farklı ögeler</target> <source>Conflict/item cannot be categorized</source> -<target>Uyuşmazlık/öge kategorize edilemiyor</target> +<target>Uyuşmayan/sınıflanamayan ögeler</target> <source>Synchronizing...</source> <target>Eşleştiriliyor...</target> @@ -706,7 +697,7 @@ aynı olmalıdır <target>Öneri ve geri bildirimlerinizi bekleriz</target> <source>Homepage</source> -<target>Ana sayfa</target> +<target>Web sitesi</target> <source>FreeFileSync at Sourceforge</source> <target>Sourceforge sitesinde FreeFileSync</target> @@ -715,28 +706,28 @@ aynı olmalıdır <target>E-posta</target> <source>Published under the GNU General Public License</source> -<target>GNU Genel Kamu Lisansı şartları altında yayınlanmıştır</target> +<target>GNU Genel Kamu Lisansı koşulları altında yayınlanmıştır</target> <source>Delete on both sides</source> -<target>Her iki yandakini de sil</target> +<target>Her iki taraftakini de sil</target> <source>Delete on both sides even if the file is selected on one side only</source> -<target>Dosya yalnız bir tarafta seçili olsa bile her iki yandakini de sil</target> +<target>Dosya yalnız bir tarafta seçili olsa bile her iki taraftaki de silinir</target> <source> Only files that match all filter settings will be synchronized. Note: File names must be relative to base directories! </source> <target> -Yalnız tüm süzgeç ayarlarına uyan dosyalar eşleştirilecek. +Yalnız süzgeç ayarlarına tamamen uyan dosyalar eşleştirilir. Not: Dosya adları kök klasörlere göre bağıl olmalıdır! </target> <source>Include</source> -<target>Katılacaklar:</target> +<target>Katılsın:</target> <source>Exclude</source> -<target>Dışlanacaklar:</target> +<target>Katılmasın</target> <source>Time span</source> <target>Zaman aralığı</target> @@ -754,25 +745,25 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>&Varsayılan</target> <source>Fail-safe file copy</source> -<target>Hatasız dosya kopyalama</target> +<target>Dosyalar hatasız kopyalansın</target> <source>Write to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of fatal error.</source> -<target>Kopyalama önce geçici bir dosyaya (*.ffs_tmp) yapılır. Sonra dosya yeniden adlandırılır. Böylece hatalara karşı daha sağlıklı bir durum sağlanır</target> +<target>Kopyalama önce geçici bir dosyaya (*.ffs_tmp) yapılır. Sonra dosya yeniden adlandırılır. Böylece hatalara karşı daha sağlıklı bir ortam sağlanır.</target> <source>Copy locked files</source> -<target>Kilitli dosyaları da kopyala</target> +<target>Kilitli dosyalar da kopyalansın</target> <source>Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)</source> -<target>Paylaşılan ya da kilitli dosyaları Gölge Kopya Hizmetini kullanarak kopyalar (Yönetici izinlerine gerek duyar)</target> +<target>Paylaşılan ya da kilitli dosyalar, Gölge Kopya Hizmeti'ni kullanarak kopyalanır (yönetici izinleri gerekir).</target> <source>Copy file access permissions</source> -<target>Dosya erişim izinlerini kopyala</target> +<target>Dosya erişim izinleri de kopyalansın</target> <source>Transfer file and folder permissions (Requires Administrator rights)</source> -<target>Dosya ve klasör izinlerini de kopyala (Yönetici haklarına gerek duyar)</target> +<target>Dosya ve klasör izinleri de kopyalanır (yönetici izinleri gerekir).</target> <source>Restore hidden dialogs</source> -<target>Gizli iletileri göster</target> +<target>Gizlenmiş iletiler yeniden görüntülensin</target> <source>External applications</source> <target>Dış uygulamalar</target> @@ -781,13 +772,13 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Açıklama</target> <source>Variant</source> -<target>Değişken</target> +<target>İşlem tipi</target> <source>Statistics</source> <target>İstatistikler</target> <source>Don't show this dialog again</source> -<target>Bu iletiyi artık gösterme</target> +<target>Bu iletiyi bir daha gösterme</target> <source>Find what:</source> <target>Aranacak:</target> @@ -810,14 +801,17 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Overview</source> <target>Genel</target> +<source>Filter files</source> +<target>Dosya süzgeci</target> + <source>Select view</source> -<target>Görünümü seçin</target> +<target>Görünüm</target> <source>Set direction:</source> <target>Yönü seçin:</target> <source>Exclude temporarily</source> -<target>Geçici olarak dışla</target> +<target>Geçici olarak katma</target> <source>Include temporarily</source> <target>Geçici olarak kat</target> @@ -835,7 +829,7 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Tümünü kat</target> <source>Exclude all</source> -<target>Tümünü dışla</target> +<target>Hiçbirini katma</target> <source>Show icons:</source> <target>Simgeleri göster:</target> @@ -861,8 +855,14 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source><Last session></source> <target><Önceki oturum></target> +<source>Folder Comparison and Synchronization</source> +<target>Klasör Karşılaştırma ve Eşleştirme</target> + <source>Configuration saved!</source> -<target>Yapılandırma kaydedildi!</target> +<target>Ayarlar kaydedildi!</target> + +<source>FreeFileSync batch</source> +<target>FreeFileSync toplu işi</target> <source>Never save changes</source> <target>Asla değişiklikleri kaydetme</target> @@ -874,94 +874,91 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Kaydetme</target> <source>Configuration loaded!</source> -<target>Yapılandırma yüklendi!</target> - -<source>Folder Comparison and Synchronization</source> -<target>Klasör Karşılaştırma ve Eşleştirme</target> +<target>Ayarlar yüklendi!</target> <source>Hide files that exist on left side only</source> -<target>Yalnız sol yanda bulunan dosyaları gizle</target> +<target>Yalnız sol tarafta bulunan dosyalar gizlensin</target> <source>Show files that exist on left side only</source> -<target>Yalnız sol tarafta bulunan dosyaları göster</target> +<target>Yalnız sol tarafta bulunan dosyalar görüntülensin</target> <source>Hide files that exist on right side only</source> -<target>Yalnız sağ yanda bulunan dosyaları gizle</target> +<target>Yalnız sağ tarafta bulunan dosyalar gizlensin</target> <source>Show files that exist on right side only</source> -<target>Yalnız sağ tarafta bulunan dosyaları göster</target> +<target>Yalnız sağ tarafta bulunan dosyalar görüntülensin</target> <source>Hide files that are newer on left</source> -<target>Solda daha yeni olan dosyaları gizle</target> +<target>Solda daha yeni olan dosyalar gizlensin</target> <source>Show files that are newer on left</source> -<target>Solda daha yeni olan dosyaları göster</target> +<target>Solda daha yeni olan dosyalar görüntülensin</target> <source>Hide files that are newer on right</source> -<target>Sağda daha yeni olan dosyaları gizle</target> +<target>Sağda daha yeni olan dosyalar gizlensin</target> <source>Show files that are newer on right</source> -<target>Sağda daha yeni olan dosyaları göster</target> +<target>Sağda daha yeni olan dosyalar görüntülensin</target> <source>Hide files that are equal</source> -<target>Eşit olan dosyaları gizle</target> +<target>Aynı olan dosyalar gizlensin</target> <source>Show files that are equal</source> -<target>Eşit olan dosyaları göster</target> +<target>Aynı olan dosyalar görüntülensin</target> <source>Hide files that are different</source> -<target>Farklı olan dosyaları gizle</target> +<target>Farklı olan dosyalar gizlensin</target> <source>Show files that are different</source> -<target>Farklı olan dosyaları göster</target> +<target>Farklı olan dosyalar görüntülensin</target> <source>Hide conflicts</source> -<target>Çelişkileri gizle</target> +<target>Uyuşmazlıklar gizlensin</target> <source>Show conflicts</source> -<target>Çelişkileri göster</target> +<target>Uyuşmazlıklar görüntülensin</target> <source>Hide files that will be created on the left side</source> -<target>Sol yanda oluşturulacak dosyaları gizle</target> +<target>Sol tarafa eklenecek dosyalar gizlensin</target> <source>Show files that will be created on the left side</source> -<target>Yalnız sol tarafta oluşturulacak dosyaları göster</target> +<target>Sol tarafa eklenecek dosyalar görüntülensin</target> <source>Hide files that will be created on the right side</source> -<target>Sağ yanda oluşturulacak dosyaları gizle</target> +<target>Sağ tarafa eklenecek dosyalar gizlensin</target> <source>Show files that will be created on the right side</source> -<target>Yalnız sağ tarafta oluşturulacak dosyaları göster</target> +<target>Sağ tarafa eklenecek dosyalar görüntülensin</target> <source>Hide files that will be deleted on the left side</source> -<target>Sol yanda silinecek dosyaları gizle</target> +<target>Sol tarafta silinecek dosyalar gizlensin</target> <source>Show files that will be deleted on the left side</source> -<target>Yalnız sol tarafta silinecek dosyaları göster</target> +<target>Sol tarafta silinecek dosyalar görüntülensin</target> <source>Hide files that will be deleted on the right side</source> -<target>Sağ yanda silinecek dosyaları gizle</target> +<target>Sağ tarafta silinecek dosyalar gizlensin</target> <source>Show files that will be deleted on the right side</source> -<target>Yalnız sağ tarafta silinecek dosyaları göster</target> +<target>Sağ tarafta silinecek dosyalar görüntülensin</target> <source>Hide files that will be overwritten on left side</source> -<target>Sol yanda üzerine yazılacak dosyaları gizle</target> +<target>Sol tarafta üzerine yazılacak dosyalar gizlensin</target> <source>Show files that will be overwritten on left side</source> -<target>Yalnız sol tarafta üzerine yazılacak dosyaları göster</target> +<target>Sol tarafta üzerine yazılacak dosyalar görüntülensin</target> <source>Hide files that will be overwritten on right side</source> -<target>Sağ yanda üzerine yazılacak dosyaları gizle</target> +<target>Sağ tarafta üzerine yazılacak dosyalar gizlensin</target> <source>Show files that will be overwritten on right side</source> -<target>Yalnız sağ tarafta üzerine yazılacak dosyaları göster</target> +<target>Sağ tarafta üzerine yazılacak dosyalar görüntülensin</target> <source>Hide files that won't be copied</source> -<target>Kopyalanmayacak dosyaları gizle</target> +<target>Kopyalanmayacak dosyalar gizlensin</target> <source>Show files that won't be copied</source> -<target>Kopyalanmayacak dosyaları göster</target> +<target>Kopyalanmayacak dosyalar görüntülensin</target> <source>All folders are in sync!</source> <target>Tüm klasörler eşleştirildi.</target> @@ -1007,8 +1004,8 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <pluralform>%x of %y rows in view</pluralform> </source> <target> -<pluralform>%x / 1 satır gösteriliyor</pluralform> -<pluralform>%x / %y satır gösteriliyor</pluralform> +<pluralform>%x / 1 satır görüntüleniyor</pluralform> +<pluralform>%x / %y satır görüntüleniyor</pluralform> </target> <source>Ignore further errors</source> @@ -1035,6 +1032,9 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Comparing content...</source> <target>İçerik karşılaştırılıyor...</target> +<source>Copy</source> +<target>Kopyala</target> + <source>Paused</source> <target>Duraklatıldı</target> @@ -1090,16 +1090,16 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Süzgeç</target> <source>Direct</source> -<target>Doğrudan</target> +<target>Doğrudan katılsın</target> <source>Follow</source> -<target>İzle</target> +<target>Hedefleri katılsın</target> <source>Copy NTFS permissions</source> -<target>NTFS izinlerini de kopyala</target> +<target>NTFS izinleri de kopyalansın</target> <source>Integrate external applications into context menu. The following macros are available:</source> -<target>Dış uygulamaları sağ tuş menüsüne ekler. Şu makrolar kullanılabilir:</target> +<target>Sağ tık menüsüne dış uygulamalar ekler. Şu etiketler kullanılabilir:</target> <source>- full file or folder name</source> <target>- tam dosya ya da klasör adı</target> @@ -1107,14 +1107,14 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>- folder part only</source> <target>- yalnız klasör bölümü</target> -<source>- Other side's counterpart to %name</source> -<target>- %name diğer taraftaki karşılığı</target> +<source>- Other side's counterpart to %item_path%</source> +<target>%item_path% ögesinin diğer taraftaki karşılığı</target> -<source>- Other side's counterpart to %dir</source> -<target>- %dir klasörünün diğer taraftaki karşılığı</target> +<source>- Other side's counterpart to %item_folder%</source> +<target>%item_folder% ögesinin diğer taraftaki karşılığı</target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Gizlenmiş anımsatma ve uyarı iletileri yeniden görünür olsun mu?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target>Gizlenmiş iletiler yeniden görüntülensin mi?</target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1135,49 +1135,31 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! </target> <source>Leave as unresolved conflict</source> -<target>Çözülmemiş tutarsızlık olarak bırak</target> +<target>Uyuşmazlık çözülmeden kalsın</target> -<source>Files</source> -<target>Dosyalar</target> +<source>Replace</source> +<target>Değiştir</target> -<source>Percentage</source> -<target>Yüzde</target> +<source>Move files and replace if existing</source> +<target>Dosyaları taşı ve varsa üzerine yaz</target> -<source>%x TB</source> -<target>%x TB</target> +<source>Append a timestamp to each file name</source> +<target>Dosya adlarına zaman damgası ekle</target> -<source>%x PB</source> -<target>%x PB</target> +<source>Folder</source> +<target>Klasör</target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target>Dosya</target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>1 dakika</pluralform> -<pluralform>%x dakika</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target>YYYY-AA-GG SSddss</target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>1 saat</pluralform> -<pluralform>%x saat</pluralform> -</target> +<source>Files</source> +<target>Dosyalar</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>1 gün</pluralform> -<pluralform>%x gün</pluralform> -</target> +<source>Percentage</source> +<target>Yüzde</target> <source>Cannot monitor directory %x.</source> <target>%x klasörü izlenemiyor.</target> @@ -1219,7 +1201,7 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>%x izinleri yazılamadı.</target> <source>Cannot create directory %x.</source> -<target>%x dosyası oluşturulamadı.</target> +<target>%x klasörü eklenemedi.</target> <source>Cannot copy symbolic link %x to %y.</source> <target>%x simgesel bağlantısı %y olarak kopyalanamadı.</target> @@ -1227,6 +1209,9 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Cannot copy file %x to %y.</source> <target>%x dosyası %y olarak kopyalanamadı.</target> +<source>Type of item %x is not supported:</source> +<target>%x ögesi tipi desteklenmiyor:</target> + <source>Cannot open directory %x.</source> <target>%x klasörü açılamadı.</target> @@ -1236,6 +1221,42 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Detected endless directory recursion.</source> <target>Sonsuz klasör kısayol döngüsü algılandı.</target> +<source>%x TB</source> +<target>%x TB</target> + +<source>%x PB</source> +<target>%x PB</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>1 dakika</pluralform> +<pluralform>%x dakika</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>1 saat</pluralform> +<pluralform>%x saat</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>1 gün</pluralform> +<pluralform>%x gün</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>%x izni verilemedi.</target> @@ -1243,13 +1264,13 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>%x Geri Dönüşüm Kutusuna gönderilemedi</target> <source>Both sides have changed since last synchronization!</source> -<target>Son eşleştirmeden bu yana iki yanın içeriği de değişmiş!</target> +<target>Son eşleştirmeden bu yana iki tarafın da içeriği değişmiş!</target> <source>Cannot determine sync-direction:</source> <target>Eşleştirme yönü belirlenemedi:</target> <source>No change since last synchronization!</source> -<target>Son eşleştirmeden bu yana değişik olmamış!</target> +<target>Son eşleştirmeden bu yana bir değişiklik olmamış!</target> <source>The corresponding database entries are not in sync considering current settings.</source> <target>Karşı düşen veritabanı kayıtları, geçerli ayarlar göz önüne alındığında eşleşmiyor.</target> @@ -1261,7 +1282,7 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Şu yollar için geri dönüşüm kutusu kullanılamaz! Dosyalar anında ve tamamen silinir:</target> <source>You can ignore this error to consider the folder as empty.</source> -<target>Klasörün boş olarak kabul edilmesi için bu hatayı yok sayanbilirsiniz.</target> +<target>Bu hatayı yoksayarak, klasörün boş olarak kabul edilmesini sağlayabilirsiniz.</target> <source>Cannot find folder %x.</source> <target>%x klasörü bulunamıyor.</target> @@ -1276,7 +1297,7 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Eşleştirmeye hazırlanıyor...</target> <source>Conflict detected:</source> -<target>Çelişki bulundu:</target> +<target>Uyuşmazlık bulundu:</target> <source>File %x has an invalid date!</source> <target>%x dosyasının tarihi geçersiz!</target> @@ -1300,34 +1321,34 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <target>Dosya listesi oluşturuluyor...</target> <source>Both sides are equal</source> -<target>İki tarafta aynı</target> +<target>İki taraftada aynı</target> <source>Copy new item to left</source> -<target>Yeni ögeyi sola kopyala</target> +<target>Yeni öge sola kopyalansın</target> <source>Copy new item to right</source> -<target>Yeni ögeyi sağa kopyala</target> +<target>Yeni öge sağa kopyalansın</target> <source>Delete left item</source> -<target>Soldaki ögeyi sil</target> +<target>Soldaki öge silinsin</target> <source>Delete right item</source> -<target>Sağdaki ögeyi sil</target> +<target>Sağdaki öge silinsin</target> <source>Move file on left</source> -<target>Soldaki dosyayı taşı</target> +<target>Soldaki dosya taşınsın</target> <source>Move file on right</source> -<target>Sağdaki dosyayı taşı</target> +<target>Sağdaki dosya taşınsın</target> <source>Overwrite left item</source> -<target>Soldaki ögenin üzerine yaz</target> +<target>Soldaki ögenin üzerine yazılsın</target> <source>Overwrite right item</source> -<target>Sağdaki ögenin üzerine yaz</target> +<target>Sağdaki ögenin üzerine yazılsın</target> <source>Do nothing</source> -<target>Hiçbir şey yapma</target> +<target>Hiçbir işlem yapılmasın</target> <source>Update attributes on left</source> <target>Soldaki öznitelikleri güncelle</target> @@ -1365,14 +1386,17 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Moving symbolic link %x to %y</source> <target>%x sembolik bağlantısı %y içine taşınıyor</target> +<source>Removing old versions...</source> +<target>Eski sürümler siliniyor...</target> + <source>Creating file %x</source> -<target>%x dosyası oluşturuluyor</target> +<target>%x dosyası ekleniyor</target> <source>Creating symbolic link %x</source> -<target>%x sembolik bağlantısı oluşturuluyor</target> +<target>%x sembolik bağlantısı ekleniyor</target> <source>Creating folder %x</source> -<target>%x klasörü oluşturuluyor</target> +<target>%x klasörü ekleniyor</target> <source>Overwriting file %x</source> <target>%x dosyasının üzerine yazılıyor</target> @@ -1386,6 +1410,9 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Updating attributes of %x</source> <target>%x öznitelikleri güncelleniyor</target> +<source>Target folder %x already existing.</source> +<target>%x hedef klasörü zaten var.</target> + <source>Target folder input field must not be empty.</source> <target>Hedef klasör giriş alanı boş olmamalı.</target> @@ -1395,11 +1422,8 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>Source folder %x not found.</source> <target>%x kaynak klasörü bulunamadı.</target> -<source>Unresolved conflicts existing!</source> -<target>Çözülmemiş tutarsızlıklar var!</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Çelişkileri yoksayıp eşleştirmeyi sürdürebilirsiniz.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target>Uyuşmazlığı çözülmemiş şu ögeler eşleştirilmeyecek:</target> <source>Significant difference detected:</source> <target>Önemli fark saptandı:</target> @@ -1419,12 +1443,15 @@ Not: Dosya adları kök klasörlere göre bağıl olmalıdır! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Çoklu klasör çiftlerinin parçası olan bir klasör değiştirilecek. Lütfen eşleştirme ayarlarını gözden geçirin.</target> +<source>Left</source> +<target>Sol</target> + +<source>Right</source> +<target>Sağ</target> + <source>Synchronizing folder pair:</source> <target>Eşleştirilen klasör çifti:</target> -<source>Target folder %x already existing.</source> -<target>%x hedef klasörü zaten var.</target> - <source>Generating database...</source> <target>Veri tabanı oluşturuluyor...</target> diff --git a/BUILD/Languages/ukrainian.lng b/BUILD/Languages/ukrainian.lng index 594fd28f..7c184097 100644 --- a/BUILD/Languages/ukrainian.lng +++ b/BUILD/Languages/ukrainian.lng @@ -31,6 +31,9 @@ <source>Abort requested: Waiting for current operation to finish...</source> <target>Запит переривання: В очікуванні завершення поточної операції...</target> +<source>Failure to create time stamp for versioning:</source> +<target></target> + <source>RealtimeSync - Automated Synchronization</source> <target>RealtimeSync - Автоматична синхронізація</target> @@ -55,8 +58,8 @@ <source>Clear filter settings</source> <target>Очистити налаштування фільтра</target> -<source>Create a batch job</source> -<target>Створити пакетне завдання</target> +<source>Save as batch job</source> +<target></target> <source>Comparison settings</source> <target>Налаштування порівнювання</target> @@ -76,9 +79,6 @@ <source>Global settings</source> <target>Глобальні налаштування</target> -<source>Summary</source> -<target>Підсумок</target> - <source>Find</source> <target>Знайти</target> @@ -274,8 +274,8 @@ <source>Select a folder</source> <target>Вибрати папку</target> -<source>Delay [seconds]</source> -<target>Затримка [секунд]</target> +<source>Idle time [seconds]</source> +<target></target> <source>Idle time between last detected change and execution of command</source> <target>Час простою між виявленням останньої зміни та виконанням команди</target> @@ -324,38 +324,23 @@ The command is triggered if: <source>A folder input field is empty.</source> <target>Порожнє поле папки.</target> -<source>File time and size</source> -<target>Дата та розмір файлу</target> - -<source>File content</source> -<target>Вміст файлу</target> - -<source><Automatic></source> -<target><Автоматичний></target> - -<source>Mirror ->></source> -<target>Дзеркало ->></target> - -<source>Update -></source> -<target>Оновити -></target> - -<source>Custom</source> -<target>Вибірково</target> - -<source>FreeFileSync batch</source> -<target>Командний файл FreeFileSync</target> - <source>Synchronization aborted!</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>Synchronization completed successfully.</source> +<target></target> + +<source>Saving log file %x...</source> +<target></target> <source>Press "Switch" to resolve issues in FreeFileSync main dialog.</source> <target>Натисніть "Змінити" для вирішення питань у головному вікні FreeFileSync.</target> @@ -363,9 +348,6 @@ The command is triggered if: <source>Switching to FreeFileSync main dialog...</source> <target>Перехід до головного діалогу FreeFileSync...</target> -<source>Unable to connect to sourceforge.net!</source> -<target>Не можна з’єднатися з sourceforge.net!</target> - <source>A new version of FreeFileSync is available:</source> <target>Доступна нова версія FreeFileSync:</target> @@ -378,6 +360,12 @@ The command is triggered if: <source>Information</source> <target>Інформація</target> +<source>Unable to connect to sourceforge.net!</source> +<target>Не можна з’єднатися з sourceforge.net!</target> + +<source>Current FreeFileSync version number was not found online! Do you want to check manually?</source> +<target></target> + <source>Do you want FreeFileSync to automatically check for updates every week?</source> <target>Ви хочете, щоб FreeFileSync автоматично перевіряв наявність оновлень щотижня?</target> @@ -441,27 +429,27 @@ The command is triggered if: <source>Hibernate</source> <target>Гібернація</target> -<source>1. &Compare</source> -<target>1. &Порівняти</target> - -<source>2. &Synchronize</source> -<target>2. &Синхронізувати</target> - <source>&New</source> <target>Нова</target> <source>&Save</source> <target>Зберегти</target> +<source>Save as &batch job...</source> +<target></target> + +<source>1. &Compare</source> +<target>1. &Порівняти</target> + +<source>2. &Synchronize</source> +<target>2. &Синхронізувати</target> + <source>&Language</source> <target>&Мова</target> <source>&Global settings...</source> <target>&Глобальні налаштування...</target> -<source>&Create batch job...</source> -<target>&Створити завдання...</target> - <source>&Export file list...</source> <target>&Експортувати список файлів...</target> @@ -495,11 +483,11 @@ The command is triggered if: <source>Swap sides</source> <target>Поміняти місцями</target> -<source>Load configuration from file</source> -<target>Завантажити налаштування синхронізації з файлу</target> +<source>Open</source> +<target></target> -<source>Save current configuration to file</source> -<target>Зберегти активні налаштування в файлі</target> +<source>Save</source> +<target></target> <source>Last used configurations (press DEL to remove from list)</source> <target> @@ -507,8 +495,8 @@ The command is triggered if: (тисніть DEL для вилучення зі списку) </target> -<source>Show excluded items</source> -<target>Показати виключені елементи</target> +<source>Hide excluded items</source> +<target></target> <source>Show filtered or temporarily excluded files</source> <target>Показати відфільтровані чи тимчасово виключені елементи</target> @@ -546,15 +534,6 @@ The command is triggered if: <source>Help</source> <target>Допомога</target> -<source>Filter files</source> -<target>Фільтр файлів</target> - -<source>Left</source> -<target>Ліворуч</target> - -<source>Right</source> -<target>Праворуч</target> - <source>Error handling</source> <target>Обробка помилок</target> @@ -576,14 +555,14 @@ The command is triggered if: <source>Abort synchronization on first error</source> <target>Перервати синхронізацію при першій помилці</target> -<source>On completion:</source> -<target>Закінчивши:</target> +<source>On completion</source> +<target></target> <source>Show progress dialog</source> <target>Показувати вікно прогресу</target> -<source>Generate log file</source> -<target>Створити файл журналу</target> +<source>Save log</source> +<target></target> <source>Select folder to save log files</source> <target>Виберіть папку для файлів журналу</target> @@ -594,11 +573,8 @@ The command is triggered if: <source>Limit maximum number of log files</source> <target>Обмежити максимальну кількість файлів журналу</target> -<source>Batch settings</source> -<target>Налаштування пакетного завдання</target> - -<source>Compare by...</source> -<target>Критерії порівнювання</target> +<source>Select variant</source> +<target></target> <source> Files are found equal if @@ -613,6 +589,9 @@ are the same співпадають </target> +<source>File time and size</source> +<target>Дата та розмір файлу</target> + <source> Files are found equal if - file content @@ -620,24 +599,36 @@ is the same </source> <target>Файли вважаються рівними, якщо вміст файлів однаковий</target> +<source>File content</source> +<target>Вміст файлу</target> + <source>Symbolic Link handling</source> <target>Обробка символьного посилання</target> <source>OK</source> <target>OK</target> -<source>Select variant:</source> -<target>Виберіть варіант:</target> +<source><- Two way -></source> +<target></target> <source>Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically.</source> <target>Виявити та поширити зміни на обидві сторони використовуючи базу даних. Видалення, перейменування та конфлікти визначаються автоматично.</target> +<source>Mirror ->></source> +<target>Дзеркало ->></target> + <source>Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization.</source> <target>Дзеркальна (резервна) копія лівої частини. В результаті синхронізації права папка змінюється до повної відповідності лівій.</target> +<source>Update -></source> +<target>Оновити -></target> + <source>Copy new or updated files to right folder.</source> <target>Копіювати нові чи оновлювати файли з правої сторони.</target> +<source>Custom</source> +<target>Вибірково</target> + <source>Configure your own synchronization rules.</source> <target>Налаштувати власні правила синхронізації.</target> @@ -653,8 +644,8 @@ is the same <source>Recycle Bin</source> <target>Корзина</target> -<source>Use Recycle Bin when deleting or overwriting files</source> -<target>Використовувати "Корзину" при вилученні чи перезаписі файлів</target> +<source>Use Recycle Bin for deleted and overwritten files</source> +<target></target> <source>Versioning</source> <target>Запис версій</target> @@ -662,8 +653,8 @@ is the same <source>Move time-stamped files into specified folder</source> <target>Перемістити файли з часовою міткою у вказану папку</target> -<source>Limit maximum number of versions per file</source> -<target>Обмежити кількість версій файлу</target> +<source>Naming convention:</source> +<target></target> <source>Configuration</source> <target>Налаштування</target> @@ -812,6 +803,9 @@ Note: File names must be relative to base directories! <source>Overview</source> <target>Головна</target> +<source>Filter files</source> +<target>Фільтр файлів</target> + <source>Select view</source> <target>Список файлів</target> @@ -863,9 +857,15 @@ Note: File names must be relative to base directories! <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>Never save changes</source> <target>Ніколи не зберігати змін</target> @@ -878,9 +878,6 @@ Note: File names must be relative to base directories! <source>Configuration loaded!</source> <target>Налаштування синхронізації загружено!</target> -<source>Folder Comparison and Synchronization</source> -<target>Порівнювання та Синхронізація папок</target> - <source>Hide files that exist on left side only</source> <target>Приховати файли, які є тільки ліворуч</target> @@ -1041,6 +1038,9 @@ Note: File names must be relative to base directories! <source>Comparing content...</source> <target>Порівнювання вмісту...</target> +<source>Copy</source> +<target></target> + <source>Paused</source> <target>Призупинено</target> @@ -1113,14 +1113,14 @@ Note: File names must be relative to base directories! <source>- folder part only</source> <target>- тільки папка</target> -<source>- Other side's counterpart to %name</source> -<target>- файл-відповідник %name з протилежної сторони</target> +<source>- Other side's counterpart to %item_path%</source> +<target></target> -<source>- Other side's counterpart to %dir</source> -<target>- папка-відповідник %dir з протилежної сторони</target> +<source>- Other side's counterpart to %item_folder%</source> +<target></target> -<source>Make hidden dialogs and warning messages visible again?</source> -<target>Зробити приховані діалоги та попередження знову видимими?</target> +<source>Make hidden warnings and dialogs visible again?</source> +<target></target> <source> <pluralform>Do you really want to move the following object to the Recycle Bin?</pluralform> @@ -1145,50 +1145,29 @@ Note: File names must be relative to base directories! <source>Leave as unresolved conflict</source> <target>Залишити як невирішений конфлікт</target> -<source>Files</source> -<target>Файли</target> +<source>Replace</source> +<target></target> -<source>Percentage</source> -<target>Проценти</target> +<source>Move files and replace if existing</source> +<target></target> -<source>%x TB</source> -<target>%x ТБ</target> +<source>Append a timestamp to each file name</source> +<target></target> -<source>%x PB</source> -<target>%x ПБ</target> +<source>Folder</source> +<target></target> -<source>%x%</source> -<target>%x%</target> +<source>File</source> +<target></target> -<source> -<pluralform>1 min</pluralform> -<pluralform>%x min</pluralform> -</source> -<target> -<pluralform>%x хв</pluralform> -<pluralform>%x хв</pluralform> -<pluralform>%x хв</pluralform> -</target> +<source>YYYY-MM-DD hhmmss</source> +<target></target> -<source> -<pluralform>1 hour</pluralform> -<pluralform>%x hours</pluralform> -</source> -<target> -<pluralform>%x година</pluralform> -<pluralform>%x години</pluralform> -<pluralform>%x годин</pluralform> -</target> +<source>Files</source> +<target>Файли</target> -<source> -<pluralform>1 day</pluralform> -<pluralform>%x days</pluralform> -</source> -<target> -<pluralform>%x день</pluralform> -<pluralform>%x дні</pluralform> -<pluralform>%x днів</pluralform> -</target> +<source>Percentage</source> +<target>Проценти</target> <source>Cannot monitor directory %x.</source> <target>Не вдається контролювати каталог %x.</target> @@ -1238,6 +1217,9 @@ Note: File names must be relative to base directories! <source>Cannot copy file %x to %y.</source> <target>Не вдається зкопіювати файл %х до %y.</target> +<source>Type of item %x is not supported:</source> +<target></target> + <source>Cannot open directory %x.</source> <target>Не вдається відкрити каталогу %x.</target> @@ -1247,6 +1229,45 @@ Note: File names must be relative to base directories! <source>Detected endless directory recursion.</source> <target>Виявлено нескінченну рекурсію каталогів.</target> +<source>%x TB</source> +<target>%x ТБ</target> + +<source>%x PB</source> +<target>%x ПБ</target> + +<source>%x%</source> +<target>%x%</target> + +<source> +<pluralform>1 min</pluralform> +<pluralform>%x min</pluralform> +</source> +<target> +<pluralform>%x хв</pluralform> +<pluralform>%x хв</pluralform> +<pluralform>%x хв</pluralform> +</target> + +<source> +<pluralform>1 hour</pluralform> +<pluralform>%x hours</pluralform> +</source> +<target> +<pluralform>%x година</pluralform> +<pluralform>%x години</pluralform> +<pluralform>%x годин</pluralform> +</target> + +<source> +<pluralform>1 day</pluralform> +<pluralform>%x days</pluralform> +</source> +<target> +<pluralform>%x день</pluralform> +<pluralform>%x дні</pluralform> +<pluralform>%x днів</pluralform> +</target> + <source>Cannot set privilege %x.</source> <target>Не вдається встановити привілеї %х.</target> @@ -1379,6 +1400,9 @@ Note: File names must be relative to base directories! <source>Moving symbolic link %x to %y</source> <target>Переміщення символьного посилання %x до %y</target> +<source>Removing old versions...</source> +<target></target> + <source>Creating file %x</source> <target>Створення файлу %x</target> @@ -1400,6 +1424,9 @@ Note: File names must be relative to base directories! <source>Updating attributes of %x</source> <target>Оновлення атрибутів %x</target> +<source>Target folder %x already existing.</source> +<target>Цільова папка %x вже існує.</target> + <source>Target folder input field must not be empty.</source> <target>Поле цільової папки не повинно бути порожнім.</target> @@ -1409,11 +1436,8 @@ Note: File names must be relative to base directories! <source>Source folder %x not found.</source> <target>Вихідний каталог %x не знайдено.</target> -<source>Unresolved conflicts existing!</source> -<target>Є невирішені конфлікти</target> - -<source>You can ignore conflicts and continue synchronization.</source> -<target>Ви можете проігнорувати їх та продовжити синхронізацію.</target> +<source>The following items have unresolved conflicts and will not be synchronized:</source> +<target></target> <source>Significant difference detected:</source> <target>Виявлена істотна різниця:</target> @@ -1433,12 +1457,15 @@ Note: File names must be relative to base directories! <source>A folder will be modified which is part of multiple folder pairs. Please review synchronization settings.</source> <target>Буде змінена папка, яка є частиною кількох пар папок. Будь ласка, перегляньте налаштування синхронізації.</target> +<source>Left</source> +<target>Ліворуч</target> + +<source>Right</source> +<target>Праворуч</target> + <source>Synchronizing folder pair:</source> <target>Синхронізація пари папок:</target> -<source>Target folder %x already existing.</source> -<target>Цільова папка %x вже існує.</target> - <source>Generating database...</source> <target>Створення бази даних...</target> diff --git a/BUILD/Resources.zip b/BUILD/Resources.zip Binary files differindex 6ce935e9..3b646713 100644 --- a/BUILD/Resources.zip +++ b/BUILD/Resources.zip @@ -5,17 +5,17 @@ SHAREDIR = $(DESTDIR)$(prefix)/share APPSHAREDIR = $(SHAREDIR)/$(APPNAME) DOCSHAREDIR = $(SHAREDIR)/doc/$(APPNAME) -COMMON_COMPILE_FLAGS = -Wall -pipe -O3 -pthread -std=gnu++0x -DNDEBUG -DwxUSE_UNICODE -DFFS_LINUX -DZEN_PLATFORM_OTHER -DWXINTL_NO_GETTEXT_MACRO -I. -include "zen/i18n.h" -include "zen/warn_static.h" -COMMON_LINK_FLAGS = -pthread -lrt -lz +CPPFLAGS = -Wall -pipe -O3 -pthread -std=gnu++0x -DNDEBUG -DwxUSE_UNICODE -DFFS_LINUX -DZEN_PLATFORM_OTHER -DWXINTL_NO_GETTEXT_MACRO -I. -include "zen/i18n.h" -include "zen/warn_static.h" +LINKFLAGS = -pthread -lrt -lz -#default build -CPPFLAGS = $(COMMON_COMPILE_FLAGS) `wx-config --cxxflags --debug=no --unicode=yes` -LINKFLAGS = $(COMMON_LINK_FLAGS) `wx-config --libs std,aui --debug=no --unicode=yes` -lboost_thread -lboost_system - -#static std library linkage used for precompiled release ifeq ($(BUILD),release) -CPPFLAGS = $(COMMON_COMPILE_FLAGS) `wx-config --cxxflags --debug=no --unicode=yes --static=yes` -LINKFLAGS = $(COMMON_LINK_FLAGS) `wx-config --libs std,aui --debug=no --unicode=yes --static=yes` /usr/local/lib/libboost_thread.a /usr/local/lib/libboost_system.a +#static wxWidgets and boost library linkage for precompiled release +CPPFLAGS += `wx-config --cxxflags --debug=no --unicode=yes --static=yes` +LINKFLAGS += `wx-config --libs std,aui --debug=no --unicode=yes --static=yes` -Wl,-Bstatic -lboost_thread -lboost_system -Wl,-Bdynamic +else +#default build +CPPFLAGS += `wx-config --cxxflags --debug=no --unicode=yes` +LINKFLAGS += `wx-config --libs std,aui --debug=no --unicode=yes` -lboost_thread -lboost_system endif ##################################################################################################### diff --git a/RealtimeSync/gui_generated.cpp b/RealtimeSync/gui_generated.cpp index 1e817367..b32fa8bb 100644 --- a/RealtimeSync/gui_generated.cpp +++ b/RealtimeSync/gui_generated.cpp @@ -50,92 +50,115 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr bSizerMain = new wxBoxSizer( wxVERTICAL ); m_panelMain = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelMain->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + wxBoxSizer* bSizer1; bSizer1 = new wxBoxSizer( wxVERTICAL ); - wxBoxSizer* bSizer13; - bSizer13 = new wxBoxSizer( wxVERTICAL ); + m_panel5 = new wxPanel( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel5->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer17; + bSizer17 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer16; + bSizer16 = new wxBoxSizer( wxHORIZONTAL ); - wxStaticBoxSizer* sbSizer41; - sbSizer41 = new wxStaticBoxSizer( new wxStaticBox( m_panelMain, wxID_ANY, _("Usage:") ), wxVERTICAL ); + m_staticText9 = new wxStaticText( m_panel5, wxID_ANY, _("Usage:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText9->Wrap( -1 ); + m_staticText9->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - m_staticText3 = new wxStaticText( m_panelMain, wxID_ANY, _("1. Select folders to watch."), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer16->Add( m_staticText9, 0, wxALL, 5 ); + + wxBoxSizer* bSizer15; + bSizer15 = new wxBoxSizer( wxVERTICAL ); + + m_staticText3 = new wxStaticText( m_panel5, wxID_ANY, _("1. Select folders to watch."), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText3->Wrap( -1 ); - sbSizer41->Add( m_staticText3, 0, wxLEFT, 10 ); + bSizer15->Add( m_staticText3, 0, wxLEFT, 10 ); - m_staticText4 = new wxStaticText( m_panelMain, wxID_ANY, _("2. Enter a command line."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText4 = new wxStaticText( m_panel5, wxID_ANY, _("2. Enter a command line."), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText4->Wrap( -1 ); - sbSizer41->Add( m_staticText4, 0, wxLEFT, 10 ); + bSizer15->Add( m_staticText4, 0, wxLEFT, 10 ); - m_staticText5 = new wxStaticText( m_panelMain, wxID_ANY, _("3. Press 'Start'."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText5 = new wxStaticText( m_panel5, wxID_ANY, _("3. Press 'Start'."), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText5->Wrap( -1 ); - sbSizer41->Add( m_staticText5, 0, wxLEFT, 10 ); + bSizer15->Add( m_staticText5, 0, wxLEFT, 10 ); + + + bSizer16->Add( bSizer15, 0, wxTOP|wxLEFT, 5 ); - bSizer13->Add( sbSizer41, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxBOTTOM, 5 ); + bSizer17->Add( bSizer16, 0, 0, 5 ); - m_staticText811 = new wxStaticText( m_panelMain, wxID_ANY, _("To get started just import a .ffs_batch file."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText811 = new wxStaticText( m_panel5, wxID_ANY, _("To get started just import a .ffs_batch file."), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText811->Wrap( -1 ); m_staticText811->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - bSizer13->Add( m_staticText811, 0, wxLEFT, 20 ); + bSizer17->Add( m_staticText811, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); - bSizer1->Add( bSizer13, 0, wxEXPAND|wxRIGHT|wxLEFT, 20 ); + m_panel5->SetSizer( bSizer17 ); + m_panel5->Layout(); + bSizer17->Fit( m_panel5 ); + bSizer1->Add( m_panel5, 0, wxEXPAND, 5 ); m_staticline2 = new wxStaticLine( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer1->Add( m_staticline2, 0, wxEXPAND|wxTOP, 5 ); + bSizer1->Add( m_staticline2, 0, wxEXPAND, 5 ); m_staticText7 = new wxStaticText( m_panelMain, wxID_ANY, _("Folders to watch"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText7->Wrap( -1 ); bSizer1->Add( m_staticText7, 0, wxALL, 5 ); m_panelMainFolder = new wxPanel( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer10; - bSizer10 = new wxBoxSizer( wxVERTICAL ); + wxFlexGridSizer* fgSizer1; + fgSizer1 = new wxFlexGridSizer( 0, 2, 0, 0 ); + fgSizer1->AddGrowableCol( 1 ); + fgSizer1->SetFlexibleDirection( wxBOTH ); + fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_ALL ); - wxBoxSizer* bSizer11; - bSizer11 = new wxBoxSizer( wxHORIZONTAL ); - - bSizer11->Add( 25, 0, 0, 0, 5 ); + fgSizer1->Add( 0, 0, 1, wxEXPAND, 5 ); m_staticTextFinalPath = new wxStaticText( m_panelMainFolder, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextFinalPath->Wrap( -1 ); - bSizer11->Add( m_staticTextFinalPath, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 2 ); - + fgSizer1->Add( m_staticTextFinalPath, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); - bSizer10->Add( bSizer11, 0, 0, 5 ); - - wxBoxSizer* bSizer781; - bSizer781 = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizer20; + bSizer20 = new wxBoxSizer( wxHORIZONTAL ); - m_bpButtonAddFolder = new wxBitmapButton( m_panelMainFolder, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 23,23 ), wxBU_AUTODRAW ); + m_bpButtonAddFolder = new wxBitmapButton( m_panelMainFolder, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 24,24 ), wxBU_AUTODRAW ); m_bpButtonAddFolder->SetToolTip( _("Add folder") ); - bSizer781->Add( m_bpButtonAddFolder, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer20->Add( m_bpButtonAddFolder, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bpButtonRemoveTopFolder = new wxBitmapButton( m_panelMainFolder, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 23,23 ), wxBU_AUTODRAW ); + m_bpButtonRemoveTopFolder = new wxBitmapButton( m_panelMainFolder, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 24,24 ), wxBU_AUTODRAW ); m_bpButtonRemoveTopFolder->SetToolTip( _("Remove folder") ); - bSizer781->Add( m_bpButtonRemoveTopFolder, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer20->Add( m_bpButtonRemoveTopFolder, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + fgSizer1->Add( bSizer20, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer19; + bSizer19 = new wxBoxSizer( wxHORIZONTAL ); m_txtCtrlDirectoryMain = new wxTextCtrl( m_panelMainFolder, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 300,-1 ), 0 ); m_txtCtrlDirectoryMain->SetMaxLength( 0 ); - bSizer781->Add( m_txtCtrlDirectoryMain, 1, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer19->Add( m_txtCtrlDirectoryMain, 1, wxALIGN_CENTER_VERTICAL, 5 ); m_buttonSelectDirMain = new wxButton( m_panelMainFolder, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); m_buttonSelectDirMain->SetToolTip( _("Select a folder") ); - bSizer781->Add( m_buttonSelectDirMain, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer19->Add( m_buttonSelectDirMain, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer10->Add( bSizer781, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + fgSizer1->Add( bSizer19, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - m_panelMainFolder->SetSizer( bSizer10 ); + m_panelMainFolder->SetSizer( fgSizer1 ); m_panelMainFolder->Layout(); - bSizer10->Fit( m_panelMainFolder ); + fgSizer1->Fit( m_panelMainFolder ); bSizer1->Add( m_panelMainFolder, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); m_scrolledWinFolders = new wxScrolledWindow( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); @@ -146,17 +169,17 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr m_scrolledWinFolders->SetSizer( bSizerFolders ); m_scrolledWinFolders->Layout(); bSizerFolders->Fit( m_scrolledWinFolders ); - bSizer1->Add( m_scrolledWinFolders, 1, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + bSizer1->Add( m_scrolledWinFolders, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_staticline212 = new wxStaticLine( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer1->Add( m_staticline212, 0, wxEXPAND|wxTOP, 5 ); + bSizer1->Add( m_staticline212, 0, wxEXPAND, 5 ); wxBoxSizer* bSizer14; bSizer14 = new wxBoxSizer( wxHORIZONTAL ); - m_staticText8 = new wxStaticText( m_panelMain, wxID_ANY, _("Delay [seconds]"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText8 = new wxStaticText( m_panelMain, wxID_ANY, _("Idle time [seconds]"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText8->Wrap( -1 ); - bSizer14->Add( m_staticText8, 0, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer14->Add( m_staticText8, 0, wxALL, 5 ); bSizer14->Add( 0, 0, 1, wxEXPAND, 5 ); @@ -164,13 +187,13 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr m_spinCtrlDelay = new wxSpinCtrl( m_panelMain, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); m_spinCtrlDelay->SetToolTip( _("Idle time between last detected change and execution of command") ); - bSizer14->Add( m_spinCtrlDelay, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer14->Add( m_spinCtrlDelay, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - bSizer1->Add( bSizer14, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + bSizer1->Add( bSizer14, 0, wxALIGN_RIGHT|wxEXPAND, 5 ); m_staticline211 = new wxStaticLine( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer1->Add( m_staticline211, 0, wxEXPAND|wxTOP, 5 ); + bSizer1->Add( m_staticline211, 0, wxEXPAND, 5 ); m_staticText6 = new wxStaticText( m_panelMain, wxID_ANY, _("Command line"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText6->Wrap( -1 ); @@ -180,16 +203,34 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr m_textCtrlCommand->SetMaxLength( 0 ); m_textCtrlCommand->SetToolTip( _("The command is triggered if:\n- files or subfolders change\n- new folders arrive (e.g. USB stick insert)") ); - bSizer1->Add( m_textCtrlCommand, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + bSizer1->Add( m_textCtrlCommand, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticline5 = new wxStaticLine( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer1->Add( m_staticline5, 0, wxEXPAND, 5 ); + + m_panel4 = new wxPanel( m_panelMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel4->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer141; + bSizer141 = new wxBoxSizer( wxHORIZONTAL ); - m_buttonStart = new zen::BitmapButton( m_panelMain, wxID_OK, _("Start"), wxDefaultPosition, wxSize( -1,50 ), 0 ); + + bSizer141->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_buttonStart = new zen::BitmapButton( m_panel4, wxID_OK, _("Start"), wxDefaultPosition, wxSize( -1,50 ), 0 ); m_buttonStart->SetDefault(); m_buttonStart->SetFont( wxFont( 14, 74, 90, 92, false, wxT("Arial Black") ) ); - bSizer1->Add( m_buttonStart, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + bSizer141->Add( m_buttonStart, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + + + bSizer141->Add( 0, 0, 1, wxEXPAND, 5 ); - m_buttonCancel = new wxButton( m_panelMain, wxID_CANCEL, _("dummy"), wxDefaultPosition, wxSize( 0,0 ), 0 ); - bSizer1->Add( m_buttonCancel, 0, 0, 5 ); + + m_panel4->SetSizer( bSizer141 ); + m_panel4->Layout(); + bSizer141->Fit( m_panel4 ); + bSizer1->Add( m_panel4, 0, wxEXPAND, 5 ); m_panelMain->SetSizer( bSizer1 ); @@ -212,7 +253,6 @@ MainDlgGenerated::MainDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr m_bpButtonAddFolder->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDlgGenerated::OnAddFolder ), NULL, this ); m_bpButtonRemoveTopFolder->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDlgGenerated::OnRemoveTopFolder ), NULL, this ); m_buttonStart->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDlgGenerated::OnStart ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDlgGenerated::OnQuit ), NULL, this ); } MainDlgGenerated::~MainDlgGenerated() @@ -227,7 +267,6 @@ MainDlgGenerated::~MainDlgGenerated() m_bpButtonAddFolder->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDlgGenerated::OnAddFolder ), NULL, this ); m_bpButtonRemoveTopFolder->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDlgGenerated::OnRemoveTopFolder ), NULL, this ); m_buttonStart->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDlgGenerated::OnStart ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDlgGenerated::OnQuit ), NULL, this ); } @@ -236,25 +275,19 @@ FolderGenerated::FolderGenerated( wxWindow* parent, wxWindowID id, const wxPoint wxBoxSizer* bSizer114; bSizer114 = new wxBoxSizer( wxHORIZONTAL ); - m_bpButtonRemoveFolder = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 23,23 ), wxBU_AUTODRAW ); + m_bpButtonRemoveFolder = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 24,24 ), wxBU_AUTODRAW ); m_bpButtonRemoveFolder->SetToolTip( _("Remove folder") ); bSizer114->Add( m_bpButtonRemoveFolder, 0, wxALIGN_CENTER_VERTICAL, 5 ); - wxBoxSizer* bSizer20; - bSizer20 = new wxBoxSizer( wxHORIZONTAL ); - m_txtCtrlDirectory = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_txtCtrlDirectory->SetMaxLength( 0 ); - bSizer20->Add( m_txtCtrlDirectory, 1, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer114->Add( m_txtCtrlDirectory, 1, wxALIGN_CENTER_VERTICAL, 5 ); m_buttonSelectDir = new wxButton( this, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); m_buttonSelectDir->SetToolTip( _("Select a folder") ); - bSizer20->Add( m_buttonSelectDir, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer114->Add( bSizer20, 1, wxALIGN_CENTER_VERTICAL, 5 ); + bSizer114->Add( m_buttonSelectDir, 0, wxALIGN_CENTER_VERTICAL, 5 ); this->SetSizer( bSizer114 ); @@ -291,30 +324,30 @@ ErrorDlgGenerated::ErrorDlgGenerated( wxWindow* parent, wxWindowID id, const wxS bSizer24->Add( bSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer24->Add( m_staticline2, 0, wxEXPAND|wxTOP, 5 ); + bSizer24->Add( m_staticline2, 0, wxEXPAND, 5 ); m_panel3 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_panel3->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); wxBoxSizer* bSizer13; - bSizer13 = new wxBoxSizer( wxVERTICAL ); + bSizer13 = new wxBoxSizer( wxHORIZONTAL ); + - wxBoxSizer* bSizer25; - bSizer25 = new wxBoxSizer( wxHORIZONTAL ); + bSizer13->Add( 0, 0, 1, wxEXPAND, 5 ); m_buttonRetry = new wxButton( m_panel3, wxID_RETRY, _("&Retry"), wxDefaultPosition, wxSize( -1,30 ), 0 ); m_buttonRetry->SetDefault(); m_buttonRetry->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - bSizer25->Add( m_buttonRetry, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer13->Add( m_buttonRetry, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); m_buttonAbort = new wxButton( m_panel3, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); m_buttonAbort->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - bSizer25->Add( m_buttonAbort, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + bSizer13->Add( m_buttonAbort, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - bSizer13->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + bSizer13->Add( 0, 0, 1, wxEXPAND, 5 ); m_panel3->SetSizer( bSizer13 ); diff --git a/RealtimeSync/gui_generated.h b/RealtimeSync/gui_generated.h index 56488f86..6426b2d2 100644 --- a/RealtimeSync/gui_generated.h +++ b/RealtimeSync/gui_generated.h @@ -24,12 +24,11 @@ namespace zen { class BitmapButton; } #include <wx/settings.h> #include <wx/stattext.h> #include <wx/sizer.h> -#include <wx/statbox.h> +#include <wx/panel.h> #include <wx/statline.h> #include <wx/bmpbuttn.h> #include <wx/button.h> #include <wx/textctrl.h> -#include <wx/panel.h> #include <wx/scrolwin.h> #include <wx/spinctrl.h> #include <wx/frame.h> @@ -54,6 +53,8 @@ protected: wxMenuItem* m_menuItemAbout; wxBoxSizer* bSizerMain; wxPanel* m_panelMain; + wxPanel* m_panel5; + wxStaticText* m_staticText9; wxStaticText* m_staticText3; wxStaticText* m_staticText4; wxStaticText* m_staticText5; @@ -74,8 +75,9 @@ protected: wxStaticLine* m_staticline211; wxStaticText* m_staticText6; wxTextCtrl* m_textCtrlCommand; + wxStaticLine* m_staticline5; + wxPanel* m_panel4; zen::BitmapButton* m_buttonStart; - wxButton* m_buttonCancel; // Virtual event handlers, overide them in your derived class virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } diff --git a/RealtimeSync/main_dlg.h b/RealtimeSync/main_dlg.h index 82d27944..50f074e4 100644 --- a/RealtimeSync/main_dlg.h +++ b/RealtimeSync/main_dlg.h @@ -30,7 +30,6 @@ private: void loadConfig(const wxString& filename); virtual void OnClose (wxCloseEvent& event) { Destroy(); } - virtual void OnQuit (wxCommandEvent& event) { Destroy(); } virtual void OnShowHelp (wxCommandEvent& event); virtual void OnMenuAbout (wxCommandEvent& event); virtual void OnAddFolder (wxCommandEvent& event); diff --git a/RealtimeSync/makefile b/RealtimeSync/makefile index 761d7722..c0386603 100644 --- a/RealtimeSync/makefile +++ b/RealtimeSync/makefile @@ -2,17 +2,17 @@ APPNAME = RealtimeSync prefix = /usr BINDIR = $(DESTDIR)$(prefix)/bin -COMMON_COMPILE_FLAGS = -Wall -pipe -O3 -pthread -std=gnu++0x -DNDEBUG -DwxUSE_UNICODE -DFFS_LINUX -DZEN_PLATFORM_OTHER -DWXINTL_NO_GETTEXT_MACRO -I.. -include "../zen/i18n.h" -include "zen/warn_static.h" -COMMON_LINK_FLAGS = -pthread -lrt +CPPFLAGS = -Wall -pipe -O3 -pthread -std=gnu++0x -DNDEBUG -DwxUSE_UNICODE -DFFS_LINUX -DZEN_PLATFORM_OTHER -DWXINTL_NO_GETTEXT_MACRO -I.. -include "../zen/i18n.h" -include "zen/warn_static.h" +LINKFLAGS = -pthread -lrt -#default build -CPPFLAGS = $(COMMON_COMPILE_FLAGS) `wx-config --cxxflags --debug=no --unicode=yes` -LINKFLAGS = $(COMMON_LINK_FLAGS) `wx-config --libs --debug=no --unicode=yes` -lboost_thread -lboost_system - -#static std library linkage used for precompiled release ifeq ($(BUILD),release) -CPPFLAGS = $(COMMON_COMPILE_FLAGS) `wx-config --cxxflags --debug=no --unicode=yes --static=yes` -LINKFLAGS = $(COMMON_LINK_FLAGS) `wx-config --libs --debug=no --unicode=yes --static=yes` /usr/local/lib/libboost_thread.a /usr/local/lib/libboost_system.a +#static wxWidgets and boost library linkage for precompiled release +CPPFLAGS += `wx-config --cxxflags --debug=no --unicode=yes --static=yes` +LINKFLAGS += `wx-config --libs --debug=no --unicode=yes --static=yes` -Wl,-Bstatic -lboost_thread -lboost_system -Wl,-Bdynamic +else +#default build +CPPFLAGS += `wx-config --cxxflags --debug=no --unicode=yes` +LINKFLAGS += `wx-config --libs --debug=no --unicode=yes` -lboost_thread -lboost_system endif ##################################################################################################### diff --git a/RealtimeSync/resources.cpp b/RealtimeSync/resources.cpp index 4e84921d..391a1ddb 100644 --- a/RealtimeSync/resources.cpp +++ b/RealtimeSync/resources.cpp @@ -59,11 +59,11 @@ GlobalResources::GlobalResources() const wxBitmap& GlobalResources::getImageInt(const wxString& name) const { - auto iter = bitmaps.find(!contains(name, L'.') ? //assume .png ending if nothing else specified + auto it = bitmaps.find(!contains(name, L'.') ? //assume .png ending if nothing else specified name + L".png" : name); - if (iter != bitmaps.end()) - return iter->second; + if (it != bitmaps.end()) + return it->second; else { assert(false); diff --git a/RealtimeSync/watcher.cpp b/RealtimeSync/watcher.cpp index 8ed37ea3..1380e474 100644 --- a/RealtimeSync/watcher.cpp +++ b/RealtimeSync/watcher.cpp @@ -65,9 +65,9 @@ rts::WaitResult rts::waitForChanges(const std::vector<Zstring>& dirNamesNonFmt, //detect when volumes are removed/are not available anymore std::vector<std::pair<Zstring, std::shared_ptr<DirWatcher>>> watches; - for (auto iter = dirNamesFmt.begin(); iter != dirNamesFmt.end(); ++iter) + for (auto it = dirNamesFmt.begin(); it != dirNamesFmt.end(); ++it) { - const Zstring& dirnameFmt = *iter; + const Zstring& dirnameFmt = *it; try { //a non-existent network path may block, so check existence asynchronously! @@ -107,10 +107,10 @@ rts::WaitResult rts::waitForChanges(const std::vector<Zstring>& dirNamesNonFmt, }(); - for (auto iter = watches.begin(); iter != watches.end(); ++iter) + for (auto it = watches.begin(); it != watches.end(); ++it) { - const Zstring& dirname = iter->first; - DirWatcher& watcher = *(iter->second); + const Zstring& dirname = it->first; + DirWatcher& watcher = *(it->second); //IMPORTANT CHECK: dirwatcher has problems detecting removal of top watched directories! if (checkDirExistNow) @@ -166,9 +166,9 @@ void rts::waitForMissingDirs(const std::vector<Zstring>& dirNamesNonFmt, WaitCal const std::vector<Zstring>& dirNamesFmt = getFormattedDirs(dirNamesNonFmt); //throw FileError bool allExisting = true; - for (auto iter = dirNamesFmt.begin(); iter != dirNamesFmt.end(); ++iter) + for (auto it = dirNamesFmt.begin(); it != dirNamesFmt.end(); ++it) { - const Zstring dirnameFmt = *iter; + const Zstring dirnameFmt = *it; auto ftDirExisting = async([=]() -> bool { #ifdef FFS_WIN diff --git a/algorithm.cpp b/algorithm.cpp index a39473a4..affc5bd1 100644 --- a/algorithm.cpp +++ b/algorithm.cpp @@ -400,9 +400,9 @@ private: const InSyncDir::FileList::value_type* dbEntry = nullptr; if (dbContainer) { - auto iter = dbContainer->files.find(fileObj.getObjShortName()); - if (iter != dbContainer->files.end()) - dbEntry = &*iter; + auto it = dbContainer->files.find(fileObj.getObjShortName()); + if (it != dbContainer->files.end()) + dbEntry = &*it; } //evaluation @@ -436,9 +436,9 @@ private: const InSyncDir::LinkList::value_type* dbEntry = nullptr; if (dbContainer) { - auto iter = dbContainer->symlinks.find(linkObj.getObjShortName()); - if (iter != dbContainer->symlinks.end()) - dbEntry = &*iter; + auto it = dbContainer->symlinks.find(linkObj.getObjShortName()); + if (it != dbContainer->symlinks.end()) + dbEntry = &*it; } //evaluation @@ -470,9 +470,9 @@ private: const InSyncDir::DirList::value_type* dbEntry = nullptr; if (dbContainer) { - auto iter = dbContainer->dirs.find(dirObj.getObjShortName()); - if (iter != dbContainer->dirs.end()) - dbEntry = &*iter; + auto it = dbContainer->dirs.find(dirObj.getObjShortName()); + if (it != dbContainer->dirs.end()) + dbEntry = &*it; } if (cat != DIR_EQUAL) @@ -526,12 +526,12 @@ private: static typename Container::const_iterator findValue(const Container& cnt, const FileIdKey& key) { auto iterPair = cnt.equal_range(key); //since file id is already unique, we expect a single-element range at most - auto iter = std::find_if(iterPair.first, iterPair.second, + auto it = std::find_if(iterPair.first, iterPair.second, [&](const typename Container::value_type& item) { return sameFileTime(std::get<0>(item.first), std::get<0>(key), 2); //respect 2 second FAT/FAT32 precision }); - return iter == iterPair.second ? cnt.end() : iter; + return it == iterPair.second ? cnt.end() : it; } void detectRenamedFiles() const @@ -541,10 +541,10 @@ private: { const FileIdKey& keyLeft = RedetermineAuto::getFileIdKey<LEFT_SIDE>(*fileLeftOnly); - auto iter = findValue(onceEqual, keyLeft); - if (iter != onceEqual.end()) + auto it = findValue(onceEqual, keyLeft); + if (it != onceEqual.end()) { - const FileIdKey& keyRight = iter->second; + const FileIdKey& keyRight = it->second; auto iter2 = findValue(exRightOnly, keyRight); if (iter2 != exRightOnly.end()) @@ -683,10 +683,10 @@ void zen::redetermineSyncDirection(const MainConfiguration& mainCfg, FolderCompa if (folderCmp.size() != directCfgs.size()) throw std::logic_error("Programming Error: Contract violation! " + std::string(__FILE__) + ":" + numberTo<std::string>(__LINE__)); - for (auto iter = folderCmp.begin(); iter != folderCmp.end(); ++iter) + for (auto it = folderCmp.begin(); it != folderCmp.end(); ++it) { - const DirectionConfig& cfg = directCfgs[iter - folderCmp.begin()]; - redetermineSyncDirection(cfg, **iter, reportWarning); + const DirectionConfig& cfg = directCfgs[it - folderCmp.begin()]; + redetermineSyncDirection(cfg, **it, reportWarning); } } @@ -1023,11 +1023,11 @@ void zen::applyFiltering(FolderComparison& folderCmp, const MainConfiguration& m mainCfg.additionalPairs.end()); - for (auto iter = allPairs.begin(); iter != allPairs.end(); ++iter) + for (auto it = allPairs.begin(); it != allPairs.end(); ++it) { - BaseDirMapping& baseDirectory = *folderCmp[iter - allPairs.begin()]; + BaseDirMapping& baseDirectory = *folderCmp[it - allPairs.begin()]; - const NormalizedFilter normFilter = normalizeFilters(mainCfg.globalFilter, iter->localFilter); + const NormalizedFilter normFilter = normalizeFilters(mainCfg.globalFilter, it->localFilter); //"set" hard filter ApplyHardFilter<STRATEGY_SET>(*normFilter.nameFilter).execute(baseDirectory); @@ -1245,9 +1245,9 @@ void deleteFromGridAndHDOneSide(std::vector<FileSystemObject*>& ptrList, bool useRecycleBin, DeleteFilesHandler& handler) { - for (auto iter = ptrList.begin(); iter != ptrList.end(); ++iter) //VS 2010 bug prevents replacing this by std::for_each + lamba + for (auto it = ptrList.begin(); it != ptrList.end(); ++it) //VS 2010 bug prevents replacing this by std::for_each + lamba { - FileSystemObject& fsObj = **iter; //all pointers are required(!) to be bound + FileSystemObject& fsObj = **it; //all pointers are required(!) to be bound if (fsObj.isEmpty<side>()) //element may be implicitly deleted, e.g. if parent folder was deleted first continue; @@ -1282,22 +1282,22 @@ void categorize(const std::set<FileSystemObject*>& rowsIn, #ifdef FFS_WIN const Zstring& baseDirPf = fsObj.root().getBaseDirPf<side>(); - auto iter = hasRecyclerBuffer.find(baseDirPf); - if (iter != hasRecyclerBuffer.end()) - return iter->second; + auto it = hasRecyclerBuffer.find(baseDirPf); + if (it != hasRecyclerBuffer.end()) + return it->second; return hasRecyclerBuffer.insert(std::make_pair(baseDirPf, recycleBinStatus(baseDirPf) == STATUS_REC_EXISTS)).first->second; #else return true; #endif }; - for (auto iter = rowsIn.begin(); iter != rowsIn.end(); ++iter) - if (!(*iter)->isEmpty<side>()) + for (auto it = rowsIn.begin(); it != rowsIn.end(); ++it) + if (!(*it)->isEmpty<side>()) { - if (useRecycleBin && hasRecycler(**iter)) //Windows' ::SHFileOperation() will delete permanently anyway, but we have a superior deletion routine - deleteRecyler.push_back(*iter); + if (useRecycleBin && hasRecycler(**it)) //Windows' ::SHFileOperation() will delete permanently anyway, but we have a superior deletion routine + deleteRecyler.push_back(*it); else - deletePermanent.push_back(*iter); + deletePermanent.push_back(*it); } } } @@ -1319,8 +1319,8 @@ void zen::deleteFromGridAndHD(const std::vector<FileSystemObject*>& rowsToDelete //build up mapping from base directory to corresponding direction config hash_map<const BaseDirMapping*, DirectionConfig> baseDirCfgs; - for (auto iter = folderCmp.begin(); iter != folderCmp.end(); ++iter) - baseDirCfgs[&** iter] = directCfgs[iter - folderCmp.begin()]; + for (auto it = folderCmp.begin(); it != folderCmp.end(); ++it) + baseDirCfgs[&** it] = directCfgs[it - folderCmp.begin()]; std::set<FileSystemObject*> deleteLeft (rowsToDeleteOnLeft .begin(), rowsToDeleteOnLeft .end()); std::set<FileSystemObject*> deleteRight(rowsToDeleteOnRight.begin(), rowsToDeleteOnRight.end()); @@ -1340,9 +1340,9 @@ void zen::deleteFromGridAndHD(const std::vector<FileSystemObject*>& rowsToDelete std::set<FileSystemObject*> deletedTotal = deleteLeft; deletedTotal.insert(deleteRight.begin(), deleteRight.end()); - for (auto iter = deletedTotal.begin(); iter != deletedTotal.end(); ++iter) + for (auto it = deletedTotal.begin(); it != deletedTotal.end(); ++it) { - FileSystemObject& fsObj = **iter; //all pointers are required(!) to be bound + FileSystemObject& fsObj = **it; //all pointers are required(!) to be bound if (fsObj.isEmpty<LEFT_SIDE>() != fsObj.isEmpty<RIGHT_SIDE>()) //make sure objects exists on one side only { @@ -1388,9 +1388,9 @@ void zen::deleteFromGridAndHD(const std::vector<FileSystemObject*>& rowsToDelete std::wstring warningMessage = _("Recycle Bin is not available for the following paths! Files will be deleted permanently instead:"); warningMessage += L"\n"; - for (auto iter = hasRecyclerBuffer.begin(); iter != hasRecyclerBuffer.end(); ++iter) - if (!iter->second) - warningMessage += L"\n" + utfCvrtTo<std::wstring>(iter->first); + for (auto it = hasRecyclerBuffer.begin(); it != hasRecyclerBuffer.end(); ++it) + if (!it->second) + warningMessage += L"\n" + utfCvrtTo<std::wstring>(it->first); statusHandler.reportWarning(warningMessage, warningRecyclerMissing); } diff --git a/comparison.cpp b/comparison.cpp index 3e99e366..0832a5bf 100644 --- a/comparison.cpp +++ b/comparison.cpp @@ -107,9 +107,9 @@ void determineExistentDirs(const std::set<Zstring, LessFilename>& dirnames, auto timeMax = boost::get_system_time() + boost::posix_time::seconds(10); //limit total directory search time auto iterCheckDir = asyncDirChecks.begin(); - for (auto iter = dirs.begin(); iter != dirs.end(); ++iter, ++iterCheckDir) + for (auto it = dirs.begin(); it != dirs.end(); ++it, ++iterCheckDir) { - const Zstring& dirname = *iter; + const Zstring& dirname = *it; callback.reportStatus(replaceCpy(_("Searching for folder %x..."), L"%x", fmtFileName(dirname), false)); while (boost::get_system_time() < timeMax && !iterCheckDir->timed_wait(boost::posix_time::milliseconds(UI_UPDATE_INTERVAL))) @@ -749,16 +749,16 @@ private: template <SelectedSide side> void MergeSides::fillOneSide(const DirContainer& dirCont, HierarchyObject& output) { - for (auto iter = dirCont.files.cbegin(); iter != dirCont.files.cend(); ++iter) - output.addSubFile<side>(iter->first, iter->second); + for (auto it = dirCont.files.cbegin(); it != dirCont.files.cend(); ++it) + output.addSubFile<side>(it->first, it->second); - for (auto iter = dirCont.links.cbegin(); iter != dirCont.links.cend(); ++iter) - output.addSubLink<side>(iter->first, iter->second); + for (auto it = dirCont.links.cbegin(); it != dirCont.links.cend(); ++it) + output.addSubLink<side>(it->first, it->second); - for (auto iter = dirCont.dirs.cbegin(); iter != dirCont.dirs.cend(); ++iter) + for (auto it = dirCont.dirs.cbegin(); it != dirCont.dirs.cend(); ++it) { - DirMapping& newDirMap = output.addSubDir<side>(iter->first); - fillOneSide<side>(iter->second, newDirMap); //recurse + DirMapping& newDirMap = output.addSubDir<side>(it->first); + fillOneSide<side>(it->second, newDirMap); //recurse } } @@ -906,8 +906,8 @@ void ComparisonBuffer::performComparison(const FolderPairCfg& fpCfg, DirectoryValue emptyDummy; auto getDirValue = [&](const Zstring& dirnameFmt) -> const DirectoryValue& { - auto iter = directoryBuffer.find(DirectoryKey(dirnameFmt, fpCfg.filter.nameFilter, fpCfg.handleSymlinks)); - return iter == directoryBuffer.end() ? emptyDummy : iter->second; + auto it = directoryBuffer.find(DirectoryKey(dirnameFmt, fpCfg.filter.nameFilter, fpCfg.handleSymlinks)); + return it == directoryBuffer.end() ? emptyDummy : it->second; }; const DirectoryValue& bufValueLeft = getDirValue(fpCfg.leftDirectoryFmt); diff --git a/file_hierarchy.h b/file_hierarchy.h index 18f46ea3..8f4b1afb 100644 --- a/file_hierarchy.h +++ b/file_hierarchy.h @@ -230,11 +230,12 @@ public: CompareVariant cmpVar, size_t fileTimeTolerance) : #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." #endif HierarchyObject(Zstring(), *this), #ifdef _MSC_VER -#pragma warning(default : 4355) +#pragma warning(pop) #endif filter_(filter), cmpVar_(cmpVar), fileTimeTolerance_(fileTimeTolerance), baseDirPfL (dirPostfixedLeft ), diff --git a/lib/Batch.ico b/lib/Batch.ico Binary files differindex 1856b1fb..f742b9a3 100644 --- a/lib/Batch.ico +++ b/lib/Batch.ico diff --git a/lib/ShadowCopy/dll_main.cpp b/lib/ShadowCopy/dll_main.cpp deleted file mode 100644 index 4665154a..00000000 --- a/lib/ShadowCopy/dll_main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - - -#define WIN32_LEAN_AND_MEAN -#include <windows.h> - -//optional: add init/teardown logic here -BOOL APIENTRY DllMain(HINSTANCE hinstDLL, - DWORD fdwReason, - LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - case DLL_PROCESS_DETACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - break; - } - return TRUE; -} diff --git a/lib/Thumbnail/dll_main.cpp b/lib/Thumbnail/dll_main.cpp deleted file mode 100644 index 4665154a..00000000 --- a/lib/Thumbnail/dll_main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - - -#define WIN32_LEAN_AND_MEAN -#include <windows.h> - -//optional: add init/teardown logic here -BOOL APIENTRY DllMain(HINSTANCE hinstDLL, - DWORD fdwReason, - LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - case DLL_PROCESS_DETACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - break; - } - return TRUE; -} diff --git a/lib/db_file.cpp b/lib/db_file.cpp index f81ada21..7f8da45a 100644 --- a/lib/db_file.cpp +++ b/lib/db_file.cpp @@ -68,10 +68,10 @@ void saveStreams(const StreamMapping& streamList, const Zstring& filename) //thr //save stream list writeNumber<std::uint32_t>(streamOut, static_cast<std::uint32_t>(streamList.size())); //number of streams, one for each sync-pair - for (auto iter = streamList.begin(); iter != streamList.end(); ++iter) + for (auto it = streamList.begin(); it != streamList.end(); ++it) { - writeContainer<std::string >(streamOut, iter->first ); - writeContainer<BinaryStream>(streamOut, iter->second); + writeContainer<std::string >(streamOut, it->first ); + writeContainer<BinaryStream>(streamOut, it->second); } saveBinStream(filename, streamOut.get()); //throw FileError @@ -449,23 +449,23 @@ private: template <class M, class V> static V& updateItem(M& map, const Zstring& key, const V& value) //efficient create or update without "default-constructible" requirement (Effective STL, item 24) { - auto iter = map.lower_bound(key); - if (iter != map.end() && !(map.key_comp()(key, iter->first))) + auto it = map.lower_bound(key); + if (it != map.end() && !(map.key_comp()(key, it->first))) { #ifdef FFS_WIN //caveat: key might need to be updated, too, if there is a change in short name case!!! - if (iter->first != key) + if (it->first != key) { - map.erase(iter); //don't fiddle with decrementing "iter"! - you might lose while optimizing pointlessly + map.erase(it); //don't fiddle with decrementing "it"! - you might lose while optimizing pointlessly return map.insert(typename M::value_type(key, value)).first->second; } else #endif { - iter->second = value; - return iter->second; + it->second = value; + return it->second; } } - return map.insert(iter, typename M::value_type(key, value))->second; + return map.insert(it, typename M::value_type(key, value))->second; } void process(const HierarchyObject::SubFileVec& currentFiles, const Zstring& parentRelativeNamePf, InSyncDir::FileList& dbFiles) @@ -494,9 +494,9 @@ private: } else //not in sync: preserve last synchronous state { - auto iter = dbFiles.find(fileMap.getObjShortName()); - if (iter != dbFiles.end()) - toPreserve.insert(&iter->second); + auto it = dbFiles.find(fileMap.getObjShortName()); + if (it != dbFiles.end()) + toPreserve.insert(&it->second); } } }); @@ -533,9 +533,9 @@ private: } else //not in sync: preserve last synchronous state { - auto iter = dbLinks.find(linkMap.getObjShortName()); - if (iter != dbLinks.end()) - toPreserve.insert(&iter->second); + auto it = dbLinks.find(linkMap.getObjShortName()); + if (it != dbLinks.end()) + toPreserve.insert(&it->second); } } }); @@ -565,18 +565,18 @@ private: //update directory entry only (shallow), but do *not touch* exising child elements!!! const Zstring& key = dirMap.getObjShortName(); auto insertResult = dbDirs.insert(std::make_pair(key, InSyncDir(InSyncDir::STATUS_IN_SYNC))); //get or create - auto iter = insertResult.first; + auto it = insertResult.first; #ifdef FFS_WIN //caveat: key might need to be updated, too, if there is a change in short name case!!! const bool alreadyExisting = !insertResult.second; - if (alreadyExisting && iter->first != key) + if (alreadyExisting && it->first != key) { - auto oldValue = std::move(iter->second); - dbDirs.erase(iter); //don't fiddle with decrementing "iter"! - you might lose while optimizing pointlessly - iter = dbDirs.insert(InSyncDir::DirList::value_type(key, std::move(oldValue))).first; + auto oldValue = std::move(it->second); + dbDirs.erase(it); //don't fiddle with decrementing "it"! - you might lose while optimizing pointlessly + it = dbDirs.insert(InSyncDir::DirList::value_type(key, std::move(oldValue))).first; } #endif - InSyncDir& dir = iter->second; + InSyncDir& dir = it->second; dir.status = InSyncDir::STATUS_IN_SYNC; //update immediate directory entry toPreserve.insert(&dir); recurse(dirMap, dir); @@ -599,11 +599,11 @@ private: case DIR_LEFT_SIDE_ONLY: case DIR_RIGHT_SIDE_ONLY: { - auto iter = dbDirs.find(dirMap.getObjShortName()); - if (iter != dbDirs.end()) + auto it = dbDirs.find(dirMap.getObjShortName()); + if (it != dbDirs.end()) { - toPreserve.insert(&iter->second); - recurse(dirMap, iter->second); //although existing sub-items cannot be in sync, items deleted on both sides *are* in-sync!!! + toPreserve.insert(&it->second); + recurse(dirMap, it->second); //although existing sub-items cannot be in sync, items deleted on both sides *are* in-sync!!! } } break; diff --git a/lib/icon_buffer.cpp b/lib/icon_buffer.cpp index 9274a0b4..1d391dfc 100644 --- a/lib/icon_buffer.cpp +++ b/lib/icon_buffer.cpp @@ -97,7 +97,6 @@ public: wxIcon newIcon; //attention: wxIcon uses reference counting! #ifdef FFS_WIN newIcon.SetHICON(clone.handle_); - { //this block costs ~0.04 ms ICONINFO icoInfo = {}; @@ -129,8 +128,14 @@ public: //no stretching for now //newIcon.SetSize(expectedSize, expectedSize); //icon is stretched to this size if referenced HICON differs -#elif defined FFS_LINUX // - newIcon.SetPixbuf(clone.handle_); // transfer ownership!! +#elif defined FFS_LINUX + // transfer ownership!! +#if wxCHECK_VERSION(2, 9, 4) + newIcon.CopyFromBitmap(wxBitmap(clone.handle_)); +#else + newIcon.SetPixbuf(clone.handle_); +#endif + #endif // clone.handle_ = nullptr; // return newIcon; @@ -273,8 +278,8 @@ IconHolder getGenericFileIcon(IconBuffer::IconSize sz) const int requestedSize = cvrtSize(sz); if (GtkIconTheme* defaultTheme = gtk_icon_theme_get_default()) //not owned! - for (auto iter = std::begin(mimeFileIcons); iter != std::end(mimeFileIcons); ++iter) - if (GdkPixbuf* pixBuf = gtk_icon_theme_load_icon(defaultTheme, *iter, requestedSize, GTK_ICON_LOOKUP_USE_BUILTIN, nullptr)) + for (auto it = std::begin(mimeFileIcons); it != std::end(mimeFileIcons); ++it) + if (GdkPixbuf* pixBuf = gtk_icon_theme_load_icon(defaultTheme, *it, requestedSize, GTK_ICON_LOOKUP_USE_BUILTIN, nullptr)) return IconHolder(pixBuf); //pass ownership (may be nullptr) return IconHolder(); #endif @@ -374,10 +379,8 @@ IconHolder getGenericDirectoryIcon(IconBuffer::IconSize sz) #endif } - //################################################################################################################################################ - //---------------------- Shared Data ------------------------- class WorkLoad { @@ -400,7 +403,8 @@ public: boost::unique_lock<boost::mutex> dummy(lockFiles); filesToLoad = newLoad; } - conditionNewFiles.notify_one(); + + conditionNewFiles.notify_all(); //instead of notify_one(); workaround bug: https://svn.boost.org/trac/boost/ticket/7796 //condition handling, see: http://www.boost.org/doc/libs/1_43_0/doc/html/thread/synchronization.html#thread.synchronization.condvar_ref } @@ -411,7 +415,7 @@ private: }; -typedef std::map<Zstring, IconHolder, LessFilename> NameIconMap; //entryName/icon -> note: Zstring is thread-safe +typedef std::map<Zstring, IconHolder, LessFilename> NameIconMap; //entryName/icon -> note: Zstring is "thread-safe like an int" typedef std::queue<Zstring> IconDbSequence; //entryName class Buffer @@ -421,11 +425,11 @@ public: { boost::lock_guard<boost::mutex> dummy(lockBuffer); - auto iter = iconMappping.find(fileName); - if (iter != iconMappping.end()) + auto it = iconMappping.find(fileName); + if (it != iconMappping.end()) { if (icon != nullptr) - *icon = iter->second; + *icon = it->second; return true; } return false; diff --git a/lib/localization.cpp b/lib/localization.cpp index 5792b3d1..47ed1881 100644 --- a/lib/localization.cpp +++ b/lib/localization.cpp @@ -35,21 +35,21 @@ public: virtual std::wstring translate(const std::wstring& text) { //look for translation in buffer table - const Translation::const_iterator iter = transMapping.find(text); - if (iter != transMapping.end()) - return iter->second; + const Translation::const_iterator it = transMapping.find(text); + if (it != transMapping.end()) + return it->second; return text; //fallback } virtual std::wstring translate(const std::wstring& singular, const std::wstring& plural, int n) { - TranslationPlural::const_iterator iter = transMappingPl.find(std::make_pair(singular, plural)); - if (iter != transMappingPl.end()) + TranslationPlural::const_iterator it = transMappingPl.find(std::make_pair(singular, plural)); + if (it != transMappingPl.end()) { const int formNo = pluralParser->getForm(n); - if (0 <= formNo && formNo < static_cast<int>(iter->second.size())) - return iter->second[formNo]; + if (0 <= formNo && formNo < static_cast<int>(it->second.size())) + return it->second[formNo]; } return n == 1 ? singular : plural; //fallback } @@ -72,7 +72,7 @@ FFSLocale::FFSLocale(const wxString& filename, wxLanguage languageId) : langId_( { inputStream = loadStream(filename); //throw XmlFileError } - catch (...) + catch (const XmlFileError&) { throw lngfile::ParsingError(0, 0); } @@ -378,10 +378,10 @@ void zen::setLanguage(int language) //throw FileError //(try to) retrieve language file wxString languageFile; - for (auto iter = ExistingTranslations::get().begin(); iter != ExistingTranslations::get().end(); ++iter) - if (iter->languageID == language) + for (auto it = ExistingTranslations::get().begin(); it != ExistingTranslations::get().end(); ++it) + if (it->languageID == language) { - languageFile = iter->languageFile; + languageFile = it->languageFile; break; } @@ -397,8 +397,8 @@ void zen::setLanguage(int language) //throw FileError { throw FileError(replaceCpy(replaceCpy(replaceCpy(_("Error parsing file %x, row %y, column %z."), L"%x", fmtFileName(toZ(languageFile))), - L"%y", numberTo<std::wstring>(e.row)), - L"%z", numberTo<std::wstring>(e.col))); + L"%y", numberTo<std::wstring>(e.row + 1)), + L"%z", numberTo<std::wstring>(e.col + 1))); } catch (PluralForm::ParsingError&) { diff --git a/lib/lock_holder.h b/lib/lock_holder.h index 5ae2f8ae..dd997853 100644 --- a/lib/lock_holder.h +++ b/lib/lock_holder.h @@ -23,9 +23,9 @@ public: std::vector<Zstring> dirs = dirnamesFmt; vector_remove_if(dirs, [](const Zstring& dir) { return dir.empty(); }); - for (auto iter = dirs.begin(); iter != dirs.end(); ++iter) + for (auto it = dirs.begin(); it != dirs.end(); ++it) { - const Zstring& dirnameFmt = *iter; + const Zstring& dirnameFmt = *it; if (!dirExistsUpdating(dirnameFmt, allowUserInteraction_, procCallback)) continue; diff --git a/lib/parallel_scan.cpp b/lib/parallel_scan.cpp index a31e30ee..94f6b0f4 100644 --- a/lib/parallel_scan.cpp +++ b/lib/parallel_scan.cpp @@ -138,30 +138,21 @@ Windows 7: Windows XP: 2 Threads: 42s | 11s 2 Threads: 38s | 8s => Traversing does not take any advantage of file locality so that even multiple threads operating on the same disk impose no performance overhead! (even faster on XP) -*/ - std::vector<std::set<DirectoryKey>> separateByDistinctDisk(const std::set<DirectoryKey>& dirkeys) { - //see perf note: use one thread per dirkey: - typedef std::map<int, std::set<DirectoryKey>> DiskKeyMapping; + //use one thread per physical disk: + typedef std::map<DiskInfo, std::set<DirectoryKey>> DiskKeyMapping; DiskKeyMapping tmp; - int index = 0; std::for_each(dirkeys.begin(), dirkeys.end(), - [&](const DirectoryKey& key) { tmp[++index].insert(key); }); + [&](const DirectoryKey& key) { tmp[retrieveDiskInfo(key.dirnameFull_)].insert(key); }); - /* - //use one thread per physical disk: - typedef std::map<DiskInfo, std::set<DirectoryKey>> DiskKeyMapping; - DiskKeyMapping tmp; - std::for_each(dirkeys.begin(), dirkeys.end(), - [&](const DirectoryKey& key) { tmp[retrieveDiskInfo(key.dirnameFull_)].insert(key); }); - */ std::vector<std::set<DirectoryKey>> buckets; std::transform(tmp.begin(), tmp.end(), std::back_inserter(buckets), [&](const DiskKeyMapping::value_type& diskToKey) { return diskToKey.second; }); return buckets; } +*/ //------------------------------------------------------------------------------------------ typedef Zbase<wchar_t, StorageRefCountThreadSafe> BasicWString; //thread safe string class for UI texts @@ -193,7 +184,7 @@ public: errorResponse.reset(); dummy.unlock(); //optimization for condition_variable::notify_one() - conditionCanReportError.notify_one(); + conditionCanReportError.notify_all(); //instead of notify_one(); workaround bug: https://svn.boost.org/trac/boost/ticket/7796 return rv; } @@ -207,7 +198,7 @@ public: errorResponse.reset(new FillBufferCallback::HandleError(rv)); dummy.unlock(); //optimization for condition_variable::notify_one() - conditionGotResponse.notify_one(); + conditionGotResponse.notify_all(); //instead of notify_one(); workaround bug: https://svn.boost.org/trac/boost/ticket/7796 } } @@ -470,57 +461,53 @@ private: const std::wstring textApplyingDstHack; }; #endif -//------------------------------------------------------------------------------------------ +//------------------------------------------------------------------------------------------ class WorkerThread { public: WorkerThread(size_t threadID, const std::shared_ptr<AsyncCallback>& acb, - const std::vector<std::pair<DirectoryKey, DirectoryValue*>>& workload) : + const DirectoryKey& dirKey, + DirectoryValue& dirOutput) : threadID_(threadID), acb_(acb), - workload_(workload) {} + dirKey_(dirKey), + dirOutput_(dirOutput) {} void operator()() //thread entry { acb_->incActiveWorker(); ZEN_ON_SCOPE_EXIT(acb_->decActiveWorker();); - std::for_each(workload_.begin(), workload_.end(), - [&](std::pair<DirectoryKey, DirectoryValue*>& item) - { - const Zstring& directoryName = item.first.dirnameFull_; - DirectoryValue& dirVal = *item.second; - - acb_->reportCurrentFile(directoryName, threadID_); //just in case first directory access is blocking + acb_->reportCurrentFile(dirKey_.dirnameFull_, threadID_); //just in case first directory access is blocking - TraverserShared travCfg(threadID_, - item.first.handleSymlinks_, //shared by all(!) instances of DirCallback while traversing a folder hierarchy - item.first.filter_, - dirVal.failedReads, - *acb_); + TraverserShared travCfg(threadID_, + dirKey_.handleSymlinks_, //shared by all(!) instances of DirCallback while traversing a folder hierarchy + dirKey_.filter_, + dirOutput_.failedReads, + *acb_); - DirCallback traverser(travCfg, - Zstring(), - dirVal.dirCont); + DirCallback traverser(travCfg, + Zstring(), + dirOutput_.dirCont); - DstHackCallback* dstCallbackPtr = nullptr; + DstHackCallback* dstCallbackPtr = nullptr; #ifdef FFS_WIN - DstHackCallbackImpl dstCallback(*acb_, threadID_); - dstCallbackPtr = &dstCallback; + DstHackCallbackImpl dstCallback(*acb_, threadID_); + dstCallbackPtr = &dstCallback; #endif - //get all files and folders from directoryPostfixed (and subdirectories) - traverseFolder(directoryName, traverser, dstCallbackPtr); //exceptions may be thrown! - }); + //get all files and folders from directoryPostfixed (and subdirectories) + traverseFolder(dirKey_.dirnameFull_, traverser, dstCallbackPtr); //exceptions may be thrown! } private: size_t threadID_; std::shared_ptr<AsyncCallback> acb_; - std::vector<std::pair<DirectoryKey, DirectoryValue*>> workload_; + const DirectoryKey dirKey_; + DirectoryValue& dirOutput_; }; } @@ -532,13 +519,11 @@ void zen::fillBuffer(const std::set<DirectoryKey>& keysToRead, //in { buf.clear(); - std::vector<std::set<DirectoryKey>> buckets = separateByDistinctDisk(keysToRead); //one bucket per physical device - FixedList<boost::thread> worker; //note: we cannot use std::vector<boost::thread>: compiler error on GCC 4.7, probably a boost screw-up zen::ScopeGuard guardWorker = zen::makeGuard([&] { - std::for_each(worker.begin(), worker.end(), [](boost::thread& wt) { wt.interrupt(); }); //interrupt all at once, then join + std::for_each(worker.begin(), worker.end(), [](boost::thread& wt) { wt.interrupt(); }); //interrupt all at once first, then join std::for_each(worker.begin(), worker.end(), [](boost::thread& wt) { if (wt.joinable()) //= precondition of thread::join(), which throws an exception if violated! @@ -549,28 +534,21 @@ void zen::fillBuffer(const std::set<DirectoryKey>& keysToRead, //in std::shared_ptr<AsyncCallback> acb = std::make_shared<AsyncCallback>(); //init worker threads - for (auto iter = buckets.begin(); iter != buckets.end(); ++iter) + std::for_each(keysToRead.begin(), keysToRead.end(), + [&](const DirectoryKey& key) { - const std::set<DirectoryKey>& bucket = *iter; - - std::vector<std::pair<DirectoryKey, DirectoryValue*>> workload; - std::for_each(bucket.begin(), bucket.end(), - [&](const DirectoryKey& key) - { - auto rv = buf.insert(std::make_pair(key, DirectoryValue())); - assert(rv.second); - workload.push_back(std::make_pair(key, &rv.first->second)); - }); + assert(buf.find(key) == buf.end()); + DirectoryValue& dirOutput = buf[key]; - const size_t threadId = iter - buckets.begin(); - worker.emplace_back(WorkerThread(threadId, acb, workload)); - } + const size_t threadId = worker.size(); + worker.emplace_back(WorkerThread(threadId, acb, key, dirOutput)); + }); //wait until done size_t threadId = 0; - for (auto iter = worker.begin(); iter != worker.end(); ++iter, ++threadId) + for (auto it = worker.begin(); it != worker.end(); ++it, ++threadId) { - boost::thread& wt = *iter; + boost::thread& wt = *it; acb->setNotifyingThread(threadId); //process info messages of first (active) thread only diff --git a/lib/parse_lng.h b/lib/parse_lng.h index 5eb135a3..92564a1e 100644 --- a/lib/parse_lng.h +++ b/lib/parse_lng.h @@ -44,8 +44,8 @@ struct TransHeader struct ParsingError { ParsingError(size_t rowNo, size_t colNo) : row(rowNo), col(colNo) {} - size_t row; - size_t col; + size_t row; //starting with 0 + size_t col; // }; void parseLng(const std::string& fileStream, TransHeader& header, TranslationMap& out, TranslationPluralMap& pluralOut); //throw ParsingError void parseHeader(const std::string& fileStream, TransHeader& header); //throw ParsingError @@ -104,11 +104,11 @@ public: bool untranslatedTextExists() const { - for (std::list<RegularItem>::const_iterator i = dump.begin(); i != dump.end(); ++i) - if (i->value.second.empty()) + for (auto it = dump.begin(); it != dump.end(); ++it) + if (it->value.second.empty()) return true; - for (std::list<PluralItem>::const_iterator i = dumpPlural.begin(); i != dumpPlural.end(); ++i) - if (i->value.second.empty()) + for (auto it = dumpPlural.begin(); it != dumpPlural.end(); ++it) + if (it->value.second.empty()) return true; return false; } @@ -180,8 +180,8 @@ public: static std::string text(Token::Type t) { - TokenMap::const_iterator iter = asList().find(t); - return iter != asList().end() ? iter->second : std::string(); + TokenMap::const_iterator it = asList().find(t); + return it != asList().end() ? it->second : std::string(); } private: @@ -198,8 +198,8 @@ private: tokens.insert(std::make_pair(Token::TK_LOCALE_NAME_END, "</locale>")); tokens.insert(std::make_pair(Token::TK_FLAG_FILE_BEGIN, "<flag file>")); tokens.insert(std::make_pair(Token::TK_FLAG_FILE_END, "</flag file>")); - tokens.insert(std::make_pair(Token::TK_PLURAL_COUNT_BEGIN, "<plural forms>")); - tokens.insert(std::make_pair(Token::TK_PLURAL_COUNT_END, "</plural forms>")); + tokens.insert(std::make_pair(Token::TK_PLURAL_COUNT_BEGIN, "<plural forms>")); + tokens.insert(std::make_pair(Token::TK_PLURAL_COUNT_END, "</plural forms>")); tokens.insert(std::make_pair(Token::TK_PLURAL_DEF_BEGIN, "<plural definition>")); tokens.insert(std::make_pair(Token::TK_PLURAL_DEF_END, "</plural definition>")); @@ -252,28 +252,42 @@ public: return out; } - std::pair<size_t, size_t> position() const //current (row/col) beginning with 1 + size_t posRow() const //current row beginning with 0 { - //seek last line break - std::string::const_iterator iter = pos; - while (iter != stream.begin() && *iter != '\n') - --iter; + //count line endings + size_t crSum = 0; //carriage returns + size_t nlSum = 0; //new lines + for (auto it = stream.begin(); it != pos; ++it) + if (*it == '\r') + ++crSum; + else if (*it == '\n') + ++nlSum; + assert(crSum == 0 || nlSum == 0 || crSum == nlSum); + return std::max(crSum, nlSum); //be compatible with Linux/Mac/Win + } - return std::make_pair(std::count(stream.begin(), pos, '\n') + 1, pos - iter); + size_t posCol() const //current col beginning with 0 + { + //seek beginning of line + for (auto it = pos; it != stream.begin(); ) + { + --it; + if (*it == '\r' || *it == '\n') + return pos - it - 1; + } + return pos - stream.begin(); } private: bool startsWithKnownTag() const { - for (KnownTokens::TokenMap::const_iterator i = KnownTokens::asList().begin(); i != KnownTokens::asList().end(); ++i) - if (startsWith(i->second)) - return true; - return false; + return std::any_of(KnownTokens::asList().begin(), KnownTokens::asList().end(), + [&](const KnownTokens::TokenMap::value_type& p) { return startsWith(p.second); }); } bool startsWith(const std::string& prefix) const { - if (stream.end() - pos < static_cast<int>(prefix.size())) + if (stream.end() - pos < static_cast<ptrdiff_t>(prefix.size())) return false; return std::equal(prefix.begin(), prefix.end(), pos); } @@ -420,7 +434,7 @@ private: } if (!pluralList.empty() && static_cast<int>(pluralList.size()) != formCount) //invalid number of plural forms - throw ParsingError(scn.position().first, scn.position().second); + throw ParsingError(scn.posRow(), scn.posCol()); consumeToken(Token::TK_TRG_END); @@ -435,7 +449,7 @@ private: void consumeToken(Token::Type t) { if (token().type != t) - throw ParsingError(scn.position().first, scn.position().second); + throw ParsingError(scn.posRow(), scn.posCol()); nextToken(); } diff --git a/lib/parse_plural.h b/lib/parse_plural.h index 2b78de89..7af6809e 100644 --- a/lib/parse_plural.h +++ b/lib/parse_plural.h @@ -152,6 +152,7 @@ private: }; Token(Type t) : type(t), number(0) {} + Token(int num) : type(TK_CONST_NUMBER), number(num) {} Type type; int number; //if type == TK_CONST_NUMBER @@ -195,13 +196,12 @@ private: } auto digitEnd = std::find_if(pos, stream.end(), [](char c) { return !zen::isDigit(c); }); - ptrdiff_t digitCount = digitEnd - pos; - if (digitCount != 0) + + if (digitEnd != pos) { - Token out(Token::TK_CONST_NUMBER); - out.number = zen::stringTo<int>(std::string(&*pos, digitCount)); - pos += digitCount; - return out; + int number = zen::stringTo<int>(std::string(&*pos, digitEnd - pos)); + pos = digitEnd; + return number; } throw ParsingError(); //unknown token diff --git a/lib/perf_check.cpp b/lib/perf_check.cpp index 878b41a2..c6a4e2d1 100644 --- a/lib/perf_check.cpp +++ b/lib/perf_check.cpp @@ -15,8 +15,8 @@ using namespace zen; -PerfCheck::PerfCheck(unsigned windowSizeRemainingTime, - unsigned windowSizeBytesPerSecond) : +PerfCheck::PerfCheck(unsigned int windowSizeRemainingTime, + unsigned int windowSizeBytesPerSecond) : windowSizeRemTime(windowSizeRemainingTime), windowSizeBPS(windowSizeBytesPerSecond), windowMax(std::max(windowSizeRemainingTime, windowSizeBytesPerSecond)) {} @@ -30,13 +30,13 @@ PerfCheck::~PerfCheck() outputFile.Write(wxT("Time(ms);Objects;Data\n")); - for (auto iter = samples.begin(); iter != samples.end(); ++iter) + for (auto it = samples.begin(); it != samples.end(); ++it) { - outputFile.Write(numberTo<wxString>(iter->first)); + outputFile.Write(numberTo<wxString>(it->first)); outputFile.Write(wxT(";")); - outputFile.Write(numberTo<wxString>(iter->second.objCount_)); + outputFile.Write(numberTo<wxString>(it->second.objCount_)); outputFile.Write(wxT(";")); - outputFile.Write(numberTo<wxString>(iter->second.data_)); + outputFile.Write(numberTo<wxString>(it->second.data_)); outputFile.Write(wxT("\n")); } */ @@ -108,6 +108,8 @@ wxString PerfCheck::getBytesPerSecond() const wxString PerfCheck::getOverallBytesPerSecond() const //for all samples { + warn_static("WTF!? tihs considers window only!") + if (!samples.empty()) { const auto& recordBack = *samples.rbegin(); diff --git a/lib/perf_check.h b/lib/perf_check.h index b8014582..b60c31c9 100644 --- a/lib/perf_check.h +++ b/lib/perf_check.h @@ -13,8 +13,8 @@ class PerfCheck { public: - PerfCheck(unsigned windowSizeRemainingTime, //unit: [ms] - unsigned windowSizeBytesPerSecond); // + PerfCheck(unsigned int windowSizeRemainingTime, //unit: [ms] + unsigned int windowSizeBytesPerSecond); // ~PerfCheck(); void addSample(int objectsCurrent, double dataCurrent, long timeMs); //timeMs must be ascending! diff --git a/lib/process_xml.cpp b/lib/process_xml.cpp index aed9c35f..a11f841c 100644 --- a/lib/process_xml.cpp +++ b/lib/process_xml.cpp @@ -93,7 +93,7 @@ void xmlAccess::OptionalDialogs::resetDialogs() } -xmlAccess::XmlGuiConfig xmlAccess::convertBatchToGui(const xmlAccess::XmlBatchConfig& batchCfg) +xmlAccess::XmlGuiConfig xmlAccess::convertBatchToGui(const xmlAccess::XmlBatchConfig& batchCfg) //noexcept { XmlGuiConfig output; output.mainCfg = batchCfg.mainCfg; @@ -112,9 +112,10 @@ xmlAccess::XmlGuiConfig xmlAccess::convertBatchToGui(const xmlAccess::XmlBatchCo } -xmlAccess::XmlBatchConfig xmlAccess::convertGuiToBatch(const xmlAccess::XmlGuiConfig& guiCfg, const Zstring& referenceFile) +xmlAccess::XmlBatchConfig xmlAccess::convertGuiToBatch(const xmlAccess::XmlGuiConfig& guiCfg) //noexcept { XmlBatchConfig output; //use default batch-settings + output.mainCfg = guiCfg.mainCfg; switch (guiCfg.handleError) { @@ -125,19 +126,25 @@ xmlAccess::XmlBatchConfig xmlAccess::convertGuiToBatch(const xmlAccess::XmlGuiCo output.handleError = ON_ERROR_IGNORE; break; } + return output; +} + - //try to take over batch-specific settings from reference - if (!referenceFile.empty() && getXmlType(referenceFile) == XML_TYPE_BATCH) +xmlAccess::XmlBatchConfig xmlAccess::convertGuiToBatchPreservingExistingBatch(const xmlAccess::XmlGuiConfig& guiCfg, const Zstring& referenceBatchFile) //noexcept +{ + //try to take over batch-specific settings from reference file if possible + if (!referenceBatchFile.empty()) try { - std::vector<Zstring> filenames; - filenames.push_back(referenceFile); - mergeConfigs(filenames, output); //throw xmlAccess::FfsXmlError + XmlBatchConfig batchCfg; + readConfig(referenceBatchFile, batchCfg); //throw FfsXmlError + + batchCfg.mainCfg = guiCfg.mainCfg; + return batchCfg; } catch (xmlAccess::FfsXmlError&) {} - output.mainCfg = guiCfg.mainCfg; - return output; + return convertGuiToBatch(guiCfg); } @@ -146,9 +153,9 @@ xmlAccess::MergeType xmlAccess::getMergeType(const std::vector<Zstring>& filenam bool guiCfgExists = false; bool batchCfgExists = false; - for (auto iter = filenames.begin(); iter != filenames.end(); ++iter) + for (auto it = filenames.begin(); it != filenames.end(); ++it) { - switch (xmlAccess::getXmlType(*iter)) //throw() + switch (xmlAccess::getXmlType(*it)) //throw() { case XML_TYPE_GUI: guiCfgExists = true; @@ -164,59 +171,60 @@ xmlAccess::MergeType xmlAccess::getMergeType(const std::vector<Zstring>& filenam } } - if (guiCfgExists && batchCfgExists) - return MERGE_GUI_BATCH; - else if (guiCfgExists && !batchCfgExists) - return MERGE_GUI; - else if (!guiCfgExists && batchCfgExists) - return MERGE_BATCH; + if (guiCfgExists) + return batchCfgExists ? MERGE_GUI_BATCH : MERGE_GUI; else - return MERGE_OTHER; + return batchCfgExists ? MERGE_BATCH : MERGE_OTHER; } namespace { template <class XmlCfg> -XmlCfg loadCfgImpl(const Zstring& filename, std::unique_ptr<xmlAccess::FfsXmlError>& warning) //throw xmlAccess::FfsXmlError +XmlCfg readConfigNoWarnings(const Zstring& filename, std::unique_ptr<FfsXmlError>& warning) //throw FfsXmlError, but only if "FATAL" { XmlCfg cfg; try { - xmlAccess::readConfig(filename, cfg); //throw xmlAccess::FfsXmlError + readConfig(filename, cfg); //throw xmlAccess::FfsXmlError } - catch (const xmlAccess::FfsXmlError& e) + catch (const FfsXmlError& e) { - if (e.getSeverity() == xmlAccess::FfsXmlError::FATAL) + if (e.getSeverity() == FfsXmlError::FATAL) throw; - else - warning.reset(new xmlAccess::FfsXmlError(e)); + else if (!warning.get()) warning = make_unique<FfsXmlError>(e); } return cfg; } +} -template <class XmlCfg> -void mergeConfigFilesImpl(const std::vector<Zstring>& filenames, XmlCfg& config) //throw xmlAccess::FfsXmlError +void xmlAccess::readAnyConfig(const std::vector<Zstring>& filenames, XmlGuiConfig& config) //throw FfsXmlError { assert(!filenames.empty()); - if (filenames.empty()) - return; std::vector<zen::MainConfiguration> mainCfgs; std::unique_ptr<FfsXmlError> savedWarning; - std::for_each(filenames.begin(), filenames.end(), - [&](const Zstring& filename) + for (auto it = filenames.begin(); it != filenames.end(); ++it) { + const Zstring& filename = *it; + const bool firstLine = it == filenames.begin(); //init all non-"mainCfg" settings with first config file + switch (getXmlType(filename)) { case XML_TYPE_GUI: - mainCfgs.push_back(loadCfgImpl<XmlGuiConfig>(filename, savedWarning).mainCfg); //throw xmlAccess::FfsXmlError + if (firstLine) + config = readConfigNoWarnings<XmlGuiConfig>(filename, savedWarning); + else + mainCfgs.push_back(readConfigNoWarnings<XmlGuiConfig>(filename, savedWarning).mainCfg); //throw FfsXmlError break; case XML_TYPE_BATCH: - mainCfgs.push_back(loadCfgImpl<XmlBatchConfig>(filename, savedWarning).mainCfg); //throw xmlAccess::FfsXmlError + if (firstLine) + config = convertBatchToGui(readConfigNoWarnings<XmlBatchConfig>(filename, savedWarning)); + else + mainCfgs.push_back(readConfigNoWarnings<XmlBatchConfig>(filename, savedWarning).mainCfg); //throw FfsXmlError break; case XML_TYPE_GLOBAL: @@ -226,32 +234,14 @@ void mergeConfigFilesImpl(const std::vector<Zstring>& filenames, XmlCfg& config) else throw FfsXmlError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); } - }); - - try //...to init all non-"mainCfg" settings with first config file - { - xmlAccess::readConfig(filenames[0], config); //throw xmlAccess::FfsXmlError } - catch (xmlAccess::FfsXmlError&) {} + mainCfgs.push_back(config.mainCfg); //save cfg from first line config.mainCfg = merge(mainCfgs); if (savedWarning.get()) //"re-throw" exception throw* savedWarning; } -} - - -void xmlAccess::mergeConfigs(const std::vector<Zstring>& filenames, XmlGuiConfig& config) //throw FfsXmlError -{ - mergeConfigFilesImpl(filenames, config); //throw FfsXmlError -} - - -void xmlAccess::mergeConfigs(const std::vector<Zstring>& filenames, XmlBatchConfig& config) //throw FfsXmlError -{ - mergeConfigFilesImpl(filenames, config); //throw FfsXmlError -} namespace zen @@ -662,6 +652,35 @@ bool readText(const std::string& input, UnitSize& value) template <> inline +void writeText(const VersioningStyle& value, std::string& output) +{ + switch (value) + { + case VER_STYLE_REPLACE: + output = "Replace"; + break; + case VER_STYLE_ADD_TIMESTAMP: + output = "AddTimeStamp"; + break; + } +} + +template <> inline +bool readText(const std::string& input, VersioningStyle& value) +{ + std::string tmp = input; + zen::trim(tmp); + if (tmp == "Replace") + value = VER_STYLE_REPLACE; + else if (tmp == "AddTimeStamp") + value = VER_STYLE_ADD_TIMESTAMP; + else + return false; + return true; +} + + +template <> inline void writeText(const DirectionConfig::Variant& value, std::string& output) { switch (value) @@ -776,15 +795,14 @@ void readConfig(const XmlIn& in, SyncConfig& syncCfg) warn_static("remove after migration?") if (in["CustomDeletionFolder"]) - { in["CustomDeletionFolder"](syncCfg.versioningDirectory);//obsolete name - syncCfg.versionCountLimit = -1; //new parameter - } else - { in["VersioningFolder"](syncCfg.versioningDirectory); - in["VersioningFolder"].attribute("Limit", syncCfg.versionCountLimit); - } + warn_static("remove after migration?") + if (in["VersioningStyle"]) //new parameter + in["VersioningStyle"](syncCfg.versioningStyle); + else + syncCfg.versioningStyle = VER_STYLE_ADD_TIMESTAMP; //obsolete fallback } @@ -893,12 +911,14 @@ void readConfig(const XmlIn& in, xmlAccess::XmlGuiConfig& config) warn_static("remove after migration?") if (inGuiCfg["HideFiltered" ]) //obsolete name + inGuiCfg["HideFiltered" ](config.hideExcludedItems); + else if (inGuiCfg["ShowFiltered" ]) //obsolete name { - inGuiCfg["HideFiltered" ](config.showFilteredElements); - config.showFilteredElements = !config.showFilteredElements; + inGuiCfg["ShowFiltered"](config.hideExcludedItems); + config.hideExcludedItems = !config.hideExcludedItems; } else - inGuiCfg["ShowFiltered"](config.showFilteredElements); + inGuiCfg["HideExcluded"](config.hideExcludedItems); inGuiCfg["HandleError" ](config.handleError); inGuiCfg["SyncPreviewActive"](config.showSyncAction); @@ -1035,12 +1055,12 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& config) warn_static("remove after migration?") //convert new internal macro naming convention: %name -> %item_path%; %dir -> %item_folder% - for (auto iter = config.gui.externelApplications.begin(); iter != config.gui.externelApplications.end(); ++iter) + for (auto it = config.gui.externelApplications.begin(); it != config.gui.externelApplications.end(); ++it) { - replace(iter->second, L"%nameCo", L"%item2_path%"); //unambiguous "Co" names first - replace(iter->second, L"%dirCo" , L"%item2_folder%"); - replace(iter->second, L"%name" , L"%item_path%"); - replace(iter->second, L"%dir" , L"%item_folder%"); + replace(it->second, L"%nameCo", L"%item2_path%"); //unambiguous "Co" names first + replace(it->second, L"%dirCo" , L"%item2_folder%"); + replace(it->second, L"%name" , L"%item_path%"); + replace(it->second, L"%dir" , L"%item_folder%"); } @@ -1056,7 +1076,7 @@ template <class ConfigType> void readConfig(const Zstring& filename, XmlType type, ConfigType& config) { XmlDoc doc; - loadXmlDocument(filename, doc); //throw FfsXmlError + loadXmlDocument(filename, doc); //throw FfsXmlError if (getXmlType(doc) != type) //throw() throw FfsXmlError(replaceCpy(_("File %x does not contain a valid configuration."), L"%x", fmtFileName(filename))); @@ -1119,7 +1139,8 @@ void writeConfig(const SyncConfig& syncCfg, XmlOut& out) out["DeletionPolicy" ](syncCfg.handleDeletion); out["VersioningFolder"](syncCfg.versioningDirectory); - out["VersioningFolder"].attribute("Limit", syncCfg.versionCountLimit); + //out["VersioningFolder"].attribute("Limit", syncCfg.versionCountLimit); + out["VersioningStyle"](syncCfg.versioningStyle); } @@ -1213,7 +1234,7 @@ void writeConfig(const XmlGuiConfig& config, XmlOut& out) //write GUI specific config data XmlOut outGuiCfg = out["GuiConfig"]; - outGuiCfg["ShowFiltered" ](config.showFilteredElements); + outGuiCfg["HideExcluded" ](config.hideExcludedItems); outGuiCfg["HandleError" ](config.handleError); outGuiCfg["SyncPreviewActive"](config.showSyncAction); } diff --git a/lib/process_xml.h b/lib/process_xml.h index 8d1d4538..29237081 100644 --- a/lib/process_xml.h +++ b/lib/process_xml.h @@ -48,13 +48,13 @@ typedef std::vector<std::pair<Description, Commandline> > ExternalApps; struct XmlGuiConfig { XmlGuiConfig() : - showFilteredElements(true), + hideExcludedItems(false), handleError(ON_GUIERROR_POPUP), showSyncAction(true) {} //initialize values zen::MainConfiguration mainCfg; - bool showFilteredElements; + bool hideExcludedItems; OnGuiError handleError; //reaction on error situation during synchronization bool showSyncAction; }; @@ -63,10 +63,10 @@ struct XmlGuiConfig inline bool operator==(const XmlGuiConfig& lhs, const XmlGuiConfig& rhs) { - return lhs.mainCfg == rhs.mainCfg && - lhs.showFilteredElements == rhs.showFilteredElements && - lhs.handleError == rhs.handleError && - lhs.showSyncAction == rhs.showSyncAction; + return lhs.mainCfg == rhs.mainCfg && + lhs.hideExcludedItems == rhs.hideExcludedItems && + lhs.handleError == rhs.handleError && + lhs.showSyncAction == rhs.showSyncAction; } @@ -232,6 +232,7 @@ struct XmlGlobalSettings //struct Batch }; +//read/write specific config types void readConfig(const Zstring& filename, XmlGuiConfig& config); // void readConfig(const Zstring& filename, XmlBatchConfig& config); //throw FfsXmlError void readConfig( XmlGlobalSettings& config); // @@ -240,11 +241,6 @@ void writeConfig(const XmlGuiConfig& config, const Zstring& filename); // void writeConfig(const XmlBatchConfig& config, const Zstring& filename); //throw FfsXmlError void writeConfig(const XmlGlobalSettings& config); // -//config conversion utilities -XmlGuiConfig convertBatchToGui(const XmlBatchConfig& batchCfg); -XmlBatchConfig convertGuiToBatch(const XmlGuiConfig& guiCfg, const Zstring& referenceFile); - - //convert (multiple) *.ffs_gui, *.ffs_batch files or combinations of both into target config structure: enum MergeType { @@ -253,10 +249,14 @@ enum MergeType MERGE_GUI_BATCH, //gui and batch files MERGE_OTHER }; -MergeType getMergeType(const std::vector<Zstring>& filenames); //throw () +MergeType getMergeType(const std::vector<Zstring>& filenames); //noexcept -void mergeConfigs(const std::vector<Zstring>& filenames, XmlGuiConfig& config); //throw xmlAccess::FfsXmlError -void mergeConfigs(const std::vector<Zstring>& filenames, XmlBatchConfig& config); //throw xmlAccess::FfsXmlError +void readAnyConfig(const std::vector<Zstring>& filenames, XmlGuiConfig& config); //throw FfsXmlError + +//config conversion utilities +XmlGuiConfig convertBatchToGui(const XmlBatchConfig& batchCfg); //noexcept +XmlBatchConfig convertGuiToBatch(const XmlGuiConfig& guiCfg ); // +XmlBatchConfig convertGuiToBatchPreservingExistingBatch(const xmlAccess::XmlGuiConfig& guiCfg, const Zstring& referenceBatchFile); //noexcept std::wstring extractJobName(const Zstring& configFilename); } diff --git a/lib/resolve_path.cpp b/lib/resolve_path.cpp index 248e3507..9c690c9a 100644 --- a/lib/resolve_path.cpp +++ b/lib/resolve_path.cpp @@ -212,6 +212,9 @@ std::unique_ptr<Zstring> resolveMacro(const Zstring& macro, //macro without %-ch if (equalNoCase(macro, Zstr("date"))) return make_unique<Zstring>(formatTime<Zstring>(FORMAT_ISO_DATE)); + if (equalNoCase(macro, Zstr("timestamp"))) + return make_unique<Zstring>(formatTime<Zstring>(Zstr("%Y-%m-%d %H%M%S"))); //e.g. "2012-05-15 131513" + std::unique_ptr<Zstring> cand; auto processPhrase = [&](const Zchar* phrase, const Zchar* format) -> bool { @@ -224,7 +227,7 @@ std::unique_ptr<Zstring> resolveMacro(const Zstring& macro, //macro without %-ch if (processPhrase(Zstr("weekday"), Zstr("%A"))) return cand; if (processPhrase(Zstr("day" ), Zstr("%d"))) return cand; - if (processPhrase(Zstr("month" ), Zstr("%B"))) return cand; + if (processPhrase(Zstr("month" ), Zstr("%m"))) return cand; if (processPhrase(Zstr("week" ), Zstr("%U"))) return cand; if (processPhrase(Zstr("year" ), Zstr("%Y"))) return cand; if (processPhrase(Zstr("hour" ), Zstr("%H"))) return cand; @@ -233,9 +236,9 @@ std::unique_ptr<Zstring> resolveMacro(const Zstring& macro, //macro without %-ch //check domain-specific extensions { - auto iter = std::find_if(ext.begin(), ext.end(), [&](const std::pair<Zstring, Zstring>& p) { return equalNoCase(macro, p.first); }); - if (iter != ext.end()) - return make_unique<Zstring>(iter->second); + auto it = std::find_if(ext.begin(), ext.end(), [&](const std::pair<Zstring, Zstring>& p) { return equalNoCase(macro, p.first); }); + if (it != ext.end()) + return make_unique<Zstring>(it->second); } //try to resolve as environment variable @@ -246,9 +249,9 @@ std::unique_ptr<Zstring> resolveMacro(const Zstring& macro, //macro without %-ch //try to resolve as CSIDL value { const auto& csidlMap = CsidlConstants::get(); - auto iter = csidlMap.find(macro); - if (iter != csidlMap.end()) - return make_unique<Zstring>(iter->second); + auto it = csidlMap.find(macro); + if (it != csidlMap.end()) + return make_unique<Zstring>(it->second); } #endif @@ -325,9 +328,9 @@ Zstring getPathByVolumenName(const Zstring& volumeName) //return empty string on //search for matching path in parallel until first hit RunUntilFirstHit<Zstring> findFirstMatch; - for (const wchar_t* iter = &buffer[0]; *iter != 0; iter += strLength(iter) + 1) //list terminated by empty c-string + for (const wchar_t* it = &buffer[0]; *it != 0; it += strLength(it) + 1) //list terminated by empty c-string { - const Zstring path = iter; + const Zstring path = it; findFirstMatch.addJob([path, volumeName]() -> std::unique_ptr<Zstring> { @@ -364,9 +367,9 @@ Zstring getPathByVolumenName(const Zstring& volumeName) //return empty string on TraverseMedia traverser(deviceList); traverseFolder("/media", traverser); //traverse one level - TraverseMedia::DeviceList::const_iterator iter = deviceList.find(volumeName); - if (iter != deviceList.end()) - return iter->second; + TraverseMedia::DeviceList::const_iterator it = deviceList.find(volumeName); + if (it != deviceList.end()) + return it->second; #endif return Zstring(); } diff --git a/lib/resources.cpp b/lib/resources.cpp index 6d586e54..7d46739e 100644 --- a/lib/resources.cpp +++ b/lib/resources.cpp @@ -86,11 +86,11 @@ GlobalResources::GlobalResources() const wxBitmap& GlobalResources::getImageInt(const wxString& imageName) const { - auto iter = bitmaps.find(!contains(imageName, L'.') ? //assume .png ending if nothing else specified + auto it = bitmaps.find(!contains(imageName, L'.') ? //assume .png ending if nothing else specified imageName + L".png" : imageName); - if (iter != bitmaps.end()) - return iter->second; + if (it != bitmaps.end()) + return it->second; else { assert(false); diff --git a/lib/shadow.cpp b/lib/shadow.cpp index 8ef86f30..6dae97b1 100644 --- a/lib/shadow.cpp +++ b/lib/shadow.cpp @@ -108,13 +108,13 @@ Zstring ShadowCopy::makeShadowCopy(const Zstring& inputFile) } //get or create instance of shadow volume - VolNameShadowMap::const_iterator iter = shadowVol.find(volumeNamePf); - if (iter == shadowVol.end()) + VolNameShadowMap::const_iterator it = shadowVol.find(volumeNamePf); + if (it == shadowVol.end()) { auto newEntry = std::make_shared<ShadowVolume>(volumeNamePf); - iter = shadowVol.insert(std::make_pair(volumeNamePf, newEntry)).first; + it = shadowVol.insert(std::make_pair(volumeNamePf, newEntry)).first; } //return filename alias on shadow copy volume - return iter->second->geNamePf() + Zstring(inputFile.c_str() + pos + volumeNamePf.length()); + return it->second->geNamePf() + Zstring(inputFile.c_str() + pos + volumeNamePf.length()); } diff --git a/lib/versioning.cpp b/lib/versioning.cpp index b12d7307..d4b6e2b2 100644 --- a/lib/versioning.cpp +++ b/lib/versioning.cpp @@ -20,14 +20,14 @@ Zstring getExtension(const Zstring& relativeName) //including "." if extension i bool impl::isMatchingVersion(const Zstring& shortname, const Zstring& shortnameVersion) //e.g. ("Sample.txt", "Sample.txt 2012-05-15 131513.txt") { - auto iter = shortnameVersion.begin(); + auto it = shortnameVersion.begin(); auto last = shortnameVersion.end(); auto nextDigit = [&]() -> bool { - if (iter == last || !isDigit(*iter)) + if (it == last || !isDigit(*it)) return false; - ++iter; + ++it; return true; }; auto nextDigits = [&](size_t count) -> bool @@ -39,16 +39,16 @@ bool impl::isMatchingVersion(const Zstring& shortname, const Zstring& shortnameV }; auto nextChar = [&](Zchar c) -> bool { - if (iter == last || *iter != c) + if (it == last || *it != c) return false; - ++iter; + ++it; return true; }; auto nextStringI = [&](const Zstring& str) -> bool //windows: ignore case! { - if (last - iter < static_cast<ptrdiff_t>(str.size()) || !EqualFilename()(str, Zstring(&*iter, str.size()))) + if (last - it < static_cast<ptrdiff_t>(str.size()) || !EqualFilename()(str, Zstring(&*it, str.size()))) return false; - iter += str.size(); + it += str.size(); return true; }; @@ -62,25 +62,41 @@ bool impl::isMatchingVersion(const Zstring& shortname, const Zstring& shortnameV nextChar(Zstr(' ')) && // nextDigits(6) && //HHMMSS nextStringI(getExtension(shortname)) && - iter == last; + it == last; } namespace { +/* +- handle not existing source +- create target super directories if missing +*/ template <class Function> void moveItemToVersioning(const Zstring& sourceObj, //throw FileError const Zstring& relativeName, const Zstring& versioningDirectory, const Zstring& timestamp, - Function moveObj) //move source -> target; allowed to throw FileError + VersioningStyle versioningStyle, + Function moveObj) //move source -> target; may throw FileError { assert(!startsWith(relativeName, FILE_NAME_SEPARATOR)); + assert(!endsWith (relativeName, FILE_NAME_SEPARATOR)); assert(endsWith(sourceObj, relativeName)); //usually, yes, but we might relax this in the future - //assemble time-stamped version name - const Zstring targetObj = appendSeparator(versioningDirectory) + relativeName + Zstr(' ') + timestamp + getExtension(relativeName); - assert(impl::isMatchingVersion(afterLast(relativeName, FILE_NAME_SEPARATOR), afterLast(targetObj, FILE_NAME_SEPARATOR))); //paranoid? no! + Zstring targetObj; + switch (versioningStyle) + { + case VER_STYLE_REPLACE: + targetObj = appendSeparator(versioningDirectory) + relativeName; + break; + + case VER_STYLE_ADD_TIMESTAMP: + //assemble time-stamped version name + targetObj = appendSeparator(versioningDirectory) + relativeName + Zstr(' ') + timestamp + getExtension(relativeName); + assert(impl::isMatchingVersion(afterLast(relativeName, FILE_NAME_SEPARATOR), afterLast(targetObj, FILE_NAME_SEPARATOR))); //paranoid? no! + break; + } try { @@ -104,11 +120,18 @@ void moveItemToVersioning(const Zstring& sourceObj, //throw FileError } -//move source to target across volumes; prerequisite: all super-directories of target exist -//if target already contains some files/dirs they are seen as remnants of a previous incomplete move -void moveFile(const Zstring& sourceFile, const Zstring& targetFile, CallbackCopyFile& callback) //throw FileError +//move source to target across volumes +//no need to check if: - super-directories of target exist - source exists +//if target already exists, it is overwritten, even if it is a different type, e.g. a directory! +template <class Function> +void moveObject(const Zstring& sourceFile, //throw FileError + const Zstring& targetFile, + Function copyDelete) //fallback if move failed; may throw FileError { + assert(!dirExists(sourceFile) || symlinkExists(sourceFile)); //we process files and symlinks only + //first try to move directly without copying + bool targetExisting = false; try { renameFile(sourceFile, targetFile); //throw FileError, ErrorDifferentVolume, ErrorTargetExisting @@ -116,59 +139,59 @@ void moveFile(const Zstring& sourceFile, const Zstring& targetFile, CallbackCopy } //if moving failed treat as error (except when it tried to move to a different volume: in this case we will copy the file) catch (const ErrorDifferentVolume&) {} - catch (const ErrorTargetExisting&) {} + catch (const ErrorTargetExisting&) { targetExisting = true; } - //create target - if (!fileExists(targetFile)) //check even if ErrorTargetExisting: me may have clashed with another item type of the same name!!! + if (!targetExisting) + targetExisting = somethingExists(targetFile); + + //remove target object + if (targetExisting) + { + if (fileExists(targetFile)) //file or symlink + removeFile(targetFile); //throw FileError + else if (dirExists(targetFile)) //directory or symlink + removeDirectory(targetFile); //throw FileError + //we do not expect targetFile to be a directory in general => no callback required + else assert(false); + } + + copyDelete(); +} + + +void moveFile(const Zstring& sourceFile, const Zstring& targetFile, CallbackCopyFile& callback) //throw FileError +{ + moveObject(sourceFile, //throw FileError + targetFile, + [&] { - //file is on a different volume: let's copy it + //create target if (symlinkExists(sourceFile)) copySymlink(sourceFile, targetFile, false); //throw FileError; don't copy filesystem permissions else copyFile(sourceFile, targetFile, false, true, &callback); //throw FileError - permissions "false", transactional copy "true" - } - //delete source - removeFile(sourceFile); //throw FileError; newly copied file is NOT deleted if exception is thrown here! + //delete source + removeFile(sourceFile); //throw FileError; newly copied file is NOT deleted if exception is thrown here! + }); } void moveDirSymlink(const Zstring& sourceLink, const Zstring& targetLink) //throw FileError { - //first try to move directly without copying - try + moveObject(sourceLink, //throw FileError + targetLink, + [&] { - renameFile(sourceLink, targetLink); //throw FileError, ErrorDifferentVolume, ErrorTargetExisting - return; //great, we get away cheaply! - } - //if moving failed treat as error (except when it tried to move to a different volume: in this case we will copy the file) - catch (const ErrorDifferentVolume&) {} - catch (const ErrorTargetExisting&) {} - - //create target - if (!symlinkExists(targetLink)) //check even if ErrorTargetExisting: me may have clashed with another item type of the same name!!! - { - //link is on a different volume: let's copy it + //create target copySymlink(sourceLink, targetLink, false); //throw FileError; don't copy filesystem permissions - } - //delete source - removeDirectory(sourceLink); //throw FileError; newly copied link is NOT deleted if exception is thrown here! + //delete source + removeDirectory(sourceLink); //throw FileError; newly copied link is NOT deleted if exception is thrown here! + }); } -struct CopyCallbackImpl : public CallbackCopyFile -{ - CopyCallbackImpl(CallbackMoveFile& callback) : callback_(callback) {} - -private: - virtual void deleteTargetFile(const Zstring& targetFile) { assert(!somethingExists(targetFile)); } - virtual void updateCopyStatus(Int64 bytesDelta) { callback_.updateStatus(bytesDelta); } - - CallbackMoveFile& callback_; -}; - - class TraverseFilesOneLevel : public TraverseCallback { public: @@ -200,18 +223,6 @@ private: std::vector<Zstring>& files_; std::vector<Zstring>& dirs_; }; - - -struct RemoveCallbackImpl : public CallbackRemoveDir -{ - RemoveCallbackImpl(CallbackMoveFile& callback) : callback_(callback) {} - -private: - virtual void notifyFileDeletion(const Zstring& filename) { callback_.updateStatus(0); } - virtual void notifyDirDeletion (const Zstring& dirname ) { callback_.updateStatus(0); } - - CallbackMoveFile& callback_; -}; } @@ -221,25 +232,29 @@ void FileVersioner::revisionFile(const Zstring& sourceFile, const Zstring& relat relativeName, versioningDirectory_, timeStamp_, + versioningStyle_, [&](const Zstring& source, const Zstring& target) { - callback.onBeforeFileMove(source, target); + struct CopyCallbackImpl : public CallbackCopyFile + { + CopyCallbackImpl(CallbackMoveFile& callback) : callback_(callback) {} + private: + virtual void deleteTargetFile(const Zstring& targetFile) { assert(!somethingExists(targetFile)); } + virtual void updateCopyStatus(Int64 bytesDelta) { callback_.updateStatus(bytesDelta); } + CallbackMoveFile& callback_; + } copyCallback(callback); - CopyCallbackImpl copyCallback(callback); + callback.onBeforeFileMove(source, target); moveFile(source, target, copyCallback); //throw FileError callback.objectProcessed(); }); - fileRelNames.push_back(relativeName); + //fileRelNames.push_back(relativeName); } void FileVersioner::revisionDir(const Zstring& sourceDir, const Zstring& relativeName, CallbackMoveFile& callback) //throw FileError { - //note: we cannot support "throw exception if target already exists": If we did, we would have to do a full cleanup - //removing all newly created directories in case of an exception so that subsequent tries would not fail with "target already existing". - //However an exception may also happen during final deletion of source folder, in which case cleanup effectively leads to data loss! - //create target if (symlinkExists(sourceDir)) //on Linux there is just one type of symlinks, and since we do revision file symlinks, we should revision dir symlinks as well! { @@ -247,6 +262,7 @@ void FileVersioner::revisionDir(const Zstring& sourceDir, const Zstring& relativ relativeName, versioningDirectory_, timeStamp_, + versioningStyle_, [&](const Zstring& source, const Zstring& target) { callback.onBeforeDirMove(source, target); @@ -254,12 +270,12 @@ void FileVersioner::revisionDir(const Zstring& sourceDir, const Zstring& relativ callback.objectProcessed(); }); - fileRelNames.push_back(relativeName); + //fileRelNames.push_back(relativeName); } else { assert(!startsWith(relativeName, FILE_NAME_SEPARATOR)); - assert(endsWith(sourceDir, relativeName)); + assert(endsWith(sourceDir, relativeName)); //usually, yes, but we might relax this in the future const Zstring targetDir = appendSeparator(versioningDirectory_) + relativeName; callback.onBeforeDirMove(sourceDir, targetDir); @@ -272,7 +288,7 @@ void FileVersioner::revisionDir(const Zstring& sourceDir, const Zstring& relativ try { TraverseFilesOneLevel tol(fileList, dirList); //throw FileError - traverseFolder(sourceDir, tol); // + traverseFolder(sourceDir, tol); // } catch (FileError&) { @@ -293,7 +309,7 @@ void FileVersioner::revisionDir(const Zstring& sourceDir, const Zstring& relativ callback); }); - //move directories + //move items in subdirectories std::for_each(dirList.begin(), dirList.end(), [&](const Zstring& shortname) { @@ -303,7 +319,15 @@ void FileVersioner::revisionDir(const Zstring& sourceDir, const Zstring& relativ }); //delete source - RemoveCallbackImpl removeCallback(callback); + struct RemoveCallbackImpl : public CallbackRemoveDir + { + RemoveCallbackImpl(CallbackMoveFile& callback) : callback_(callback) {} + private: + virtual void notifyFileDeletion(const Zstring& filename) { callback_.updateStatus(0); } + virtual void notifyDirDeletion (const Zstring& dirname ) { callback_.updateStatus(0); } + CallbackMoveFile& callback_; + } removeCallback(callback); + removeDirectory(sourceDir, &removeCallback); //throw FileError callback.objectProcessed(); @@ -311,6 +335,7 @@ void FileVersioner::revisionDir(const Zstring& sourceDir, const Zstring& relativ } +/* namespace { class TraverseVersionsOneLevel : public TraverseCallback @@ -329,7 +354,6 @@ private: }; } - void FileVersioner::limitVersions(std::function<void()> updateUI) //throw FileError { if (versionCountLimit_ < 0) //no limit! @@ -340,9 +364,9 @@ void FileVersioner::limitVersions(std::function<void()> updateUI) //throw FileEr auto getVersionsBuffered = [&](const Zstring& dirname) -> const std::vector<Zstring>& { - auto iter = dirBuffer.find(dirname); - if (iter != dirBuffer.end()) - return iter->second; + auto it = dirBuffer.find(dirname); + if (it != dirBuffer.end()) + return it->second; std::vector<Zstring> fileShortNames; TraverseVersionsOneLevel tol(fileShortNames, updateUI); //throw FileError @@ -396,3 +420,4 @@ void FileVersioner::limitVersions(std::function<void()> updateUI) //throw FileEr }); }); } +*/
\ No newline at end of file diff --git a/lib/versioning.h b/lib/versioning.h index b025511b..3e0dd33c 100644 --- a/lib/versioning.h +++ b/lib/versioning.h @@ -13,6 +13,7 @@ #include <zen/zstring.h> #include <zen/int64.h> #include <zen/file_error.h> +#include "../structures.h" namespace zen { @@ -25,19 +26,20 @@ struct CallbackMoveFile; - creates missing intermediate directories - does not create empty directories - handles symlinks - - ignores already existing target files/dirs (support retry) - => (unlikely) risk of data loss: race-condition if two FFS instances start at the very same second and process the same filename!! + - replaces already existing target files/dirs (supports retry) + => (unlikely) risk of data loss for naming convention "versioning": + race-condition if two FFS instances start at the very same second OR multiple folder pairs process the same filename!! */ class FileVersioner { public: FileVersioner(const Zstring& versioningDirectory, //throw FileError - const TimeComp& timeStamp, - int versionCountLimit) : //max versions per file; < 0 := no limit + VersioningStyle versioningStyle, + const TimeComp& timeStamp) : //max versions per file; < 0 := no limit + versioningStyle_(versioningStyle), versioningDirectory_(versioningDirectory), - timeStamp_(formatTime<Zstring>(Zstr("%Y-%m-%d %H%M%S"), timeStamp)), //e.g. "2012-05-15 131513" - versionCountLimit_(versionCountLimit) + timeStamp_(formatTime<Zstring>(Zstr("%Y-%m-%d %H%M%S"), timeStamp)) //e.g. "2012-05-15 131513" { if (timeStamp_.size() != 17) //formatTime() returns empty string on error; unexpected length: e.g. problem in year 10000! throw FileError(_("Failure to create time stamp for versioning:") + L" \'" + timeStamp_ + L"\'"); @@ -46,14 +48,14 @@ public: void revisionFile(const Zstring& sourceFile, const Zstring& relativeName, CallbackMoveFile& callback); //throw FileError void revisionDir (const Zstring& sourceDir, const Zstring& relativeName, CallbackMoveFile& callback); //throw FileError - void limitVersions(std::function<void()> updateUI); //throw FileError; call when done revisioning! + //void limitVersions(std::function<void()> updateUI); //throw FileError; call when done revisioning! private: + const VersioningStyle versioningStyle_; const Zstring versioningDirectory_; const Zstring timeStamp_; - const int versionCountLimit_; - std::vector<Zstring> fileRelNames; //store list of revisioned file and symlink relative names for limitVersions() + //std::vector<Zstring> fileRelNames; //store list of revisioned file and symlink relative names for limitVersions() }; diff --git a/lib/xml_base.cpp b/lib/xml_base.cpp index c7650bc0..814b9bdb 100644 --- a/lib/xml_base.cpp +++ b/lib/xml_base.cpp @@ -56,8 +56,8 @@ void xmlAccess::loadXmlDocument(const Zstring& filename, XmlDoc& doc) //throw Ff throw FfsXmlError( replaceCpy(replaceCpy(replaceCpy(_("Error parsing file %x, row %y, column %z."), L"%x", fmtFileName(filename)), - L"%y", numberTo<std::wstring>(e.row)), - L"%z", numberTo<std::wstring>(e.col))); + L"%y", numberTo<std::wstring>(e.row + 1)), + L"%z", numberTo<std::wstring>(e.col + 1))); } } diff --git a/structures.cpp b/structures.cpp index 0d7b1825..54db613c 100644 --- a/structures.cpp +++ b/structures.cpp @@ -33,7 +33,7 @@ std::wstring zen::getVariantName(DirectionConfig::Variant var) switch (var) { case DirectionConfig::AUTOMATIC: - return _("<Automatic>"); + return _("<- Two way ->"); case DirectionConfig::MIRROR: return _("Mirror ->>"); case DirectionConfig::UPDATE: @@ -441,22 +441,22 @@ MainConfiguration zen::merge(const std::vector<MainConfiguration>& mainCfgs) { const CompConfig& cmpCfg = *fp->altCmpConfig; - auto iter = std::find_if(cmpCfgStat.begin(), cmpCfgStat.end(), + auto it = std::find_if(cmpCfgStat.begin(), cmpCfgStat.end(), [&](const std::pair<CompConfig, int>& entry) { return entry.first == cmpCfg; }); - if (iter == cmpCfgStat.end()) + if (it == cmpCfgStat.end()) cmpCfgStat.push_back(std::make_pair(cmpCfg, 1)); else - ++(iter->second); + ++(it->second); } { const SyncConfig& syncCfg = *fp->altSyncConfig; - auto iter = std::find_if(syncCfgStat.begin(), syncCfgStat.end(), + auto it = std::find_if(syncCfgStat.begin(), syncCfgStat.end(), [&](const std::pair<SyncConfig, int>& entry) { return entry.first == syncCfg; }); - if (iter == syncCfgStat.end()) + if (it == syncCfgStat.end()) syncCfgStat.push_back(std::make_pair(syncCfg, 1)); else - ++(iter->second); + ++(it->second); } } diff --git a/structures.h b/structures.h index 0f4695f2..91b54942 100644 --- a/structures.h +++ b/structures.h @@ -189,27 +189,26 @@ enum DeletionPolicy DELETE_TO_VERSIONING }; +enum VersioningStyle +{ + VER_STYLE_REPLACE, + VER_STYLE_ADD_TIMESTAMP, +}; struct SyncConfig { - //SyncConfig(const DirectionConfig& directCfg, - // const DeletionPolicy handleDel, - // const Zstring& versionDir) : - // directionCfg(directCfg), - // handleDeletion(handleDel), - // versioningDirectory(versionDir) {} - - SyncConfig() : //construct with default values + SyncConfig() : handleDeletion(DELETE_TO_RECYCLER), - versionCountLimit(-1) {} + versioningStyle(VER_STYLE_REPLACE) {} //sync direction settings DirectionConfig directionCfg; - //misc options DeletionPolicy handleDeletion; //use Recycle, delete permanently or move to user-defined location + //versioning options + VersioningStyle versioningStyle; Zstring versioningDirectory; - int versionCountLimit; //max versions per file (DELETE_TO_VERSIONING); < 0 := no limit + //int versionCountLimit; //max versions per file (DELETE_TO_VERSIONING); < 0 := no limit }; inline @@ -218,8 +217,8 @@ bool operator==(const SyncConfig& lhs, const SyncConfig& rhs) return lhs.directionCfg == rhs.directionCfg && lhs.handleDeletion == rhs.handleDeletion && (lhs.handleDeletion != DELETE_TO_VERSIONING || //only compare deletion directory if required! - (lhs.versioningDirectory == rhs.versioningDirectory && - lhs.versionCountLimit == rhs.versionCountLimit)); + (lhs.versioningStyle == rhs.versioningStyle && + lhs.versioningDirectory == rhs.versioningDirectory)); } diff --git a/synchronization.cpp b/synchronization.cpp index ecebd8bd..38a6e32c 100644 --- a/synchronization.cpp +++ b/synchronization.cpp @@ -281,8 +281,8 @@ std::vector<zen::FolderPairSyncCfg> zen::extractSyncCfg(const MainConfiguration& output.push_back( FolderPairSyncCfg(syncCfg.directionCfg.var == DirectionConfig::AUTOMATIC, syncCfg.handleDeletion, - getFormattedDirectoryName(syncCfg.versioningDirectory), - syncCfg.versionCountLimit)); + syncCfg.versioningStyle, + getFormattedDirectoryName(syncCfg.versioningDirectory))); } return output; } @@ -426,8 +426,8 @@ class DeletionHandling //e.g. generate name of alternate deletion directory (uni public: DeletionHandling(DeletionPolicy handleDel, //nothrow! const Zstring& versioningDir, + VersioningStyle versioningStyle, const TimeComp& timeStamp, - int versionCountLimit, size_t folderIndex, const Zstring& baseDirPf, //with separator postfix ProcessCallback& procCallback); @@ -470,15 +470,15 @@ private: FileVersioner& getOrCreateVersioner() //throw FileError! => dont create in DeletionHandling()!!! { if (!versioner.get()) - versioner = make_unique<FileVersioner>(versioningDir_, timeStamp_, versionCountLimit_); //throw FileError + versioner = make_unique<FileVersioner>(versioningDir_, versioningStyle_, timeStamp_); //throw FileError return *versioner; }; ProcessCallback& procCallback_; const Zstring baseDirPf_; //ends with path separator const Zstring versioningDir_; + const VersioningStyle versioningStyle_; const TimeComp timeStamp_; - const int versionCountLimit_; #ifdef FFS_WIN Zstring recyclerTmpDirPf; //temporary folder holding files/folders for *deferred* recycling (postfixed with file name separator) @@ -502,16 +502,16 @@ private: DeletionHandling::DeletionHandling(DeletionPolicy handleDel, //nothrow! const Zstring& versioningDir, + VersioningStyle versioningStyle, const TimeComp& timeStamp, - int versionCountLimit, size_t folderIndex, const Zstring& baseDirPf, //with separator postfix ProcessCallback& procCallback) : procCallback_(procCallback), baseDirPf_(baseDirPf), versioningDir_(versioningDir), + versioningStyle_(versioningStyle), timeStamp_(timeStamp), - versionCountLimit_(versionCountLimit), #ifdef FFS_WIN recFallbackDelPermantently(false), #endif @@ -617,16 +617,16 @@ void DeletionHandling::tryCleanup(bool allowUserCallback) //throw FileError break; case DELETE_TO_VERSIONING: - if (versioner.get()) - { - if (allowUserCallback) - { - procCallback_.reportStatus(_("Removing old versions...")); //throw ? - versioner->limitVersions([&] { procCallback_.requestUiRefresh(); /*throw ? */ }); //throw FileError - } - else - versioner->limitVersions([] {}); //throw FileError - } + //if (versioner.get()) + //{ + // if (allowUserCallback) + // { + // procCallback_.reportStatus(_("Removing old versions...")); //throw ? + // versioner->limitVersions([&] { procCallback_.requestUiRefresh(); /*throw ? */ }); //throw FileError + // } + // else + // versioner->limitVersions([] {}); //throw FileError + //} break; } @@ -898,37 +898,37 @@ private: //don't process directories //process files - for (auto i = hierObj.refSubFiles().begin(); i != hierObj.refSubFiles().end(); ++i) - switch (i->getSyncOperation()) //evaluate comparison result and sync direction + for (auto it = hierObj.refSubFiles().begin(); it != hierObj.refSubFiles().end(); ++it) + switch (it->getSyncOperation()) //evaluate comparison result and sync direction { case SO_CREATE_NEW_LEFT: - spaceNeededLeft += to<Int64>(i->getFileSize<RIGHT_SIDE>()); + spaceNeededLeft += to<Int64>(it->getFileSize<RIGHT_SIDE>()); break; case SO_CREATE_NEW_RIGHT: - spaceNeededRight += to<Int64>(i->getFileSize<LEFT_SIDE>()); + spaceNeededRight += to<Int64>(it->getFileSize<LEFT_SIDE>()); break; case SO_DELETE_LEFT: if (freeSpaceDelLeft_) - spaceNeededLeft -= to<Int64>(i->getFileSize<LEFT_SIDE>()); + spaceNeededLeft -= to<Int64>(it->getFileSize<LEFT_SIDE>()); break; case SO_DELETE_RIGHT: if (freeSpaceDelRight_) - spaceNeededRight -= to<Int64>(i->getFileSize<RIGHT_SIDE>()); + spaceNeededRight -= to<Int64>(it->getFileSize<RIGHT_SIDE>()); break; case SO_OVERWRITE_LEFT: if (freeSpaceDelLeft_) - spaceNeededLeft -= to<Int64>(i->getFileSize<LEFT_SIDE>()); - spaceNeededLeft += to<Int64>(i->getFileSize<RIGHT_SIDE>()); + spaceNeededLeft -= to<Int64>(it->getFileSize<LEFT_SIDE>()); + spaceNeededLeft += to<Int64>(it->getFileSize<RIGHT_SIDE>()); break; case SO_OVERWRITE_RIGHT: if (freeSpaceDelRight_) - spaceNeededRight -= to<Int64>(i->getFileSize<RIGHT_SIDE>()); - spaceNeededRight += to<Int64>(i->getFileSize<LEFT_SIDE>()); + spaceNeededRight -= to<Int64>(it->getFileSize<RIGHT_SIDE>()); + spaceNeededRight += to<Int64>(it->getFileSize<LEFT_SIDE>()); break; case SO_DO_NOTHING: @@ -1242,9 +1242,9 @@ void SynchronizeFolderPair::runZeroPass(HierarchyObject& hierObj) { //search for file move-operations - for (auto iter = hierObj.refSubFiles().begin(); iter != hierObj.refSubFiles().end(); ++iter) //VS 2010 crashes if we use for_each + lambda here... + for (auto it = hierObj.refSubFiles().begin(); it != hierObj.refSubFiles().end(); ++it) //VS 2010 crashes if we use for_each + lambda here... { - FileMapping& fileObj = *iter; + FileMapping& fileObj = *it; const SyncOperation syncOp = fileObj.getSyncOperation(); switch (syncOp) //evaluate comparison result and sync direction @@ -1969,16 +1969,16 @@ void zen::synchronize(const TimeComp& timeStamp, delHandlerL.emplace_back(folderPairCfg.handleDeletion, folderPairCfg.versioningFolder, + folderPairCfg.versioningStyle_, timeStamp, - folderPairCfg.versionCountLimit_, folderIndex, j->getBaseDirPf<LEFT_SIDE>(), callback); delHandlerR.emplace_back(folderPairCfg.handleDeletion, folderPairCfg.versioningFolder, + folderPairCfg.versioningStyle_, timeStamp, - folderPairCfg.versionCountLimit_, folderIndex, j->getBaseDirPf<RIGHT_SIDE>(), callback); @@ -1997,20 +1997,20 @@ void zen::synchronize(const TimeComp& timeStamp, auto incReadCount = [&](const Zstring& baseDir) { dirReadWriteCount[baseDir]; //create entry - for (auto iter = dirReadWriteCount.begin(); iter != dirReadWriteCount.end(); ++iter) + for (auto it = dirReadWriteCount.begin(); it != dirReadWriteCount.end(); ++it) { - auto& countRef = iter->second; - if (dependentDir(baseDir, iter->first)) + auto& countRef = it->second; + if (dependentDir(baseDir, it->first)) ++countRef.first; } }; auto incWriteCount = [&](const Zstring& baseDir) { dirReadWriteCount[baseDir]; //create entry - for (auto iter = dirReadWriteCount.begin(); iter != dirReadWriteCount.end(); ++iter) + for (auto it = dirReadWriteCount.begin(); it != dirReadWriteCount.end(); ++it) { - auto& countRef = iter->second; - if (dependentDir(baseDir, iter->first)) + auto& countRef = it->second; + if (dependentDir(baseDir, it->first)) ++countRef.second; } }; @@ -2178,17 +2178,11 @@ void zen::synchronize(const TimeComp& timeStamp, if (statisticsTotal.getConflict() > 0) { //show the first few conflicts in warning message also: - std::wstring warningMessage = _("Unresolved conflicts existing!") + - L" (" + toGuiString(statisticsTotal.getConflict()) + L")\n\n"; - - const auto& conflictMsgs = statisticsTotal.getConflictMessages(); //get first few sync conflicts - for (auto iter = conflictMsgs.begin(); iter != conflictMsgs.end(); ++iter) - warningMessage += fmtFileName(iter->first) + L": " + iter->second + L"\n\n"; - - // if (statisticsTotal.getConflict() > static_cast<int>(conflictMsgs.size())) - // warningMessage += L"[...]\n\n"; + std::wstring warningMessage = _("The following items have unresolved conflicts and will not be synchronized:") + L"\n\n"; - warningMessage += _("You can ignore conflicts and continue synchronization."); + const auto& conflictMsgs = statisticsTotal.getConflictMessages(); //get *all* sync conflicts + for (auto it = conflictMsgs.begin(); it != conflictMsgs.end(); ++it) + warningMessage += fmtFileName(it->first) + L": " + it->second + L"\n\n"; callback.reportWarning(warningMessage, warnings.warningUnresolvedConflicts); } @@ -2199,10 +2193,10 @@ void zen::synchronize(const TimeComp& timeStamp, { std::wstring warningMessage = _("Significant difference detected:"); - for (auto iter = significantDiff.begin(); iter != significantDiff.end(); ++iter) + for (auto it = significantDiff.begin(); it != significantDiff.end(); ++it) warningMessage += std::wstring(L"\n\n") + - iter->first + L" <-> " + L"\n" + - iter->second; + it->first + L" <-> " + L"\n" + + it->second; warningMessage += L"\n\n"; warningMessage += _("More than 50% of the total number of files will be copied or deleted!"); @@ -2241,12 +2235,12 @@ void zen::synchronize(const TimeComp& timeStamp, //check if folders are used by multiple pairs in read/write access std::vector<Zstring> conflictDirs; - for (auto iter = dirReadWriteCount.cbegin(); iter != dirReadWriteCount.cend(); ++iter) + for (auto it = dirReadWriteCount.cbegin(); it != dirReadWriteCount.cend(); ++it) { - const std::pair<size_t, size_t>& countRef = iter->second; //# read/write accesses + const std::pair<size_t, size_t>& countRef = it->second; //# read/write accesses if (countRef.first + countRef.second >= 2 && countRef.second >= 1) //race condition := multiple accesses of which at least one is a write - conflictDirs.push_back(iter->first); + conflictDirs.push_back(it->first); } if (!conflictDirs.empty()) @@ -2397,7 +2391,7 @@ void SynchronizeFolderPair::copyFileUpdatingTo(const FileMapping& fileObj, const //start of (possibly) long-running copy process: ensure status updates are performed regularly //in error situation: undo communication of processed amount of data - ScopeGuard guardStatistics = makeGuard([&] + auto guardStatistics = makeGuard([&] { procCallback_.updateProcessedData(0, -bytesReported); bytesReported = 0; @@ -2415,13 +2409,13 @@ void SynchronizeFolderPair::copyFileUpdatingTo(const FileMapping& fileObj, const //#################### Verification ############################# if (verifyCopiedFiles_) { - ScopeGuard guardTarget = makeGuard([&] { removeFile(target); }); //delete target if verification fails + auto guardTarget = makeGuard([&] { removeFile(target); }); //delete target if verification fails verifyFileCopy(source, target); //throw FileError guardTarget.dismiss(); } //#################### /Verification ############################# - //inform about the (remaining) processed amount of data + //update statistics to consider the real amount of data, e.g. more than the "file size" for ADS streams or file changed in the meantime! if (bytesReported != expectedBytesToCpy) procCallback_.updateTotalData(0, bytesReported - expectedBytesToCpy); diff --git a/synchronization.h b/synchronization.h index dceac496..3a3dcec1 100644 --- a/synchronization.h +++ b/synchronization.h @@ -64,17 +64,17 @@ struct FolderPairSyncCfg { FolderPairSyncCfg(bool automaticMode, const DeletionPolicy handleDel, - const Zstring& versioningDirFmt, - int versionCountLimit) : + VersioningStyle versioningStyle, + const Zstring& versioningDirFmt) : inAutomaticMode(automaticMode), handleDeletion(handleDel), - versioningFolder(versioningDirFmt), - versionCountLimit_(versionCountLimit) {} + versioningStyle_(versioningStyle), + versioningFolder(versioningDirFmt) {} bool inAutomaticMode; //update database if in automatic mode DeletionPolicy handleDeletion; + VersioningStyle versioningStyle_; Zstring versioningFolder; //formatted directory name - int versionCountLimit_; }; std::vector<FolderPairSyncCfg> extractSyncCfg(const MainConfiguration& mainCfg); diff --git a/ui/IFileDialog_Vista/dll_main.cpp b/ui/IFileDialog_Vista/dll_main.cpp deleted file mode 100644 index 4665154a..00000000 --- a/ui/IFileDialog_Vista/dll_main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - - -#define WIN32_LEAN_AND_MEAN -#include <windows.h> - -//optional: add init/teardown logic here -BOOL APIENTRY DllMain(HINSTANCE hinstDLL, - DWORD fdwReason, - LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - case DLL_PROCESS_DETACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - break; - } - return TRUE; -} diff --git a/ui/Taskbar_Seven/dll_main.cpp b/ui/Taskbar_Seven/dll_main.cpp deleted file mode 100644 index 4665154a..00000000 --- a/ui/Taskbar_Seven/dll_main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - - -#define WIN32_LEAN_AND_MEAN -#include <windows.h> - -//optional: add init/teardown logic here -BOOL APIENTRY DllMain(HINSTANCE hinstDLL, - DWORD fdwReason, - LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - case DLL_PROCESS_DETACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - break; - } - return TRUE; -} diff --git a/ui/batch_config.cpp b/ui/batch_config.cpp index 0463bd80..6b9092c9 100644 --- a/ui/batch_config.cpp +++ b/ui/batch_config.cpp @@ -5,62 +5,40 @@ // ************************************************************************** #include "batch_config.h" -#include <iterator> -#include <wx/filedlg.h> -#include <wx/msgdlg.h> #include <wx/wupdlock.h> -#include <wx+/button.h> -#include <wx+/choice_enum.h> #include <wx+/mouse_move_dlg.h> -#include <wx+/context_menu.h> -#include <zen/file_handling.h> +#include "gui_generated.h" +#include "dir_name.h" #include "../ui/exec_finished_box.h" #include "../lib/help_provider.h" -#include "folder_pair.h" -#include "msg_popup.h" -#include "gui_generated.h" +#include "../lib/resources.h" using namespace zen; using namespace xmlAccess; -class DirectoryPairBatchFirst; -class DirectoryPairBatch; - -class BatchDialog: public BatchDlgGenerated +namespace +{ +enum ButtonPressed { - template <class GuiPanel> - friend class FolderPairCallback; - friend class DirectoryPairBatchFirst; + BUTTON_CANCEL, + BUTTON_SAVE_AS +}; + +class BatchDialog : public BatchDlgGenerated +{ public: BatchDialog(wxWindow* parent, - const wxString& referenceFile, - const XmlBatchConfig& batchCfg, - const std::shared_ptr<FolderHistory>& folderHistLeft, - const std::shared_ptr<FolderHistory>& folderHistRight, + XmlBatchConfig& batchCfg, //in/out std::vector<std::wstring>& onCompletionHistory, size_t onCompletionHistoryMax); private: - virtual void OnCmpSettings (wxCommandEvent& event); - virtual void OnSyncSettings (wxCommandEvent& event); - virtual void OnConfigureFilter(wxCommandEvent& event); - virtual void OnHelp (wxCommandEvent& event) { displayHelpEntry(L"html/Schedule a Batch Job.html"); } - - virtual void OnCompSettingsContext(wxCommandEvent& event); - virtual void OnSyncSettingsContext(wxCommandEvent& event); - virtual void OnGlobalFilterContext(wxCommandEvent& event); - virtual void OnCheckSaveLog (wxCommandEvent& event); - virtual void OnClose (wxCloseEvent& event) { EndModal(0); } - virtual void OnCancel (wxCommandEvent& event) { EndModal(0); } - virtual void OnSaveBatchJob (wxCommandEvent& event); - virtual void OnLoadBatchJob (wxCommandEvent& event); - virtual void OnAddFolderPair (wxCommandEvent& event); - virtual void OnRemoveFolderPair (wxCommandEvent& event); - virtual void OnRemoveTopFolderPair (wxCommandEvent& event); - void OnFilesDropped(FileDropEvent& event); - + virtual void OnHelp (wxCommandEvent& event) { displayHelpEntry(L"html/Schedule a Batch Job.html"); } + virtual void OnClose (wxCloseEvent& event) { EndModal(BUTTON_CANCEL); } + virtual void OnCancel (wxCommandEvent& event) { EndModal(BUTTON_CANCEL); } + virtual void OnSaveBatchJob(wxCommandEvent& event); virtual void OnErrorPopup (wxCommandEvent& event) { localBatchCfg.handleError = ON_ERROR_POPUP; updateGui(); } virtual void OnErrorIgnore(wxCommandEvent& event) { localBatchCfg.handleError = ON_ERROR_IGNORE; updateGui(); } virtual void OnErrorExit (wxCommandEvent& event) { localBatchCfg.handleError = ON_ERROR_EXIT; updateGui(); } @@ -68,166 +46,26 @@ private: virtual void OnToggleGenerateLogfile(wxCommandEvent& event) { updateGui(); } virtual void OnToggleLogfilesLimit (wxCommandEvent& event) { updateGui(); } - void addFolderPair(const std::vector<zen::FolderPairEnh>& newPairs, bool addFront = false); - void removeAddFolderPair(int pos); - void clearAddFolderPairs(); - - void updateGuiForFolderPair(); - void updateGui(); //re-evaluate gui after config changes - bool saveBatchFile(const wxString& filename); - void loadBatchFile(const wxString& filename); - void loadBatchFile(const std::vector<wxString>& filenames); - void setConfig(const XmlBatchConfig& batchCfg); XmlBatchConfig getConfig() const; - std::unique_ptr<DirectoryPairBatchFirst> firstFolderPair; //always bound!!! - std::vector<DirectoryPairBatch*> additionalFolderPairs; - - //used when saving batch file - wxString proposedBatchFileName; - + XmlBatchConfig& batchCfgOutRef; //output only! XmlBatchConfig localBatchCfg; //a mixture of settings some of which have OWNERSHIP WITHIN GUI CONTROLS! use getConfig() to resolve std::unique_ptr<DirectoryName<FolderHistoryBox>> logfileDir; //always bound, solve circular compile-time dependency - - const std::shared_ptr<FolderHistory> folderHistLeft_; - const std::shared_ptr<FolderHistory> folderHistRight_; -}; - -//################################################################################################################################### - -//------------------------------------------------------------------ -/* class hierarchy: - - template<> - FolderPairPanelBasic - /|\ - | - template<> - FolderPairCallback BatchFolderPairGenerated - /|\ /|\ - _________|______________ ________| - | | | - DirectoryPairBatchFirst DirectoryPairBatch -*/ - -template <class GuiPanel> -class FolderPairCallback : public FolderPairPanelBasic<GuiPanel> //implements callback functionality to BatchDialog as imposed by FolderPairPanelBasic -{ -public: - FolderPairCallback(GuiPanel& basicPanel, BatchDialog& batchDialog) : - FolderPairPanelBasic<GuiPanel>(basicPanel), //pass FolderPairGenerated part... - batchDlg(batchDialog) {} - -private: - virtual wxWindow* getParentWindow() { return &batchDlg; } - - virtual MainConfiguration getMainConfig() const { return batchDlg.getConfig().mainCfg; } - - virtual void OnAltCompCfgChange() { batchDlg.updateGui(); } - - virtual void OnAltSyncCfgChange() { batchDlg.updateGui(); } - - virtual void removeAltCompCfg() - { - FolderPairPanelBasic<GuiPanel>::removeAltCompCfg(); - batchDlg.updateGui(); - } - - virtual void removeAltSyncCfg() - { - FolderPairPanelBasic<GuiPanel>::removeAltSyncCfg(); - batchDlg.updateGui(); - } - - virtual void OnLocalFilterCfgChange() {} - - BatchDialog& batchDlg; }; - -class DirectoryPairBatch: - public BatchFolderPairGenerated, //DirectoryPairBatch "owns" BatchFolderPairGenerated! - public FolderPairCallback<BatchFolderPairGenerated> -{ -public: - DirectoryPairBatch(wxWindow* parent, BatchDialog& batchDialog) : - BatchFolderPairGenerated(parent), - FolderPairCallback<BatchFolderPairGenerated>(static_cast<BatchFolderPairGenerated&>(*this), batchDialog), //pass BatchFolderPairGenerated part... - dirNameLeft (*m_panelLeft, *m_buttonSelectDirLeft, *m_directoryLeft), - dirNameRight(*m_panelRight, *m_buttonSelectDirRight, *m_directoryRight) {} - - void setValues(const wxString& leftDir, - const wxString& rightDir, - AltCompCfgPtr cmpCfg, - AltSyncCfgPtr syncCfg, - const FilterConfig& filter) - { - setConfig(cmpCfg, syncCfg, filter); - dirNameLeft.setName(leftDir); - dirNameRight.setName(rightDir); - } - wxString getLeftDir () const { return dirNameLeft .getName(); } - wxString getRightDir() const { return dirNameRight.getName(); } - -private: - //support for drag and drop - DirectoryName<FolderHistoryBox> dirNameLeft; - DirectoryName<FolderHistoryBox> dirNameRight; -}; - - -class DirectoryPairBatchFirst : public FolderPairCallback<BatchDlgGenerated> -{ -public: - DirectoryPairBatchFirst(BatchDialog& batchDialog) : - FolderPairCallback<BatchDlgGenerated>(batchDialog, batchDialog), - - //prepare drag & drop - dirNameLeft(*batchDialog.m_panelLeft, - *batchDialog.m_buttonSelectDirLeft, - *batchDialog.m_directoryLeft), - dirNameRight(*batchDialog.m_panelRight, - *batchDialog.m_buttonSelectDirRight, - *batchDialog.m_directoryRight) {} - - void setValues(const wxString& leftDir, - const wxString& rightDir, - AltCompCfgPtr cmpCfg, - AltSyncCfgPtr syncCfg, - const FilterConfig& filter) - { - setConfig(cmpCfg, syncCfg, filter); - dirNameLeft.setName(leftDir); - dirNameRight.setName(rightDir); - } - wxString getLeftDir () const { return dirNameLeft .getName(); } - wxString getRightDir() const { return dirNameRight.getName(); } - -private: - //support for drag and drop - DirectoryName<FolderHistoryBox> dirNameLeft; - DirectoryName<FolderHistoryBox> dirNameRight; -}; //################################################################################################################################### - BatchDialog::BatchDialog(wxWindow* parent, - const wxString& referenceFile, - const XmlBatchConfig& batchCfg, - const std::shared_ptr<FolderHistory>& folderHistLeft, - const std::shared_ptr<FolderHistory>& folderHistRight, + XmlBatchConfig& batchCfg, std::vector<std::wstring>& onCompletionHistory, size_t onCompletionHistoryMax) : BatchDlgGenerated(parent), - folderHistLeft_(folderHistLeft), - folderHistRight_(folderHistRight) + batchCfgOutRef(batchCfg) { - m_directoryLeft ->init(folderHistLeft_); - m_directoryRight->init(folderHistRight_); m_comboBoxExecFinished->initHistory(onCompletionHistory, onCompletionHistoryMax); #ifdef FFS_WIN @@ -235,105 +73,31 @@ BatchDialog::BatchDialog(wxWindow* parent, #endif wxWindowUpdateLocker dummy(this); //avoid display distortion - m_bpButtonCmpConfig ->SetBitmapLabel(GlobalResources::getImage(L"cmpConfig")); - m_bpButtonSyncConfig->SetBitmapLabel(GlobalResources::getImage(L"syncConfig")); - m_bpButtonHelp ->SetBitmapLabel(GlobalResources::getImage(L"help")); - - //init handling of first folder pair - firstFolderPair.reset(new DirectoryPairBatchFirst(*this)); - - m_bpButtonCmpConfig ->Connect(wxEVT_RIGHT_DOWN, wxCommandEventHandler(BatchDialog::OnCompSettingsContext), nullptr, this); - m_bpButtonSyncConfig->Connect(wxEVT_RIGHT_DOWN, wxCommandEventHandler(BatchDialog::OnSyncSettingsContext), nullptr, this); - m_bpButtonFilter ->Connect(wxEVT_RIGHT_DOWN, wxCommandEventHandler(BatchDialog::OnGlobalFilterContext), nullptr, this); + m_bpButtonHelp ->SetBitmapLabel(GlobalResources::getImage(L"help")); + m_bitmapBatchJob->SetBitmap (GlobalResources::getImage(L"batch")); - //prepare drag & drop for loading of *.ffs_batch files - setupFileDrop(*this); - Connect(EVENT_DROP_FILE, FileDropEventHandler(BatchDialog::OnFilesDropped), nullptr, this); - - logfileDir.reset(new DirectoryName<FolderHistoryBox>(*m_panelBatchSettings, *m_buttonSelectLogfileDir, *m_comboBoxLogfileDir)); - - //set icons for this dialog - m_bpButtonAddPair->SetBitmapLabel(GlobalResources::getImage(L"item_add")); - m_bitmap27->SetBitmap(GlobalResources::getImage(L"batch")); - - m_buttonSave->SetFocus(); - - if (!referenceFile.empty()) - { - SetTitle(referenceFile); - proposedBatchFileName = referenceFile; //may be used on next save - } + logfileDir = make_unique<DirectoryName<FolderHistoryBox>>(*this, *m_buttonSelectLogfileDir, *m_comboBoxLogfileDir); setConfig(batchCfg); -} - -//------------------- error handling -------------------------- - -void BatchDialog::OnCmpSettings(wxCommandEvent& event) -{ - //show window right next to the compare-config button - //wxPoint windowPos = m_bpButtonCmpConfig->GetScreenPosition(); - //windowPos.x += m_bpButtonCmpConfig->GetSize().GetWidth() + 5; - - if (zen::showCompareCfgDialog(this, localBatchCfg.mainCfg.cmpConfig) == ReturnSmallDlg::BUTTON_OKAY) - updateGui(); -} + Fit(); //child-element widths have changed: image was set + m_panelHeader->Layout(); -void BatchDialog::OnSyncSettings(wxCommandEvent& event) -{ - //ExecWhenFinishedCfg ewfCfg = { &localBatchCfg.mainCfg.onCompletion, - // &onCompletionHistory_, - // onCompletionHistoryMax_ - // }; - - if (showSyncConfigDlg(this, - localBatchCfg.mainCfg.cmpConfig.compareVar, - localBatchCfg.mainCfg.syncCfg, - nullptr, - nullptr) == ReturnSyncConfig::BUTTON_OKAY) //optional input parameter - updateGui(); -} - - -void BatchDialog::OnConfigureFilter(wxCommandEvent& event) -{ - if (showFilterDialog(this, - true, //is main filter dialog - localBatchCfg.mainCfg.globalFilter) == ReturnSmallDlg::BUTTON_OKAY) - updateGui(); + m_buttonSave->SetFocus(); } void BatchDialog::updateGui() //re-evaluate gui after config changes { - XmlBatchConfig cfg = getConfig(); + XmlBatchConfig cfg = getConfig(); //resolve parameter ownership: some on GUI controls, others member variables - m_panelLogfile ->Enable(m_checkBoxGenerateLogfile->GetValue()); + m_panelLogfile ->Enable(m_checkBoxGenerateLogfile->GetValue()); //enabled status is *not* directly dependent from resolved config! (but transitively) m_spinCtrlLogfileLimit->Enable(m_checkBoxGenerateLogfile->GetValue() && m_checkBoxLogfilesLimit->GetValue()); - //update compare variant name - m_staticTextCmpVariant->SetLabel(cfg.mainCfg.getCompVariantName()); - - //update sync variant name - m_staticTextSyncVariant->SetLabel(cfg.mainCfg.getSyncVariantName()); - - //set filter icon - if (!isNullFilter(cfg.mainCfg.globalFilter)) - { - setImage(*m_bpButtonFilter, GlobalResources::getImage(L"filter")); - m_bpButtonFilter->SetToolTip(_("Filter is active")); - } - else - { - setImage(*m_bpButtonFilter, greyScale(GlobalResources::getImage(L"filter"))); - m_bpButtonFilter->SetToolTip(_("No filter selected")); - } - m_toggleBtnErrorIgnore->SetValue(false); m_toggleBtnErrorPopup ->SetValue(false); m_toggleBtnErrorExit ->SetValue(false); - switch (cfg.handleError) + switch (cfg.handleError) //*not* owned by GUI controls { case ON_ERROR_IGNORE: m_toggleBtnErrorIgnore->SetValue(true); @@ -345,238 +109,6 @@ void BatchDialog::updateGui() //re-evaluate gui after config changes m_toggleBtnErrorExit->SetValue(true); break; } - - m_panelOverview->Layout (); //adjust stuff inside scrolled window - m_panelOverview->Refresh(); //refresh filter button (if nothing else) -} - - -void BatchDialog::OnCompSettingsContext(wxCommandEvent& event) -{ - ContextMenu menu; - - auto setVariant = [&](CompareVariant var) - { - localBatchCfg.mainCfg.cmpConfig.compareVar = var; - updateGui(); - }; - - auto currentVar = localBatchCfg.mainCfg.cmpConfig.compareVar; - - menu.addRadio(_("File time and size"), [&] { setVariant(CMP_BY_TIME_SIZE); }, currentVar == CMP_BY_TIME_SIZE); - menu.addRadio(_("File content" ), [&] { setVariant(CMP_BY_CONTENT); }, currentVar == CMP_BY_CONTENT); - - menu.popup(*this); -} - - -void BatchDialog::OnSyncSettingsContext(wxCommandEvent& event) -{ - - ContextMenu menu; - - auto setVariant = [&](DirectionConfig::Variant var) - { - localBatchCfg.mainCfg.syncCfg.directionCfg.var = var; - updateGui(); - }; - - const auto currentVar = localBatchCfg.mainCfg.syncCfg.directionCfg.var; - - menu.addRadio(_("<Automatic>"), [&] { setVariant(DirectionConfig::AUTOMATIC); }, currentVar == DirectionConfig::AUTOMATIC); - menu.addRadio(_("Mirror ->>") , [&] { setVariant(DirectionConfig::MIRROR); }, currentVar == DirectionConfig::MIRROR); - menu.addRadio(_("Update ->") , [&] { setVariant(DirectionConfig::UPDATE); }, currentVar == DirectionConfig::UPDATE); - menu.addRadio(_("Custom") , [&] { setVariant(DirectionConfig::CUSTOM); }, currentVar == DirectionConfig::CUSTOM); - - menu.popup(*this); -} - - -void BatchDialog::OnGlobalFilterContext(wxCommandEvent& event) -{ - ContextMenu menu; - - auto clearFilter = [&] - { - localBatchCfg.mainCfg.globalFilter = FilterConfig(); - updateGui(); - }; - menu.addItem( _("Clear filter settings"), clearFilter, nullptr, !isNullFilter(localBatchCfg.mainCfg.globalFilter)); - - menu.popup(*this); -} - - -void BatchDialog::OnCheckSaveLog(wxCommandEvent& event) -{ - updateGui(); - - //reset error handling depending on "m_checkBoxSilent" - //setSelectionHandleError(getEnumVal(enumDescrMap, *m_choiceHandleError)); -} - - -void BatchDialog::OnFilesDropped(FileDropEvent& event) -{ - loadBatchFile(event.getFiles()); -} - - -/* -void BatchDialog::showNotebookpage(wxWindow* page, const wxString& pageName, bool show) -{ - int windowPosition = -1; - for (size_t i = 0; i < m_notebookSettings->GetPageCount(); ++i) - if (m_notebookSettings->GetPage(i) == page) - { - windowPosition = static_cast<int>(i); - break; - } - - if (show) - { - if (windowPosition == -1) - m_notebookSettings->AddPage(page, pageName, false); - } - else - { - if (windowPosition != -1) - { - //do not delete currently selected tab!! - if (m_notebookSettings->GetCurrentPage() == m_notebookSettings->GetPage(windowPosition)) - m_notebookSettings->ChangeSelection(0); - - m_notebookSettings->RemovePage(windowPosition); - } - } -} -*/ - -void BatchDialog::OnSaveBatchJob(wxCommandEvent& event) -{ - //get a filename - wxString defaultFileName = proposedBatchFileName.empty() ? wxT("SyncJob.ffs_batch") : proposedBatchFileName; - - //attention: proposedBatchFileName may be an imported *.ffs_gui file! We don't want to overwrite it with a BATCH config! - if (endsWith(defaultFileName, L".ffs_gui")) - replace(defaultFileName, L".ffs_gui", L".ffs_batch"); - - wxFileDialog filePicker(this, - wxEmptyString, - wxEmptyString, - defaultFileName, - _("FreeFileSync batch") + L" (*.ffs_batch)|*.ffs_batch" + L"|" +_("All files") + L" (*.*)|*", - wxFD_SAVE | wxFD_OVERWRITE_PROMPT); //creating this on freestore leads to memleak! - if (filePicker.ShowModal() == wxID_OK) - { - const wxString newFileName = filePicker.GetPath(); - - saveBatchFile(newFileName); - //if () - // EndModal(ReturnBatchConfig::BATCH_FILE_SAVED); - } -} - - -void BatchDialog::OnLoadBatchJob(wxCommandEvent& event) -{ - wxFileDialog filePicker(this, - wxEmptyString, - beforeLast(proposedBatchFileName, utfCvrtTo<wxString>(FILE_NAME_SEPARATOR)), //set default dir: empty string if "currentConfigFileName" is empty or has no path separator - wxEmptyString, - _("FreeFileSync batch") + L" (*.ffs_batch;*.ffs_gui)|*.ffs_batch;*.ffs_gui" + L"|" +_("All files") + L" (*.*)|*", - wxFD_OPEN | wxFD_MULTIPLE); //creating this on freestore leads to memleak! - if (filePicker.ShowModal() == wxID_OK) - { - wxArrayString tmp; - filePicker.GetPaths(tmp); - std::vector<wxString> fileNames(tmp.begin(), tmp.end()); - - loadBatchFile(fileNames); - } -} - - - -inline -FolderPairEnh getPairCfg(const DirectoryPairBatch& panel) -{ - return FolderPairEnh(toZ(panel.getLeftDir()), - toZ(panel.getRightDir()), - panel.getAltCompConfig(), - panel.getAltSyncConfig(), - panel.getAltFilterConfig()); -} - - -bool BatchDialog::saveBatchFile(const wxString& filename) -{ - const XmlBatchConfig batchCfg = getConfig(); - - //a good place to commit current "on completion" history item - m_comboBoxExecFinished->addItemHistory(); - - //write config to XML - try - { - writeConfig(batchCfg, toZ(filename)); - } - catch (const FfsXmlError& error) - { - wxMessageBox(error.toString().c_str(), _("Error"), wxOK | wxICON_ERROR, this); - return false; - } - - SetTitle(filename); - proposedBatchFileName = filename; //may be used on next save - - return true; -} - - -void BatchDialog::loadBatchFile(const wxString& filename) -{ - std::vector<wxString> filenames; - filenames.push_back(filename); - loadBatchFile(filenames); -} - - -void BatchDialog::loadBatchFile(const std::vector<wxString>& filenames) -{ - if (filenames.empty()) - return; - - //load XML settings - XmlBatchConfig batchCfg; //structure to receive gui settings - try - { - //open a *.ffs_gui or *.ffs_batch file! - mergeConfigs(toZ(filenames), batchCfg); //throw FfsXmlError - - //readConfig(filename, batchCfg); - } - catch (const FfsXmlError& error) - { - if (error.getSeverity() == FfsXmlError::WARNING) - wxMessageBox(error.toString(), _("Warning"), wxOK | wxICON_WARNING, this); - else - { - wxMessageBox(error.toString(), _("Error"), wxOK | wxICON_ERROR, this); - return; - } - } - - const wxString activeFile = filenames.size() == 1 ? filenames[0] : wxString(); - - if (activeFile.empty()) - SetTitle(_("Save as batch job")); - else - SetTitle(activeFile); - - proposedBatchFileName = activeFile; //may be used on next save - - setConfig(batchCfg); } @@ -587,7 +119,6 @@ void BatchDialog::setConfig(const XmlBatchConfig& batchCfg) localBatchCfg = batchCfg; //contains some parameters not owned by GUI controls //transfer parameter ownership to GUI - m_checkBoxShowProgress->SetValue(batchCfg.showProgress); logfileDir->setName(utfCvrtTo<wxString>(batchCfg.logFileDirectory)); m_comboBoxExecFinished->setValue(batchCfg.mainCfg.onCompletion); @@ -598,22 +129,7 @@ void BatchDialog::setConfig(const XmlBatchConfig& batchCfg) m_spinCtrlLogfileLimit ->SetValue(batchCfg.logfilesCountLimit >= 0 ? batchCfg.logfilesCountLimit : 100 /*XmlBatchConfig().logfilesCountLimit*/); //attention: emits a "change value" event!! => updateGui() called implicitly! - //set first folder pair - firstFolderPair->setValues(toWx(batchCfg.mainCfg.firstPair.leftDirectory), - toWx(batchCfg.mainCfg.firstPair.rightDirectory), - batchCfg.mainCfg.firstPair.altCmpConfig, - batchCfg.mainCfg.firstPair.altSyncConfig, - batchCfg.mainCfg.firstPair.localFilter); - - //set additional pairs - clearAddFolderPairs(); - addFolderPair(batchCfg.mainCfg.additionalPairs); - updateGui(); //re-evaluate gui after config changes - - Fit(); //needed - Refresh(); //needed - Centre(); } @@ -621,18 +137,7 @@ XmlBatchConfig BatchDialog::getConfig() const { XmlBatchConfig batchCfg = localBatchCfg; - //load parameter with ownership within wxWidgets controls... - - //first folder pair - batchCfg.mainCfg.firstPair = FolderPairEnh(toZ(firstFolderPair->getLeftDir()), - toZ(firstFolderPair->getRightDir()), - firstFolderPair->getAltCompConfig(), - firstFolderPair->getAltSyncConfig(), - firstFolderPair->getAltFilterConfig()); - //add additional pairs - batchCfg.mainCfg.additionalPairs.clear(); - std::transform(additionalFolderPairs.begin(), additionalFolderPairs.end(), - std::back_inserter(batchCfg.mainCfg.additionalPairs), [](const DirectoryPairBatch* dp) { return getPairCfg(*dp); }); + //load parameters with ownership within GIU controls... //load structure with batch settings "batchCfg" batchCfg.showProgress = m_checkBoxShowProgress->GetValue(); @@ -645,191 +150,20 @@ XmlBatchConfig BatchDialog::getConfig() const } -void BatchDialog::OnAddFolderPair(wxCommandEvent& event) -{ - wxWindowUpdateLocker dummy(this); //avoid display distortion - - std::vector<FolderPairEnh> newPairs; - newPairs.push_back(getConfig().mainCfg.firstPair); - - //clear first pair - const FolderPairEnh cfgEmpty; - firstFolderPair->setValues(toWx(cfgEmpty.leftDirectory), - toWx(cfgEmpty.rightDirectory), - cfgEmpty.altCmpConfig, - cfgEmpty.altSyncConfig, - cfgEmpty.localFilter); - - //keep sequence to update GUI as last step - addFolderPair(newPairs, true); //add pair in front of additonal pairs -} - - -void BatchDialog::OnRemoveFolderPair(wxCommandEvent& event) -{ - //find folder pair originating the event - const wxObject* const eventObj = event.GetEventObject(); - for (std::vector<DirectoryPairBatch*>::const_iterator i = additionalFolderPairs.begin(); i != additionalFolderPairs.end(); ++i) - { - if (eventObj == static_cast<wxObject*>((*i)->m_bpButtonRemovePair)) - { - removeAddFolderPair(i - additionalFolderPairs.begin()); - return; - } - } -} - - -void BatchDialog::OnRemoveTopFolderPair(wxCommandEvent& event) -{ - if (!additionalFolderPairs.empty()) - { - //get settings from second folder pair - const FolderPairEnh cfgSecond = getPairCfg(*additionalFolderPairs[0]); - - //reset first pair - firstFolderPair->setValues(toWx(cfgSecond.leftDirectory), - toWx(cfgSecond.rightDirectory), - cfgSecond.altCmpConfig, - cfgSecond.altSyncConfig, - cfgSecond.localFilter); - - removeAddFolderPair(0); //remove second folder pair (first of additional folder pairs) - } -} - - -void BatchDialog::updateGuiForFolderPair() -{ - //adapt delete top folder pair button - if (additionalFolderPairs.empty()) - m_bpButtonRemovePair->Hide(); - else - m_bpButtonRemovePair->Show(); - - //adapt local filter and sync cfg for first folder pair - const bool showLocalCfgFirstPair = !additionalFolderPairs.empty() || - firstFolderPair->getAltCompConfig().get() != nullptr || - firstFolderPair->getAltSyncConfig().get() != nullptr || - !isNullFilter(firstFolderPair->getAltFilterConfig()); - - m_bpButtonAltCompCfg ->Show(showLocalCfgFirstPair); - m_bpButtonAltSyncCfg ->Show(showLocalCfgFirstPair); - m_bpButtonLocalFilter->Show(showLocalCfgFirstPair); - - //update controls - const int maxAddFolderPairsVisible = 2; - - int pairHeight = sbSizerMainPair->GetSize().GetHeight(); //respect height of main pair - if (!additionalFolderPairs.empty()) - pairHeight += std::min<double>(maxAddFolderPairsVisible + 0.5, additionalFolderPairs.size()) * //have 0.5 * height indicate that more folders are there - additionalFolderPairs[0]->GetSize().GetHeight(); - - m_scrolledWindow6->SetMinSize(wxSize( -1, pairHeight)); - - - m_scrolledWindow6->Fit(); //adjust scrolled window size - m_scrolledWindow6->Layout(); //adjust scrolled window size - - //bSizerAddFolderPairs->FitInside(m_scrolledWindow6); //adjust scrolled window size - - m_panelOverview->Layout(); //adjust stuff inside scrolled window - //m_panelOverview->InvalidateBestSize(); //needed for Fit() to work correctly! - - if (m_scrolledWindow6->GetSize().GetHeight() < pairHeight) - Fit(); //adapt dialog size -} - - -void BatchDialog::addFolderPair(const std::vector<zen::FolderPairEnh>& newPairs, bool addFront) -{ - wxWindowUpdateLocker dummy(m_panelOverview); //avoid display distortion - - if (!newPairs.empty()) - { - //add folder pairs - for (std::vector<zen::FolderPairEnh>::const_iterator i = newPairs.begin(); i != newPairs.end(); ++i) - { - DirectoryPairBatch* newPair = new DirectoryPairBatch(m_scrolledWindow6, *this); //owned by m_scrolledWindow6! - - //init dropdown history - newPair->m_directoryLeft ->init(folderHistLeft_); - newPair->m_directoryRight->init(folderHistRight_); - - if (addFront) - { - bSizerAddFolderPairs->Insert(0, newPair, 0, wxEXPAND, 5); - additionalFolderPairs.insert(additionalFolderPairs.begin(), newPair); - } - else - { - bSizerAddFolderPairs->Add(newPair, 0, wxEXPAND, 5); - additionalFolderPairs.push_back(newPair); - } - - //register events - newPair->m_bpButtonRemovePair->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BatchDialog::OnRemoveFolderPair), nullptr, this ); - - //set alternate configuration - newPair->setValues(toWx(i->leftDirectory), - toWx(i->rightDirectory), - i->altCmpConfig, - i->altSyncConfig, - i->localFilter); - } - - //after changing folder pairs window focus is lost: results in scrolled window scrolling to top each time window is shown: we don't want this - m_bpButtonAddPair->SetFocus(); - } - - updateGuiForFolderPair(); - - updateGui(); //mainly to update sync dir description text -} - - -void BatchDialog::removeAddFolderPair(int pos) +void BatchDialog::OnSaveBatchJob(wxCommandEvent& event) { - wxWindowUpdateLocker dummy(m_panelOverview); //avoid display distortion - - if (0 <= pos && pos < static_cast<int>(additionalFolderPairs.size())) - { - //remove folder pairs from window - DirectoryPairBatch* pairToDelete = additionalFolderPairs[pos]; - - bSizerAddFolderPairs->Detach(pairToDelete); //Remove() does not work on Window*, so do it manually - pairToDelete->Destroy(); // - additionalFolderPairs.erase(additionalFolderPairs.begin() + pos); //remove last element in vector - - //after changing folder pairs window focus is lost: results in scrolled window scrolling to top each time window is shown: we don't want this - m_bpButtonRemovePair->SetFocus(); - } - - updateGuiForFolderPair(); - - updateGui(); //mainly to update sync dir description text + batchCfgOutRef = getConfig(); + m_comboBoxExecFinished->addItemHistory(); //a good place to commit current "on completion" history item + EndModal(BUTTON_SAVE_AS); } - - -void BatchDialog::clearAddFolderPairs() -{ - wxWindowUpdateLocker dummy(m_panelOverview); //avoid display distortion - - additionalFolderPairs.clear(); - bSizerAddFolderPairs->Clear(true); - - updateGuiForFolderPair(); } -void zen::showSyncBatchDlg(wxWindow* parent, - const wxString& referenceFile, - const XmlBatchConfig& batchCfg, - const std::shared_ptr<FolderHistory>& folderHistLeft, - const std::shared_ptr<FolderHistory>& folderHistRight, - std::vector<std::wstring>& execFinishedhistory, - size_t execFinishedhistoryMax) +bool zen::customizeBatchConfig(wxWindow* parent, + xmlAccess::XmlBatchConfig& batchCfg, //in/out + std::vector<std::wstring>& execFinishedhistory, + size_t execFinishedhistoryMax) { - BatchDialog batchDlg(parent, referenceFile, batchCfg, folderHistLeft, folderHistRight, execFinishedhistory, execFinishedhistoryMax); - batchDlg.ShowModal(); + BatchDialog batchDlg(parent, batchCfg, execFinishedhistory, execFinishedhistoryMax); + return static_cast<ButtonPressed>(batchDlg.ShowModal()) == BUTTON_SAVE_AS; } diff --git a/ui/batch_config.h b/ui/batch_config.h index 98d0bf6b..5bff09e1 100644 --- a/ui/batch_config.h +++ b/ui/batch_config.h @@ -7,19 +7,16 @@ #ifndef BATCHCONFIG_H_INCLUDED #define BATCHCONFIG_H_INCLUDED +#include <wx/window.h> #include "../lib/process_xml.h" -#include "folder_history_box.h" - namespace zen { -void showSyncBatchDlg(wxWindow* parent, - const wxString& referenceFile, - const xmlAccess::XmlBatchConfig& batchCfg, - const std::shared_ptr<FolderHistory>& folderHistLeft, - const std::shared_ptr<FolderHistory>& folderHistRight, - std::vector<std::wstring>& execFinishedhistory, - size_t execFinishedhistoryMax); +//show and let user customize batch settings (without saving) +bool customizeBatchConfig(wxWindow* parent, //return "false" if aborted, "true" on "do save" + xmlAccess::XmlBatchConfig& batchCfg, //in/out + std::vector<std::wstring>& execFinishedhistory, + size_t execFinishedhistoryMax); } #endif // BATCHCONFIG_H_INCLUDED diff --git a/ui/batch_status_handler.cpp b/ui/batch_status_handler.cpp index 5a32e545..ebfa84a0 100644 --- a/ui/batch_status_handler.cpp +++ b/ui/batch_status_handler.cpp @@ -157,7 +157,7 @@ BatchStatusHandler::~BatchStatusHandler() else if (totalWarnings > 0) { raiseReturnCode(returnCode_, FFS_RC_FINISHED_WITH_WARNINGS); - finalStatus = _("Synchronization completed with warnings!"); + finalStatus = _("Synchronization completed with warnings."); errorLog.logMsg(finalStatus, TYPE_WARNING); } else @@ -166,7 +166,7 @@ BatchStatusHandler::~BatchStatusHandler() getDataTotal (PHASE_SYNCHRONIZING) == 0) finalStatus = _("Nothing to synchronize!"); //even if "ignored conflicts" occurred! else - finalStatus = _("Synchronization completed successfully!"); + finalStatus = _("Synchronization completed successfully."); errorLog.logMsg(finalStatus, TYPE_INFO); } @@ -182,10 +182,10 @@ BatchStatusHandler::~BatchStatusHandler() //print the results list: logfile if (logFile.get()) { - //saving log file below may take a *long* time, so report (without logging) try { - reportStatus(replaceCpy(_("Saving log file %x"), L"%x", fmtFileName(logFile->getFilename()))); //throw? + //saving log file below may take a *long* time, so report (without logging) + reportStatus(replaceCpy(_("Saving log file %x..."), L"%x", fmtFileName(logFile->getFilename()))); //throw? forceUiRefresh(); // } catch (...) {} diff --git a/ui/custom_grid.cpp b/ui/custom_grid.cpp index 975dca5a..ffa0a9bc 100644 --- a/ui/custom_grid.cpp +++ b/ui/custom_grid.cpp @@ -715,24 +715,24 @@ private: { if (dynamic_cast<const FileMapping*>(fsObj) || dynamic_cast<const SymLinkMapping*>(fsObj)) { - for (auto iter = markedFiles_.begin(); iter != markedFiles_.end(); ++iter) - if (*iter == &(fsObj->parent())) //mark files/links wich have the given parent + for (auto it = markedFiles_.begin(); it != markedFiles_.end(); ++it) + if (*it == &(fsObj->parent())) //mark files/links wich have the given parent return true; } else if (auto dirObj = dynamic_cast<const DirMapping*>(fsObj)) { - for (auto iter = markedContainer_.begin(); iter != markedContainer_.end(); ++iter) - if (*iter == dirObj) //mark directories which *are* the given HierarchyObject* + for (auto it = markedContainer_.begin(); it != markedContainer_.end(); ++it) + if (*it == dirObj) //mark directories which *are* the given HierarchyObject* return true; } - for (auto iter = markedContainer_.begin(); iter != markedContainer_.end(); ++iter) + for (auto it = markedContainer_.begin(); it != markedContainer_.end(); ++it) { //mark all objects which have the HierarchyObject as *any* matching ancestor const HierarchyObject* parent = &(fsObj->parent()); for (;;) { - if (*iter == parent) + if (*it == parent) return true; if (auto dirObj = dynamic_cast<const DirMapping*>(parent)) @@ -1336,10 +1336,10 @@ private: { //find stretch factor of resized column: type is unique due to makeConsistent()! std::vector<Grid::ColumnAttribute> cfgSrc = src.getColumnConfig(); - auto iter = std::find_if(cfgSrc.begin(), cfgSrc.end(), [&](Grid::ColumnAttribute& ca) { return ca.type_ == type; }); - if (iter == cfgSrc.end()) + auto it = std::find_if(cfgSrc.begin(), cfgSrc.end(), [&](Grid::ColumnAttribute& ca) { return ca.type_ == type; }); + if (it == cfgSrc.end()) return; - const ptrdiff_t stretchSrc = iter->stretch_; + const ptrdiff_t stretchSrc = it->stretch_; //we do not propagate resizings on stretched columns to the other side: awkward user experience if (stretchSrc > 0) @@ -1492,7 +1492,7 @@ std::vector<ColumnAttributeRim> makeConsistent(const std::vector<ColumnAttribute std::set<ColumnTypeRim> usedTypes; std::vector<ColumnAttributeRim> output; - //remove duplicates + //remove duplicates: required by GridEventManager::resizeOtherSide() to find corresponding column on other side std::copy_if(attribs.begin(), attribs.end(), std::back_inserter(output), [&](const ColumnAttributeRim& a) { return usedTypes.insert(a.type_).second; }); diff --git a/ui/exec_finished_box.cpp b/ui/exec_finished_box.cpp index 6d760f77..bbd37301 100644 --- a/ui/exec_finished_box.cpp +++ b/ui/exec_finished_box.cpp @@ -110,8 +110,8 @@ void ExecFinishedBox::addItemHistory() //do not add built-in commands to history if (!skipCmd) { - for (auto iter = defaultCommands.begin(); iter != defaultCommands.end(); ++iter) - if (command == iter->first || command == iter->second) + for (auto it = defaultCommands.begin(); it != defaultCommands.end(); ++it) + if (command == it->first || command == it->second) { skipCmd = true; break; @@ -164,8 +164,8 @@ void ExecFinishedBox::setValueAndUpdateList(const std::wstring& value) items.push_back(implementation::translate(cmdTxtCloseProgressDlg)); //2. built in commands - for (auto iter = defaultCommands.begin(); iter != defaultCommands.end(); ++iter) - items.push_back(iter->first); + for (auto it = defaultCommands.begin(); it != defaultCommands.end(); ++it) + items.push_back(it->first); //3. history elements if (history_ && !history_->empty()) @@ -209,9 +209,9 @@ void ExecFinishedBox::OnValidateSelection(wxCommandEvent& event) if (value == separationLine) setValueAndUpdateList(std::wstring()); else - for (auto iter = defaultCommands.begin(); iter != defaultCommands.end(); ++iter) - if (iter->first == value) - return setValueAndUpdateList(iter->second); //replace GUI name by actual command string + for (auto it = defaultCommands.begin(); it != defaultCommands.end(); ++it) + if (it->first == value) + return setValueAndUpdateList(it->second); //replace GUI name by actual command string } diff --git a/ui/folder_history_box.cpp b/ui/folder_history_box.cpp index cefc03c8..41e0a1fe 100644 --- a/ui/folder_history_box.cpp +++ b/ui/folder_history_box.cpp @@ -84,8 +84,8 @@ void FolderHistoryBox::setValueAndUpdateList(const wxString& dirname) if (sharedHistory_.get()) { - auto tmp = sharedHistory_->getList(); - //std::sort(tmp.begin(), tmp.end(), LessFilename()); + std::vector<Zstring> tmp = sharedHistory_->getList(); + std::sort(tmp.begin(), tmp.end(), LessFilename()); if (!dirList.empty() && !tmp.empty()) dirList.push_back(toZ(FolderHistory::separationLine())); diff --git a/ui/folder_pair.h b/ui/folder_pair.h index 0f8ce3a0..4337efc6 100644 --- a/ui/folder_pair.h +++ b/ui/folder_pair.h @@ -7,17 +7,17 @@ #ifndef FOLDERPAIR_H_INCLUDED #define FOLDERPAIR_H_INCLUDED -#include "../structures.h" -#include "dir_name.h" -#include "../lib/resources.h" -#include "small_dlgs.h" -#include "sync_cfg.h" #include <wx/event.h> -#include <wx+/context_menu.h> #include <wx/menu.h> -#include "../lib/norm_filter.h" +#include <wx+/context_menu.h> #include <wx+/button.h> #include <wx+/image_tools.h> +#include "dir_name.h" +#include "small_dlgs.h" +#include "sync_cfg.h" +#include "../lib/norm_filter.h" +#include "../structures.h" +#include "../lib/resources.h" namespace zen { diff --git a/ui/grid_view.cpp b/ui/grid_view.cpp index 31172319..dbaff5cd 100644 --- a/ui/grid_view.cpp +++ b/ui/grid_view.cpp @@ -97,14 +97,14 @@ void GridView::updateView(Predicate pred) ptrdiff_t GridView::findRowDirect(FileSystemObject::ObjectIdConst objId) const { - auto iter = rowPositions.find(objId); - return iter != rowPositions.end() ? iter->second : -1; + auto it = rowPositions.find(objId); + return it != rowPositions.end() ? it->second : -1; } ptrdiff_t GridView::findRowFirstChild(const HierarchyObject* hierObj) const { - auto iter = rowPositionsFirstChild.find(hierObj); - return iter != rowPositionsFirstChild.end() ? iter->second : -1; + auto it = rowPositionsFirstChild.find(hierObj); + return it != rowPositionsFirstChild.end() ? it->second : -1; } @@ -344,8 +344,8 @@ void GridView::setData(FolderComparison& folderCmp) !baseObj.getBaseDirPf<RIGHT_SIDE>().empty(); }); - for (auto iter = begin(folderCmp); iter != end(folderCmp); ++iter) - SerializeHierarchy(sortedRef, iter - begin(folderCmp)).execute(*iter); + for (auto it = begin(folderCmp); it != end(folderCmp); ++it) + SerializeHierarchy(sortedRef, it - begin(folderCmp)).execute(*it); } diff --git a/ui/gui_generated.cpp b/ui/gui_generated.cpp index 6619b646..43a14ae3 100644 --- a/ui/gui_generated.cpp +++ b/ui/gui_generated.cpp @@ -20,1005 +20,993 @@ 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 ); - #ifdef __WXMSW__ - m_menuItemNew->SetBitmaps( wxNullBitmap ); - #elif defined( __WXGTK__ ) - m_menuItemNew->SetBitmap( wxNullBitmap ); - #endif - m_menuFile->Append( m_menuItemNew ); - - m_menuItemLoad = new wxMenuItem( m_menuFile, wxID_OPEN, wxString( _("&Open...") ) + wxT('\t') + wxT("Ctrl+O"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemLoad ); - - m_menuItemSave = new wxMenuItem( m_menuFile, wxID_SAVE, wxString( _("&Save") ) + wxT('\t') + wxT("Ctrl+S"), wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemSave ); - - m_menuItemSaveAs = new wxMenuItem( m_menuFile, wxID_SAVEAS, wxString( _("Save &as...") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItemSaveAs ); - - m_menuItem7 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("Save as &batch job...") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItem7 ); - - m_menuFile->AppendSeparator(); - - m_menuItem10 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("1. &Compare") ) + wxT('\t') + wxT("F5"), wxEmptyString, wxITEM_NORMAL ); - #ifdef __WXMSW__ - m_menuItem10->SetBitmaps( wxNullBitmap ); - #elif defined( __WXGTK__ ) - m_menuItem10->SetBitmap( wxNullBitmap ); - #endif - m_menuFile->Append( m_menuItem10 ); - - m_menuItem11 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("2. &Synchronize") ) + wxT('\t') + wxT("F6"), wxEmptyString, wxITEM_NORMAL ); - #ifdef __WXMSW__ - m_menuItem11->SetBitmaps( wxNullBitmap ); - #elif defined( __WXGTK__ ) - m_menuItem11->SetBitmap( wxNullBitmap ); - #endif - m_menuFile->Append( m_menuItem11 ); - - m_menuFile->AppendSeparator(); - - wxMenuItem* m_menuItem4; - m_menuItem4 = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("&Quit") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuFile->Append( m_menuItem4 ); - - m_menubar1->Append( m_menuFile, _("&Program") ); - - m_menuAdvanced = new wxMenu(); - m_menuLanguages = new wxMenu(); - m_menuAdvanced->Append( -1, _("&Language"), m_menuLanguages ); - - m_menuAdvanced->AppendSeparator(); - - m_menuItemGlobSett = new wxMenuItem( m_menuAdvanced, wxID_PREFERENCES, wxString( _("&Global settings...") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuAdvanced->Append( m_menuItemGlobSett ); - - wxMenuItem* m_menuItem5; - m_menuItem5 = new wxMenuItem( m_menuAdvanced, wxID_ANY, wxString( _("&Export file list...") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuAdvanced->Append( m_menuItem5 ); - - m_menubar1->Append( m_menuAdvanced, _("&Advanced") ); - - m_menuHelp = new wxMenu(); - m_menuItemManual = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&Content") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); - m_menuHelp->Append( m_menuItemManual ); - - m_menuItemCheckVer = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Check for new version") ) , wxEmptyString, wxITEM_NORMAL ); - m_menuHelp->Append( m_menuItemCheckVer ); - - m_menuHelp->AppendSeparator(); - - m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL ); - m_menuHelp->Append( m_menuItemAbout ); - - m_menubar1->Append( m_menuHelp, _("&Help") ); - - this->SetMenuBar( m_menubar1 ); - - bSizerPanelHolder = new wxBoxSizer( wxVERTICAL ); - - m_panelTopButtons = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER|wxTAB_TRAVERSAL ); - bSizerTopButtons = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer155; - bSizer155 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer155->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxFlexGridSizer* fgSizer121; - fgSizer121 = new wxFlexGridSizer( 2, 2, 0, 0 ); - fgSizer121->SetFlexibleDirection( wxBOTH ); - fgSizer121->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_staticTextCmpVariant = new wxStaticText( m_panelTopButtons, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCmpVariant->Wrap( -1 ); - m_staticTextCmpVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); - m_staticTextCmpVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - fgSizer121->Add( m_staticTextCmpVariant, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxTOP, 1 ); - - - fgSizer121->Add( 0, 0, 1, 0, 5 ); - - wxBoxSizer* bSizer30; - bSizer30 = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonCompare = new zen::BitmapButton( m_panelTopButtons, wxID_OK, _("Compare"), wxDefaultPosition, wxSize( 180,46 ), 0 ); - m_buttonCompare->SetDefault(); - m_buttonCompare->SetFont( wxFont( 14, 74, 90, 92, false, wxEmptyString ) ); - m_buttonCompare->SetToolTip( _("Compare both sides") ); - - bSizer30->Add( m_buttonCompare, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonAbort = new wxButton( m_panelTopButtons, wxID_CANCEL, _("&Abort"), wxDefaultPosition, wxSize( 180,42 ), 0 ); - m_buttonAbort->SetFont( wxFont( 14, 74, 90, 92, false, wxEmptyString ) ); - m_buttonAbort->Enable( false ); - m_buttonAbort->Hide(); - - bSizer30->Add( m_buttonAbort, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - fgSizer121->Add( bSizer30, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonCmpConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,46 ), wxBU_AUTODRAW ); - m_bpButtonCmpConfig->SetToolTip( _("Comparison settings") ); - - fgSizer121->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 3 ); - - - bSizer155->Add( fgSizer121, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); - - - bSizerTopButtons->Add( bSizer155, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerTopButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer1551; - bSizer1551 = new wxBoxSizer( wxHORIZONTAL ); - - wxFlexGridSizer* fgSizer12; - fgSizer12 = new wxFlexGridSizer( 2, 2, 0, 0 ); - fgSizer12->SetFlexibleDirection( wxBOTH ); - fgSizer12->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - - fgSizer12->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextSyncVariant = new wxStaticText( m_panelTopButtons, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextSyncVariant->Wrap( -1 ); - m_staticTextSyncVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); - m_staticTextSyncVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - fgSizer12->Add( m_staticTextSyncVariant, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP, 1 ); - - m_bpButtonSyncConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,46 ), wxBU_AUTODRAW ); - m_bpButtonSyncConfig->SetToolTip( _("Synchronization settings") ); - - fgSizer12->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3 ); - - m_buttonStartSync = new zen::BitmapButton( m_panelTopButtons, wxID_ANY, _("Synchronize"), wxDefaultPosition, wxSize( 180,46 ), 0 ); - m_buttonStartSync->SetFont( wxFont( 14, 74, 90, 92, false, wxEmptyString ) ); - m_buttonStartSync->SetToolTip( _("Start synchronization") ); - - fgSizer12->Add( m_buttonStartSync, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer1551->Add( fgSizer12, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); - - - bSizer1551->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerTopButtons->Add( bSizer1551, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelTopButtons->SetSizer( bSizerTopButtons ); - m_panelTopButtons->Layout(); - bSizerTopButtons->Fit( m_panelTopButtons ); - bSizerPanelHolder->Add( m_panelTopButtons, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_panelDirectoryPairs = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1601; - bSizer1601 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer91; - bSizer91 = new wxBoxSizer( wxHORIZONTAL ); - - m_panelTopLeft = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelTopLeft->SetMinSize( wxSize( 1,-1 ) ); - - wxBoxSizer* bSizer180; - bSizer180 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer181; - bSizer181 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer181->Add( 25, 0, 0, 0, 5 ); - - m_staticTextFinalPathLeft = new wxStaticText( m_panelTopLeft, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextFinalPathLeft->Wrap( -1 ); - bSizer181->Add( m_staticTextFinalPathLeft, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 2 ); - - - bSizer180->Add( bSizer181, 0, 0, 5 ); - - - bSizer180->Add( 0, 0, 1, wxEXPAND, 5 ); - - wxBoxSizer* bSizer182; - bSizer182 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonAddPair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 23,23 ), wxBU_AUTODRAW ); - m_bpButtonAddPair->SetToolTip( _("Add folder pair") ); - - bSizer182->Add( m_bpButtonAddPair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonRemovePair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 23,23 ), wxBU_AUTODRAW ); - m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); - - bSizer182->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - 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 ); - - - bSizer180->Add( bSizer182, 0, wxEXPAND, 5 ); - - - m_panelTopLeft->SetSizer( bSizer180 ); - m_panelTopLeft->Layout(); - bSizer180->Fit( m_panelTopLeft ); - bSizer91->Add( m_panelTopLeft, 1, wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 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( 22,22 ), wxBU_AUTODRAW ); - bSizer160->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonLocalFilter = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 22,22 ), wxBU_AUTODRAW ); - bSizer160->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 ); - - m_bpButtonAltSyncCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 22,22 ), 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 ); - - wxBoxSizer* bSizer184; - bSizer184 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer184->Add( 25, 0, 0, 0, 5 ); - - m_staticTextFinalPathRight = new wxStaticText( m_panelTopRight, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextFinalPathRight->Wrap( -1 ); - bSizer184->Add( m_staticTextFinalPathRight, 0, wxTOP|wxBOTTOM|wxALIGN_CENTER_VERTICAL, 2 ); - - - bSizer183->Add( bSizer184, 0, 0, 5 ); - - - bSizer183->Add( 0, 0, 1, wxEXPAND, 5 ); - - 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_HORIZONTAL|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|wxEXPAND, 5 ); - - - bSizer1601->Add( bSizer91, 0, wxEXPAND, 5 ); - - m_scrolledWindowFolderPairs = new wxScrolledWindow( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxHSCROLL|wxVSCROLL ); - m_scrolledWindowFolderPairs->SetScrollRate( 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 ) ); - 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( 10, 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 ); - - - bSizer451->Add( bSizer53, 1, wxALIGN_BOTTOM|wxEXPAND, 5 ); - - m_staticline9 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer451->Add( m_staticline9, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxEXPAND, 2 ); - - - bSizer451->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextStatusMiddle = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatusMiddle->Wrap( -1 ); - m_staticTextStatusMiddle->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); - - bSizer451->Add( m_staticTextStatusMiddle, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer451->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticline10 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer451->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( 10, 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 ); - - - bSizer451->Add( bSizer52, 1, wxALIGN_BOTTOM|wxEXPAND, 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_panelConfig = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - bSizerConfig = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer151; - bSizer151 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonLoad = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonLoad->SetToolTip( _("Open") ); - - bSizer151->Add( m_bpButtonLoad, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonSave = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonSave->SetToolTip( _("Save") ); - - bSizer151->Add( m_bpButtonSave, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonBatchJob = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonBatchJob->SetToolTip( _("Save as batch job") ); - - bSizer151->Add( m_bpButtonBatchJob, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerConfig->Add( bSizer151, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_listBoxHistory = new wxListBox( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB|wxLB_SORT ); - m_listBoxHistory->SetToolTip( _("Last used configurations (press DEL to remove from list)") ); - 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_panelFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer171; - bSizer171 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonFilter = new wxBitmapButton( m_panelFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE ); - bSizer171->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_checkBoxShowExcluded = new wxCheckBox( m_panelFilter, wxID_ANY, _("Show excluded items"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxShowExcluded->SetToolTip( _("Show filtered or temporarily excluded files") ); - - bSizer171->Add( m_checkBoxShowExcluded, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelFilter->SetSizer( bSizer171 ); - m_panelFilter->Layout(); - bSizer171->Fit( m_panelFilter ); - bSizerPanelHolder->Add( m_panelFilter, 0, 0, 5 ); - - m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - bSizer1801 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer1801->Add( 0, 0, 1, wxEXPAND, 5 ); - - bSizerStatistics = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer1712; - bSizer1712 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); - - bSizer1712->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer1712->Add( 5, 2, 0, 0, 5 ); - - - bSizer1712->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCreateLeft->Wrap( -1 ); - m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); - - bSizer1712->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerStatistics->Add( bSizer1712, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); - - bSizer172->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer172->Add( 5, 2, 0, 0, 5 ); - - - bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextUpdateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdateLeft->Wrap( -1 ); - m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); - - bSizer172->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerStatistics->Add( bSizer172, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer173; - bSizer173 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); - - bSizer173->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer173->Add( 5, 2, 0, 0, 5 ); - - - bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeleteLeft->Wrap( -1 ); - m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); - - bSizer173->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizer173, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - bSizerData = new wxBoxSizer( wxVERTICAL ); - - m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapData->SetToolTip( _("Total bytes to copy") ); - - bSizerData->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerData->Add( 5, 2, 0, 0, 5 ); - - - bSizerData->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextData->Wrap( -1 ); - m_staticTextData->SetToolTip( _("Total bytes to copy") ); - - bSizerData->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizerData, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer176; - bSizer176 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); - - bSizer176->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer176->Add( 5, 2, 0, 0, 5 ); - - - bSizer176->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextDeleteRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeleteRight->Wrap( -1 ); - m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); - - bSizer176->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizer176, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer177; - bSizer177 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); - - bSizer177->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer177->Add( 5, 2, 0, 0, 5 ); - - - bSizer177->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextUpdateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdateRight->Wrap( -1 ); - m_staticTextUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); - - bSizer177->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizer177, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizerStatistics->Add( 5, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer178; - bSizer178 = new wxBoxSizer( wxVERTICAL ); - - m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") ); - - bSizer178->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer178->Add( 5, 2, 0, 0, 5 ); - - - bSizer178->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_staticTextCreateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCreateRight->Wrap( -1 ); - m_staticTextCreateRight->SetToolTip( _("Number of files and folders that will be created") ); - - bSizer178->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerStatistics->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer1801->Add( bSizerStatistics, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer1801->Add( 0, 0, 1, wxEXPAND, 5 ); - - - m_panelStatistics->SetSizer( bSizer1801 ); - m_panelStatistics->Layout(); - bSizer1801->Fit( m_panelStatistics ); - bSizerPanelHolder->Add( m_panelStatistics, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_panelViewFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - bSizerViewFilter = new wxBoxSizer( wxHORIZONTAL ); - - - bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bpButtonSyncCreateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonSyncCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonSyncDirOverwLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonSyncDirOverwLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonSyncDeleteLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonSyncDeleteLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonLeftOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonLeftNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonEqual = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonEqual, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonDifferent = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonSyncDirNone = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonSyncDirNone, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonRightNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonRightOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonSyncDeleteRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonSyncDeleteRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonSyncDirOverwRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonSyncDirOverwRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonSyncCreateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonSyncCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonConflict = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - bSizerViewFilter->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); - - - m_panelViewFilter->SetSizer( bSizerViewFilter ); - m_panelViewFilter->Layout(); - bSizerViewFilter->Fit( m_panelViewFilter ); - bSizerPanelHolder->Add( m_panelViewFilter, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - this->SetSizer( bSizerPanelHolder ); - this->Layout(); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) ); - this->Connect( m_menuItemNew->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigNew ) ); - this->Connect( m_menuItemLoad->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ) ); - this->Connect( m_menuItemSave->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ) ); - this->Connect( m_menuItemSaveAs->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSaveAs ) ); - this->Connect( m_menuItem7->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuBatchJob ) ); - this->Connect( m_menuItem10->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) ); - this->Connect( m_menuItem11->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) ); - this->Connect( m_menuItem4->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) ); - this->Connect( m_menuItemGlobSett->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuGlobalSettings ) ); - this->Connect( m_menuItem5->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) ); - this->Connect( m_menuItemManual->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) ); - this->Connect( m_menuItemCheckVer->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) ); - 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_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this ); - m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this ); - m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this ); - m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this ); - m_bpButtonSwapSides->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this ); - m_bpButtonLoad->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ), NULL, this ); - m_bpButtonSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ), NULL, this ); - m_bpButtonBatchJob->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnMenuBatchJob ), NULL, this ); - m_listBoxHistory->Connect( wxEVT_CHAR, wxKeyEventHandler( MainDialogGenerated::OnCfgHistoryKeyEvent ), NULL, this ); - m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistory ), NULL, this ); - m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistoryDoubleClick ), NULL, this ); - m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this ); - m_checkBoxShowExcluded->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnShowExcluded ), NULL, this ); - m_bpButtonSyncCreateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateLeft ), NULL, this ); - m_bpButtonSyncDirOverwLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirLeft ), NULL, this ); - m_bpButtonSyncDeleteLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteLeft ), NULL, this ); - m_bpButtonLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftOnlyFiles ), NULL, this ); - m_bpButtonLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftNewerFiles ), NULL, this ); - m_bpButtonEqual->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnEqualFiles ), NULL, this ); - m_bpButtonDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnDifferentFiles ), NULL, this ); - m_bpButtonSyncDirNone->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirNone ), NULL, this ); - m_bpButtonRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightNewerFiles ), NULL, this ); - m_bpButtonRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightOnlyFiles ), NULL, this ); - m_bpButtonSyncDeleteRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteRight ), NULL, this ); - m_bpButtonSyncDirOverwRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirRight ), NULL, this ); - m_bpButtonSyncCreateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateRight ), NULL, this ); - m_bpButtonConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConflictFiles ), 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 ); +#ifdef __WXMSW__ + m_menuItemNew->SetBitmaps( wxNullBitmap ); +#elif defined( __WXGTK__ ) + m_menuItemNew->SetBitmap( wxNullBitmap ); +#endif + m_menuFile->Append( m_menuItemNew ); + + m_menuItemLoad = new wxMenuItem( m_menuFile, wxID_OPEN, wxString( _("&Open...") ) + wxT('\t') + wxT("Ctrl+O"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemLoad ); + + m_menuItemSave = new wxMenuItem( m_menuFile, wxID_SAVE, wxString( _("&Save") ) + wxT('\t') + wxT("Ctrl+S"), wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemSave ); + + m_menuItemSaveAs = new wxMenuItem( m_menuFile, wxID_SAVEAS, wxString( _("Save &as...") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItemSaveAs ); + + m_menuItem7 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("Save as &batch job...") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItem7 ); + + m_menuFile->AppendSeparator(); + + m_menuItem10 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("1. &Compare") ) + wxT('\t') + wxT("F5"), wxEmptyString, wxITEM_NORMAL ); +#ifdef __WXMSW__ + m_menuItem10->SetBitmaps( wxNullBitmap ); +#elif defined( __WXGTK__ ) + m_menuItem10->SetBitmap( wxNullBitmap ); +#endif + m_menuFile->Append( m_menuItem10 ); + + m_menuItem11 = new wxMenuItem( m_menuFile, wxID_ANY, wxString( _("2. &Synchronize") ) + wxT('\t') + wxT("F6"), wxEmptyString, wxITEM_NORMAL ); +#ifdef __WXMSW__ + m_menuItem11->SetBitmaps( wxNullBitmap ); +#elif defined( __WXGTK__ ) + m_menuItem11->SetBitmap( wxNullBitmap ); +#endif + m_menuFile->Append( m_menuItem11 ); + + m_menuFile->AppendSeparator(); + + wxMenuItem* m_menuItem4; + m_menuItem4 = new wxMenuItem( m_menuFile, wxID_EXIT, wxString( _("&Quit") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuFile->Append( m_menuItem4 ); + + m_menubar1->Append( m_menuFile, _("&Program") ); + + m_menuAdvanced = new wxMenu(); + m_menuLanguages = new wxMenu(); + m_menuAdvanced->Append( -1, _("&Language"), m_menuLanguages ); + + m_menuAdvanced->AppendSeparator(); + + m_menuItemGlobSett = new wxMenuItem( m_menuAdvanced, wxID_PREFERENCES, wxString( _("&Global settings...") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuAdvanced->Append( m_menuItemGlobSett ); + + wxMenuItem* m_menuItem5; + m_menuItem5 = new wxMenuItem( m_menuAdvanced, wxID_ANY, wxString( _("&Export file list...") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuAdvanced->Append( m_menuItem5 ); + + m_menubar1->Append( m_menuAdvanced, _("&Advanced") ); + + m_menuHelp = new wxMenu(); + m_menuItemManual = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&Content") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemManual ); + + m_menuItemCheckVer = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Check for new version") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemCheckVer ); + + m_menuHelp->AppendSeparator(); + + m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemAbout ); + + m_menubar1->Append( m_menuHelp, _("&Help") ); + + this->SetMenuBar( m_menubar1 ); + + bSizerPanelHolder = new wxBoxSizer( wxVERTICAL ); + + m_panelTopButtons = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER|wxTAB_TRAVERSAL ); + bSizerTopButtons = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer155; + bSizer155 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer155->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxFlexGridSizer* fgSizer121; + fgSizer121 = new wxFlexGridSizer( 2, 2, 0, 0 ); + fgSizer121->SetFlexibleDirection( wxBOTH ); + fgSizer121->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_staticTextCmpVariant = new wxStaticText( m_panelTopButtons, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCmpVariant->Wrap( -1 ); + m_staticTextCmpVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); + m_staticTextCmpVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + fgSizer121->Add( m_staticTextCmpVariant, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxTOP, 1 ); + + + fgSizer121->Add( 0, 0, 1, 0, 5 ); + + wxBoxSizer* bSizer30; + bSizer30 = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonCompare = new zen::BitmapButton( m_panelTopButtons, wxID_OK, _("Compare"), wxDefaultPosition, wxSize( 180,46 ), 0 ); + m_buttonCompare->SetDefault(); + m_buttonCompare->SetFont( wxFont( 14, 74, 90, 92, false, wxEmptyString ) ); + m_buttonCompare->SetToolTip( _("Compare both sides") ); + + bSizer30->Add( m_buttonCompare, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonAbort = new wxButton( m_panelTopButtons, wxID_CANCEL, _("&Abort"), wxDefaultPosition, wxSize( 180,42 ), 0 ); + m_buttonAbort->SetFont( wxFont( 14, 74, 90, 92, false, wxEmptyString ) ); + m_buttonAbort->Enable( false ); + m_buttonAbort->Hide(); + + bSizer30->Add( m_buttonAbort, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + fgSizer121->Add( bSizer30, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonCmpConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,46 ), wxBU_AUTODRAW ); + m_bpButtonCmpConfig->SetToolTip( _("Comparison settings") ); + + fgSizer121->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 3 ); + + + bSizer155->Add( fgSizer121, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); + + + bSizerTopButtons->Add( bSizer155, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerTopButtons->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer1551; + bSizer1551 = new wxBoxSizer( wxHORIZONTAL ); + + wxFlexGridSizer* fgSizer12; + fgSizer12 = new wxFlexGridSizer( 2, 2, 0, 0 ); + fgSizer12->SetFlexibleDirection( wxBOTH ); + fgSizer12->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + + fgSizer12->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextSyncVariant = new wxStaticText( m_panelTopButtons, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextSyncVariant->Wrap( -1 ); + m_staticTextSyncVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); + m_staticTextSyncVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + fgSizer12->Add( m_staticTextSyncVariant, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP, 1 ); + + m_bpButtonSyncConfig = new wxBitmapButton( m_panelTopButtons, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,46 ), wxBU_AUTODRAW ); + m_bpButtonSyncConfig->SetToolTip( _("Synchronization settings") ); + + fgSizer12->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3 ); + + m_buttonStartSync = new zen::BitmapButton( m_panelTopButtons, wxID_ANY, _("Synchronize"), wxDefaultPosition, wxSize( 180,46 ), 0 ); + m_buttonStartSync->SetFont( wxFont( 14, 74, 90, 92, false, wxEmptyString ) ); + m_buttonStartSync->SetToolTip( _("Start synchronization") ); + + fgSizer12->Add( m_buttonStartSync, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer1551->Add( fgSizer12, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); + + + bSizer1551->Add( 15, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerTopButtons->Add( bSizer1551, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelTopButtons->SetSizer( bSizerTopButtons ); + m_panelTopButtons->Layout(); + bSizerTopButtons->Fit( m_panelTopButtons ); + bSizerPanelHolder->Add( m_panelTopButtons, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_panelDirectoryPairs = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSTATIC_BORDER|wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1601; + bSizer1601 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer91; + bSizer91 = new wxBoxSizer( wxHORIZONTAL ); + + m_panelTopLeft = new wxPanel( m_panelDirectoryPairs, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelTopLeft->SetMinSize( wxSize( 1,-1 ) ); + + wxFlexGridSizer* fgSizer8; + fgSizer8 = new wxFlexGridSizer( 0, 2, 0, 0 ); + fgSizer8->AddGrowableCol( 1 ); + fgSizer8->SetFlexibleDirection( wxBOTH ); + fgSizer8->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_ALL ); + + + fgSizer8->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextResolvedPathL = new wxStaticText( m_panelTopLeft, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextResolvedPathL->Wrap( -1 ); + fgSizer8->Add( m_staticTextResolvedPathL, 0, wxALIGN_CENTER_VERTICAL|wxALL, 2 ); + + wxBoxSizer* bSizer159; + bSizer159 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonAddPair = new wxBitmapButton( m_panelTopLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 24,24 ), 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( 24,24 ), 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( 24,24 ), wxBU_AUTODRAW ); + bSizer160->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonLocalFilter = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 24,24 ), wxBU_AUTODRAW ); + bSizer160->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 ); + + m_bpButtonAltSyncCfg = new wxBitmapButton( m_panelTopMiddle, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 24,24 ), 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 ) ); + 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( 10, 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 ); + + + bSizer451->Add( bSizer53, 1, wxALIGN_BOTTOM|wxEXPAND, 5 ); + + m_staticline9 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer451->Add( m_staticline9, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxEXPAND, 2 ); + + + bSizer451->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextStatusMiddle = new wxStaticText( m_panelStatusBar, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatusMiddle->Wrap( -1 ); + m_staticTextStatusMiddle->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); + + bSizer451->Add( m_staticTextStatusMiddle, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer451->Add( 26, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticline10 = new wxStaticLine( m_panelStatusBar, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer451->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( 10, 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 ); + + + bSizer451->Add( bSizer52, 1, wxALIGN_BOTTOM|wxEXPAND, 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_panelConfig = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + bSizerConfig = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer151; + bSizer151 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonLoad = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + m_bpButtonLoad->SetToolTip( _("Open") ); + + bSizer151->Add( m_bpButtonLoad, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonSave = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + m_bpButtonSave->SetToolTip( _("Save") ); + + bSizer151->Add( m_bpButtonSave, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonBatchJob = new wxBitmapButton( m_panelConfig, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + m_bpButtonBatchJob->SetToolTip( _("Save as batch job") ); + + bSizer151->Add( m_bpButtonBatchJob, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerConfig->Add( bSizer151, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_listBoxHistory = new wxListBox( m_panelConfig, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB|wxLB_SORT ); + m_listBoxHistory->SetToolTip( _("Last used configurations (press DEL to remove from list)") ); + 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_panelFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer171; + bSizer171 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonFilter = new wxBitmapButton( m_panelFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE ); + bSizer171->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_checkBoxHideExcluded = new wxCheckBox( m_panelFilter, wxID_ANY, _("Hide excluded items"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxHideExcluded->SetToolTip( _("Show filtered or temporarily excluded files") ); + + bSizer171->Add( m_checkBoxHideExcluded, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + m_panelFilter->SetSizer( bSizer171 ); + m_panelFilter->Layout(); + bSizer171->Fit( m_panelFilter ); + bSizerPanelHolder->Add( m_panelFilter, 0, 0, 5 ); + + m_panelStatistics = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + bSizer1801 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer1801->Add( 0, 0, 1, wxEXPAND, 5 ); + + bSizerStatistics = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer1712; + bSizer1712 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapCreateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + + bSizer1712->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer1712->Add( 5, 2, 0, 0, 5 ); + + + bSizer1712->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextCreateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCreateLeft->Wrap( -1 ); + m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + + bSizer1712->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerStatistics->Add( bSizer1712, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapUpdateLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); + + bSizer172->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer172->Add( 5, 2, 0, 0, 5 ); + + + bSizer172->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextUpdateLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdateLeft->Wrap( -1 ); + m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); + + bSizer172->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerStatistics->Add( bSizer172, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer173; + bSizer173 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapDeleteLeft = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + + bSizer173->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer173->Add( 5, 2, 0, 0, 5 ); + + + bSizer173->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextDeleteLeft = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeleteLeft->Wrap( -1 ); + m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + + bSizer173->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizer173, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + bSizerData = new wxBoxSizer( wxVERTICAL ); + + m_bitmapData = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapData->SetToolTip( _("Total bytes to copy") ); + + bSizerData->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerData->Add( 5, 2, 0, 0, 5 ); + + + bSizerData->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextData = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextData->Wrap( -1 ); + m_staticTextData->SetToolTip( _("Total bytes to copy") ); + + bSizerData->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizerData, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer176; + bSizer176 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapDeleteRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); + + bSizer176->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer176->Add( 5, 2, 0, 0, 5 ); + + + bSizer176->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextDeleteRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeleteRight->Wrap( -1 ); + m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); + + bSizer176->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizer176, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer177; + bSizer177 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapUpdateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); + + bSizer177->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer177->Add( 5, 2, 0, 0, 5 ); + + + bSizer177->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextUpdateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdateRight->Wrap( -1 ); + m_staticTextUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); + + bSizer177->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizer177, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizerStatistics->Add( 5, 5, 0, 0, 5 ); + + wxBoxSizer* bSizer178; + bSizer178 = new wxBoxSizer( wxVERTICAL ); + + m_bitmapCreateRight = new wxStaticBitmap( m_panelStatistics, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") ); + + bSizer178->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer178->Add( 5, 2, 0, 0, 5 ); + + + bSizer178->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticTextCreateRight = new wxStaticText( m_panelStatistics, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCreateRight->Wrap( -1 ); + m_staticTextCreateRight->SetToolTip( _("Number of files and folders that will be created") ); + + bSizer178->Add( m_staticTextCreateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerStatistics->Add( bSizer178, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer1801->Add( bSizerStatistics, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer1801->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panelStatistics->SetSizer( bSizer1801 ); + m_panelStatistics->Layout(); + bSizer1801->Fit( m_panelStatistics ); + bSizerPanelHolder->Add( m_panelStatistics, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_panelViewFilter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + bSizerViewFilter = new wxBoxSizer( wxHORIZONTAL ); + + + bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bpButtonSyncCreateLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonSyncCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonSyncDirOverwLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonSyncDirOverwLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonSyncDeleteLeft = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonSyncDeleteLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonLeftOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonLeftNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonEqual = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonEqual, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonDifferent = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonSyncDirNone = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonSyncDirNone, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonRightNewer = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonRightOnly = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonSyncDeleteRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonSyncDeleteRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonSyncDirOverwRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonSyncDirOverwRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonSyncCreateRight = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonSyncCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonConflict = new ToggleButton( m_panelViewFilter, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + bSizerViewFilter->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerViewFilter->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panelViewFilter->SetSizer( bSizerViewFilter ); + m_panelViewFilter->Layout(); + bSizerViewFilter->Fit( m_panelViewFilter ); + bSizerPanelHolder->Add( m_panelViewFilter, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + this->SetSizer( bSizerPanelHolder ); + this->Layout(); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) ); + this->Connect( m_menuItemNew->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigNew ) ); + this->Connect( m_menuItemLoad->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ) ); + this->Connect( m_menuItemSave->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ) ); + this->Connect( m_menuItemSaveAs->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSaveAs ) ); + this->Connect( m_menuItem7->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ) ); + this->Connect( m_menuItem10->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) ); + this->Connect( m_menuItem11->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) ); + this->Connect( m_menuItem4->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) ); + this->Connect( m_menuItemGlobSett->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuGlobalSettings ) ); + this->Connect( m_menuItem5->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) ); + this->Connect( m_menuItemManual->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) ); + this->Connect( m_menuItemCheckVer->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) ); + 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_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this ); + m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this ); + m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this ); + m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this ); + m_bpButtonSwapSides->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this ); + m_bpButtonLoad->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ), NULL, this ); + m_bpButtonSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ), NULL, this ); + m_bpButtonBatchJob->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ), NULL, this ); + m_listBoxHistory->Connect( wxEVT_CHAR, wxKeyEventHandler( MainDialogGenerated::OnCfgHistoryKeyEvent ), NULL, this ); + m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistory ), NULL, this ); + m_listBoxHistory->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistoryDoubleClick ), NULL, this ); + m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this ); + m_checkBoxHideExcluded->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnShowExcluded ), NULL, this ); + m_bpButtonSyncCreateLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateLeft ), NULL, this ); + m_bpButtonSyncDirOverwLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirLeft ), NULL, this ); + m_bpButtonSyncDeleteLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteLeft ), NULL, this ); + m_bpButtonLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftOnlyFiles ), NULL, this ); + m_bpButtonLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftNewerFiles ), NULL, this ); + m_bpButtonEqual->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnEqualFiles ), NULL, this ); + m_bpButtonDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnDifferentFiles ), NULL, this ); + m_bpButtonSyncDirNone->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirNone ), NULL, this ); + m_bpButtonRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightNewerFiles ), NULL, this ); + m_bpButtonRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightOnlyFiles ), NULL, this ); + m_bpButtonSyncDeleteRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteRight ), NULL, this ); + m_bpButtonSyncDirOverwRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirRight ), NULL, this ); + m_bpButtonSyncCreateRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateRight ), NULL, this ); + m_bpButtonConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConflictFiles ), NULL, this ); } MainDialogGenerated::~MainDialogGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) ); - this->Disconnect( wxID_NEW, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigNew ) ); - this->Disconnect( wxID_OPEN, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ) ); - this->Disconnect( wxID_SAVE, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ) ); - this->Disconnect( wxID_SAVEAS, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSaveAs ) ); - this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuBatchJob ) ); - this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) ); - this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) ); - this->Disconnect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) ); - this->Disconnect( wxID_PREFERENCES, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuGlobalSettings ) ); - this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) ); - this->Disconnect( wxID_HELP, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) ); - this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) ); - this->Disconnect( wxID_ABOUT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) ); - m_buttonCompare->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this ); - m_bpButtonCmpConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this ); - m_bpButtonSyncConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this ); - m_buttonStartSync->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this ); - m_bpButtonAddPair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this ); - m_bpButtonRemovePair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this ); - m_bpButtonSwapSides->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this ); - m_bpButtonLoad->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ), NULL, this ); - m_bpButtonSave->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ), NULL, this ); - m_bpButtonBatchJob->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnMenuBatchJob ), NULL, this ); - m_listBoxHistory->Disconnect( wxEVT_CHAR, wxKeyEventHandler( MainDialogGenerated::OnCfgHistoryKeyEvent ), NULL, this ); - m_listBoxHistory->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistory ), NULL, this ); - m_listBoxHistory->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistoryDoubleClick ), NULL, this ); - m_bpButtonFilter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this ); - m_checkBoxShowExcluded->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnShowExcluded ), NULL, this ); - m_bpButtonSyncCreateLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateLeft ), NULL, this ); - m_bpButtonSyncDirOverwLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirLeft ), NULL, this ); - m_bpButtonSyncDeleteLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteLeft ), NULL, this ); - m_bpButtonLeftOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftOnlyFiles ), NULL, this ); - m_bpButtonLeftNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftNewerFiles ), NULL, this ); - m_bpButtonEqual->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnEqualFiles ), NULL, this ); - m_bpButtonDifferent->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnDifferentFiles ), NULL, this ); - m_bpButtonSyncDirNone->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirNone ), NULL, this ); - m_bpButtonRightNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightNewerFiles ), NULL, this ); - m_bpButtonRightOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightOnlyFiles ), NULL, this ); - m_bpButtonSyncDeleteRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteRight ), NULL, this ); - m_bpButtonSyncDirOverwRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirRight ), NULL, this ); - m_bpButtonSyncCreateRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateRight ), NULL, this ); - m_bpButtonConflict->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConflictFiles ), NULL, this ); - + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MainDialogGenerated::OnClose ) ); + this->Disconnect( wxID_NEW, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigNew ) ); + this->Disconnect( wxID_OPEN, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ) ); + this->Disconnect( wxID_SAVE, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ) ); + this->Disconnect( wxID_SAVEAS, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnConfigSaveAs ) ); + this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ) ); + this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnCompare ) ); + this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ) ); + this->Disconnect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuQuit ) ); + this->Disconnect( wxID_PREFERENCES, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuGlobalSettings ) ); + this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuExportFileList ) ); + this->Disconnect( wxID_HELP, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnShowHelp ) ); + this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuCheckVersion ) ); + this->Disconnect( wxID_ABOUT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnMenuAbout ) ); + m_buttonCompare->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCompare ), NULL, this ); + m_bpButtonCmpConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnCmpSettings ), NULL, this ); + m_bpButtonSyncConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncSettings ), NULL, this ); + m_buttonStartSync->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnStartSync ), NULL, this ); + m_bpButtonAddPair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnAddFolderPair ), NULL, this ); + m_bpButtonRemovePair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRemoveTopFolderPair ), NULL, this ); + m_bpButtonSwapSides->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSwapSides ), NULL, this ); + m_bpButtonLoad->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigLoad ), NULL, this ); + m_bpButtonSave->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigSave ), NULL, this ); + m_bpButtonBatchJob->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSaveAsBatchJob ), NULL, this ); + m_listBoxHistory->Disconnect( wxEVT_CHAR, wxKeyEventHandler( MainDialogGenerated::OnCfgHistoryKeyEvent ), NULL, this ); + m_listBoxHistory->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistory ), NULL, this ); + m_listBoxHistory->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( MainDialogGenerated::OnLoadFromHistoryDoubleClick ), NULL, this ); + m_bpButtonFilter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConfigureFilter ), NULL, this ); + m_checkBoxHideExcluded->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnShowExcluded ), NULL, this ); + m_bpButtonSyncCreateLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateLeft ), NULL, this ); + m_bpButtonSyncDirOverwLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirLeft ), NULL, this ); + m_bpButtonSyncDeleteLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteLeft ), NULL, this ); + m_bpButtonLeftOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftOnlyFiles ), NULL, this ); + m_bpButtonLeftNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnLeftNewerFiles ), NULL, this ); + m_bpButtonEqual->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnEqualFiles ), NULL, this ); + m_bpButtonDifferent->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnDifferentFiles ), NULL, this ); + m_bpButtonSyncDirNone->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirNone ), NULL, this ); + m_bpButtonRightNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightNewerFiles ), NULL, this ); + m_bpButtonRightOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnRightOnlyFiles ), NULL, this ); + m_bpButtonSyncDeleteRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDeleteRight ), NULL, this ); + m_bpButtonSyncDirOverwRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncDirRight ), NULL, this ); + m_bpButtonSyncCreateRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnSyncCreateRight ), NULL, this ); + m_bpButtonConflict->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::OnConflictFiles ), NULL, this ); + } FolderPairGenerated::FolderPairGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) { - wxBoxSizer* bSizer74; - bSizer74 = new wxBoxSizer( wxHORIZONTAL ); - - m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelLeft->SetMinSize( wxSize( 1,-1 ) ); - - wxBoxSizer* bSizer134; - bSizer134 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonRemovePair = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 23,23 ), 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( 22,22 ), wxBU_AUTODRAW ); - bSizer95->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonLocalFilter = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 22,22 ), wxBU_AUTODRAW ); - bSizer95->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 ); - - m_bpButtonAltSyncCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 22,22 ), wxBU_AUTODRAW ); - bSizer95->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer95->Add( 0, 0, 1, wxEXPAND, 5 ); - - - m_panel20->SetSizer( bSizer95 ); - m_panel20->Layout(); - bSizer95->Fit( m_panel20 ); - bSizer74->Add( m_panel20, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelRight->SetMinSize( wxSize( 1,-1 ) ); - - wxBoxSizer* bSizer135; - bSizer135 = new wxBoxSizer( wxHORIZONTAL ); - - m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer135->Add( m_directoryRight, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectDirRight = new wxButton( m_panelRight, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectDirRight->SetToolTip( _("Select a folder") ); - - bSizer135->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelRight->SetSizer( bSizer135 ); - m_panelRight->Layout(); - bSizer135->Fit( m_panelRight ); - bSizer74->Add( m_panelRight, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND, 5 ); - - - this->SetSizer( bSizer74 ); - this->Layout(); - bSizer74->Fit( this ); + wxBoxSizer* bSizer74; + bSizer74 = new wxBoxSizer( wxHORIZONTAL ); + + m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelLeft->SetMinSize( wxSize( 1,-1 ) ); + + wxBoxSizer* bSizer134; + bSizer134 = new wxBoxSizer( wxHORIZONTAL ); + + m_bpButtonRemovePair = new wxBitmapButton( m_panelLeft, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 24,24 ), 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( 24,24 ), wxBU_AUTODRAW ); + bSizer95->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonLocalFilter = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 24,24 ), wxBU_AUTODRAW ); + bSizer95->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 ); + + m_bpButtonAltSyncCfg = new wxBitmapButton( m_panel20, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 24,24 ), 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 ); } FolderPairGenerated::~FolderPairGenerated() @@ -1027,154 +1015,154 @@ FolderPairGenerated::~FolderPairGenerated() CompareStatusGenerated::CompareStatusGenerated( 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( wxVERTICAL ); - - - bSizer40->Add( 0, 0, 1, wxEXPAND, 5 ); - - wxBoxSizer* bSizer182; - bSizer182 = new wxBoxSizer( wxVERTICAL ); - - m_textCtrlStatus = new wxTextCtrl( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); - m_textCtrlStatus->SetMaxLength( 0 ); - m_textCtrlStatus->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - bSizer182->Add( m_textCtrlStatus, 0, wxEXPAND, 5 ); - - - bSizer40->Add( bSizer182, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - m_gauge2 = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,14 ), wxGA_HORIZONTAL|wxGA_SMOOTH ); - bSizer40->Add( m_gauge2, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - - bSizer42 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer157; - bSizer157 = new wxBoxSizer( wxVERTICAL ); - - bSizerFilesFound = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText321 = new wxStaticText( this, wxID_ANY, _("Items found:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText321->Wrap( -1 ); - m_staticText321->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizerFilesFound->Add( m_staticText321, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextScanned = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextScanned->Wrap( -1 ); - m_staticTextScanned->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); - - bSizerFilesFound->Add( m_staticTextScanned, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); - - - bSizer157->Add( bSizerFilesFound, 0, 0, 5 ); - - bSizerFilesRemaining = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText46 = new wxStaticText( this, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText46->Wrap( -1 ); - m_staticText46->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizerFilesRemaining->Add( m_staticText46, 0, wxALIGN_BOTTOM, 5 ); - - wxBoxSizer* bSizer154; - bSizer154 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextFilesRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextFilesRemaining->Wrap( -1 ); - m_staticTextFilesRemaining->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); - - bSizer154->Add( m_staticTextFilesRemaining, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextDataRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDataRemaining->Wrap( -1 ); - m_staticTextDataRemaining->SetFont( wxFont( 9, 70, 90, 90, false, wxEmptyString ) ); - - bSizer154->Add( m_staticTextDataRemaining, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); - - - bSizerFilesRemaining->Add( bSizer154, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); - - - bSizer157->Add( bSizerFilesRemaining, 0, 0, 5 ); - - - bSizer42->Add( bSizer157, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); - - sSizerSpeed = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText104 = new wxStaticText( this, wxID_ANY, _("Speed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText104->Wrap( -1 ); - m_staticText104->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - sSizerSpeed->Add( m_staticText104, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextSpeed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextSpeed->Wrap( -1 ); - m_staticTextSpeed->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); - - sSizerSpeed->Add( m_staticTextSpeed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer42->Add( sSizerSpeed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer42->Add( 10, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - sSizerTimeRemaining = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextTimeRemFixed = new wxStaticText( this, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeRemFixed->Wrap( -1 ); - m_staticTextTimeRemFixed->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - sSizerTimeRemaining->Add( m_staticTextTimeRemFixed, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextRemTime = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextRemTime->Wrap( -1 ); - m_staticTextRemTime->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); - - sSizerTimeRemaining->Add( m_staticTextRemTime, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer42->Add( sSizerTimeRemaining, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); - - sSizerTimeElapsed = new wxBoxSizer( wxHORIZONTAL ); - - wxStaticText* m_staticText37; - m_staticText37 = new wxStaticText( this, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText37->Wrap( -1 ); - m_staticText37->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - sSizerTimeElapsed->Add( m_staticText37, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextTimeElapsed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeElapsed->Wrap( -1 ); - m_staticTextTimeElapsed->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); - - sSizerTimeElapsed->Add( m_staticTextTimeElapsed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); - - - bSizer42->Add( sSizerTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer40->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - - - bSizer40->Add( 0, 0, 1, wxEXPAND, 5 ); - - - this->SetSizer( bSizer40 ); - this->Layout(); - bSizer40->Fit( this ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer40; + bSizer40 = new wxBoxSizer( wxVERTICAL ); + + + bSizer40->Add( 0, 0, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizer182; + bSizer182 = new wxBoxSizer( wxVERTICAL ); + + m_textCtrlStatus = new wxTextCtrl( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); + m_textCtrlStatus->SetMaxLength( 0 ); + m_textCtrlStatus->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer182->Add( m_textCtrlStatus, 0, wxEXPAND, 5 ); + + + bSizer40->Add( bSizer182, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_gauge2 = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,14 ), wxGA_HORIZONTAL|wxGA_SMOOTH ); + bSizer40->Add( m_gauge2, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + bSizer42 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer157; + bSizer157 = new wxBoxSizer( wxVERTICAL ); + + bSizerFilesFound = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText321 = new wxStaticText( this, wxID_ANY, _("Items found:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText321->Wrap( -1 ); + m_staticText321->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizerFilesFound->Add( m_staticText321, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextScanned = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextScanned->Wrap( -1 ); + m_staticTextScanned->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); + + bSizerFilesFound->Add( m_staticTextScanned, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); + + + bSizer157->Add( bSizerFilesFound, 0, 0, 5 ); + + bSizerFilesRemaining = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText46 = new wxStaticText( this, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText46->Wrap( -1 ); + m_staticText46->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizerFilesRemaining->Add( m_staticText46, 0, wxALIGN_BOTTOM, 5 ); + + wxBoxSizer* bSizer154; + bSizer154 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextFilesRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextFilesRemaining->Wrap( -1 ); + m_staticTextFilesRemaining->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); + + bSizer154->Add( m_staticTextFilesRemaining, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextDataRemaining = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDataRemaining->Wrap( -1 ); + m_staticTextDataRemaining->SetFont( wxFont( 9, 70, 90, 90, false, wxEmptyString ) ); + + bSizer154->Add( m_staticTextDataRemaining, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); + + + bSizerFilesRemaining->Add( bSizer154, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); + + + bSizer157->Add( bSizerFilesRemaining, 0, 0, 5 ); + + + bSizer42->Add( bSizer157, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); + + sSizerSpeed = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText104 = new wxStaticText( this, wxID_ANY, _("Speed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText104->Wrap( -1 ); + m_staticText104->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + sSizerSpeed->Add( m_staticText104, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextSpeed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextSpeed->Wrap( -1 ); + m_staticTextSpeed->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); + + sSizerSpeed->Add( m_staticTextSpeed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer42->Add( sSizerSpeed, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer42->Add( 10, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + sSizerTimeRemaining = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextTimeRemFixed = new wxStaticText( this, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeRemFixed->Wrap( -1 ); + m_staticTextTimeRemFixed->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + sSizerTimeRemaining->Add( m_staticTextTimeRemFixed, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextRemTime = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRemTime->Wrap( -1 ); + m_staticTextRemTime->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); + + sSizerTimeRemaining->Add( m_staticTextRemTime, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer42->Add( sSizerTimeRemaining, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer42->Add( 0, 0, 1, wxEXPAND, 5 ); + + sSizerTimeElapsed = new wxBoxSizer( wxHORIZONTAL ); + + wxStaticText* m_staticText37; + m_staticText37 = new wxStaticText( this, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText37->Wrap( -1 ); + m_staticText37->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + sSizerTimeElapsed->Add( m_staticText37, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextTimeElapsed = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeElapsed->Wrap( -1 ); + m_staticTextTimeElapsed->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); + + sSizerTimeElapsed->Add( m_staticTextTimeElapsed, 0, wxLEFT|wxALIGN_BOTTOM, 5 ); + + + bSizer42->Add( sSizerTimeElapsed, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer40->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + + bSizer40->Add( 0, 0, 1, wxEXPAND, 5 ); + + + this->SetSizer( bSizer40 ); + this->Layout(); + bSizer40->Fit( this ); } CompareStatusGenerated::~CompareStatusGenerated() @@ -1183,2520 +1171,2303 @@ CompareStatusGenerated::~CompareStatusGenerated() 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( 560,300 ), wxDefaultSize ); - - wxBoxSizer* bSizer54; - bSizer54 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer87; - bSizer87 = new wxBoxSizer( wxHORIZONTAL ); - - m_panel8 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel8->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); - - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmap27 = new wxStaticBitmap( m_panel8, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer72->Add( m_bitmap27, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_staticText56 = new wxStaticText( m_panel8, wxID_ANY, _("Batch job"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText56->Wrap( -1 ); - m_staticText56->SetFont( wxFont( 12, 70, 90, 92, false, wxEmptyString ) ); - m_staticText56->SetForegroundColour( wxColour( 0, 0, 0 ) ); - - bSizer72->Add( m_staticText56, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_staticText44 = new wxStaticText( m_panel8, wxID_ANY, _("Create a batch file to automate synchronization. Double-click this file or schedule in your system's task planner: FreeFileSync.exe <job name>.ffs_batch"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText44->Wrap( 480 ); - bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - - m_panel8->SetSizer( bSizer72 ); - m_panel8->Layout(); - bSizer72->Fit( m_panel8 ); - bSizer87->Add( m_panel8, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_bpButtonHelp = new wxBitmapButton( this, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonHelp->SetToolTip( _("Help") ); - - bSizer87->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer54->Add( bSizer87, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_notebook1 = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_panelOverview = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer67; - bSizer67 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer120; - bSizer120 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer175; - bSizer175 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer1701; - bSizer1701 = new wxBoxSizer( wxVERTICAL ); - - wxStaticBoxSizer* sbSizer241; - sbSizer241 = new wxStaticBoxSizer( new wxStaticBox( m_panelOverview, wxID_ANY, _("Compare") ), wxHORIZONTAL ); - - m_bpButtonCmpConfig = new wxBitmapButton( m_panelOverview, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,46 ), wxBU_AUTODRAW ); - m_bpButtonCmpConfig->SetToolTip( _("Comparison settings") ); - - sbSizer241->Add( m_bpButtonCmpConfig, 0, wxALIGN_CENTER_VERTICAL, 3 ); - - - sbSizer241->Add( 10, 0, 0, 0, 5 ); - - m_staticTextCmpVariant = new wxStaticText( m_panelOverview, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCmpVariant->Wrap( -1 ); - m_staticTextCmpVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); - m_staticTextCmpVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - sbSizer241->Add( m_staticTextCmpVariant, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer1701->Add( sbSizer241, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer175->Add( bSizer1701, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - wxStaticBoxSizer* sbSizer26; - sbSizer26 = new wxStaticBoxSizer( new wxStaticBox( m_panelOverview, wxID_ANY, _("Filter files") ), wxHORIZONTAL ); - - - sbSizer26->Add( 20, 0, 0, 0, 5 ); - - m_bpButtonFilter = new wxBitmapButton( m_panelOverview, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,46 ), wxBU_AUTODRAW|wxFULL_REPAINT_ON_RESIZE ); - sbSizer26->Add( m_bpButtonFilter, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 15 ); - - - sbSizer26->Add( 20, 0, 0, 0, 5 ); - - - bSizer175->Add( sbSizer26, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer171; - bSizer171 = new wxBoxSizer( wxVERTICAL ); - - wxStaticBoxSizer* sbSizer252; - sbSizer252 = new wxStaticBoxSizer( new wxStaticBox( m_panelOverview, wxID_ANY, _("Synchronize") ), wxHORIZONTAL ); - - m_staticTextSyncVariant = new wxStaticText( m_panelOverview, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextSyncVariant->Wrap( -1 ); - m_staticTextSyncVariant->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); - m_staticTextSyncVariant->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - sbSizer252->Add( m_staticTextSyncVariant, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizer252->Add( 10, 0, 0, 0, 5 ); - - m_bpButtonSyncConfig = new wxBitmapButton( m_panelOverview, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,46 ), wxBU_AUTODRAW ); - m_bpButtonSyncConfig->SetToolTip( _("Synchronization settings") ); - - sbSizer252->Add( m_bpButtonSyncConfig, 0, wxALIGN_CENTER_VERTICAL, 3 ); - - - bSizer171->Add( sbSizer252, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - - - bSizer175->Add( bSizer171, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer120->Add( bSizer175, 0, wxEXPAND, 5 ); - - - bSizer120->Add( 0, 5, 0, 0, 5 ); - - m_scrolledWindow6 = new wxScrolledWindow( m_panelOverview, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); - m_scrolledWindow6->SetScrollRate( 10, 10 ); - wxBoxSizer* bSizer141; - bSizer141 = new wxBoxSizer( wxVERTICAL ); - - sbSizerMainPair = new wxBoxSizer( wxHORIZONTAL ); - - m_panelMainPair = new wxPanel( m_scrolledWindow6, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDOUBLE_BORDER ); - wxBoxSizer* bSizer147; - bSizer147 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer1361; - bSizer1361 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonAddPair = new wxBitmapButton( m_panelMainPair, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 23,23 ), wxBU_AUTODRAW ); - m_bpButtonAddPair->SetToolTip( _("Add folder pair") ); - - bSizer1361->Add( m_bpButtonAddPair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 3 ); - - m_bpButtonRemovePair = new wxBitmapButton( m_panelMainPair, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 23,23 ), wxBU_AUTODRAW ); - m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); - - bSizer1361->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer147->Add( bSizer1361, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer143; - bSizer143 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer145; - bSizer145 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText532 = new wxStaticText( m_panelMainPair, wxID_ANY, _("Left"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText532->Wrap( -1 ); - m_staticText532->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); - - bSizer145->Add( m_staticText532, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer143->Add( bSizer145, 1, 0, 5 ); - - wxBoxSizer* bSizer146; - bSizer146 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText5411 = new wxStaticText( m_panelMainPair, wxID_ANY, _("Right"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText5411->Wrap( -1 ); - m_staticText5411->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); - - bSizer146->Add( m_staticText5411, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer143->Add( bSizer146, 1, 0, 5 ); - - - bSizer147->Add( bSizer143, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - - m_panelMainPair->SetSizer( bSizer147 ); - m_panelMainPair->Layout(); - bSizer147->Fit( m_panelMainPair ); - sbSizerMainPair->Add( m_panelMainPair, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM, 5 ); - - wxBoxSizer* bSizer158; - bSizer158 = new wxBoxSizer( wxVERTICAL ); - - m_panelLeft = new wxPanel( m_scrolledWindow6, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1141; - bSizer1141 = new wxBoxSizer( wxHORIZONTAL ); - - m_directoryLeft = new FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer1141->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") ); - - bSizer1141->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelLeft->SetSizer( bSizer1141 ); - m_panelLeft->Layout(); - bSizer1141->Fit( m_panelLeft ); - bSizer158->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_panelRight = new wxPanel( m_scrolledWindow6, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer115; - bSizer115 = new wxBoxSizer( wxHORIZONTAL ); - - m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer115->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") ); - - bSizer115->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelRight->SetSizer( bSizer115 ); - m_panelRight->Layout(); - bSizer115->Fit( m_panelRight ); - bSizer158->Add( m_panelRight, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerMainPair->Add( bSizer158, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); - - wxBoxSizer* bSizer177; - bSizer177 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonAltCompCfg = new wxBitmapButton( m_scrolledWindow6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 22,22 ), wxBU_AUTODRAW ); - bSizer177->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonLocalFilter = new wxBitmapButton( m_scrolledWindow6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 22,22 ), wxBU_AUTODRAW ); - bSizer177->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 3 ); - - m_bpButtonAltSyncCfg = new wxBitmapButton( m_scrolledWindow6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 22,22 ), wxBU_AUTODRAW ); - bSizer177->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerMainPair->Add( bSizer177, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - - bSizer141->Add( sbSizerMainPair, 0, wxEXPAND, 5 ); - - bSizerAddFolderPairs = new wxBoxSizer( wxVERTICAL ); - - - bSizer141->Add( bSizerAddFolderPairs, 1, wxEXPAND, 5 ); - - - m_scrolledWindow6->SetSizer( bSizer141 ); - m_scrolledWindow6->Layout(); - bSizer141->Fit( m_scrolledWindow6 ); - bSizer120->Add( m_scrolledWindow6, 1, wxEXPAND, 5 ); - - - bSizer67->Add( bSizer120, 1, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 10 ); - - - m_panelOverview->SetSizer( bSizer67 ); - m_panelOverview->Layout(); - bSizer67->Fit( m_panelOverview ); - m_notebook1->AddPage( m_panelOverview, _("Synchronization settings"), true ); - m_panelBatchSettings = new wxPanel( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer117; - bSizer117 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer180; - bSizer180 = new wxBoxSizer( wxHORIZONTAL ); - - sbSizerErrorHandling = new wxStaticBoxSizer( new wxStaticBox( m_panelBatchSettings, wxID_ANY, _("Error handling") ), wxHORIZONTAL ); - - m_toggleBtnErrorIgnore = new wxToggleButton( m_panelBatchSettings, wxID_ANY, _("Ignore"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") ); - - sbSizerErrorHandling->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_toggleBtnErrorPopup = new wxToggleButton( m_panelBatchSettings, wxID_ANY, _("Pop-up"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") ); - - sbSizerErrorHandling->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_toggleBtnErrorExit = new wxToggleButton( m_panelBatchSettings, wxID_ANY, _("Exit"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorExit->SetToolTip( _("Abort synchronization on first error") ); - - sbSizerErrorHandling->Add( m_toggleBtnErrorExit, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer180->Add( sbSizerErrorHandling, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxEXPAND, 5 ); - - sbSizerExecFinished = new wxStaticBoxSizer( new wxStaticBox( m_panelBatchSettings, wxID_ANY, _("On completion:") ), wxHORIZONTAL ); - - m_comboBoxExecFinished = new ExecFinishedBox( m_panelBatchSettings, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - sbSizerExecFinished->Add( m_comboBoxExecFinished, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer180->Add( sbSizerExecFinished, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer172->Add( bSizer180, 0, wxEXPAND, 5 ); - - - bSizer172->Add( 0, 5, 0, 0, 5 ); - - m_checkBoxShowProgress = new wxCheckBox( m_panelBatchSettings, wxID_ANY, _("Show progress dialog"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer172->Add( m_checkBoxShowProgress, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); - - m_checkBoxGenerateLogfile = new wxCheckBox( m_panelBatchSettings, wxID_ANY, _("Generate log file"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer172->Add( m_checkBoxGenerateLogfile, 0, wxEXPAND|wxALL, 5 ); - - m_panelLogfile = new wxPanel( m_panelBatchSettings, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1721; - bSizer1721 = new wxBoxSizer( wxHORIZONTAL ); - - m_comboBoxLogfileDir = new FolderHistoryBox( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer1721->Add( m_comboBoxLogfileDir, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonSelectLogfileDir = new wxButton( m_panelLogfile, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonSelectLogfileDir->SetToolTip( _("Select folder to save log files") ); - - 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, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_spinCtrlLogfileLimit = new wxSpinCtrl( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 50,-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 ); - bSizer172->Add( m_panelLogfile, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer117->Add( bSizer172, 1, wxEXPAND|wxALL, 10 ); - - - m_panelBatchSettings->SetSizer( bSizer117 ); - m_panelBatchSettings->Layout(); - bSizer117->Fit( m_panelBatchSettings ); - m_notebook1->AddPage( m_panelBatchSettings, _("Batch settings"), false ); - - bSizer54->Add( m_notebook1, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer68; - bSizer68 = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonLoad = new wxButton( this, wxID_OPEN, _("&Open..."), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonLoad->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer68->Add( m_buttonLoad, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - - m_buttonSave = new wxButton( this, wxID_SAVE, _("Save &as..."), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonSave->SetDefault(); - m_buttonSave->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); - - bSizer68->Add( m_buttonSave, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_button6 = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_button6->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer68->Add( m_button6, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer54->Add( bSizer68, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - this->SetSizer( bSizer54 ); - this->Layout(); - bSizer54->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); - m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnHelp ), NULL, this ); - m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCmpSettings ), NULL, this ); - m_bpButtonFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnConfigureFilter ), NULL, this ); - m_bpButtonSyncConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSyncSettings ), NULL, this ); - m_bpButtonAddPair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnAddFolderPair ), NULL, this ); - m_bpButtonRemovePair->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnRemoveTopFolderPair ), NULL, this ); - 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_toggleBtnErrorExit->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorExit ), 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_buttonLoad->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnLoadBatchJob ), NULL, this ); - m_buttonSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this ); - m_button6->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); -} + this->SetSizeHints( wxSize( 400,260 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); -BatchDlgGenerated::~BatchDlgGenerated() -{ - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); - m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnHelp ), NULL, this ); - m_bpButtonCmpConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCmpSettings ), NULL, this ); - m_bpButtonFilter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnConfigureFilter ), NULL, this ); - m_bpButtonSyncConfig->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSyncSettings ), NULL, this ); - m_bpButtonAddPair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnAddFolderPair ), NULL, this ); - m_bpButtonRemovePair->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnRemoveTopFolderPair ), NULL, this ); - m_toggleBtnErrorIgnore->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorIgnore ), NULL, this ); - m_toggleBtnErrorPopup->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorPopup ), NULL, this ); - m_toggleBtnErrorExit->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorExit ), NULL, this ); - m_checkBoxGenerateLogfile->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleGenerateLogfile ), NULL, this ); - m_checkBoxLogfilesLimit->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleLogfilesLimit ), NULL, this ); - m_buttonLoad->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnLoadBatchJob ), NULL, this ); - m_buttonSave->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this ); - m_button6->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); - -} + wxBoxSizer* bSizer54; + bSizer54 = new wxBoxSizer( wxVERTICAL ); -BatchFolderPairGenerated::BatchFolderPairGenerated( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) -{ - wxBoxSizer* bSizer142; - bSizer142 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer140; - bSizer140 = new wxBoxSizer( wxHORIZONTAL ); - - m_panel32 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDOUBLE_BORDER ); - wxBoxSizer* bSizer147; - bSizer147 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer136; - bSizer136 = new wxBoxSizer( wxVERTICAL ); - - m_bpButtonRemovePair = new wxBitmapButton( m_panel32, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 23,23 ), wxBU_AUTODRAW ); - m_bpButtonRemovePair->SetToolTip( _("Remove folder pair") ); - - bSizer136->Add( m_bpButtonRemovePair, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer147->Add( bSizer136, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer143; - bSizer143 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer145; - bSizer145 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText53 = new wxStaticText( m_panel32, wxID_ANY, _("Left"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText53->Wrap( -1 ); - m_staticText53->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); - - bSizer145->Add( m_staticText53, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer143->Add( bSizer145, 1, 0, 5 ); - - wxBoxSizer* bSizer146; - bSizer146 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText541 = new wxStaticText( m_panel32, wxID_ANY, _("Right"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText541->Wrap( -1 ); - m_staticText541->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); - - bSizer146->Add( m_staticText541, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer143->Add( bSizer146, 1, 0, 5 ); - - - bSizer147->Add( bSizer143, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - - m_panel32->SetSizer( bSizer147 ); - m_panel32->Layout(); - bSizer147->Fit( m_panel32 ); - bSizer140->Add( m_panel32, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - wxBoxSizer* bSizer144; - bSizer144 = new wxBoxSizer( wxVERTICAL ); - - m_panelLeft = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer114; - bSizer114 = new wxBoxSizer( wxHORIZONTAL ); - - m_directoryLeft = new FolderHistoryBox( m_panelLeft, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer114->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") ); - - bSizer114->Add( m_buttonSelectDirLeft, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelLeft->SetSizer( bSizer114 ); - m_panelLeft->Layout(); - bSizer114->Fit( m_panelLeft ); - bSizer144->Add( m_panelLeft, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer115; - bSizer115 = new wxBoxSizer( wxHORIZONTAL ); - - m_directoryRight = new FolderHistoryBox( m_panelRight, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer115->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") ); - - bSizer115->Add( m_buttonSelectDirRight, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelRight->SetSizer( bSizer115 ); - m_panelRight->Layout(); - bSizer115->Fit( m_panelRight ); - bSizer144->Add( m_panelRight, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer140->Add( bSizer144, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer176; - bSizer176 = new wxBoxSizer( wxHORIZONTAL ); - - m_bpButtonAltCompCfg = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 22,22 ), wxBU_AUTODRAW ); - bSizer176->Add( m_bpButtonAltCompCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonLocalFilter = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 22,22 ), wxBU_AUTODRAW ); - bSizer176->Add( m_bpButtonLocalFilter, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 3 ); - - m_bpButtonAltSyncCfg = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 22,22 ), wxBU_AUTODRAW ); - bSizer176->Add( m_bpButtonAltSyncCfg, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer140->Add( bSizer176, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - - bSizer142->Add( bSizer140, 0, wxEXPAND, 5 ); - - - bSizer142->Add( 0, 5, 0, 0, 5 ); - - - this->SetSizer( bSizer142 ); - this->Layout(); - bSizer142->Fit( this ); + m_panelHeader = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelHeader->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapBatchJob = new wxStaticBitmap( m_panelHeader, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer72->Add( m_bitmapBatchJob, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticText56 = new wxStaticText( m_panelHeader, wxID_ANY, _("Batch job"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText56->Wrap( -1 ); + m_staticText56->SetFont( wxFont( 12, 70, 90, 92, false, wxEmptyString ) ); + m_staticText56->SetForegroundColour( wxColour( 0, 0, 0 ) ); + + bSizer72->Add( m_staticText56, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_staticText44 = new wxStaticText( m_panelHeader, wxID_ANY, _("Create a batch file to automate synchronization. Double-click this file or schedule in your system's task planner: FreeFileSync.exe <job name>.ffs_batch"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText44->Wrap( 480 ); + bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + + bSizer72->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bpButtonHelp = new wxBitmapButton( m_panelHeader, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + m_bpButtonHelp->SetToolTip( _("Help") ); + + bSizer72->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelHeader->SetSizer( bSizer72 ); + m_panelHeader->Layout(); + bSizer72->Fit( m_panelHeader ); + bSizer54->Add( m_panelHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticline18 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer54->Add( m_staticline18, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer180; + bSizer180 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer171; + bSizer171 = new wxBoxSizer( wxVERTICAL ); + + m_staticText82 = new wxStaticText( this, wxID_ANY, _("Error handling"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText82->Wrap( -1 ); + bSizer171->Add( m_staticText82, 0, wxBOTTOM, 5 ); + + wxBoxSizer* bSizer169; + bSizer169 = new wxBoxSizer( wxHORIZONTAL ); + + m_toggleBtnErrorIgnore = new wxToggleButton( this, 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( this, 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_toggleBtnErrorExit = new wxToggleButton( this, wxID_ANY, _("Exit"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorExit->SetToolTip( _("Abort synchronization on first error") ); + + bSizer169->Add( m_toggleBtnErrorExit, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer171->Add( bSizer169, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer180->Add( bSizer171, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticline26 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer180->Add( m_staticline26, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer170; + bSizer170 = new wxBoxSizer( wxVERTICAL ); + + m_staticText81 = new wxStaticText( this, wxID_ANY, _("On completion"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText81->Wrap( -1 ); + bSizer170->Add( m_staticText81, 0, wxBOTTOM, 5 ); + + m_comboBoxExecFinished = new ExecFinishedBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer170->Add( m_comboBoxExecFinished, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer180->Add( bSizer170, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + bSizer172->Add( bSizer180, 0, wxEXPAND, 5 ); + + m_staticline25 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer172->Add( m_staticline25, 0, wxEXPAND, 5 ); + + m_checkBoxShowProgress = new wxCheckBox( this, wxID_ANY, _("Show progress dialog"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer172->Add( m_checkBoxShowProgress, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); + + m_checkBoxGenerateLogfile = new wxCheckBox( this, wxID_ANY, _("Save log"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer172->Add( m_checkBoxGenerateLogfile, 0, wxEXPAND|wxALL, 5 ); + + m_panelLogfile = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer1721; + bSizer1721 = new wxBoxSizer( wxHORIZONTAL ); + + m_comboBoxLogfileDir = new FolderHistoryBox( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer1721->Add( m_comboBoxLogfileDir, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonSelectLogfileDir = new wxButton( m_panelLogfile, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonSelectLogfileDir->SetToolTip( _("Select folder to save log files") ); + + 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, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_spinCtrlLogfileLimit = new wxSpinCtrl( m_panelLogfile, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 55,-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 ); + bSizer172->Add( m_panelLogfile, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer54->Add( bSizer172, 1, wxEXPAND, 10 ); + + m_staticline13 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer54->Add( m_staticline13, 0, wxEXPAND, 5 ); + + m_panel35 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel35->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer68; + bSizer68 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer68->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_buttonSave = new wxButton( m_panel35, wxID_SAVE, _("Save &as..."), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonSave->SetDefault(); + m_buttonSave->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); + + bSizer68->Add( m_buttonSave, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + m_button6 = new wxButton( m_panel35, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_button6->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer68->Add( m_button6, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + bSizer68->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panel35->SetSizer( bSizer68 ); + m_panel35->Layout(); + bSizer68->Fit( m_panel35 ); + bSizer54->Add( m_panel35, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + + this->SetSizer( bSizer54 ); + this->Layout(); + bSizer54->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); + m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnHelp ), NULL, this ); + 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_toggleBtnErrorExit->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorExit ), 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_buttonSave->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this ); + m_button6->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); } -BatchFolderPairGenerated::~BatchFolderPairGenerated() +BatchDlgGenerated::~BatchDlgGenerated() { + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( BatchDlgGenerated::OnClose ) ); + m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnHelp ), NULL, this ); + m_toggleBtnErrorIgnore->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorIgnore ), NULL, this ); + m_toggleBtnErrorPopup->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorPopup ), NULL, this ); + m_toggleBtnErrorExit->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnErrorExit ), NULL, this ); + m_checkBoxGenerateLogfile->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleGenerateLogfile ), NULL, this ); + m_checkBoxLogfilesLimit->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnToggleLogfilesLimit ), NULL, this ); + m_buttonSave->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnSaveBatchJob ), NULL, this ); + m_button6->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BatchDlgGenerated::OnCancel ), NULL, this ); + } CmpCfgDlgGenerated::CmpCfgDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - - wxBoxSizer* bSizer136; - bSizer136 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer55; - bSizer55 = new wxBoxSizer( wxVERTICAL ); - - wxStaticBoxSizer* sbSizer6; - sbSizer6 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Compare by...") ), wxHORIZONTAL ); - - wxFlexGridSizer* fgSizer16; - fgSizer16 = new wxFlexGridSizer( 2, 2, 8, 5 ); - fgSizer16->SetFlexibleDirection( wxBOTH ); - fgSizer16->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_bitmapByTime = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapByTime->SetToolTip( _("Files are found equal if\n - last write time and date\n - file size\nare the same") ); - - fgSizer16->Add( m_bitmapByTime, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_toggleBtnTimeSize = new wxToggleButton( this, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1,40 ), 0 ); - m_toggleBtnTimeSize->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) ); - m_toggleBtnTimeSize->SetToolTip( _("Files are found equal if\n - last write time and date\n - file size\nare the same") ); - - fgSizer16->Add( m_toggleBtnTimeSize, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmapByContent = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapByContent->SetToolTip( _("Files are found equal if\n - file content\nis the same") ); - - fgSizer16->Add( m_bitmapByContent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_toggleBtnContent = new wxToggleButton( this, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1,40 ), 0 ); - m_toggleBtnContent->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) ); - m_toggleBtnContent->SetToolTip( _("Files are found equal if\n - file content\nis the same") ); - - fgSizer16->Add( m_toggleBtnContent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - sbSizer6->Add( fgSizer16, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer55->Add( sbSizer6, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 2 ); - - - bSizer55->Add( 0, 4, 0, 0, 5 ); - - wxBoxSizer* bSizer177; - bSizer177 = new wxBoxSizer( wxHORIZONTAL ); - - wxStaticBoxSizer* sbSizer25; - sbSizer25 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Symbolic Link handling") ), wxVERTICAL ); - - wxArrayString m_choiceHandleSymlinksChoices; - m_choiceHandleSymlinks = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleSymlinksChoices, 0 ); - m_choiceHandleSymlinks->SetSelection( -1 ); - sbSizer25->Add( m_choiceHandleSymlinks, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer177->Add( sbSizer25, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonHelp = new wxBitmapButton( this, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonHelp->SetToolTip( _("Help") ); - - bSizer177->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - - bSizer55->Add( bSizer177, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer22; - bSizer22 = new wxBoxSizer( wxHORIZONTAL ); - - m_button10 = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_button10->SetDefault(); - m_button10->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); - - bSizer22->Add( m_button10, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - - m_button6 = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_button6->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer22->Add( m_button6, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer55->Add( bSizer22, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer136->Add( bSizer55, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - - this->SetSizer( bSizer136 ); - this->Layout(); - bSizer136->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) ); - m_toggleBtnTimeSize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this ); - m_toggleBtnTimeSize->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this ); - m_toggleBtnContent->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this ); - m_toggleBtnContent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this ); - m_choiceHandleSymlinks->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this ); - m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnShowHelp ), NULL, this ); - m_button10->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this ); - m_button6->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer136; + bSizer136 = new wxBoxSizer( wxVERTICAL ); + + m_staticText91 = new wxStaticText( this, wxID_ANY, _("Select variant"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText91->Wrap( -1 ); + bSizer136->Add( m_staticText91, 0, wxALL, 5 ); + + wxFlexGridSizer* fgSizer16; + fgSizer16 = new wxFlexGridSizer( 2, 2, 8, 5 ); + fgSizer16->SetFlexibleDirection( wxBOTH ); + fgSizer16->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_bitmapByTime = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapByTime->SetToolTip( _("Files are found equal if\n - last write time and date\n - file size\nare the same") ); + + fgSizer16->Add( m_bitmapByTime, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_toggleBtnTimeSize = new wxToggleButton( this, wxID_ANY, _("File time and size"), wxDefaultPosition, wxSize( -1,40 ), 0 ); + m_toggleBtnTimeSize->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) ); + m_toggleBtnTimeSize->SetToolTip( _("Files are found equal if\n - last write time and date\n - file size\nare the same") ); + + fgSizer16->Add( m_toggleBtnTimeSize, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmapByContent = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapByContent->SetToolTip( _("Files are found equal if\n - file content\nis the same") ); + + fgSizer16->Add( m_bitmapByContent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_toggleBtnContent = new wxToggleButton( this, wxID_ANY, _("File content"), wxDefaultPosition, wxSize( -1,40 ), 0 ); + m_toggleBtnContent->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) ); + m_toggleBtnContent->SetToolTip( _("Files are found equal if\n - file content\nis the same") ); + + fgSizer16->Add( m_toggleBtnContent, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer136->Add( fgSizer16, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticline33 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer136->Add( m_staticline33, 0, wxEXPAND, 5 ); + + m_staticText92 = new wxStaticText( this, wxID_ANY, _("Symbolic Link handling"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText92->Wrap( -1 ); + bSizer136->Add( m_staticText92, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer177; + bSizer177 = new wxBoxSizer( wxHORIZONTAL ); + + wxArrayString m_choiceHandleSymlinksChoices; + m_choiceHandleSymlinks = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceHandleSymlinksChoices, 0 ); + m_choiceHandleSymlinks->SetSelection( -1 ); + bSizer177->Add( m_choiceHandleSymlinks, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonHelp = new wxBitmapButton( this, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + m_bpButtonHelp->SetToolTip( _("Help") ); + + bSizer177->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer136->Add( bSizer177, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticline14 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer136->Add( m_staticline14, 0, wxEXPAND, 5 ); + + m_panel36 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel36->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer22; + bSizer22 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer22->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_button10 = new wxButton( m_panel36, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_button10->SetDefault(); + m_button10->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); + + bSizer22->Add( m_button10, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + m_button6 = new wxButton( m_panel36, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_button6->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer22->Add( m_button6, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer22->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panel36->SetSizer( bSizer22 ); + m_panel36->Layout(); + bSizer22->Fit( m_panel36 ); + bSizer136->Add( m_panel36, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + this->SetSizer( bSizer136 ); + this->Layout(); + bSizer136->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) ); + m_toggleBtnTimeSize->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this ); + m_toggleBtnTimeSize->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this ); + m_toggleBtnContent->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this ); + m_toggleBtnContent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this ); + m_choiceHandleSymlinks->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this ); + m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnShowHelp ), NULL, this ); + m_button10->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this ); + m_button6->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this ); } CmpCfgDlgGenerated::~CmpCfgDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) ); - m_toggleBtnTimeSize->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this ); - m_toggleBtnTimeSize->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this ); - m_toggleBtnContent->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this ); - m_toggleBtnContent->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this ); - m_choiceHandleSymlinks->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this ); - m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnShowHelp ), NULL, this ); - m_button10->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this ); - m_button6->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this ); - + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CmpCfgDlgGenerated::OnClose ) ); + m_toggleBtnTimeSize->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnTimeSizeDouble ), NULL, this ); + m_toggleBtnTimeSize->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnTimeSize ), NULL, this ); + m_toggleBtnContent->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( CmpCfgDlgGenerated::OnContentDouble ), NULL, this ); + m_toggleBtnContent->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnContent ), NULL, this ); + m_choiceHandleSymlinks->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( CmpCfgDlgGenerated::OnChangeErrorHandling ), NULL, this ); + m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnShowHelp ), NULL, this ); + m_button10->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnOkay ), NULL, this ); + m_button6->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CmpCfgDlgGenerated::OnCancel ), NULL, this ); + } SyncCfgDlgGenerated::SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - - wxBoxSizer* bSizer7; - bSizer7 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer181; - bSizer181 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer29; - bSizer29 = new wxBoxSizer( wxVERTICAL ); - - wxStaticBoxSizer* sbSizer7; - sbSizer7 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Select variant:") ), wxVERTICAL ); - - wxFlexGridSizer* fgSizer1; - fgSizer1 = new wxFlexGridSizer( 4, 2, 8, 5 ); - fgSizer1->SetFlexibleDirection( wxHORIZONTAL ); - fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_toggleBtnAutomatic = new wxToggleButton( this, wxID_ANY, _("<Automatic>"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnAutomatic->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) ); - - fgSizer1->Add( m_toggleBtnAutomatic, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextAutomatic = new wxStaticText( this, wxID_ANY, _("Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextAutomatic->Wrap( 410 ); - fgSizer1->Add( m_staticTextAutomatic, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - m_toggleBtnMirror = new wxToggleButton( this, wxID_ANY, _("Mirror ->>"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnMirror->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) ); - - fgSizer1->Add( m_toggleBtnMirror, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_staticTextMirror = new wxStaticText( this, wxID_ANY, _("Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextMirror->Wrap( 410 ); - fgSizer1->Add( m_staticTextMirror, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_toggleBtnUpdate = new wxToggleButton( this, wxID_ANY, _("Update ->"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnUpdate->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) ); - - fgSizer1->Add( m_toggleBtnUpdate, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_staticTextUpdate = new wxStaticText( this, wxID_ANY, _("Copy new or updated files to right folder."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdate->Wrap( 410 ); - fgSizer1->Add( m_staticTextUpdate, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - m_toggleBtnCustom = new wxToggleButton( this, wxID_ANY, _("Custom"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnCustom->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) ); - - fgSizer1->Add( m_toggleBtnCustom, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - m_staticTextCustom = new wxStaticText( this, wxID_ANY, _("Configure your own synchronization rules."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCustom->Wrap( 410 ); - fgSizer1->Add( m_staticTextCustom, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - - sbSizer7->Add( fgSizer1, 0, 0, 5 ); - - - bSizer29->Add( sbSizer7, 0, wxEXPAND, 5 ); - - - bSizer29->Add( 0, 5, 1, 0, 5 ); - - wxStaticBoxSizer* sbSizer27; - sbSizer27 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Deletion handling") ), wxVERTICAL ); - - wxBoxSizer* bSizer180; - bSizer180 = new wxBoxSizer( wxHORIZONTAL ); - - m_toggleBtnPermanent = new wxToggleButton( this, wxID_ANY, _("Permanent"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnPermanent->SetToolTip( _("Delete or overwrite files permanently") ); - - bSizer180->Add( m_toggleBtnPermanent, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_toggleBtnRecycler = new wxToggleButton( this, wxID_ANY, _("Recycle Bin"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnRecycler->SetToolTip( _("Use Recycle Bin when deleting or overwriting files") ); - - bSizer180->Add( m_toggleBtnRecycler, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_toggleBtnVersioning = new wxToggleButton( this, wxID_ANY, _("Versioning"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnVersioning->SetToolTip( _("Move time-stamped files into specified folder") ); - - bSizer180->Add( m_toggleBtnVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer180->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_checkBoxVersionsLimit = new wxCheckBox( this, wxID_ANY, _("Limit"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxVersionsLimit->SetToolTip( _("Limit maximum number of versions per file") ); - - bSizer180->Add( m_checkBoxVersionsLimit, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_spinCtrlVersionsLimit = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 50,-1 ), wxSP_ARROW_KEYS, 1, 2000000000, 1 ); - m_spinCtrlVersionsLimit->SetToolTip( _("Limit maximum number of versions per file") ); - - bSizer180->Add( m_spinCtrlVersionsLimit, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizer27->Add( bSizer180, 0, wxEXPAND, 5 ); - - m_panelVersioning = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer1151; - bSizer1151 = new wxBoxSizer( wxHORIZONTAL ); - - m_versioningFolder = new FolderHistoryBox( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizer1151->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") ); - - bSizer1151->Add( m_buttonSelectDirVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelVersioning->SetSizer( bSizer1151 ); - m_panelVersioning->Layout(); - bSizer1151->Fit( m_panelVersioning ); - sbSizer27->Add( m_panelVersioning, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 5 ); - - - bSizer29->Add( sbSizer27, 0, wxEXPAND, 5 ); - - bSizer201 = new wxBoxSizer( wxHORIZONTAL ); - - sbSizerErrorHandling = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Error handling") ), wxHORIZONTAL ); - - m_toggleBtnErrorIgnore = new wxToggleButton( this, wxID_ANY, _("Ignore"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") ); - - sbSizerErrorHandling->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_toggleBtnErrorPopup = new wxToggleButton( this, wxID_ANY, _("Pop-up"), wxDefaultPosition, wxDefaultSize, 0 ); - m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") ); - - sbSizerErrorHandling->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer201->Add( sbSizerErrorHandling, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - sbSizerExecFinished = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("On completion:") ), wxHORIZONTAL ); - - m_comboBoxExecFinished = new ExecFinishedBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - sbSizerExecFinished->Add( m_comboBoxExecFinished, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer201->Add( sbSizerExecFinished, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer29->Add( bSizer201, 0, wxEXPAND|wxTOP, 5 ); - - - bSizer181->Add( bSizer29, 0, wxEXPAND, 5 ); - - - bSizer181->Add( 10, 0, 0, 0, 5 ); - - wxStaticBoxSizer* sbSizer2453245; - sbSizer2453245 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Configuration") ), wxVERTICAL ); - - - sbSizer2453245->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_bitmapDatabase = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 70,70 ), 0 ); - sbSizer2453245->Add( m_bitmapDatabase, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 10 ); - - sbSizerSyncDirections = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer1801; - bSizer1801 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText21 = new wxStaticText( this, wxID_ANY, _("Category"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE ); - m_staticText21->Wrap( -1 ); - m_staticText21->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); - - bSizer1801->Add( m_staticText21, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticText31 = new wxStaticText( this, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE ); - m_staticText31->Wrap( -1 ); - m_staticText31->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); - - bSizer1801->Add( m_staticText31, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - sbSizerSyncDirections->Add( bSizer1801, 0, wxEXPAND, 5 ); - - bSizerLeftOnly = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapLeftOnly = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapLeftOnly->SetToolTip( _("Item exists on left side only") ); - - bSizerLeftOnly->Add( m_bitmapLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerLeftOnly->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bpButtonLeftOnly = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerLeftOnly->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerRightOnly = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapRightOnly = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapRightOnly->SetToolTip( _("Item exists on right side only") ); - - bSizerRightOnly->Add( m_bitmapRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerRightOnly->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonRightOnly = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerRightOnly->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerRightOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerLeftNewer = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapLeftNewer = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapLeftNewer->SetToolTip( _("Left side is newer") ); - - bSizerLeftNewer->Add( m_bitmapLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerLeftNewer->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonLeftNewer = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerLeftNewer->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerRightNewer = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapRightNewer = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapRightNewer->SetToolTip( _("Right side is newer") ); - - bSizerRightNewer->Add( m_bitmapRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerRightNewer->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonRightNewer = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerRightNewer->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerRightNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerDifferent = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapDifferent = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapDifferent->SetToolTip( _("Items have different content") ); - - bSizerDifferent->Add( m_bitmapDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerDifferent->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonDifferent = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerDifferent->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerDifferent, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - bSizerConflict = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapConflict = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); - m_bitmapConflict->SetToolTip( _("Conflict/item cannot be categorized") ); - - bSizerConflict->Add( m_bitmapConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizerConflict->Add( 5, 0, 0, 0, 5 ); - - m_bpButtonConflict = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); - bSizerConflict->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizerSyncDirections->Add( bSizerConflict, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - sbSizer2453245->Add( sbSizerSyncDirections, 0, wxEXPAND, 5 ); - - - sbSizer2453245->Add( 0, 0, 1, wxEXPAND, 5 ); - - - bSizer181->Add( sbSizer2453245, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer7->Add( bSizer181, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer291; - bSizer291 = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOK->SetDefault(); - m_buttonOK->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); - - bSizer291->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - - m_button16 = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_button16->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer291->Add( m_button16, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer7->Add( bSizer291, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM, 5 ); - - - this->SetSizer( bSizer7 ); - this->Layout(); - bSizer7->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) ); - m_toggleBtnAutomatic->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncAutomaticDouble ), NULL, this ); - m_toggleBtnAutomatic->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncAutomatic ), NULL, this ); - m_toggleBtnMirror->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this ); - m_toggleBtnMirror->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this ); - m_toggleBtnUpdate->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this ); - m_toggleBtnUpdate->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this ); - m_toggleBtnCustom->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this ); - m_toggleBtnCustom->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this ); - m_toggleBtnPermanent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionPermanent ), NULL, this ); - m_toggleBtnRecycler->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionRecycler ), NULL, this ); - m_toggleBtnVersioning->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionVersioning ), NULL, this ); - m_checkBoxVersionsLimit->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnToggleVersionsLimit ), NULL, this ); - m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorIgnore ), NULL, this ); - m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorPopup ), NULL, this ); - m_bpButtonLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExLeftSideOnly ), NULL, this ); - m_bpButtonRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExRightSideOnly ), NULL, this ); - m_bpButtonLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnLeftNewer ), NULL, this ); - m_bpButtonRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnRightNewer ), NULL, this ); - m_bpButtonDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDifferent ), NULL, this ); - m_bpButtonConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnConflict ), NULL, this ); - m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnApply ), NULL, this ); - m_button16->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer7; + bSizer7 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer181; + bSizer181 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer29; + bSizer29 = new wxBoxSizer( wxVERTICAL ); + + m_staticText86 = new wxStaticText( this, wxID_ANY, _("Select variant"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText86->Wrap( -1 ); + bSizer29->Add( m_staticText86, 0, wxALL, 5 ); + + wxFlexGridSizer* fgSizer1; + fgSizer1 = new wxFlexGridSizer( 4, 2, 6, 8 ); + fgSizer1->SetFlexibleDirection( wxHORIZONTAL ); + fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_toggleBtnAutomatic = new wxToggleButton( this, wxID_ANY, _("<- Two way ->"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnAutomatic->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) ); + + fgSizer1->Add( m_toggleBtnAutomatic, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextAutomatic = new wxStaticText( this, wxID_ANY, _("Identify and propagate changes on both sides using a database. Deletions, renaming and conflicts are detected automatically."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextAutomatic->Wrap( 450 ); + fgSizer1->Add( m_staticTextAutomatic, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_toggleBtnMirror = new wxToggleButton( this, wxID_ANY, _("Mirror ->>"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnMirror->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) ); + + fgSizer1->Add( m_toggleBtnMirror, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticTextMirror = new wxStaticText( this, wxID_ANY, _("Mirror backup of left folder. Right folder is modified to exactly match left folder after synchronization."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextMirror->Wrap( 450 ); + fgSizer1->Add( m_staticTextMirror, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_toggleBtnUpdate = new wxToggleButton( this, wxID_ANY, _("Update ->"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnUpdate->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) ); + + fgSizer1->Add( m_toggleBtnUpdate, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticTextUpdate = new wxStaticText( this, wxID_ANY, _("Copy new or updated files to right folder."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdate->Wrap( 450 ); + fgSizer1->Add( m_staticTextUpdate, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_toggleBtnCustom = new wxToggleButton( this, wxID_ANY, _("Custom"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnCustom->SetFont( wxFont( 11, 70, 90, 92, false, wxEmptyString ) ); + + fgSizer1->Add( m_toggleBtnCustom, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticTextCustom = new wxStaticText( this, wxID_ANY, _("Configure your own synchronization rules."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCustom->Wrap( 450 ); + fgSizer1->Add( m_staticTextCustom, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer29->Add( fgSizer1, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + bSizerExtraConfig = new wxBoxSizer( wxVERTICAL ); + + m_staticline321 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerExtraConfig->Add( m_staticline321, 0, wxEXPAND, 5 ); + + bSizer179 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer174; + bSizer174 = new wxBoxSizer( wxVERTICAL ); + + m_staticText88 = new wxStaticText( this, wxID_ANY, _("Error handling"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText88->Wrap( -1 ); + bSizer174->Add( m_staticText88, 0, wxBOTTOM, 5 ); + + wxBoxSizer* bSizer175; + bSizer175 = new wxBoxSizer( wxHORIZONTAL ); + + m_toggleBtnErrorIgnore = new wxToggleButton( this, wxID_ANY, _("Ignore"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorIgnore->SetToolTip( _("Hide all error and warning messages") ); + + bSizer175->Add( m_toggleBtnErrorIgnore, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_toggleBtnErrorPopup = new wxToggleButton( this, wxID_ANY, _("Pop-up"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnErrorPopup->SetToolTip( _("Show pop-up on errors or warnings") ); + + bSizer175->Add( m_toggleBtnErrorPopup, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer174->Add( bSizer175, 0, 0, 5 ); + + + bSizer179->Add( bSizer174, 0, wxALL, 5 ); + + m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer179->Add( m_staticline36, 0, wxEXPAND, 5 ); + + bSizerOnCompletion = new wxBoxSizer( wxVERTICAL ); + + m_staticText89 = new wxStaticText( this, wxID_ANY, _("On completion"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText89->Wrap( -1 ); + bSizerOnCompletion->Add( m_staticText89, 0, wxBOTTOM, 5 ); + + m_comboBoxExecFinished = new ExecFinishedBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizerOnCompletion->Add( m_comboBoxExecFinished, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer179->Add( bSizerOnCompletion, 1, wxALL, 5 ); + + + bSizerExtraConfig->Add( bSizer179, 0, wxEXPAND, 5 ); + + + bSizer29->Add( bSizerExtraConfig, 0, wxEXPAND, 5 ); + + m_staticline32 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer29->Add( m_staticline32, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer158; + bSizer158 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText87 = new wxStaticText( this, wxID_ANY, _("Deletion handling"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText87->Wrap( -1 ); + bSizer158->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + + + bSizer158->Add( 0, 0, 1, wxEXPAND, 5 ); + + bSizerVersioningNamingConvention = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextNamingCvtPart1 = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextNamingCvtPart1->Wrap( -1 ); + m_staticTextNamingCvtPart1->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizerVersioningNamingConvention->Add( m_staticTextNamingCvtPart1, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextNamingCvtPart2Bold = new wxStaticText( this, 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 ) ); + + bSizerVersioningNamingConvention->Add( m_staticTextNamingCvtPart2Bold, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextNamingCvtPart3 = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextNamingCvtPart3->Wrap( -1 ); + m_staticTextNamingCvtPart3->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizerVersioningNamingConvention->Add( m_staticTextNamingCvtPart3, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer158->Add( bSizerVersioningNamingConvention, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + + bSizer29->Add( bSizer158, 0, wxEXPAND|wxTOP, 5 ); + + wxBoxSizer* bSizer180; + bSizer180 = new wxBoxSizer( wxHORIZONTAL ); + + m_toggleBtnPermanent = new wxToggleButton( this, wxID_ANY, _("Permanent"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnPermanent->SetToolTip( _("Delete or overwrite files permanently") ); + + bSizer180->Add( m_toggleBtnPermanent, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_toggleBtnRecycler = new wxToggleButton( this, wxID_ANY, _("Recycle Bin"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnRecycler->SetToolTip( _("Use Recycle Bin for deleted and overwritten files") ); + + bSizer180->Add( m_toggleBtnRecycler, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_toggleBtnVersioning = new wxToggleButton( this, wxID_ANY, _("Versioning"), wxDefaultPosition, wxDefaultSize, 0 ); + m_toggleBtnVersioning->SetToolTip( _("Move time-stamped files into specified folder") ); + + bSizer180->Add( m_toggleBtnVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer180->Add( 0, 0, 1, wxEXPAND, 5 ); + + bSizerVersioningStyle = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText93 = new wxStaticText( this, wxID_ANY, _("Naming convention:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText93->Wrap( -1 ); + bSizerVersioningStyle->Add( m_staticText93, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + wxArrayString m_choiceVersioningStyleChoices; + m_choiceVersioningStyle = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceVersioningStyleChoices, 0 ); + m_choiceVersioningStyle->SetSelection( 0 ); + bSizerVersioningStyle->Add( m_choiceVersioningStyle, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer180->Add( bSizerVersioningStyle, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer29->Add( bSizer180, 0, wxEXPAND|wxALL, 5 ); + + m_panelVersioning = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer156; + bSizer156 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer1151; + bSizer1151 = new wxBoxSizer( wxHORIZONTAL ); + + m_versioningFolder = new FolderHistoryBox( m_panelVersioning, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizer1151->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") ); + + bSizer1151->Add( m_buttonSelectDirVersioning, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer156->Add( bSizer1151, 0, wxEXPAND, 5 ); + + + m_panelVersioning->SetSizer( bSizer156 ); + m_panelVersioning->Layout(); + bSizer156->Fit( m_panelVersioning ); + bSizer29->Add( m_panelVersioning, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer181->Add( bSizer29, 0, wxEXPAND, 5 ); + + m_staticline31 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer181->Add( m_staticline31, 0, wxEXPAND, 5 ); + + bSizerConfig = new wxBoxSizer( wxVERTICAL ); + + m_staticText90 = new wxStaticText( this, wxID_ANY, _("Configuration"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText90->Wrap( -1 ); + bSizerConfig->Add( m_staticText90, 0, wxBOTTOM, 5 ); + + + bSizerConfig->Add( 0, 5, 0, 0, 5 ); + + m_bitmapDatabase = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizerConfig->Add( m_bitmapDatabase, 0, wxALIGN_CENTER_HORIZONTAL, 10 ); + + sbSizerSyncDirections = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer1801; + bSizer1801 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText21 = new wxStaticText( this, wxID_ANY, _("Category"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE ); + m_staticText21->Wrap( -1 ); + m_staticText21->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); + + bSizer1801->Add( m_staticText21, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText31 = new wxStaticText( this, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE ); + m_staticText31->Wrap( -1 ); + m_staticText31->SetFont( wxFont( 8, 70, 90, 92, false, wxEmptyString ) ); + + bSizer1801->Add( m_staticText31, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + sbSizerSyncDirections->Add( bSizer1801, 0, wxEXPAND, 5 ); + + bSizerLeftOnly = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapLeftOnly = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapLeftOnly->SetToolTip( _("Item exists on left side only") ); + + bSizerLeftOnly->Add( m_bitmapLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerLeftOnly->Add( 5, 0, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bpButtonLeftOnly = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerLeftOnly->Add( m_bpButtonLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerLeftOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerRightOnly = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapRightOnly = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapRightOnly->SetToolTip( _("Item exists on right side only") ); + + bSizerRightOnly->Add( m_bitmapRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerRightOnly->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonRightOnly = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerRightOnly->Add( m_bpButtonRightOnly, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerRightOnly, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerLeftNewer = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapLeftNewer = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapLeftNewer->SetToolTip( _("Left side is newer") ); + + bSizerLeftNewer->Add( m_bitmapLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerLeftNewer->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonLeftNewer = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerLeftNewer->Add( m_bpButtonLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerLeftNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerRightNewer = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapRightNewer = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapRightNewer->SetToolTip( _("Right side is newer") ); + + bSizerRightNewer->Add( m_bitmapRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerRightNewer->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonRightNewer = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerRightNewer->Add( m_bpButtonRightNewer, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerRightNewer, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerDifferent = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapDifferent = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapDifferent->SetToolTip( _("Items have different content") ); + + bSizerDifferent->Add( m_bitmapDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerDifferent->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonDifferent = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerDifferent->Add( m_bpButtonDifferent, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerDifferent, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + bSizerConflict = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapConflict = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 45,45 ), 0 ); + m_bitmapConflict->SetToolTip( _("Conflict/item cannot be categorized") ); + + bSizerConflict->Add( m_bitmapConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizerConflict->Add( 5, 0, 0, 0, 5 ); + + m_bpButtonConflict = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 46,46 ), wxBU_AUTODRAW ); + bSizerConflict->Add( m_bpButtonConflict, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + sbSizerSyncDirections->Add( bSizerConflict, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerConfig->Add( sbSizerSyncDirections, 0, wxEXPAND, 5 ); + + + bSizerConfig->Add( 0, 0, 1, wxEXPAND, 5 ); + + + bSizer181->Add( bSizerConfig, 0, wxALL|wxEXPAND, 5 ); + + + bSizer7->Add( bSizer181, 1, 0, 5 ); + + m_staticline15 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer7->Add( m_staticline15, 0, wxEXPAND, 5 ); + + m_panel37 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel37->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer291; + bSizer291 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer291->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_buttonOK = new wxButton( m_panel37, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOK->SetDefault(); + m_buttonOK->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); + + bSizer291->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + m_button16 = new wxButton( m_panel37, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_button16->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer291->Add( m_button16, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer291->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panel37->SetSizer( bSizer291 ); + m_panel37->Layout(); + bSizer291->Fit( m_panel37 ); + bSizer7->Add( m_panel37, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + + this->SetSizer( bSizer7 ); + this->Layout(); + bSizer7->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) ); + m_toggleBtnAutomatic->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncAutomaticDouble ), NULL, this ); + m_toggleBtnAutomatic->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncAutomatic ), NULL, this ); + m_toggleBtnMirror->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this ); + m_toggleBtnMirror->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this ); + m_toggleBtnUpdate->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this ); + m_toggleBtnUpdate->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this ); + m_toggleBtnCustom->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this ); + m_toggleBtnCustom->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this ); + m_toggleBtnErrorIgnore->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorIgnore ), NULL, this ); + m_toggleBtnErrorPopup->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorPopup ), NULL, this ); + m_toggleBtnPermanent->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionPermanent ), NULL, this ); + m_toggleBtnRecycler->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionRecycler ), NULL, this ); + m_toggleBtnVersioning->Connect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionVersioning ), NULL, this ); + m_choiceVersioningStyle->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnParameterChange ), NULL, this ); + m_bpButtonLeftOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExLeftSideOnly ), NULL, this ); + m_bpButtonRightOnly->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExRightSideOnly ), NULL, this ); + m_bpButtonLeftNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnLeftNewer ), NULL, this ); + m_bpButtonRightNewer->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnRightNewer ), NULL, this ); + m_bpButtonDifferent->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDifferent ), NULL, this ); + m_bpButtonConflict->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnConflict ), NULL, this ); + m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnApply ), NULL, this ); + m_button16->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this ); } SyncCfgDlgGenerated::~SyncCfgDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) ); - m_toggleBtnAutomatic->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncAutomaticDouble ), NULL, this ); - m_toggleBtnAutomatic->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncAutomatic ), NULL, this ); - m_toggleBtnMirror->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this ); - m_toggleBtnMirror->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this ); - m_toggleBtnUpdate->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this ); - m_toggleBtnUpdate->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this ); - m_toggleBtnCustom->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this ); - m_toggleBtnCustom->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this ); - m_toggleBtnPermanent->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionPermanent ), NULL, this ); - m_toggleBtnRecycler->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionRecycler ), NULL, this ); - m_toggleBtnVersioning->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionVersioning ), NULL, this ); - m_checkBoxVersionsLimit->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnToggleVersionsLimit ), NULL, this ); - m_toggleBtnErrorIgnore->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorIgnore ), NULL, this ); - m_toggleBtnErrorPopup->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorPopup ), NULL, this ); - m_bpButtonLeftOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExLeftSideOnly ), NULL, this ); - m_bpButtonRightOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExRightSideOnly ), NULL, this ); - m_bpButtonLeftNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnLeftNewer ), NULL, this ); - m_bpButtonRightNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnRightNewer ), NULL, this ); - m_bpButtonDifferent->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDifferent ), NULL, this ); - m_bpButtonConflict->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnConflict ), NULL, this ); - m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnApply ), NULL, this ); - m_button16->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this ); - + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncCfgDlgGenerated::OnClose ) ); + m_toggleBtnAutomatic->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncAutomaticDouble ), NULL, this ); + m_toggleBtnAutomatic->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncAutomatic ), NULL, this ); + m_toggleBtnMirror->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncMirrorDouble ), NULL, this ); + m_toggleBtnMirror->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncMirror ), NULL, this ); + m_toggleBtnUpdate->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncUpdateDouble ), NULL, this ); + m_toggleBtnUpdate->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncUpdate ), NULL, this ); + m_toggleBtnCustom->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( SyncCfgDlgGenerated::OnSyncCustomDouble ), NULL, this ); + m_toggleBtnCustom->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnSyncCustom ), NULL, this ); + m_toggleBtnErrorIgnore->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorIgnore ), NULL, this ); + m_toggleBtnErrorPopup->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnErrorPopup ), NULL, this ); + m_toggleBtnPermanent->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionPermanent ), NULL, this ); + m_toggleBtnRecycler->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionRecycler ), NULL, this ); + m_toggleBtnVersioning->Disconnect( wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDeletionVersioning ), NULL, this ); + m_choiceVersioningStyle->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( SyncCfgDlgGenerated::OnParameterChange ), NULL, this ); + m_bpButtonLeftOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExLeftSideOnly ), NULL, this ); + m_bpButtonRightOnly->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnExRightSideOnly ), NULL, this ); + m_bpButtonLeftNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnLeftNewer ), NULL, this ); + m_bpButtonRightNewer->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnRightNewer ), NULL, this ); + m_bpButtonDifferent->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnDifferent ), NULL, this ); + m_bpButtonConflict->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnConflict ), NULL, this ); + m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnApply ), NULL, this ); + m_button16->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncCfgDlgGenerated::OnCancel ), NULL, this ); + } SyncStatusDlgGenerated::SyncStatusDlgGenerated( 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( 470,260 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizerTop = new wxBoxSizer( wxVERTICAL ); - - m_panelHeader = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelHeader->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer181; - bSizer181 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer42; - bSizer42 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapStatus = new wxStaticBitmap( m_panelHeader, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 ); - bSizer42->Add( m_bitmapStatus, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - m_staticTextStatus = new wxStaticText( m_panelHeader, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextStatus->Wrap( -1 ); - m_staticTextStatus->SetFont( wxFont( 14, 70, 90, 92, false, wxEmptyString ) ); - - bSizer42->Add( m_staticTextStatus, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); - - m_animationControl1 = new wxAnimationCtrl( m_panelHeader, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxDefaultSize, wxAC_DEFAULT_STYLE ); - m_animationControl1->SetMinSize( wxSize( 45,45 ) ); - - bSizer42->Add( m_animationControl1, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - - bSizer181->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 ); - - - m_panelHeader->SetSizer( bSizer181 ); - m_panelHeader->Layout(); - bSizer181->Fit( m_panelHeader ); - bSizerTop->Add( m_panelHeader, 0, wxEXPAND, 5 ); - - m_staticlineHeader = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerTop->Add( m_staticlineHeader, 0, wxEXPAND, 5 ); - - m_panelProgress = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - wxBoxSizer* bSizer173; - bSizer173 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer1811; - bSizer1811 = new wxBoxSizer( wxVERTICAL ); - - m_textCtrlStatus = new wxTextCtrl( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), wxTE_READONLY|wxNO_BORDER ); - m_textCtrlStatus->SetMaxLength( 0 ); - m_textCtrlStatus->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer1811->Add( m_textCtrlStatus, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT, 5 ); - - - bSizer173->Add( bSizer1811, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - - m_gauge1 = new wxGauge( m_panelProgress, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,14 ), wxGA_HORIZONTAL ); - bSizer173->Add( m_gauge1, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - bSizer171 = new wxBoxSizer( wxHORIZONTAL ); - - wxFlexGridSizer* fgSizer10; - fgSizer10 = new wxFlexGridSizer( 0, 2, 0, 5 ); - fgSizer10->SetFlexibleDirection( wxBOTH ); - fgSizer10->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_staticTextLabelItemsProc = new wxStaticText( m_panelProgress, wxID_ANY, _("Items processed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextLabelItemsProc->Wrap( -1 ); - m_staticTextLabelItemsProc->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - fgSizer10->Add( m_staticTextLabelItemsProc, 0, wxALIGN_BOTTOM, 5 ); - - bSizerItemsProc = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextProcessedObj = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextProcessedObj->Wrap( -1 ); - m_staticTextProcessedObj->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); - - bSizerItemsProc->Add( m_staticTextProcessedObj, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextDataProcessed = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDataProcessed->Wrap( -1 ); - m_staticTextDataProcessed->SetFont( wxFont( 9, 70, 90, 90, false, wxEmptyString ) ); - - bSizerItemsProc->Add( m_staticTextDataProcessed, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); - - - fgSizer10->Add( bSizerItemsProc, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextLabelItemsRem = new wxStaticText( m_panelProgress, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextLabelItemsRem->Wrap( -1 ); - m_staticTextLabelItemsRem->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - fgSizer10->Add( m_staticTextLabelItemsRem, 0, wxALIGN_BOTTOM, 5 ); - - bSizerItemsRem = new wxBoxSizer( wxHORIZONTAL ); - - m_staticTextRemainingObj = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticTextRemainingObj->Wrap( -1 ); - m_staticTextRemainingObj->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); - - bSizerItemsRem->Add( m_staticTextRemainingObj, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextDataRemaining = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDataRemaining->Wrap( -1 ); - m_staticTextDataRemaining->SetFont( wxFont( 9, 70, 90, 90, false, wxEmptyString ) ); - - bSizerItemsRem->Add( m_staticTextDataRemaining, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); - - - fgSizer10->Add( bSizerItemsRem, 0, wxALIGN_BOTTOM, 5 ); - - m_staticText84 = new wxStaticText( m_panelProgress, wxID_ANY, _("Speed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText84->Wrap( -1 ); - m_staticText84->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - fgSizer10->Add( m_staticText84, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextSpeed = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextSpeed->Wrap( -1 ); - m_staticTextSpeed->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); - - fgSizer10->Add( m_staticTextSpeed, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextLabelRemTime = new wxStaticText( m_panelProgress, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextLabelRemTime->Wrap( -1 ); - m_staticTextLabelRemTime->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - fgSizer10->Add( m_staticTextLabelRemTime, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextRemTime = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextRemTime->Wrap( -1 ); - m_staticTextRemTime->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); - - fgSizer10->Add( m_staticTextRemTime, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextLabelElapsedTime = new wxStaticText( m_panelProgress, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextLabelElapsedTime->Wrap( -1 ); - m_staticTextLabelElapsedTime->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - fgSizer10->Add( m_staticTextLabelElapsedTime, 0, wxALIGN_BOTTOM, 5 ); - - m_staticTextTimeElapsed = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTimeElapsed->Wrap( -1 ); - m_staticTextTimeElapsed->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); - - fgSizer10->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM, 5 ); - - - bSizer171->Add( fgSizer10, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 10 ); - - - bSizer171->Add( 10, 0, 0, 0, 5 ); - - m_panelGraph = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( 340,130 ), wxTAB_TRAVERSAL ); - m_panelGraph->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer171->Add( m_panelGraph, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer173->Add( bSizer171, 1, wxEXPAND|wxTOP|wxLEFT, 5 ); - - - m_panelProgress->SetSizer( bSizer173 ); - m_panelProgress->Layout(); - bSizer173->Fit( m_panelProgress ); - bSizerTop->Add( m_panelProgress, 1, wxEXPAND, 5 ); - - bSizerFinalStat = new wxBoxSizer( wxVERTICAL ); - - m_listbookResult = new wxListbook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLB_TOP ); - wxSize m_listbookResultImageSize = wxSize( 180,1 ); - int m_listbookResultIndex = 0; - wxImageList* m_listbookResultImages = new wxImageList( m_listbookResultImageSize.GetWidth(), m_listbookResultImageSize.GetHeight() ); - m_listbookResult->AssignImageList( m_listbookResultImages ); - wxBitmap m_listbookResultBitmap; - wxImage m_listbookResultImage; - - bSizerFinalStat->Add( m_listbookResult, 1, wxEXPAND, 5 ); - - - bSizerTop->Add( bSizerFinalStat, 1, wxEXPAND, 5 ); - - m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizerTop->Add( m_staticline12, 0, wxEXPAND, 5 ); - - m_panelFooter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelFooter->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer182; - bSizer182 = new wxBoxSizer( wxVERTICAL ); - - bSizerExecFinished = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText87 = new wxStaticText( m_panelFooter, wxID_ANY, _("On completion:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText87->Wrap( -1 ); - m_staticText87->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) ); - - bSizerExecFinished->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_comboBoxExecFinished = new ExecFinishedBox( m_panelFooter, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); - bSizerExecFinished->Add( m_comboBoxExecFinished, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer182->Add( bSizerExecFinished, 0, wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - bSizer28 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer28->Add( 0, 0, 1, 0, 5 ); - - m_buttonOK = new wxButton( m_panelFooter, wxID_OK, _("OK"), wxDefaultPosition, wxSize( 100,30 ), 0 ); - m_buttonOK->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - m_buttonOK->Enable( false ); - - bSizer28->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonPause = new wxButton( m_panelFooter, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( 100,30 ), 0 ); - m_buttonPause->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer28->Add( m_buttonPause, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_buttonAbort = new wxButton( m_panelFooter, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( 100,30 ), 0 ); - m_buttonAbort->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer28->Add( m_buttonAbort, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer28->Add( 0, 0, 1, wxEXPAND, 5 ); - - - bSizer182->Add( bSizer28, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - m_panelFooter->SetSizer( bSizer182 ); - m_panelFooter->Layout(); - bSizer182->Fit( m_panelFooter ); - bSizerTop->Add( m_panelFooter, 0, wxEXPAND, 5 ); - - - this->SetSizer( bSizerTop ); - this->Layout(); - bSizerTop->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncStatusDlgGenerated::OnClose ) ); - this->Connect( wxEVT_ICONIZE, wxIconizeEventHandler( SyncStatusDlgGenerated::OnIconize ) ); - m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnOkay ), NULL, this ); - m_buttonPause->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnPause ), NULL, this ); - m_buttonAbort->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnAbort ), NULL, this ); + this->SetSizeHints( wxSize( 470,260 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizerTop = new wxBoxSizer( wxVERTICAL ); + + m_panelHeader = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelHeader->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer181; + bSizer181 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer42; + bSizer42 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapStatus = new wxStaticBitmap( m_panelHeader, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 ); + bSizer42->Add( m_bitmapStatus, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticTextStatus = new wxStaticText( m_panelHeader, wxID_ANY, _("Synchronizing..."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextStatus->Wrap( -1 ); + m_staticTextStatus->SetFont( wxFont( 14, 70, 90, 92, false, wxEmptyString ) ); + + bSizer42->Add( m_staticTextStatus, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); + + m_animationControl1 = new wxAnimationCtrl( m_panelHeader, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxDefaultSize, wxAC_DEFAULT_STYLE ); + m_animationControl1->SetMinSize( wxSize( 45,45 ) ); + + bSizer42->Add( m_animationControl1, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + + + bSizer181->Add( bSizer42, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 ); + + + m_panelHeader->SetSizer( bSizer181 ); + m_panelHeader->Layout(); + bSizer181->Fit( m_panelHeader ); + bSizerTop->Add( m_panelHeader, 0, wxEXPAND, 5 ); + + m_staticlineHeader = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerTop->Add( m_staticlineHeader, 0, wxEXPAND, 5 ); + + m_panelProgress = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizer173; + bSizer173 = new wxBoxSizer( wxVERTICAL ); + + m_textCtrlStatus = new wxTextCtrl( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), wxTE_READONLY|wxNO_BORDER ); + m_textCtrlStatus->SetMaxLength( 0 ); + m_textCtrlStatus->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer173->Add( m_textCtrlStatus, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_gauge1 = new wxGauge( m_panelProgress, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,14 ), wxGA_HORIZONTAL ); + bSizer173->Add( m_gauge1, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + + bSizer171 = new wxBoxSizer( wxHORIZONTAL ); + + wxFlexGridSizer* fgSizer10; + fgSizer10 = new wxFlexGridSizer( 0, 2, 0, 5 ); + fgSizer10->SetFlexibleDirection( wxBOTH ); + fgSizer10->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_staticTextLabelItemsProc = new wxStaticText( m_panelProgress, wxID_ANY, _("Items processed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextLabelItemsProc->Wrap( -1 ); + m_staticTextLabelItemsProc->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + fgSizer10->Add( m_staticTextLabelItemsProc, 0, wxALIGN_BOTTOM, 5 ); + + bSizerItemsProc = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextProcessedObj = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_staticTextProcessedObj->Wrap( -1 ); + m_staticTextProcessedObj->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); + + bSizerItemsProc->Add( m_staticTextProcessedObj, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextDataProcessed = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDataProcessed->Wrap( -1 ); + m_staticTextDataProcessed->SetFont( wxFont( 9, 70, 90, 90, false, wxEmptyString ) ); + + bSizerItemsProc->Add( m_staticTextDataProcessed, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); + + + fgSizer10->Add( bSizerItemsProc, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextLabelItemsRem = new wxStaticText( m_panelProgress, wxID_ANY, _("Items remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextLabelItemsRem->Wrap( -1 ); + m_staticTextLabelItemsRem->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + fgSizer10->Add( m_staticTextLabelItemsRem, 0, wxALIGN_BOTTOM, 5 ); + + bSizerItemsRem = new wxBoxSizer( wxHORIZONTAL ); + + m_staticTextRemainingObj = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_staticTextRemainingObj->Wrap( -1 ); + m_staticTextRemainingObj->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); + + bSizerItemsRem->Add( m_staticTextRemainingObj, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextDataRemaining = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDataRemaining->Wrap( -1 ); + m_staticTextDataRemaining->SetFont( wxFont( 9, 70, 90, 90, false, wxEmptyString ) ); + + bSizerItemsRem->Add( m_staticTextDataRemaining, 0, wxALIGN_BOTTOM|wxLEFT, 5 ); + + + fgSizer10->Add( bSizerItemsRem, 0, wxALIGN_BOTTOM, 5 ); + + m_staticText84 = new wxStaticText( m_panelProgress, wxID_ANY, _("Speed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText84->Wrap( -1 ); + m_staticText84->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + fgSizer10->Add( m_staticText84, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextSpeed = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextSpeed->Wrap( -1 ); + m_staticTextSpeed->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); + + fgSizer10->Add( m_staticTextSpeed, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextLabelRemTime = new wxStaticText( m_panelProgress, wxID_ANY, _("Time remaining:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextLabelRemTime->Wrap( -1 ); + m_staticTextLabelRemTime->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + fgSizer10->Add( m_staticTextLabelRemTime, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextRemTime = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRemTime->Wrap( -1 ); + m_staticTextRemTime->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); + + fgSizer10->Add( m_staticTextRemTime, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextLabelElapsedTime = new wxStaticText( m_panelProgress, wxID_ANY, _("Time elapsed:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextLabelElapsedTime->Wrap( -1 ); + m_staticTextLabelElapsedTime->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + fgSizer10->Add( m_staticTextLabelElapsedTime, 0, wxALIGN_BOTTOM, 5 ); + + m_staticTextTimeElapsed = new wxStaticText( m_panelProgress, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextTimeElapsed->Wrap( -1 ); + m_staticTextTimeElapsed->SetFont( wxFont( 9, 70, 90, 92, false, wxEmptyString ) ); + + fgSizer10->Add( m_staticTextTimeElapsed, 0, wxALIGN_BOTTOM, 5 ); + + + bSizer171->Add( fgSizer10, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 10 ); + + + bSizer171->Add( 10, 0, 0, 0, 5 ); + + m_panelGraph = new zen::Graph2D( m_panelProgress, wxID_ANY, wxDefaultPosition, wxSize( 340,130 ), wxTAB_TRAVERSAL ); + m_panelGraph->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer171->Add( m_panelGraph, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer173->Add( bSizer171, 1, wxEXPAND|wxTOP|wxLEFT, 5 ); + + + m_panelProgress->SetSizer( bSizer173 ); + m_panelProgress->Layout(); + bSizer173->Fit( m_panelProgress ); + bSizerTop->Add( m_panelProgress, 1, wxEXPAND, 5 ); + + bSizerFinalStat = new wxBoxSizer( wxVERTICAL ); + + m_listbookResult = new wxListbook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLB_TOP ); + wxSize m_listbookResultImageSize = wxSize( 180,1 ); + int m_listbookResultIndex = 0; + wxImageList* m_listbookResultImages = new wxImageList( m_listbookResultImageSize.GetWidth(), m_listbookResultImageSize.GetHeight() ); + m_listbookResult->AssignImageList( m_listbookResultImages ); + wxBitmap m_listbookResultBitmap; + wxImage m_listbookResultImage; + + bSizerFinalStat->Add( m_listbookResult, 1, wxEXPAND, 5 ); + + + bSizerTop->Add( bSizerFinalStat, 1, wxEXPAND, 5 ); + + m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizerTop->Add( m_staticline12, 0, wxEXPAND, 5 ); + + m_panelFooter = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelFooter->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer182; + bSizer182 = new wxBoxSizer( wxVERTICAL ); + + bSizerExecFinished = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText87 = new wxStaticText( m_panelFooter, wxID_ANY, _("On completion"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText87->Wrap( -1 ); + m_staticText87->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) ); + + bSizerExecFinished->Add( m_staticText87, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_comboBoxExecFinished = new ExecFinishedBox( m_panelFooter, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + bSizerExecFinished->Add( m_comboBoxExecFinished, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer182->Add( bSizerExecFinished, 0, wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + bSizer28 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer28->Add( 0, 0, 1, 0, 5 ); + + m_buttonOK = new wxButton( m_panelFooter, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOK->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + m_buttonOK->Enable( false ); + + bSizer28->Add( m_buttonOK, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + m_buttonPause = new wxButton( m_panelFooter, wxID_ANY, _("&Pause"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonPause->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer28->Add( m_buttonPause, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + m_buttonAbort = new wxButton( m_panelFooter, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonAbort->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer28->Add( m_buttonAbort, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + bSizer28->Add( 0, 0, 1, wxEXPAND, 5 ); + + + bSizer182->Add( bSizer28, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + m_panelFooter->SetSizer( bSizer182 ); + m_panelFooter->Layout(); + bSizer182->Fit( m_panelFooter ); + bSizerTop->Add( m_panelFooter, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizerTop ); + this->Layout(); + bSizerTop->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncStatusDlgGenerated::OnClose ) ); + this->Connect( wxEVT_ICONIZE, wxIconizeEventHandler( SyncStatusDlgGenerated::OnIconize ) ); + m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnOkay ), NULL, this ); + m_buttonPause->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnPause ), NULL, this ); + m_buttonAbort->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnAbort ), NULL, this ); } SyncStatusDlgGenerated::~SyncStatusDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncStatusDlgGenerated::OnClose ) ); - this->Disconnect( wxEVT_ICONIZE, wxIconizeEventHandler( SyncStatusDlgGenerated::OnIconize ) ); - m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnOkay ), NULL, this ); - m_buttonPause->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnPause ), NULL, this ); - m_buttonAbort->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnAbort ), NULL, this ); - + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncStatusDlgGenerated::OnClose ) ); + this->Disconnect( wxEVT_ICONIZE, wxIconizeEventHandler( SyncStatusDlgGenerated::OnIconize ) ); + m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnOkay ), NULL, this ); + m_buttonPause->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnPause ), NULL, this ); + m_buttonAbort->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncStatusDlgGenerated::OnAbort ), NULL, this ); + } LogControlGenerated::LogControlGenerated( 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 ); - - m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer179->Add( m_staticline12, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer153; - bSizer153 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer154; - bSizer154 = new wxBoxSizer( wxVERTICAL ); - - m_bpButtonErrors = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), wxBU_AUTODRAW ); - bSizer154->Add( m_bpButtonErrors, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonWarnings = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), wxBU_AUTODRAW ); - bSizer154->Add( m_bpButtonWarnings, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bpButtonInfo = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 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( LogControlGenerated::OnErrors ), NULL, this ); - m_bpButtonWarnings->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnWarnings ), NULL, this ); - m_bpButtonInfo->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnInfo ), NULL, this ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer179; + bSizer179 = new wxBoxSizer( wxVERTICAL ); + + m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer179->Add( m_staticline12, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer153; + bSizer153 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer154; + bSizer154 = new wxBoxSizer( wxVERTICAL ); + + m_bpButtonErrors = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), wxBU_AUTODRAW ); + bSizer154->Add( m_bpButtonErrors, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonWarnings = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), wxBU_AUTODRAW ); + bSizer154->Add( m_bpButtonWarnings, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bpButtonInfo = new ToggleButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 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( LogControlGenerated::OnErrors ), NULL, this ); + m_bpButtonWarnings->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnWarnings ), NULL, this ); + m_bpButtonInfo->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnInfo ), NULL, this ); } LogControlGenerated::~LogControlGenerated() { - // Disconnect Events - m_bpButtonErrors->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnErrors ), NULL, this ); - m_bpButtonWarnings->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnWarnings ), NULL, this ); - m_bpButtonInfo->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnInfo ), NULL, this ); - + // Disconnect Events + m_bpButtonErrors->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnErrors ), NULL, this ); + m_bpButtonWarnings->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnWarnings ), NULL, this ); + m_bpButtonInfo->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( LogControlGenerated::OnInfo ), NULL, this ); + } 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 ); - - wxBoxSizer* bSizer31; - bSizer31 = new wxBoxSizer( wxVERTICAL ); - - - bSizer31->Add( 0, 5, 0, 0, 5 ); - - wxBoxSizer* bSizer53; - bSizer53 = new wxBoxSizer( wxVERTICAL ); - - m_panelLogo = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxSIMPLE_BORDER|wxTAB_TRAVERSAL ); - m_panelLogo->SetBackgroundColour( wxColour( 255, 255, 255 ) ); - - wxBoxSizer* bSizer36; - bSizer36 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmap11 = new wxStaticBitmap( m_panelLogo, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer36->Add( m_bitmap11, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panelLogo->SetSizer( bSizer36 ); - m_panelLogo->Layout(); - bSizer36->Fit( m_panelLogo ); - bSizer53->Add( m_panelLogo, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxBOTTOM, 5 ); - - m_build = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_build->Wrap( -1 ); - bSizer53->Add( m_build, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer53->Add( 0, 5, 0, 0, 5 ); - - m_panel33 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDOUBLE_BORDER|wxTAB_TRAVERSAL ); - m_panel33->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizerCodeInfo = new wxBoxSizer( wxVERTICAL ); - - m_staticText72 = new wxStaticText( m_panel33, wxID_ANY, _("Source code written in C++ utilizing:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText72->Wrap( -1 ); - m_staticText72->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerCodeInfo->Add( m_staticText72, 0, wxTOP|wxBOTTOM|wxLEFT, 5 ); - - wxBoxSizer* bSizer167; - bSizer167 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer171; - bSizer171 = new wxBoxSizer( wxHORIZONTAL ); - - m_hyperlink9 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("MinGW"), wxT("http://www.mingw.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink9->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer171->Add( m_hyperlink9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink11 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("MS Visual C++"), wxT("http://msdn.microsoft.com/library/60k1461a.aspx"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink11->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer171->Add( m_hyperlink11, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink10 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Code::Blocks"), wxT("http://www.codeblocks.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink10->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer171->Add( m_hyperlink10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink13 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Boost"), wxT("http://www.boost.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink13->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer171->Add( m_hyperlink13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink7 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("wxWidgets"), wxT("http://www.wxwidgets.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink7->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer171->Add( m_hyperlink7, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink16 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Artistic Style"), wxT("http://astyle.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink16->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer171->Add( m_hyperlink16, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - - bSizer167->Add( bSizer171, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM, 5 ); - - wxBoxSizer* bSizer172; - bSizer172 = new wxBoxSizer( wxHORIZONTAL ); - - m_hyperlink8 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Loki"), wxT("http://loki-lib.sourceforge.net/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink8->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer172->Add( m_hyperlink8, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink15 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("zenXML"), wxT("http://zenxml.sourceforge.net/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink15->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer172->Add( m_hyperlink15, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink12 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Google Test"), wxT("http://code.google.com/p/googletest"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink12->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer172->Add( m_hyperlink12, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink18 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Unicode NSIS"), wxT("http://www.scratchpaper.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink18->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer172->Add( m_hyperlink18, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_hyperlink14 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("wxFormBuilder"), wxT("http://wxformbuilder.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink14->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - bSizer172->Add( m_hyperlink14, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - - bSizer167->Add( bSizer172, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizerCodeInfo->Add( bSizer167, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_hyperlink21 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("- Zenju -"), wxT("mailto:zenju@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink21->SetFont( wxFont( 10, 74, 93, 92, false, wxT("Segoe Print") ) ); - m_hyperlink21->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_hyperlink21->SetToolTip( _("zenju@gmx.de") ); - - bSizerCodeInfo->Add( m_hyperlink21, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - m_panel33->SetSizer( bSizerCodeInfo ); - m_panel33->Layout(); - bSizerCodeInfo->Fit( m_panel33 ); - bSizer53->Add( m_panel33, 0, wxBOTTOM|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_panel40 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel40->SetBackgroundColour( wxColour( 153, 170, 187 ) ); - - wxBoxSizer* bSizer183; - bSizer183 = new wxBoxSizer( wxVERTICAL ); - - m_panel39 = new wxPanel( m_panel40, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel39->SetBackgroundColour( wxColour( 221, 221, 255 ) ); - - wxBoxSizer* bSizer184; - bSizer184 = new wxBoxSizer( wxHORIZONTAL ); - - 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, 93, 92, false, wxEmptyString ) ); - m_staticText83->SetForegroundColour( wxColour( 0, 0, 0 ) ); - - bSizer178->Add( m_staticText83, 0, wxALL, 5 ); - - m_hyperlink3 = new wxHyperlinkCtrl( m_panel39, wxID_ANY, _("Donate with PayPal"), wxT("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zenju@gmx.de&no_shipping=1&lc=US¤cy_code=EUR"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink3->SetFont( wxFont( 11, 70, 90, 92, true, wxEmptyString ) ); - m_hyperlink3->SetBackgroundColour( wxColour( 221, 221, 255 ) ); - m_hyperlink3->SetToolTip( _("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zenju@gmx.de&no_shipping=1&lc=US¤cy_code=EUR") ); - - bSizer178->Add( m_hyperlink3, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer184->Add( bSizer178, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_animCtrlWink = new wxAnimationCtrl( m_panel39, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( -1,-1 ), wxAC_DEFAULT_STYLE ); - bSizer184->Add( m_animCtrlWink, 0, 0, 5 ); - - - m_panel39->SetSizer( bSizer184 ); - m_panel39->Layout(); - bSizer184->Fit( m_panel39 ); - bSizer183->Add( m_panel39, 0, wxEXPAND|wxALL, 5 ); - - - m_panel40->SetSizer( bSizer183 ); - m_panel40->Layout(); - bSizer183->Fit( m_panel40 ); - bSizer53->Add( m_panel40, 0, wxEXPAND|wxBOTTOM|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_scrolledWindowTranslators = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxDOUBLE_BORDER|wxHSCROLL|wxVSCROLL ); - m_scrolledWindowTranslators->SetScrollRate( 10, 10 ); - m_scrolledWindowTranslators->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_scrolledWindowTranslators->SetMinSize( wxSize( -1,180 ) ); - - bSizerTranslators = new wxBoxSizer( wxVERTICAL ); - - m_staticText54 = new wxStaticText( m_scrolledWindowTranslators, wxID_ANY, _("Many thanks for localization:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText54->Wrap( -1 ); - m_staticText54->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - bSizerTranslators->Add( m_staticText54, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM, 5 ); - - - bSizerTranslators->Add( 0, 5, 0, 0, 5 ); - - fgSizerTranslators = new wxFlexGridSizer( 50, 3, 2, 20 ); - fgSizerTranslators->SetFlexibleDirection( wxBOTH ); - fgSizerTranslators->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - - bSizerTranslators->Add( fgSizerTranslators, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - m_scrolledWindowTranslators->SetSizer( bSizerTranslators ); - m_scrolledWindowTranslators->Layout(); - bSizerTranslators->Fit( m_scrolledWindowTranslators ); - bSizer53->Add( m_scrolledWindowTranslators, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxEXPAND, 5 ); - - wxStaticBoxSizer* sbSizer29; - sbSizer29 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Feedback and suggestions are welcome") ), wxHORIZONTAL ); - - wxBoxSizer* bSizer170; - bSizer170 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer170->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_hyperlink1 = new wxHyperlinkCtrl( this, wxID_ANY, _("Homepage"), wxT("http://freefilesync.sourceforge.net/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink1->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) ); - m_hyperlink1->SetToolTip( _("http://sourceforge.net/projects/freefilesync/") ); - - bSizer170->Add( m_hyperlink1, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmap9 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmap9->SetToolTip( _("FreeFileSync at Sourceforge") ); - - bSizer170->Add( m_bitmap9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - - bSizer170->Add( 0, 0, 1, wxEXPAND, 5 ); - - - sbSizer29->Add( bSizer170, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer1711; - bSizer1711 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer1711->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_hyperlink2 = new wxHyperlinkCtrl( this, wxID_ANY, _("Email"), wxT("mailto:zenju@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - m_hyperlink2->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) ); - m_hyperlink2->SetToolTip( _("zenju@gmx.de") ); - - bSizer1711->Add( m_hyperlink2, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmap10 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_bitmap10->SetToolTip( _("Email") ); - - bSizer1711->Add( m_bitmap10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - - bSizer1711->Add( 0, 0, 1, wxEXPAND, 5 ); - - - sbSizer29->Add( bSizer1711, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer53->Add( sbSizer29, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM, 5 ); - - wxStaticBoxSizer* sbSizer14; - sbSizer14 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Published under the GNU General Public License") ), wxHORIZONTAL ); - - - sbSizer14->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmap13 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - sbSizer14->Add( m_bitmap13, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_hyperlink5 = new wxHyperlinkCtrl( this, wxID_ANY, _("http://www.gnu.org/licenses/gpl.html"), wxT("http://www.gnu.org/licenses/gpl.html"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); - sbSizer14->Add( m_hyperlink5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizer14->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer53->Add( sbSizer14, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - - bSizer31->Add( bSizer53, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 25 ); - - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( 100,30 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer31->Add( m_buttonOkay, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - - - this->SetSizer( bSizer31 ); - this->Layout(); - bSizer31->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer31; + bSizer31 = new wxBoxSizer( wxVERTICAL ); + + m_panelLogo = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxTAB_TRAVERSAL ); + m_panelLogo->SetBackgroundColour( wxColour( 255, 255, 255 ) ); + + wxBoxSizer* bSizer36; + bSizer36 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmap11 = new wxStaticBitmap( m_panelLogo, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer36->Add( m_bitmap11, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelLogo->SetSizer( bSizer36 ); + m_panelLogo->Layout(); + bSizer36->Fit( m_panelLogo ); + bSizer31->Add( m_panelLogo, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline341 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer31->Add( m_staticline341, 0, wxEXPAND, 5 ); + + m_build = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_build->Wrap( -1 ); + bSizer31->Add( m_build, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticline3411 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer31->Add( m_staticline3411, 0, wxEXPAND, 5 ); + + m_panel33 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel33->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizerCodeInfo = new wxBoxSizer( wxVERTICAL ); + + m_staticText72 = new wxStaticText( m_panel33, wxID_ANY, _("Source code written in C++ utilizing:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText72->Wrap( -1 ); + m_staticText72->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerCodeInfo->Add( m_staticText72, 0, wxALL, 5 ); + + wxBoxSizer* bSizer167; + bSizer167 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer171; + bSizer171 = new wxBoxSizer( wxHORIZONTAL ); + + m_hyperlink9 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("MinGW"), wxT("http://www.mingw.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink9->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer171->Add( m_hyperlink9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink11 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("MS Visual C++"), wxT("http://msdn.microsoft.com/library/60k1461a.aspx"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink11->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer171->Add( m_hyperlink11, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink10 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Code::Blocks"), wxT("http://www.codeblocks.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink10->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer171->Add( m_hyperlink10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink13 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Boost"), wxT("http://www.boost.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink13->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer171->Add( m_hyperlink13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink7 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("wxWidgets"), wxT("http://www.wxwidgets.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink7->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer171->Add( m_hyperlink7, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink16 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Artistic Style"), wxT("http://astyle.sourceforge.net"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink16->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer171->Add( m_hyperlink16, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer167->Add( bSizer171, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM, 5 ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxHORIZONTAL ); + + m_hyperlink8 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Loki"), wxT("http://loki-lib.sourceforge.net/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink8->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer172->Add( m_hyperlink8, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink15 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("zenXML"), wxT("http://zenxml.sourceforge.net/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink15->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer172->Add( m_hyperlink15, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink12 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Google Test"), wxT("http://code.google.com/p/googletest"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink12->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer172->Add( m_hyperlink12, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink18 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("Unicode NSIS"), wxT("http://www.scratchpaper.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink18->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer172->Add( m_hyperlink18, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink14 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("wxFormBuilder"), wxT("http://wxformbuilder.org"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink14->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer172->Add( m_hyperlink14, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer167->Add( bSizer172, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizerCodeInfo->Add( bSizer167, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 ); + + m_hyperlink21 = new wxHyperlinkCtrl( m_panel33, wxID_ANY, _("- Zenju -"), wxT("mailto:zenju@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink21->SetFont( wxFont( 10, 74, 93, 92, false, wxT("Segoe Print") ) ); + m_hyperlink21->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink21->SetToolTip( _("zenju@gmx.de") ); + + bSizerCodeInfo->Add( m_hyperlink21, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + m_panel33->SetSizer( bSizerCodeInfo ); + m_panel33->Layout(); + bSizerCodeInfo->Fit( m_panel33 ); + bSizer31->Add( m_panel33, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_panel40 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel40->SetBackgroundColour( wxColour( 153, 170, 187 ) ); + + wxBoxSizer* bSizer183; + bSizer183 = new wxBoxSizer( wxVERTICAL ); + + m_panel39 = new wxPanel( m_panel40, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel39->SetBackgroundColour( wxColour( 221, 221, 255 ) ); + + wxBoxSizer* bSizer184; + bSizer184 = new wxBoxSizer( wxHORIZONTAL ); + + 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, 93, 92, false, wxEmptyString ) ); + m_staticText83->SetForegroundColour( wxColour( 0, 0, 0 ) ); + + bSizer178->Add( m_staticText83, 0, wxALL, 5 ); + + m_hyperlink3 = new wxHyperlinkCtrl( m_panel39, wxID_ANY, _("Donate with PayPal"), wxT("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zenju@gmx.de&no_shipping=1&lc=US¤cy_code=EUR"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink3->SetFont( wxFont( 11, 70, 90, 92, true, wxEmptyString ) ); + m_hyperlink3->SetBackgroundColour( wxColour( 221, 221, 255 ) ); + m_hyperlink3->SetToolTip( _("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=zenju@gmx.de&no_shipping=1&lc=US¤cy_code=EUR") ); + + bSizer178->Add( m_hyperlink3, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer184->Add( bSizer178, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_animCtrlWink = new wxAnimationCtrl( m_panel39, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxSize( -1,-1 ), wxAC_DEFAULT_STYLE ); + bSizer184->Add( m_animCtrlWink, 0, 0, 5 ); + + + m_panel39->SetSizer( bSizer184 ); + m_panel39->Layout(); + bSizer184->Fit( m_panel39 ); + bSizer183->Add( m_panel39, 0, wxEXPAND|wxALL, 5 ); + + + m_panel40->SetSizer( bSizer183 ); + m_panel40->Layout(); + bSizer183->Fit( m_panel40 ); + bSizer31->Add( m_panel40, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_scrolledWindowTranslators = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxHSCROLL|wxVSCROLL ); + m_scrolledWindowTranslators->SetScrollRate( 10, 10 ); + m_scrolledWindowTranslators->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_scrolledWindowTranslators->SetMinSize( wxSize( -1,180 ) ); + + bSizerTranslators = new wxBoxSizer( wxVERTICAL ); + + m_staticText54 = new wxStaticText( m_scrolledWindowTranslators, wxID_ANY, _("Many thanks for localization:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText54->Wrap( -1 ); + m_staticText54->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + bSizerTranslators->Add( m_staticText54, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM, 5 ); + + + bSizerTranslators->Add( 0, 5, 0, 0, 5 ); + + fgSizerTranslators = new wxFlexGridSizer( 50, 3, 2, 20 ); + fgSizerTranslators->SetFlexibleDirection( wxBOTH ); + fgSizerTranslators->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + + bSizerTranslators->Add( fgSizerTranslators, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + m_scrolledWindowTranslators->SetSizer( bSizerTranslators ); + m_scrolledWindowTranslators->Layout(); + bSizerTranslators->Fit( m_scrolledWindowTranslators ); + bSizer31->Add( m_scrolledWindowTranslators, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline43 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer31->Add( m_staticline43, 0, wxEXPAND, 5 ); + + m_staticText94 = new wxStaticText( this, wxID_ANY, _("Feedback and suggestions are welcome"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText94->Wrap( -1 ); + bSizer31->Add( m_staticText94, 0, wxALL, 5 ); + + wxBoxSizer* bSizer166; + bSizer166 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer170; + bSizer170 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer170->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_hyperlink1 = new wxHyperlinkCtrl( this, wxID_ANY, _("Homepage"), wxT("http://freefilesync.sourceforge.net/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink1->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) ); + m_hyperlink1->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink1->SetToolTip( _("http://sourceforge.net/projects/freefilesync/") ); + + bSizer170->Add( m_hyperlink1, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmap9 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_bitmap9->SetToolTip( _("FreeFileSync at Sourceforge") ); + + bSizer170->Add( m_bitmap9, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + + bSizer170->Add( 0, 0, 1, wxEXPAND, 5 ); + + + bSizer166->Add( bSizer170, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer1711; + bSizer1711 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer1711->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_hyperlink2 = new wxHyperlinkCtrl( this, wxID_ANY, _("Email"), wxT("mailto:zenju@gmx.de"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink2->SetFont( wxFont( 10, 70, 90, 92, true, wxEmptyString ) ); + m_hyperlink2->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_hyperlink2->SetToolTip( _("zenju@gmx.de") ); + + bSizer1711->Add( m_hyperlink2, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmap10 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_bitmap10->SetToolTip( _("Email") ); + + bSizer1711->Add( m_bitmap10, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + + bSizer1711->Add( 0, 0, 1, wxEXPAND, 5 ); + + + bSizer166->Add( bSizer1711, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer31->Add( bSizer166, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticline34 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer31->Add( m_staticline34, 0, wxEXPAND, 5 ); + + m_staticText93 = new wxStaticText( this, wxID_ANY, _("Published under the GNU General Public License"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText93->Wrap( -1 ); + bSizer31->Add( m_staticText93, 0, wxALL, 5 ); + + wxBoxSizer* bSizer1671; + bSizer1671 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer1671->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmap13 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer1671->Add( m_bitmap13, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_hyperlink5 = new wxHyperlinkCtrl( this, wxID_ANY, _("http://www.gnu.org/licenses/gpl.html"), wxT("http://www.gnu.org/licenses/gpl.html"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_hyperlink5->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizer1671->Add( m_hyperlink5, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer1671->Add( 0, 0, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer31->Add( bSizer1671, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + m_staticline36 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer31->Add( m_staticline36, 0, wxEXPAND, 5 ); + + m_panel41 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel41->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer168; + bSizer168 = new wxBoxSizer( wxVERTICAL ); + + m_buttonOkay = new wxButton( m_panel41, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer168->Add( m_buttonOkay, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + + + m_panel41->SetSizer( bSizer168 ); + m_panel41->Layout(); + bSizer168->Fit( m_panel41 ); + bSizer31->Add( m_panel41, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + this->SetSizer( bSizer31 ); + this->Layout(); + bSizer31->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this ); } AboutDlgGenerated::~AboutDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) ); - m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this ); - + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( AboutDlgGenerated::OnClose ) ); + m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AboutDlgGenerated::OnOK ), NULL, this ); + } MessageDlgGenerated::MessageDlgGenerated( 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( 300,160 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer24; - bSizer24 = new wxBoxSizer( wxVERTICAL ); - - - bSizer24->Add( 0, 10, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer26; - bSizer26 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapMsgType = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer26->Add( m_bitmapMsgType, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - m_textCtrlMessage = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 400,130 ), wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER ); - m_textCtrlMessage->SetMaxLength( 0 ); - bSizer26->Add( m_textCtrlMessage, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer24->Add( bSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline6 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer24->Add( m_staticline6, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxTOP, 5 ); - - m_panel33 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel33->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer177; - bSizer177 = new wxBoxSizer( wxVERTICAL ); - - m_checkBoxCustom = new wxCheckBox( m_panel33, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer177->Add( m_checkBoxCustom, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 5 ); - - wxBoxSizer* bSizer25; - bSizer25 = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonCustom1 = new wxButton( m_panel33, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonCustom1->SetDefault(); - m_buttonCustom1->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer25->Add( m_buttonCustom1, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonCustom2 = new wxButton( m_panel33, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonCustom2->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer25->Add( m_buttonCustom2, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonCancel = new wxButton( m_panel33, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonCancel->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer25->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - - - bSizer177->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - m_panel33->SetSizer( bSizer177 ); - m_panel33->Layout(); - bSizer177->Fit( m_panel33 ); - bSizer24->Add( m_panel33, 0, wxEXPAND, 5 ); - - - this->SetSizer( bSizer24 ); - this->Layout(); - bSizer24->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MessageDlgGenerated::OnClose ) ); - m_buttonCustom1->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnButton1 ), NULL, this ); - m_buttonCustom2->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnButton2 ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxSize( 300,160 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer24; + bSizer24 = new wxBoxSizer( wxVERTICAL ); + + + bSizer24->Add( 0, 10, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer26; + bSizer26 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapMsgType = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer26->Add( m_bitmapMsgType, 0, wxRIGHT|wxLEFT, 5 ); + + m_textCtrlMessage = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 400,130 ), wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER ); + m_textCtrlMessage->SetMaxLength( 0 ); + bSizer26->Add( m_textCtrlMessage, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer24->Add( bSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline6 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer24->Add( m_staticline6, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_panel33 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel33->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer177; + bSizer177 = new wxBoxSizer( wxVERTICAL ); + + m_checkBoxCustom = new wxCheckBox( m_panel33, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer177->Add( m_checkBoxCustom, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 ); + + wxBoxSizer* bSizer25; + bSizer25 = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonCustom1 = new wxButton( m_panel33, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonCustom1->SetDefault(); + m_buttonCustom1->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer25->Add( m_buttonCustom1, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonCustom2 = new wxButton( m_panel33, wxID_ANY, _("dummy"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonCustom2->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer25->Add( m_buttonCustom2, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonCancel = new wxButton( m_panel33, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonCancel->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer25->Add( m_buttonCancel, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + bSizer177->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); + + + m_panel33->SetSizer( bSizer177 ); + m_panel33->Layout(); + bSizer177->Fit( m_panel33 ); + bSizer24->Add( m_panel33, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizer24 ); + this->Layout(); + bSizer24->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MessageDlgGenerated::OnClose ) ); + m_buttonCustom1->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnButton1 ), NULL, this ); + m_buttonCustom2->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnButton2 ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnCancel ), NULL, this ); } MessageDlgGenerated::~MessageDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MessageDlgGenerated::OnClose ) ); - m_buttonCustom1->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnButton1 ), NULL, this ); - m_buttonCustom2->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnButton2 ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnCancel ), NULL, this ); - + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( MessageDlgGenerated::OnClose ) ); + m_buttonCustom1->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnButton1 ), NULL, this ); + m_buttonCustom2->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnButton2 ), NULL, this ); + m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MessageDlgGenerated::OnCancel ), NULL, this ); + } 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( 300,180 ), wxDefaultSize ); - this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - - wxBoxSizer* bSizer24; - bSizer24 = new wxBoxSizer( wxVERTICAL ); - - m_panelHeader = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panelHeader->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer181; - bSizer181 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer41; - bSizer41 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmap12 = new wxStaticBitmap( m_panelHeader, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer41->Add( m_bitmap12, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_staticTextHeader = new wxStaticText( m_panelHeader, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextHeader->Wrap( -1 ); - m_staticTextHeader->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer41->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer181->Add( bSizer41, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - - - m_panelHeader->SetSizer( bSizer181 ); - m_panelHeader->Layout(); - bSizer181->Fit( m_panelHeader ); - bSizer24->Add( m_panelHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline91 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer24->Add( m_staticline91, 0, wxEXPAND|wxBOTTOM, 5 ); - - m_textCtrlFileList = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 550,200 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER ); - m_textCtrlFileList->SetMaxLength( 0 ); - bSizer24->Add( m_textCtrlFileList, 1, wxEXPAND|wxLEFT, 5 ); - - m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer24->Add( m_staticline9, 0, wxEXPAND|wxTOP, 5 ); - - m_panel36 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel36->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); - - wxBoxSizer* bSizer180; - bSizer180 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer179; - bSizer179 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer99; - bSizer99 = new wxBoxSizer( wxVERTICAL ); - - m_checkBoxUseRecycler = new wxCheckBox( m_panel36, wxID_ANY, _("Recycle Bin"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer99->Add( m_checkBoxUseRecycler, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxEXPAND, 5 ); - - m_checkBoxDeleteBothSides = new wxCheckBox( m_panel36, wxID_ANY, _("Delete on both sides"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxDeleteBothSides->SetToolTip( _("Delete on both sides even if the file is selected on one side only") ); - - bSizer99->Add( m_checkBoxDeleteBothSides, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer179->Add( bSizer99, 1, wxALIGN_CENTER_HORIZONTAL|wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer25; - bSizer25 = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonOK = new wxButton( m_panel36, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOK->SetDefault(); - m_buttonOK->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); - - bSizer25->Add( m_buttonOK, 0, wxTOP|wxBOTTOM|wxLEFT, 5 ); - - m_buttonCancel = new wxButton( m_panel36, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonCancel->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer25->Add( m_buttonCancel, 0, wxALL, 5 ); - - - bSizer179->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer180->Add( bSizer179, 0, wxEXPAND, 5 ); - - - m_panel36->SetSizer( bSizer180 ); - m_panel36->Layout(); - bSizer180->Fit( m_panel36 ); - bSizer24->Add( m_panel36, 0, wxEXPAND, 5 ); - - - this->SetSizer( bSizer24 ); - this->Layout(); - bSizer24->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) ); - m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this ); - m_checkBoxDeleteBothSides->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this ); - m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this ); - m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxSize( 300,180 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer24; + bSizer24 = new wxBoxSizer( wxVERTICAL ); + + m_panelHeader = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelHeader->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer181; + bSizer181 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer41; + bSizer41 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmap12 = new wxStaticBitmap( m_panelHeader, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer41->Add( m_bitmap12, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_staticTextHeader = new wxStaticText( m_panelHeader, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextHeader->Wrap( -1 ); + m_staticTextHeader->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer41->Add( m_staticTextHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer181->Add( bSizer41, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + + + m_panelHeader->SetSizer( bSizer181 ); + m_panelHeader->Layout(); + bSizer181->Fit( m_panelHeader ); + bSizer24->Add( m_panelHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline91 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer24->Add( m_staticline91, 0, wxEXPAND, 5 ); + + m_textCtrlFileList = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 550,200 ), wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER ); + m_textCtrlFileList->SetMaxLength( 0 ); + bSizer24->Add( m_textCtrlFileList, 1, wxEXPAND, 5 ); + + m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer24->Add( m_staticline9, 0, wxEXPAND, 5 ); + + m_panel36 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel36->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer180; + bSizer180 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer99; + bSizer99 = new wxBoxSizer( wxVERTICAL ); + + m_checkBoxUseRecycler = new wxCheckBox( m_panel36, wxID_ANY, _("Recycle Bin"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer99->Add( m_checkBoxUseRecycler, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALL, 5 ); + + m_checkBoxDeleteBothSides = new wxCheckBox( m_panel36, wxID_ANY, _("Delete on both sides"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkBoxDeleteBothSides->SetToolTip( _("Delete on both sides even if the file is selected on one side only") ); + + bSizer99->Add( m_checkBoxDeleteBothSides, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer180->Add( bSizer99, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizer25; + bSizer25 = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonOK = new wxButton( m_panel36, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOK->SetDefault(); + m_buttonOK->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); + + bSizer25->Add( m_buttonOK, 0, wxTOP|wxBOTTOM|wxLEFT, 5 ); + + m_buttonCancel = new wxButton( m_panel36, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonCancel->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer25->Add( m_buttonCancel, 0, wxALL, 5 ); + + + bSizer180->Add( bSizer25, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panel36->SetSizer( bSizer180 ); + m_panel36->Layout(); + bSizer180->Fit( m_panel36 ); + bSizer24->Add( m_panel36, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizer24 ); + this->Layout(); + bSizer24->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) ); + m_checkBoxUseRecycler->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this ); + m_checkBoxDeleteBothSides->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this ); + m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this ); + m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this ); } DeleteDlgGenerated::~DeleteDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) ); - m_checkBoxUseRecycler->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this ); - m_checkBoxDeleteBothSides->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this ); - m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this ); - m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this ); - + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DeleteDlgGenerated::OnClose ) ); + m_checkBoxUseRecycler->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnUseRecycler ), NULL, this ); + m_checkBoxDeleteBothSides->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnDelOnBothSides ), NULL, this ); + m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnOK ), NULL, this ); + m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DeleteDlgGenerated::OnCancel ), NULL, this ); + } FilterDlgGenerated::FilterDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( 500,380 ), wxDefaultSize ); - - wxBoxSizer* bSizer21; - bSizer21 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer70; - bSizer70 = new wxBoxSizer( wxHORIZONTAL ); - - bSizer70->SetMinSize( wxSize( 550,-1 ) ); - m_panel8 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel8->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); - - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmap26 = new wxStaticBitmap( m_panel8, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer72->Add( m_bitmap26, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_staticTexHeader = new wxStaticText( m_panel8, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTexHeader->Wrap( -1 ); - m_staticTexHeader->SetFont( wxFont( 12, 70, 90, 92, false, wxEmptyString ) ); - m_staticTexHeader->SetForegroundColour( wxColour( 0, 0, 0 ) ); - - bSizer72->Add( m_staticTexHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_staticText44 = new wxStaticText( m_panel8, wxID_ANY, _("Only files that match all filter settings will be synchronized.\nNote: File names must be relative to base directories!"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_staticText44->Wrap( 480 ); - bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - - m_panel8->SetSizer( bSizer72 ); - m_panel8->Layout(); - bSizer72->Fit( m_panel8 ); - bSizer70->Add( m_panel8, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_bpButtonHelp = new wxBitmapButton( this, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); - m_bpButtonHelp->SetToolTip( _("Help") ); - - bSizer70->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer21->Add( bSizer70, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - wxBoxSizer* bSizer159; - bSizer159 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer166; - bSizer166 = new wxBoxSizer( wxVERTICAL ); - - wxStaticBoxSizer* sbSizer8; - sbSizer8 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Include") ), wxHORIZONTAL ); - - m_bitmapInclude = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); - sbSizer8->Add( m_bitmapInclude, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 ); - - m_textCtrlInclude = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); - m_textCtrlInclude->SetMaxLength( 0 ); - sbSizer8->Add( m_textCtrlInclude, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - - bSizer166->Add( sbSizer8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - wxStaticBoxSizer* sbSizer26; - sbSizer26 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Exclude") ), wxHORIZONTAL ); - - m_bitmapExclude = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); - sbSizer26->Add( m_bitmapExclude, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - m_textCtrlExclude = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); - m_textCtrlExclude->SetMaxLength( 0 ); - sbSizer26->Add( m_textCtrlExclude, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer166->Add( sbSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - - bSizer159->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer159->Add( 5, 0, 0, 0, 5 ); - - wxBoxSizer* bSizer160; - bSizer160 = new wxBoxSizer( wxVERTICAL ); - - wxStaticBoxSizer* sbSizer25; - sbSizer25 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Time span") ), wxHORIZONTAL ); - - wxBoxSizer* bSizer169; - bSizer169 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapFilterDate = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 34,34 ), 0 ); - bSizer169->Add( m_bitmapFilterDate, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - wxBoxSizer* bSizer165; - bSizer165 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer164; - bSizer164 = new wxBoxSizer( wxVERTICAL ); - - m_spinCtrlTimespan = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer164->Add( m_spinCtrlTimespan, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxArrayString m_choiceUnitTimespanChoices; - m_choiceUnitTimespan = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitTimespanChoices, 0 ); - m_choiceUnitTimespan->SetSelection( 0 ); - bSizer164->Add( m_choiceUnitTimespan, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer165->Add( bSizer164, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer169->Add( bSizer165, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizer25->Add( bSizer169, 0, 0, 5 ); - - - bSizer160->Add( sbSizer25, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - wxStaticBoxSizer* sbSizer81; - sbSizer81 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("File size") ), wxHORIZONTAL ); - - wxBoxSizer* bSizer170; - bSizer170 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapFilterSize = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 ); - bSizer170->Add( m_bitmapFilterSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxRIGHT, 5 ); - - wxBoxSizer* bSizer158; - bSizer158 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer162; - bSizer162 = new wxBoxSizer( wxVERTICAL ); - - m_staticText101 = new wxStaticText( this, wxID_ANY, _("Minimum"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText101->Wrap( -1 ); - bSizer162->Add( m_staticText101, 0, wxBOTTOM, 2 ); - - m_spinCtrlMinSize = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer162->Add( m_spinCtrlMinSize, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxArrayString m_choiceUnitMinSizeChoices; - m_choiceUnitMinSize = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMinSizeChoices, 0 ); - m_choiceUnitMinSize->SetSelection( 0 ); - bSizer162->Add( m_choiceUnitMinSize, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer158->Add( bSizer162, 0, wxBOTTOM, 5 ); - - wxBoxSizer* bSizer163; - bSizer163 = new wxBoxSizer( wxVERTICAL ); - - m_staticText102 = new wxStaticText( this, wxID_ANY, _("Maximum"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText102->Wrap( -1 ); - bSizer163->Add( m_staticText102, 0, wxBOTTOM, 2 ); - - m_spinCtrlMaxSize = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 2000000000, 0 ); - bSizer163->Add( m_spinCtrlMaxSize, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxArrayString m_choiceUnitMaxSizeChoices; - m_choiceUnitMaxSize = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnitMaxSizeChoices, 0 ); - m_choiceUnitMaxSize->SetSelection( 0 ); - bSizer163->Add( m_choiceUnitMaxSize, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer158->Add( bSizer163, 0, 0, 5 ); - - - bSizer170->Add( bSizer158, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - sbSizer81->Add( bSizer170, 0, 0, 5 ); - - - bSizer160->Add( sbSizer81, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - - bSizer159->Add( bSizer160, 0, wxEXPAND, 5 ); - - - bSizer21->Add( bSizer159, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer22; - bSizer22 = new wxBoxSizer( wxHORIZONTAL ); - - m_button9 = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_button9->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer22->Add( m_button9, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer22->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); - - m_buttonOk = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOk->SetDefault(); - m_buttonOk->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); - - bSizer22->Add( m_buttonOk, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); - - m_button17 = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_button17->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer22->Add( m_button17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - - bSizer21->Add( bSizer22, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM|wxEXPAND, 5 ); - - - this->SetSizer( bSizer21 ); - this->Layout(); - bSizer21->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) ); - m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnHelp ), NULL, this ); - m_textCtrlInclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); - m_textCtrlExclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); - m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_choiceUnitMinSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_choiceUnitMaxSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_button9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnDefault ), NULL, this ); - m_buttonOk->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnApply ), NULL, this ); - m_button17->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxSize( 500,300 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer21; + bSizer21 = new wxBoxSizer( wxVERTICAL ); + + m_panelHeader = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelHeader->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmap26 = new wxStaticBitmap( m_panelHeader, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer72->Add( m_bitmap26, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticTexHeader = new wxStaticText( m_panelHeader, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTexHeader->Wrap( -1 ); + m_staticTexHeader->SetFont( wxFont( 12, 70, 90, 92, false, wxEmptyString ) ); + m_staticTexHeader->SetForegroundColour( wxColour( 0, 0, 0 ) ); + + bSizer72->Add( m_staticTexHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_staticText44 = new wxStaticText( m_panelHeader, wxID_ANY, _("Only files that match all filter settings will be synchronized.\nNote: File names must be relative to base directories!"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_staticText44->Wrap( 480 ); + bSizer72->Add( m_staticText44, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + + + bSizer72->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_bpButtonHelp = new wxBitmapButton( m_panelHeader, wxID_HELP, wxNullBitmap, wxDefaultPosition, wxSize( 42,42 ), wxBU_AUTODRAW ); + m_bpButtonHelp->SetToolTip( _("Help") ); + + bSizer72->Add( m_bpButtonHelp, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelHeader->SetSizer( bSizer72 ); + m_panelHeader->Layout(); + bSizer72->Fit( m_panelHeader ); + bSizer21->Add( m_panelHeader, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticline17 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer21->Add( m_staticline17, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer159; + bSizer159 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer166; + bSizer166 = new wxBoxSizer( wxVERTICAL ); + + m_staticText78 = new wxStaticText( this, wxID_ANY, _("Include"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText78->Wrap( -1 ); + bSizer166->Add( m_staticText78, 0, wxALL, 5 ); + + wxBoxSizer* bSizer1661; + bSizer1661 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapInclude = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); + bSizer1661->Add( m_bitmapInclude, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + m_textCtrlInclude = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); + m_textCtrlInclude->SetMaxLength( 0 ); + bSizer1661->Add( m_textCtrlInclude, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + + bSizer166->Add( bSizer1661, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxLEFT, 5 ); + + m_staticline22 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer166->Add( m_staticline22, 0, wxEXPAND, 5 ); + + m_staticText77 = new wxStaticText( this, wxID_ANY, _("Exclude"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText77->Wrap( -1 ); + bSizer166->Add( m_staticText77, 0, wxALL, 5 ); + + wxBoxSizer* bSizer1651; + bSizer1651 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapExclude = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 30,30 ), 0 ); + bSizer1651->Add( m_bitmapExclude, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM|wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_textCtrlExclude = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE ); + m_textCtrlExclude->SetMaxLength( 0 ); + bSizer1651->Add( m_textCtrlExclude, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + bSizer166->Add( bSizer1651, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxLEFT, 5 ); + + + bSizer159->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticline24 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer159->Add( m_staticline24, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + wxBoxSizer* bSizer160; + bSizer160 = new wxBoxSizer( wxVERTICAL ); + + m_staticText79 = new wxStaticText( this, wxID_ANY, _("Time span"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText79->Wrap( -1 ); + bSizer160->Add( m_staticText79, 0, wxALL, 5 ); + + wxBoxSizer* bSizer167; + bSizer167 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapFilterDate = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 34,34 ), 0 ); + bSizer167->Add( m_bitmapFilterDate, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 ); + + wxBoxSizer* bSizer165; + bSizer165 = new wxBoxSizer( wxVERTICAL ); + + m_spinCtrlTimespan = new wxSpinCtrl( this, 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( this, 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|wxBOTTOM, 5 ); + + + bSizer160->Add( bSizer167, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_staticline23 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer160->Add( m_staticline23, 0, wxEXPAND, 5 ); + + m_staticText80 = new wxStaticText( this, wxID_ANY, _("File size"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText80->Wrap( -1 ); + bSizer160->Add( m_staticText80, 0, wxALL, 5 ); + + wxBoxSizer* bSizer168; + bSizer168 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapFilterSize = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 32,32 ), 0 ); + bSizer168->Add( m_bitmapFilterSize, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + wxBoxSizer* bSizer158; + bSizer158 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer162; + bSizer162 = new wxBoxSizer( wxVERTICAL ); + + m_staticText101 = new wxStaticText( this, wxID_ANY, _("Minimum"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText101->Wrap( -1 ); + bSizer162->Add( m_staticText101, 0, wxBOTTOM, 2 ); + + m_spinCtrlMinSize = new wxSpinCtrl( this, 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( this, 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( this, wxID_ANY, _("Maximum"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText102->Wrap( -1 ); + bSizer163->Add( m_staticText102, 0, wxBOTTOM, 2 ); + + m_spinCtrlMaxSize = new wxSpinCtrl( this, 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( this, 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, 5 ); + + + bSizer160->Add( bSizer168, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer159->Add( bSizer160, 0, wxEXPAND, 5 ); + + + bSizer21->Add( bSizer159, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + m_staticline16 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer21->Add( m_staticline16, 0, wxEXPAND, 5 ); + + m_panel38 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel38->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panel38->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer22; + bSizer22 = new wxBoxSizer( wxHORIZONTAL ); + + m_button9 = new wxButton( m_panel38, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_button9->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer22->Add( m_button9, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer22->Add( 0, 0, 1, wxALIGN_CENTER_VERTICAL, 5 ); + + m_buttonOk = new wxButton( m_panel38, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOk->SetDefault(); + m_buttonOk->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); + + bSizer22->Add( m_buttonOk, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 5 ); + + m_button17 = new wxButton( m_panel38, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_button17->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer22->Add( m_button17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + m_panel38->SetSizer( bSizer22 ); + m_panel38->Layout(); + bSizer22->Fit( m_panel38 ); + bSizer21->Add( m_panel38, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizer21 ); + this->Layout(); + bSizer21->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) ); + m_bpButtonHelp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnHelp ), NULL, this ); + m_textCtrlInclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); + m_textCtrlExclude->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); + m_choiceUnitTimespan->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); + m_choiceUnitMinSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); + m_choiceUnitMaxSize->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); + m_button9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnDefault ), NULL, this ); + m_buttonOk->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnApply ), NULL, this ); + m_button17->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); } FilterDlgGenerated::~FilterDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) ); - m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnHelp ), NULL, this ); - m_textCtrlInclude->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); - m_textCtrlExclude->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); - m_choiceUnitTimespan->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_choiceUnitMinSize->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_choiceUnitMaxSize->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); - m_button9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnDefault ), NULL, this ); - m_buttonOk->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnApply ), NULL, this ); - m_button17->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); - + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( FilterDlgGenerated::OnClose ) ); + m_bpButtonHelp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnHelp ), NULL, this ); + m_textCtrlInclude->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); + m_textCtrlExclude->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateNameFilter ), NULL, this ); + m_choiceUnitTimespan->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); + m_choiceUnitMinSize->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); + m_choiceUnitMaxSize->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( FilterDlgGenerated::OnUpdateChoice ), NULL, this ); + m_button9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnDefault ), NULL, this ); + m_buttonOk->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnApply ), NULL, this ); + m_button17->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( FilterDlgGenerated::OnCancel ), NULL, this ); + } GlobalSettingsDlgGenerated::GlobalSettingsDlgGenerated( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxSize( 300,360 ), wxDefaultSize ); - - wxBoxSizer* bSizer95; - bSizer95 = new wxBoxSizer( wxVERTICAL ); - - m_panel8 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); - m_panel8->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); - - wxBoxSizer* bSizer72; - bSizer72 = new wxBoxSizer( wxHORIZONTAL ); - - m_bitmapSettings = new wxStaticBitmap( m_panel8, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); - bSizer72->Add( m_bitmapSettings, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticText56 = new wxStaticText( m_panel8, wxID_ANY, _("Global settings"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText56->Wrap( -1 ); - m_staticText56->SetFont( wxFont( 12, 70, 90, 92, false, wxEmptyString ) ); - m_staticText56->SetForegroundColour( wxColour( 0, 0, 0 ) ); - - bSizer72->Add( m_staticText56, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - - m_panel8->SetSizer( bSizer72 ); - m_panel8->Layout(); - bSizer72->Fit( m_panel8 ); - bSizer95->Add( m_panel8, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxALL, 5 ); - - wxStaticBoxSizer* sbSizer23; - sbSizer23 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxEmptyString ), wxVERTICAL ); - - m_checkBoxTransCopy = new wxCheckBox( this, wxID_ANY, _("Fail-safe file copy"), wxDefaultPosition, wxDefaultSize, 0 ); - sbSizer23->Add( m_checkBoxTransCopy, 0, wxEXPAND|wxALL, 5 ); - - m_staticText82 = new wxStaticText( this, wxID_ANY, _("Write to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of fatal error."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText82->Wrap( 420 ); - m_staticText82->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - sbSizer23->Add( m_staticText82, 0, wxLEFT, 20 ); - - m_checkBoxCopyLocked = new wxCheckBox( this, wxID_ANY, _("Copy locked files"), wxDefaultPosition, wxDefaultSize, 0 ); - sbSizer23->Add( m_checkBoxCopyLocked, 0, wxALL|wxEXPAND, 5 ); - - m_staticTextCopyLocked = new wxStaticText( this, wxID_ANY, _("Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCopyLocked->Wrap( 420 ); - m_staticTextCopyLocked->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - sbSizer23->Add( m_staticTextCopyLocked, 0, wxLEFT|wxEXPAND, 20 ); - - m_checkBoxCopyPermissions = new wxCheckBox( this, wxID_ANY, _("Copy file access permissions"), wxDefaultPosition, wxDefaultSize, 0 ); - sbSizer23->Add( m_checkBoxCopyPermissions, 0, wxALL|wxEXPAND, 5 ); - - m_staticText8211 = new wxStaticText( this, wxID_ANY, _("Transfer file and folder permissions (Requires Administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText8211->Wrap( 420 ); - m_staticText8211->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); - - sbSizer23->Add( m_staticText8211, 0, wxLEFT|wxEXPAND, 20 ); - - - bSizer95->Add( sbSizer23, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - m_buttonResetDialogs = new zen::BitmapButton( this, wxID_ANY, _("Restore hidden dialogs"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); - m_buttonResetDialogs->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer95->Add( m_buttonResetDialogs, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 ); - - wxStaticBoxSizer* sbSizer26; - sbSizer26 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("External applications") ), wxHORIZONTAL ); - - - sbSizer26->Add( 5, 0, 0, 0, 5 ); - - m_gridCustomCommand = new wxGrid( this, 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 ); - sbSizer26->Add( m_gridCustomCommand, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - wxBoxSizer* bSizer157; - bSizer157 = new wxBoxSizer( wxVERTICAL ); - - m_bpButtonAddRow = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 23,23 ), wxBU_AUTODRAW ); - bSizer157->Add( m_bpButtonAddRow, 0, 0, 5 ); - - m_bpButtonRemoveRow = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 23,23 ), wxBU_AUTODRAW ); - bSizer157->Add( m_bpButtonRemoveRow, 0, 0, 5 ); - - - sbSizer26->Add( bSizer157, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - - sbSizer26->Add( 5, 0, 0, 0, 5 ); - - - bSizer95->Add( sbSizer26, 1, wxALIGN_CENTER_HORIZONTAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - - wxBoxSizer* bSizer97; - bSizer97 = new wxBoxSizer( wxHORIZONTAL ); - - m_button9 = new wxButton( this, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_button9->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer97->Add( m_button9, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer97->Add( 0, 0, 1, 0, 5 ); - - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); - - bSizer97->Add( m_buttonOkay, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_button29 = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer97->Add( m_button29, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer95->Add( bSizer97, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - - this->SetSizer( bSizer95 ); - this->Layout(); - bSizer95->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) ); - m_buttonResetDialogs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this ); - m_bpButtonAddRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this ); - m_bpButtonRemoveRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this ); - m_button9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this ); - m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this ); - m_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxSize( 320,360 ), wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer95; + bSizer95 = new wxBoxSizer( wxVERTICAL ); + + m_panelHeader = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelHeader->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer72; + bSizer72 = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapSettings = new wxStaticBitmap( m_panelHeader, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + bSizer72->Add( m_bitmapSettings, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticText56 = new wxStaticText( m_panelHeader, wxID_ANY, _("Global settings"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText56->Wrap( -1 ); + m_staticText56->SetFont( wxFont( 12, 70, 90, 92, false, wxEmptyString ) ); + m_staticText56->SetForegroundColour( wxColour( 0, 0, 0 ) ); + + bSizer72->Add( m_staticText56, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panelHeader->SetSizer( bSizer72 ); + m_panelHeader->Layout(); + bSizer72->Fit( m_panelHeader ); + bSizer95->Add( m_panelHeader, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticline19 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer95->Add( m_staticline19, 0, wxEXPAND, 5 ); + + m_checkBoxTransCopy = new wxCheckBox( this, wxID_ANY, _("Fail-safe file copy"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer95->Add( m_checkBoxTransCopy, 0, wxALL|wxEXPAND, 5 ); + + m_staticText82 = new wxStaticText( this, wxID_ANY, _("Write to a temporary file (*.ffs_tmp) first then rename it. This guarantees a consistent state even in case of fatal error."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText82->Wrap( 420 ); + m_staticText82->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer95->Add( m_staticText82, 0, wxRIGHT|wxLEFT|wxEXPAND, 20 ); + + m_checkBoxCopyLocked = new wxCheckBox( this, wxID_ANY, _("Copy locked files"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer95->Add( m_checkBoxCopyLocked, 0, wxALL|wxEXPAND, 5 ); + + m_staticTextCopyLocked = new wxStaticText( this, wxID_ANY, _("Copy shared or locked files using Volume Shadow Copy Service (Requires Administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCopyLocked->Wrap( 420 ); + m_staticTextCopyLocked->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer95->Add( m_staticTextCopyLocked, 0, wxEXPAND|wxRIGHT|wxLEFT, 20 ); + + m_checkBoxCopyPermissions = new wxCheckBox( this, wxID_ANY, _("Copy file access permissions"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer95->Add( m_checkBoxCopyPermissions, 0, wxALL|wxEXPAND, 5 ); + + m_staticText8211 = new wxStaticText( this, wxID_ANY, _("Transfer file and folder permissions (Requires Administrator rights)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText8211->Wrap( 420 ); + m_staticText8211->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) ); + + bSizer95->Add( m_staticText8211, 0, wxEXPAND|wxRIGHT|wxLEFT, 20 ); + + m_staticline191 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer95->Add( m_staticline191, 0, wxEXPAND|wxTOP, 5 ); + + m_buttonResetDialogs = new zen::BitmapButton( this, wxID_ANY, _("Restore hidden dialogs"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_buttonResetDialogs->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer95->Add( m_buttonResetDialogs, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + + m_staticline192 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer95->Add( m_staticline192, 0, wxEXPAND, 5 ); + + m_staticText85 = new wxStaticText( this, wxID_ANY, _("External applications"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText85->Wrap( -1 ); + bSizer95->Add( m_staticText85, 0, wxALL, 5 ); + + wxBoxSizer* bSizer173; + bSizer173 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer157; + bSizer157 = new wxBoxSizer( wxVERTICAL ); + + m_bpButtonAddRow = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 24,24 ), wxBU_AUTODRAW ); + bSizer157->Add( m_bpButtonAddRow, 0, 0, 5 ); + + m_bpButtonRemoveRow = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 24,24 ), wxBU_AUTODRAW ); + bSizer157->Add( m_bpButtonRemoveRow, 0, 0, 5 ); + + + bSizer173->Add( bSizer157, 0, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 ); + + m_gridCustomCommand = new wxGrid( this, 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 ); + bSizer173->Add( m_gridCustomCommand, 1, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); + + + bSizer95->Add( bSizer173, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 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_BTNFACE ) ); + + wxBoxSizer* bSizer97; + bSizer97 = new wxBoxSizer( wxHORIZONTAL ); + + m_button9 = new wxButton( m_panel39, wxID_DEFAULT, _("&Default"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_button9->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer97->Add( m_button9, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer97->Add( 0, 0, 1, 0, 5 ); + + m_buttonOkay = new wxButton( m_panel39, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); + + bSizer97->Add( m_buttonOkay, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_button29 = new wxButton( m_panel39, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer97->Add( m_button29, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + + m_panel39->SetSizer( bSizer97 ); + m_panel39->Layout(); + bSizer97->Fit( m_panel39 ); + bSizer95->Add( m_panel39, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); + + + this->SetSizer( bSizer95 ); + this->Layout(); + bSizer95->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) ); + m_buttonResetDialogs->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this ); + m_bpButtonAddRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this ); + m_bpButtonRemoveRow->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this ); + m_button9->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this ); + m_buttonOkay->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this ); + m_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this ); } GlobalSettingsDlgGenerated::~GlobalSettingsDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) ); - m_buttonResetDialogs->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this ); - m_bpButtonAddRow->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this ); - m_bpButtonRemoveRow->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this ); - m_button9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this ); - m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this ); - m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this ); - + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( GlobalSettingsDlgGenerated::OnClose ) ); + m_buttonResetDialogs->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnResetDialogs ), NULL, this ); + m_bpButtonAddRow->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnAddRow ), NULL, this ); + m_bpButtonRemoveRow->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnRemoveRow ), NULL, this ); + m_button9->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnDefault ), NULL, this ); + m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnOkay ), NULL, this ); + m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GlobalSettingsDlgGenerated::OnCancel ), NULL, this ); + } SyncPreviewDlgGenerated::SyncPreviewDlgGenerated( 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* bSizer134; - bSizer134 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer158; - bSizer158 = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonStartSync = new zen::BitmapButton( this, wxID_OK, _("Start"), wxDefaultPosition, wxSize( -1,48 ), 0 ); - m_buttonStartSync->SetDefault(); - m_buttonStartSync->SetFont( wxFont( 14, 70, 90, 92, false, wxEmptyString ) ); - m_buttonStartSync->SetToolTip( _("Start synchronization") ); - - bSizer158->Add( m_buttonStartSync, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - m_staticline16 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - bSizer158->Add( m_staticline16, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - wxStaticBoxSizer* sbSizer28; - sbSizer28 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Variant") ), wxVERTICAL ); - - m_staticTextVariant = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextVariant->Wrap( -1 ); - m_staticTextVariant->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); - - sbSizer28->Add( m_staticTextVariant, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - - bSizer158->Add( sbSizer28, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bSizer134->Add( bSizer158, 0, wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 ); - - m_staticline14 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer134->Add( m_staticline14, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSizer141; - bSizer141 = new wxBoxSizer( wxHORIZONTAL ); - - wxStaticBoxSizer* sbSizer161; - sbSizer161 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Statistics") ), wxVERTICAL ); - - wxFlexGridSizer* fgSizer11; - fgSizer11 = new wxFlexGridSizer( 2, 7, 2, 5 ); - fgSizer11->SetFlexibleDirection( wxBOTH ); - fgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_bitmapCreateLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); - - fgSizer11->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bitmapUpdateLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); - - fgSizer11->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmapDeleteLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); - - fgSizer11->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmapData = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapData->SetToolTip( _("Total bytes to copy") ); - - fgSizer11->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bitmapDeleteRight = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); - - fgSizer11->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_bitmapUpdateRight = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); - - fgSizer11->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_bitmapCreateRight = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); - m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") ); - - fgSizer11->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticTextCreateLeft = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextCreateLeft->Wrap( -1 ); - m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); - - fgSizer11->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticTextUpdateLeft = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdateLeft->Wrap( -1 ); - m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); - - fgSizer11->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticTextDeleteLeft = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeleteLeft->Wrap( -1 ); - m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); - - fgSizer11->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextData = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextData->Wrap( -1 ); - m_staticTextData->SetToolTip( _("Total bytes to copy") ); - - fgSizer11->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextDeleteRight = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextDeleteRight->Wrap( -1 ); - m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); - - fgSizer11->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextUpdateRight = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextUpdateRight->Wrap( -1 ); - m_staticTextUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); - - fgSizer11->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_staticTextCreateRight = new wxStaticText( this, 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 ); - - - sbSizer161->Add( fgSizer11, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - - bSizer141->Add( sbSizer161, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - - - bSizer134->Add( bSizer141, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); - - m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bSizer134->Add( m_staticline12, 0, wxEXPAND|wxTOP, 5 ); - - wxBoxSizer* bSizer142; - bSizer142 = new wxBoxSizer( wxHORIZONTAL ); - - m_checkBoxDontShowAgain = new wxCheckBox( this, wxID_ANY, _("Don't show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer142->Add( m_checkBoxDontShowAgain, 0, wxALIGN_CENTER_HORIZONTAL|wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer142->Add( 10, 0, 1, 0, 5 ); - - m_button16 = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_button16->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer142->Add( m_button16, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); - - - bSizer134->Add( bSizer142, 0, wxEXPAND, 5 ); - - - this->SetSizer( bSizer134 ); - this->Layout(); - bSizer134->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncPreviewDlgGenerated::OnClose ) ); - m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnStartSync ), NULL, this ); - m_button16->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer134; + bSizer134 = new wxBoxSizer( wxVERTICAL ); + + m_panelHeader = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panelHeader->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer158; + bSizer158 = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonStartSync = new zen::BitmapButton( m_panelHeader, wxID_OK, _("Start"), wxDefaultPosition, wxSize( -1,48 ), 0 ); + m_buttonStartSync->SetDefault(); + m_buttonStartSync->SetFont( wxFont( 14, 70, 90, 92, false, wxEmptyString ) ); + m_buttonStartSync->SetToolTip( _("Start synchronization") ); + + bSizer158->Add( m_buttonStartSync, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + m_staticline16 = new wxStaticLine( m_panelHeader, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + bSizer158->Add( m_staticline16, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizer172; + bSizer172 = new wxBoxSizer( wxVERTICAL ); + + m_staticText84 = new wxStaticText( m_panelHeader, wxID_ANY, _("Variant"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText84->Wrap( -1 ); + bSizer172->Add( m_staticText84, 0, wxALL, 5 ); + + m_staticTextVariant = new wxStaticText( m_panelHeader, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextVariant->Wrap( -1 ); + m_staticTextVariant->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); + + bSizer172->Add( m_staticTextVariant, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + bSizer158->Add( bSizer172, 1, 0, 5 ); + + + m_panelHeader->SetSizer( bSizer158 ); + m_panelHeader->Layout(); + bSizer158->Fit( m_panelHeader ); + bSizer134->Add( m_panelHeader, 0, wxEXPAND, 5 ); + + m_staticline14 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer134->Add( m_staticline14, 0, wxEXPAND, 5 ); + + m_staticText83 = new wxStaticText( this, wxID_ANY, _("Statistics"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText83->Wrap( -1 ); + bSizer134->Add( m_staticText83, 0, wxALL, 5 ); + + wxFlexGridSizer* fgSizer11; + fgSizer11 = new wxFlexGridSizer( 2, 7, 2, 5 ); + fgSizer11->SetFlexibleDirection( wxBOTH ); + fgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_bitmapCreateLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + + fgSizer11->Add( m_bitmapCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bitmapUpdateLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); + + fgSizer11->Add( m_bitmapUpdateLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmapDeleteLeft = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + + fgSizer11->Add( m_bitmapDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmapData = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapData->SetToolTip( _("Total bytes to copy") ); + + fgSizer11->Add( m_bitmapData, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bitmapDeleteRight = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); + + fgSizer11->Add( m_bitmapDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_bitmapUpdateRight = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); + + fgSizer11->Add( m_bitmapUpdateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_bitmapCreateRight = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapCreateRight->SetToolTip( _("Number of files and folders that will be created") ); + + fgSizer11->Add( m_bitmapCreateRight, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticTextCreateLeft = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCreateLeft->Wrap( -1 ); + m_staticTextCreateLeft->SetToolTip( _("Number of files and folders that will be created") ); + + fgSizer11->Add( m_staticTextCreateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticTextUpdateLeft = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdateLeft->Wrap( -1 ); + m_staticTextUpdateLeft->SetToolTip( _("Number of files that will be overwritten") ); + + fgSizer11->Add( m_staticTextUpdateLeft, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticTextDeleteLeft = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeleteLeft->Wrap( -1 ); + m_staticTextDeleteLeft->SetToolTip( _("Number of files and folders that will be deleted") ); + + fgSizer11->Add( m_staticTextDeleteLeft, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextData = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextData->Wrap( -1 ); + m_staticTextData->SetToolTip( _("Total bytes to copy") ); + + fgSizer11->Add( m_staticTextData, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextDeleteRight = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeleteRight->Wrap( -1 ); + m_staticTextDeleteRight->SetToolTip( _("Number of files and folders that will be deleted") ); + + fgSizer11->Add( m_staticTextDeleteRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextUpdateRight = new wxStaticText( this, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextUpdateRight->Wrap( -1 ); + m_staticTextUpdateRight->SetToolTip( _("Number of files that will be overwritten") ); + + fgSizer11->Add( m_staticTextUpdateRight, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticTextCreateRight = new wxStaticText( this, 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 ); + + + bSizer134->Add( fgSizer11, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_staticline12 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer134->Add( m_staticline12, 0, wxEXPAND, 5 ); + + m_panel42 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel42->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer142; + bSizer142 = new wxBoxSizer( wxHORIZONTAL ); + + m_checkBoxDontShowAgain = new wxCheckBox( m_panel42, wxID_ANY, _("Don't show this dialog again"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer142->Add( m_checkBoxDontShowAgain, 1, wxALIGN_CENTER_HORIZONTAL|wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_button16 = new wxButton( m_panel42, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_button16->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer142->Add( m_button16, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); + + + m_panel42->SetSizer( bSizer142 ); + m_panel42->Layout(); + bSizer142->Fit( m_panel42 ); + bSizer134->Add( m_panel42, 0, wxEXPAND, 5 ); + + + this->SetSizer( bSizer134 ); + this->Layout(); + bSizer134->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncPreviewDlgGenerated::OnClose ) ); + m_buttonStartSync->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnStartSync ), NULL, this ); + m_button16->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnCancel ), NULL, this ); } SyncPreviewDlgGenerated::~SyncPreviewDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncPreviewDlgGenerated::OnClose ) ); - m_buttonStartSync->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnStartSync ), NULL, this ); - m_button16->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnCancel ), NULL, this ); - + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SyncPreviewDlgGenerated::OnClose ) ); + m_buttonStartSync->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnStartSync ), NULL, this ); + m_button16->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SyncPreviewDlgGenerated::OnCancel ), NULL, this ); + } PopupFrameGenerated1::PopupFrameGenerated1( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style ) { - this->SetSizeHints( wxDefaultSize, wxDefaultSize ); - - 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 ); } PopupFrameGenerated1::~PopupFrameGenerated1() @@ -3705,142 +3476,153 @@ PopupFrameGenerated1::~PopupFrameGenerated1() SearchDialogGenerated::SearchDialogGenerated( 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* bSizer161; - bSizer161 = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer166; - bSizer166 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer162; - bSizer162 = new wxBoxSizer( wxHORIZONTAL ); - - m_staticText101 = new wxStaticText( this, wxID_ANY, _("Find what:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText101->Wrap( -1 ); - bSizer162->Add( m_staticText101, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - m_textCtrlSearchTxt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220,-1 ), 0 ); - m_textCtrlSearchTxt->SetMaxLength( 0 ); - bSizer162->Add( m_textCtrlSearchTxt, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - - - bSizer166->Add( bSizer162, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - - bSizer166->Add( 0, 5, 0, 0, 5 ); - - m_checkBoxMatchCase = new wxCheckBox( this, wxID_ANY, _("Match case"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer166->Add( m_checkBoxMatchCase, 0, wxALL, 5 ); - - - bSizer161->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - - wxBoxSizer* bSizer97; - bSizer97 = new wxBoxSizer( wxVERTICAL ); - - m_buttonFindNext = new wxButton( this, wxID_OK, _("&Find next"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonFindNext->SetDefault(); - m_buttonFindNext->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); - - bSizer97->Add( m_buttonFindNext, 0, wxEXPAND|wxTOP|wxRIGHT, 5 ); - - m_button29 = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer97->Add( m_button29, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 ); - - - bSizer161->Add( bSizer97, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - this->SetSizer( bSizer161 ); - this->Layout(); - bSizer161->Fit( this ); - - this->Centre( wxBOTH ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SearchDialogGenerated::OnClose ) ); - m_textCtrlSearchTxt->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( SearchDialogGenerated::OnText ), NULL, this ); - m_buttonFindNext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnFindNext ), NULL, this ); - m_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* bSizer161; + bSizer161 = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizer166; + bSizer166 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer162; + bSizer162 = new wxBoxSizer( wxHORIZONTAL ); + + m_staticText101 = new wxStaticText( this, wxID_ANY, _("Find what:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText101->Wrap( -1 ); + bSizer162->Add( m_staticText101, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_textCtrlSearchTxt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 220,-1 ), 0 ); + m_textCtrlSearchTxt->SetMaxLength( 0 ); + bSizer162->Add( m_textCtrlSearchTxt, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + + bSizer166->Add( bSizer162, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer166->Add( 0, 5, 0, 0, 5 ); + + m_checkBoxMatchCase = new wxCheckBox( this, wxID_ANY, _("Match case"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer166->Add( m_checkBoxMatchCase, 0, wxALL|wxEXPAND, 5 ); + + + bSizer161->Add( bSizer166, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + wxBoxSizer* bSizer97; + bSizer97 = new wxBoxSizer( wxVERTICAL ); + + m_buttonFindNext = new wxButton( this, wxID_OK, _("&Find next"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonFindNext->SetDefault(); + m_buttonFindNext->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); + + bSizer97->Add( m_buttonFindNext, 0, wxEXPAND|wxTOP|wxRIGHT, 5 ); + + m_button29 = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer97->Add( m_button29, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 ); + + + bSizer161->Add( bSizer97, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + + this->SetSizer( bSizer161 ); + this->Layout(); + bSizer161->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SearchDialogGenerated::OnClose ) ); + m_textCtrlSearchTxt->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( SearchDialogGenerated::OnText ), NULL, this ); + m_buttonFindNext->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnFindNext ), NULL, this ); + m_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnCancel ), NULL, this ); } SearchDialogGenerated::~SearchDialogGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SearchDialogGenerated::OnClose ) ); - m_textCtrlSearchTxt->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( SearchDialogGenerated::OnText ), NULL, this ); - m_buttonFindNext->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnFindNext ), NULL, this ); - m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnCancel ), NULL, this ); - + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SearchDialogGenerated::OnClose ) ); + m_textCtrlSearchTxt->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( SearchDialogGenerated::OnText ), NULL, this ); + m_buttonFindNext->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnFindNext ), NULL, this ); + m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SearchDialogGenerated::OnCancel ), NULL, this ); + } 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 ); - - wxBoxSizer* bSizer96; - bSizer96 = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bSizer98; - bSizer98 = new wxBoxSizer( wxHORIZONTAL ); - - m_calendarFrom = new wxCalendarCtrl( this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS ); - bSizer98->Add( m_calendarFrom, 0, wxALL, 5 ); - - m_calendarTo = new wxCalendarCtrl( this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS ); - bSizer98->Add( m_calendarTo, 0, wxALL, 5 ); - - - bSizer96->Add( bSizer98, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - wxBoxSizer* bSizer97; - bSizer97 = new wxBoxSizer( wxHORIZONTAL ); - - - bSizer97->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_buttonOkay = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_buttonOkay->SetDefault(); - m_buttonOkay->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); - - bSizer97->Add( m_buttonOkay, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - - m_button29 = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); - m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); - - bSizer97->Add( m_button29, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - - - bSizer97->Add( 0, 0, 1, wxEXPAND, 5 ); - - - bSizer96->Add( bSizer97, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 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_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this ); + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + wxBoxSizer* bSizer96; + bSizer96 = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizer98; + bSizer98 = new wxBoxSizer( wxHORIZONTAL ); + + m_calendarFrom = new wxCalendarCtrl( this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS ); + bSizer98->Add( m_calendarFrom, 0, wxALL, 5 ); + + m_calendarTo = new wxCalendarCtrl( this, wxID_ANY, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxCAL_SHOW_HOLIDAYS ); + bSizer98->Add( m_calendarTo, 0, wxALL, 5 ); + + + bSizer96->Add( bSizer98, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticline21 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bSizer96->Add( m_staticline21, 0, wxEXPAND, 5 ); + + m_panel40 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_panel40->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_panel40->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + + wxBoxSizer* bSizer97; + bSizer97 = new wxBoxSizer( wxHORIZONTAL ); + + + bSizer97->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_buttonOkay = new wxButton( m_panel40, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_buttonOkay->SetDefault(); + m_buttonOkay->SetFont( wxFont( 10, 70, 90, 92, false, wxEmptyString ) ); + + bSizer97->Add( m_buttonOkay, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_button29 = new wxButton( m_panel40, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,30 ), 0 ); + m_button29->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) ); + + bSizer97->Add( m_button29, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + + bSizer97->Add( 0, 0, 1, wxEXPAND, 5 ); + + + m_panel40->SetSizer( bSizer97 ); + m_panel40->Layout(); + bSizer97->Fit( m_panel40 ); + bSizer96->Add( m_panel40, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 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_button29->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this ); } SelectTimespanDlgGenerated::~SelectTimespanDlgGenerated() { - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) ); - m_calendarFrom->Disconnect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this ); - m_calendarTo->Disconnect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this ); - m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this ); - m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this ); - + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( SelectTimespanDlgGenerated::OnClose ) ); + m_calendarFrom->Disconnect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionFrom ), NULL, this ); + m_calendarTo->Disconnect( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEventHandler( SelectTimespanDlgGenerated::OnChangeSelectionTo ), NULL, this ); + m_buttonOkay->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnOkay ), NULL, this ); + m_button29->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SelectTimespanDlgGenerated::OnCancel ), NULL, this ); + } diff --git a/ui/gui_generated.h b/ui/gui_generated.h index b14e0034..bf93658b 100644 --- a/ui/gui_generated.h +++ b/ui/gui_generated.h @@ -15,10 +15,10 @@ class ExecFinishedBox; class FolderHistoryBox; class ToggleButton; class wxStaticText; -namespace zen{ class BitmapButton; } -namespace zen{ class Graph2D; } -namespace zen{ class Grid; } -namespace zen{ class TripleSplitter; } +namespace zen { class BitmapButton; } +namespace zen { class Graph2D; } +namespace zen { class Grid; } +namespace zen { class TripleSplitter; } #include <wx/string.h> #include <wx/bitmap.h> @@ -43,10 +43,8 @@ namespace zen{ class TripleSplitter; } #include <wx/frame.h> #include <wx/textctrl.h> #include <wx/gauge.h> -#include <wx/statbox.h> #include <wx/tglbtn.h> #include <wx/spinctrl.h> -#include <wx/notebook.h> #include <wx/dialog.h> #include <wx/choice.h> #include <wx/animate.h> @@ -65,882 +63,878 @@ namespace zen{ class TripleSplitter; } /////////////////////////////////////////////////////////////////////////////// /// Class MainDialogGenerated /////////////////////////////////////////////////////////////////////////////// -class MainDialogGenerated : public wxFrame +class MainDialogGenerated : public wxFrame { - private: - - protected: - wxMenuBar* m_menubar1; - wxMenu* m_menuFile; - wxMenuItem* m_menuItemNew; - wxMenuItem* m_menuItemLoad; - wxMenuItem* m_menuItemSave; - wxMenuItem* m_menuItemSaveAs; - wxMenuItem* m_menuItem7; - wxMenuItem* m_menuItem10; - wxMenuItem* m_menuItem11; - wxMenu* m_menuAdvanced; - wxMenu* m_menuLanguages; - wxMenuItem* m_menuItemGlobSett; - wxMenu* m_menuHelp; - wxMenuItem* m_menuItemManual; - wxMenuItem* m_menuItemCheckVer; - wxMenuItem* m_menuItemAbout; - wxBoxSizer* bSizerPanelHolder; - wxPanel* m_panelTopButtons; - wxBoxSizer* bSizerTopButtons; - wxStaticText* m_staticTextCmpVariant; - zen::BitmapButton* m_buttonCompare; - wxButton* m_buttonAbort; - wxBitmapButton* m_bpButtonCmpConfig; - wxStaticText* m_staticTextSyncVariant; - wxBitmapButton* m_bpButtonSyncConfig; - zen::BitmapButton* m_buttonStartSync; - wxPanel* m_panelDirectoryPairs; - wxStaticText* m_staticTextFinalPathLeft; - wxBitmapButton* m_bpButtonAddPair; - wxButton* m_buttonSelectDirLeft; - wxPanel* m_panelTopMiddle; - wxBitmapButton* m_bpButtonSwapSides; - wxStaticText* m_staticTextFinalPathRight; - 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* bSizerStatusLeftDirectories; - wxStaticBitmap* m_bitmapSmallDirectoryLeft; - wxStaticText* m_staticTextStatusLeftDirs; - wxBoxSizer* bSizerStatusLeftFiles; - wxStaticBitmap* m_bitmapSmallFileLeft; - wxStaticText* m_staticTextStatusLeftFiles; - wxStaticText* m_staticTextStatusLeftBytes; - wxStaticLine* m_staticline9; - wxStaticText* m_staticTextStatusMiddle; - wxStaticLine* m_staticline10; - wxBoxSizer* bSizerStatusRightDirectories; - wxStaticBitmap* m_bitmapSmallDirectoryRight; - wxStaticText* m_staticTextStatusRightDirs; - wxBoxSizer* bSizerStatusRightFiles; - wxStaticBitmap* m_bitmapSmallFileRight; - wxStaticText* m_staticTextStatusRightFiles; - wxStaticText* m_staticTextStatusRightBytes; - wxPanel* m_panelConfig; - wxBoxSizer* bSizerConfig; - wxBitmapButton* m_bpButtonLoad; - wxBitmapButton* m_bpButtonSave; - wxBitmapButton* m_bpButtonBatchJob; - wxListBox* m_listBoxHistory; - wxPanel* m_panelFilter; - wxBitmapButton* m_bpButtonFilter; - wxCheckBox* m_checkBoxShowExcluded; - wxPanel* m_panelStatistics; - wxBoxSizer* bSizer1801; - wxStaticBitmap* m_bitmapCreateLeft; - wxStaticText* m_staticTextCreateLeft; - wxStaticBitmap* m_bitmapUpdateLeft; - wxStaticText* m_staticTextUpdateLeft; - wxStaticBitmap* m_bitmapDeleteLeft; - wxStaticText* m_staticTextDeleteLeft; - wxStaticBitmap* m_bitmapData; - wxStaticText* m_staticTextData; - wxStaticBitmap* m_bitmapDeleteRight; - wxStaticText* m_staticTextDeleteRight; - wxStaticBitmap* m_bitmapUpdateRight; - wxStaticText* m_staticTextUpdateRight; - wxStaticBitmap* m_bitmapCreateRight; - wxStaticText* m_staticTextCreateRight; - wxPanel* m_panelViewFilter; - wxBoxSizer* bSizerViewFilter; - ToggleButton* m_bpButtonSyncCreateLeft; - ToggleButton* m_bpButtonSyncDirOverwLeft; - ToggleButton* m_bpButtonSyncDeleteLeft; - ToggleButton* m_bpButtonLeftOnly; - ToggleButton* m_bpButtonLeftNewer; - ToggleButton* m_bpButtonEqual; - ToggleButton* m_bpButtonDifferent; - ToggleButton* m_bpButtonSyncDirNone; - ToggleButton* m_bpButtonRightNewer; - ToggleButton* m_bpButtonRightOnly; - ToggleButton* m_bpButtonSyncDeleteRight; - ToggleButton* m_bpButtonSyncDirOverwRight; - ToggleButton* m_bpButtonSyncCreateRight; - ToggleButton* m_bpButtonConflict; - - // 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 OnMenuBatchJob( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCompare( wxCommandEvent& event ) { event.Skip(); } - virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuQuit( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuGlobalSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuExportFileList( wxCommandEvent& event ) { event.Skip(); } - virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); } - virtual void OnMenuAbout( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCmpSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncSettings( wxCommandEvent& event ) { event.Skip(); } - virtual void OnAddFolderPair( wxCommandEvent& event ) { event.Skip(); } - virtual void OnRemoveTopFolderPair( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSwapSides( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCfgHistoryKeyEvent( wxKeyEvent& event ) { event.Skip(); } - virtual void OnLoadFromHistory( wxCommandEvent& event ) { event.Skip(); } - virtual void OnLoadFromHistoryDoubleClick( wxCommandEvent& event ) { event.Skip(); } - virtual void OnConfigureFilter( wxCommandEvent& event ) { event.Skip(); } - virtual void OnShowExcluded( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncCreateLeft( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncDirLeft( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncDeleteLeft( wxCommandEvent& event ) { event.Skip(); } - virtual void OnLeftOnlyFiles( wxCommandEvent& event ) { event.Skip(); } - virtual void OnLeftNewerFiles( wxCommandEvent& event ) { event.Skip(); } - virtual void OnEqualFiles( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDifferentFiles( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncDirNone( wxCommandEvent& event ) { event.Skip(); } - virtual void OnRightNewerFiles( wxCommandEvent& event ) { event.Skip(); } - virtual void OnRightOnlyFiles( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncDeleteRight( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncDirRight( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSyncCreateRight( wxCommandEvent& event ) { event.Skip(); } - virtual void OnConflictFiles( wxCommandEvent& 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 = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 702,522 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL ); - - ~MainDialogGenerated(); - +private: + +protected: + wxMenuBar* m_menubar1; + wxMenu* m_menuFile; + wxMenuItem* m_menuItemNew; + wxMenuItem* m_menuItemLoad; + wxMenuItem* m_menuItemSave; + wxMenuItem* m_menuItemSaveAs; + wxMenuItem* m_menuItem7; + wxMenuItem* m_menuItem10; + wxMenuItem* m_menuItem11; + wxMenu* m_menuAdvanced; + wxMenu* m_menuLanguages; + wxMenuItem* m_menuItemGlobSett; + wxMenu* m_menuHelp; + wxMenuItem* m_menuItemManual; + wxMenuItem* m_menuItemCheckVer; + wxMenuItem* m_menuItemAbout; + wxBoxSizer* bSizerPanelHolder; + wxPanel* m_panelTopButtons; + wxBoxSizer* bSizerTopButtons; + wxStaticText* m_staticTextCmpVariant; + zen::BitmapButton* m_buttonCompare; + wxButton* m_buttonAbort; + wxBitmapButton* m_bpButtonCmpConfig; + wxStaticText* m_staticTextSyncVariant; + wxBitmapButton* m_bpButtonSyncConfig; + zen::BitmapButton* m_buttonStartSync; + 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* bSizerStatusLeftDirectories; + wxStaticBitmap* m_bitmapSmallDirectoryLeft; + wxStaticText* m_staticTextStatusLeftDirs; + wxBoxSizer* bSizerStatusLeftFiles; + wxStaticBitmap* m_bitmapSmallFileLeft; + wxStaticText* m_staticTextStatusLeftFiles; + wxStaticText* m_staticTextStatusLeftBytes; + wxStaticLine* m_staticline9; + wxStaticText* m_staticTextStatusMiddle; + wxStaticLine* m_staticline10; + wxBoxSizer* bSizerStatusRightDirectories; + wxStaticBitmap* m_bitmapSmallDirectoryRight; + wxStaticText* m_staticTextStatusRightDirs; + wxBoxSizer* bSizerStatusRightFiles; + wxStaticBitmap* m_bitmapSmallFileRight; + wxStaticText* m_staticTextStatusRightFiles; + wxStaticText* m_staticTextStatusRightBytes; + wxPanel* m_panelConfig; + wxBoxSizer* bSizerConfig; + wxBitmapButton* m_bpButtonLoad; + wxBitmapButton* m_bpButtonSave; + wxBitmapButton* m_bpButtonBatchJob; + wxListBox* m_listBoxHistory; + wxPanel* m_panelFilter; + wxBitmapButton* m_bpButtonFilter; + wxCheckBox* m_checkBoxHideExcluded; + wxPanel* m_panelStatistics; + wxBoxSizer* bSizer1801; + wxStaticBitmap* m_bitmapCreateLeft; + wxStaticText* m_staticTextCreateLeft; + wxStaticBitmap* m_bitmapUpdateLeft; + wxStaticText* m_staticTextUpdateLeft; + wxStaticBitmap* m_bitmapDeleteLeft; + wxStaticText* m_staticTextDeleteLeft; + wxStaticBitmap* m_bitmapData; + wxStaticText* m_staticTextData; + wxStaticBitmap* m_bitmapDeleteRight; + wxStaticText* m_staticTextDeleteRight; + wxStaticBitmap* m_bitmapUpdateRight; + wxStaticText* m_staticTextUpdateRight; + wxStaticBitmap* m_bitmapCreateRight; + wxStaticText* m_staticTextCreateRight; + wxPanel* m_panelViewFilter; + wxBoxSizer* bSizerViewFilter; + ToggleButton* m_bpButtonSyncCreateLeft; + ToggleButton* m_bpButtonSyncDirOverwLeft; + ToggleButton* m_bpButtonSyncDeleteLeft; + ToggleButton* m_bpButtonLeftOnly; + ToggleButton* m_bpButtonLeftNewer; + ToggleButton* m_bpButtonEqual; + ToggleButton* m_bpButtonDifferent; + ToggleButton* m_bpButtonSyncDirNone; + ToggleButton* m_bpButtonRightNewer; + ToggleButton* m_bpButtonRightOnly; + ToggleButton* m_bpButtonSyncDeleteRight; + ToggleButton* m_bpButtonSyncDirOverwRight; + ToggleButton* m_bpButtonSyncCreateRight; + ToggleButton* m_bpButtonConflict; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnConfigNew( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConfigLoad( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConfigSave( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConfigSaveAs( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSaveAsBatchJob( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCompare( wxCommandEvent& event ) { event.Skip(); } + virtual void OnStartSync( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuQuit( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuGlobalSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuExportFileList( wxCommandEvent& event ) { event.Skip(); } + virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); } + virtual void OnMenuAbout( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCmpSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncSettings( wxCommandEvent& event ) { event.Skip(); } + virtual void OnAddFolderPair( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRemoveTopFolderPair( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSwapSides( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCfgHistoryKeyEvent( wxKeyEvent& event ) { event.Skip(); } + virtual void OnLoadFromHistory( wxCommandEvent& event ) { event.Skip(); } + virtual void OnLoadFromHistoryDoubleClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConfigureFilter( wxCommandEvent& event ) { event.Skip(); } + virtual void OnShowExcluded( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncCreateLeft( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncDirLeft( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncDeleteLeft( wxCommandEvent& event ) { event.Skip(); } + virtual void OnLeftOnlyFiles( wxCommandEvent& event ) { event.Skip(); } + virtual void OnLeftNewerFiles( wxCommandEvent& event ) { event.Skip(); } + virtual void OnEqualFiles( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDifferentFiles( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncDirNone( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRightNewerFiles( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRightOnlyFiles( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncDeleteRight( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncDirRight( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSyncCreateRight( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConflictFiles( wxCommandEvent& 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 = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 702,522 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL ); + + ~MainDialogGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class FolderPairGenerated /////////////////////////////////////////////////////////////////////////////// -class FolderPairGenerated : public wxPanel +class FolderPairGenerated : public wxPanel { - private: - - protected: - wxButton* m_buttonSelectDirLeft; - wxButton* m_buttonSelectDirRight; - - public: - wxPanel* m_panelLeft; - wxBitmapButton* m_bpButtonRemovePair; - FolderHistoryBox* m_directoryLeft; - wxPanel* m_panel20; - wxBitmapButton* m_bpButtonAltCompCfg; - wxBitmapButton* m_bpButtonLocalFilter; - wxBitmapButton* m_bpButtonAltSyncCfg; - wxPanel* m_panelRight; - FolderHistoryBox* m_directoryRight; - - FolderPairGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL ); - ~FolderPairGenerated(); - +private: + +protected: + wxButton* m_buttonSelectDirLeft; + wxButton* m_buttonSelectDirRight; + +public: + wxPanel* m_panelLeft; + wxBitmapButton* m_bpButtonRemovePair; + FolderHistoryBox* m_directoryLeft; + wxPanel* m_panel20; + wxBitmapButton* m_bpButtonAltCompCfg; + wxBitmapButton* m_bpButtonLocalFilter; + wxBitmapButton* m_bpButtonAltSyncCfg; + wxPanel* m_panelRight; + FolderHistoryBox* m_directoryRight; + + FolderPairGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL ); + ~FolderPairGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class CompareStatusGenerated /////////////////////////////////////////////////////////////////////////////// -class CompareStatusGenerated : public wxPanel +class CompareStatusGenerated : public wxPanel { - private: - - protected: - wxTextCtrl* m_textCtrlStatus; - wxGauge* m_gauge2; - wxBoxSizer* bSizer42; - wxBoxSizer* bSizerFilesFound; - wxStaticText* m_staticText321; - wxStaticText* m_staticTextScanned; - wxBoxSizer* bSizerFilesRemaining; - wxStaticText* m_staticText46; - wxStaticText* m_staticTextFilesRemaining; - wxStaticText* m_staticTextDataRemaining; - wxBoxSizer* sSizerSpeed; - wxStaticText* m_staticText104; - wxStaticText* m_staticTextSpeed; - wxBoxSizer* sSizerTimeRemaining; - wxStaticText* m_staticTextTimeRemFixed; - wxStaticText* m_staticTextRemTime; - wxBoxSizer* sSizerTimeElapsed; - wxStaticText* m_staticTextTimeElapsed; - - public: - - CompareStatusGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxRAISED_BORDER|wxTAB_TRAVERSAL ); - ~CompareStatusGenerated(); - +private: + +protected: + wxTextCtrl* m_textCtrlStatus; + wxGauge* m_gauge2; + wxBoxSizer* bSizer42; + wxBoxSizer* bSizerFilesFound; + wxStaticText* m_staticText321; + wxStaticText* m_staticTextScanned; + wxBoxSizer* bSizerFilesRemaining; + wxStaticText* m_staticText46; + wxStaticText* m_staticTextFilesRemaining; + wxStaticText* m_staticTextDataRemaining; + wxBoxSizer* sSizerSpeed; + wxStaticText* m_staticText104; + wxStaticText* m_staticTextSpeed; + wxBoxSizer* sSizerTimeRemaining; + wxStaticText* m_staticTextTimeRemFixed; + wxStaticText* m_staticTextRemTime; + wxBoxSizer* sSizerTimeElapsed; + wxStaticText* m_staticTextTimeElapsed; + +public: + + CompareStatusGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxRAISED_BORDER|wxTAB_TRAVERSAL ); + ~CompareStatusGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class BatchDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class BatchDlgGenerated : public wxDialog +class BatchDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panel8; - wxStaticBitmap* m_bitmap27; - wxStaticText* m_staticText56; - wxStaticText* m_staticText44; - wxBitmapButton* m_bpButtonHelp; - wxNotebook* m_notebook1; - wxPanel* m_panelOverview; - wxBitmapButton* m_bpButtonCmpConfig; - wxStaticText* m_staticTextCmpVariant; - wxBitmapButton* m_bpButtonFilter; - wxStaticText* m_staticTextSyncVariant; - wxBitmapButton* m_bpButtonSyncConfig; - wxBoxSizer* sbSizerMainPair; - wxPanel* m_panelMainPair; - wxStaticText* m_staticText532; - wxStaticText* m_staticText5411; - wxButton* m_buttonSelectDirLeft; - wxButton* m_buttonSelectDirRight; - wxBoxSizer* bSizerAddFolderPairs; - wxPanel* m_panelBatchSettings; - wxStaticBoxSizer* sbSizerErrorHandling; - wxToggleButton* m_toggleBtnErrorIgnore; - wxToggleButton* m_toggleBtnErrorPopup; - wxToggleButton* m_toggleBtnErrorExit; - wxStaticBoxSizer* sbSizerExecFinished; - ExecFinishedBox* m_comboBoxExecFinished; - wxCheckBox* m_checkBoxShowProgress; - wxCheckBox* m_checkBoxGenerateLogfile; - wxPanel* m_panelLogfile; - wxButton* m_buttonSelectLogfileDir; - wxCheckBox* m_checkBoxLogfilesLimit; - wxSpinCtrl* m_spinCtrlLogfileLimit; - wxButton* m_buttonLoad; - wxButton* m_buttonSave; - wxButton* m_button6; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnHelp( 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 OnAddFolderPair( wxCommandEvent& event ) { event.Skip(); } - virtual void OnRemoveTopFolderPair( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorExit( wxCommandEvent& event ) { event.Skip(); } - virtual void OnToggleGenerateLogfile( wxCommandEvent& event ) { event.Skip(); } - virtual void OnToggleLogfilesLimit( wxCommandEvent& event ) { event.Skip(); } - virtual void OnLoadBatchJob( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSaveBatchJob( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - wxScrolledWindow* m_scrolledWindow6; - wxBitmapButton* m_bpButtonAddPair; - wxBitmapButton* m_bpButtonRemovePair; - wxPanel* m_panelLeft; - FolderHistoryBox* m_directoryLeft; - wxPanel* m_panelRight; - FolderHistoryBox* m_directoryRight; - wxBitmapButton* m_bpButtonAltCompCfg; - wxBitmapButton* m_bpButtonLocalFilter; - wxBitmapButton* m_bpButtonAltSyncCfg; - FolderHistoryBox* m_comboBoxLogfileDir; - - BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Save as batch job"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER ); - ~BatchDlgGenerated(); - -}; +private: + +protected: + wxPanel* m_panelHeader; + wxStaticBitmap* m_bitmapBatchJob; + wxStaticText* m_staticText56; + wxStaticText* m_staticText44; + wxBitmapButton* m_bpButtonHelp; + wxStaticLine* m_staticline18; + wxStaticText* m_staticText82; + wxToggleButton* m_toggleBtnErrorIgnore; + wxToggleButton* m_toggleBtnErrorPopup; + wxToggleButton* m_toggleBtnErrorExit; + wxStaticLine* m_staticline26; + wxStaticText* m_staticText81; + ExecFinishedBox* m_comboBoxExecFinished; + wxStaticLine* m_staticline25; + wxCheckBox* m_checkBoxShowProgress; + wxCheckBox* m_checkBoxGenerateLogfile; + wxPanel* m_panelLogfile; + wxButton* m_buttonSelectLogfileDir; + wxCheckBox* m_checkBoxLogfilesLimit; + wxSpinCtrl* m_spinCtrlLogfileLimit; + wxStaticLine* m_staticline13; + wxPanel* m_panel35; + wxButton* m_buttonSave; + wxButton* m_button6; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnHelp( wxCommandEvent& event ) { event.Skip(); } + virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); } + virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); } + virtual void OnErrorExit( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToggleGenerateLogfile( wxCommandEvent& event ) { event.Skip(); } + virtual void OnToggleLogfilesLimit( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSaveBatchJob( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + FolderHistoryBox* m_comboBoxLogfileDir; + + BatchDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Save as batch job"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER ); + ~BatchDlgGenerated(); -/////////////////////////////////////////////////////////////////////////////// -/// Class BatchFolderPairGenerated -/////////////////////////////////////////////////////////////////////////////// -class BatchFolderPairGenerated : public wxPanel -{ - private: - - protected: - wxPanel* m_panel32; - wxStaticText* m_staticText53; - wxStaticText* m_staticText541; - wxPanel* m_panelLeft; - wxButton* m_buttonSelectDirLeft; - wxPanel* m_panelRight; - wxButton* m_buttonSelectDirRight; - - public: - wxBitmapButton* m_bpButtonRemovePair; - FolderHistoryBox* m_directoryLeft; - FolderHistoryBox* m_directoryRight; - wxBitmapButton* m_bpButtonAltCompCfg; - wxBitmapButton* m_bpButtonLocalFilter; - wxBitmapButton* m_bpButtonAltSyncCfg; - - BatchFolderPairGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL ); - ~BatchFolderPairGenerated(); - }; /////////////////////////////////////////////////////////////////////////////// /// Class CmpCfgDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class CmpCfgDlgGenerated : public wxDialog +class CmpCfgDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapByTime; - wxToggleButton* m_toggleBtnTimeSize; - wxStaticBitmap* m_bitmapByContent; - wxToggleButton* m_toggleBtnContent; - wxChoice* m_choiceHandleSymlinks; - wxBitmapButton* m_bpButtonHelp; - wxButton* m_button10; - wxButton* m_button6; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnTimeSizeDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnTimeSize( wxCommandEvent& event ) { event.Skip(); } - virtual void OnContentDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnContent( wxCommandEvent& event ) { event.Skip(); } - virtual void OnChangeErrorHandling( wxCommandEvent& event ) { event.Skip(); } - virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - CmpCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Comparison settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~CmpCfgDlgGenerated(); - +private: + +protected: + wxStaticText* m_staticText91; + wxStaticBitmap* m_bitmapByTime; + wxToggleButton* m_toggleBtnTimeSize; + wxStaticBitmap* m_bitmapByContent; + wxToggleButton* m_toggleBtnContent; + wxStaticLine* m_staticline33; + wxStaticText* m_staticText92; + wxChoice* m_choiceHandleSymlinks; + wxBitmapButton* m_bpButtonHelp; + wxStaticLine* m_staticline14; + wxPanel* m_panel36; + wxButton* m_button10; + wxButton* m_button6; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnTimeSizeDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnTimeSize( wxCommandEvent& event ) { event.Skip(); } + virtual void OnContentDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnContent( wxCommandEvent& event ) { event.Skip(); } + virtual void OnChangeErrorHandling( wxCommandEvent& event ) { event.Skip(); } + virtual void OnShowHelp( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + CmpCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Comparison settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~CmpCfgDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class SyncCfgDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class SyncCfgDlgGenerated : public wxDialog +class SyncCfgDlgGenerated : public wxDialog { - private: - - protected: - wxToggleButton* m_toggleBtnAutomatic; - wxStaticText* m_staticTextAutomatic; - wxToggleButton* m_toggleBtnMirror; - wxStaticText* m_staticTextMirror; - wxToggleButton* m_toggleBtnUpdate; - wxStaticText* m_staticTextUpdate; - wxToggleButton* m_toggleBtnCustom; - wxStaticText* m_staticTextCustom; - wxToggleButton* m_toggleBtnPermanent; - wxToggleButton* m_toggleBtnRecycler; - wxToggleButton* m_toggleBtnVersioning; - wxCheckBox* m_checkBoxVersionsLimit; - wxSpinCtrl* m_spinCtrlVersionsLimit; - wxPanel* m_panelVersioning; - FolderHistoryBox* m_versioningFolder; - wxButton* m_buttonSelectDirVersioning; - wxBoxSizer* bSizer201; - wxStaticBoxSizer* sbSizerErrorHandling; - wxToggleButton* m_toggleBtnErrorIgnore; - wxToggleButton* m_toggleBtnErrorPopup; - wxStaticBoxSizer* sbSizerExecFinished; - ExecFinishedBox* m_comboBoxExecFinished; - wxStaticBitmap* m_bitmapDatabase; - wxBoxSizer* sbSizerSyncDirections; - wxStaticText* m_staticText21; - wxStaticText* m_staticText31; - wxBoxSizer* bSizerLeftOnly; - wxStaticBitmap* m_bitmapLeftOnly; - wxBitmapButton* m_bpButtonLeftOnly; - wxBoxSizer* bSizerRightOnly; - wxStaticBitmap* m_bitmapRightOnly; - wxBitmapButton* m_bpButtonRightOnly; - wxBoxSizer* bSizerLeftNewer; - wxStaticBitmap* m_bitmapLeftNewer; - wxBitmapButton* m_bpButtonLeftNewer; - wxBoxSizer* bSizerRightNewer; - wxStaticBitmap* m_bitmapRightNewer; - wxBitmapButton* m_bpButtonRightNewer; - wxBoxSizer* bSizerDifferent; - wxStaticBitmap* m_bitmapDifferent; - wxBitmapButton* m_bpButtonDifferent; - wxBoxSizer* bSizerConflict; - wxStaticBitmap* m_bitmapConflict; - wxBitmapButton* m_bpButtonConflict; - wxButton* m_buttonOK; - wxButton* m_button16; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnSyncAutomaticDouble( wxMouseEvent& event ) { event.Skip(); } - virtual void OnSyncAutomatic( 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 OnDeletionPermanent( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDeletionRecycler( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDeletionVersioning( wxCommandEvent& event ) { event.Skip(); } - virtual void OnToggleVersionsLimit( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); } - virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); } - virtual void OnExLeftSideOnly( wxCommandEvent& event ) { event.Skip(); } - virtual void OnExRightSideOnly( wxCommandEvent& event ) { event.Skip(); } - virtual void OnLeftNewer( wxCommandEvent& event ) { event.Skip(); } - virtual void OnRightNewer( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDifferent( wxCommandEvent& event ) { event.Skip(); } - virtual void OnConflict( wxCommandEvent& event ) { event.Skip(); } - virtual void OnApply( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Synchronization settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE ); - ~SyncCfgDlgGenerated(); - +private: + +protected: + wxStaticText* m_staticText86; + wxToggleButton* m_toggleBtnAutomatic; + wxStaticText* m_staticTextAutomatic; + wxToggleButton* m_toggleBtnMirror; + wxStaticText* m_staticTextMirror; + wxToggleButton* m_toggleBtnUpdate; + wxStaticText* m_staticTextUpdate; + wxToggleButton* m_toggleBtnCustom; + wxStaticText* m_staticTextCustom; + wxBoxSizer* bSizerExtraConfig; + wxStaticLine* m_staticline321; + wxBoxSizer* bSizer179; + wxStaticText* m_staticText88; + wxToggleButton* m_toggleBtnErrorIgnore; + wxToggleButton* m_toggleBtnErrorPopup; + wxStaticLine* m_staticline36; + wxBoxSizer* bSizerOnCompletion; + wxStaticText* m_staticText89; + ExecFinishedBox* m_comboBoxExecFinished; + wxStaticLine* m_staticline32; + wxStaticText* m_staticText87; + wxBoxSizer* bSizerVersioningNamingConvention; + wxStaticText* m_staticTextNamingCvtPart1; + wxStaticText* m_staticTextNamingCvtPart2Bold; + wxStaticText* m_staticTextNamingCvtPart3; + wxToggleButton* m_toggleBtnPermanent; + wxToggleButton* m_toggleBtnRecycler; + wxToggleButton* m_toggleBtnVersioning; + wxBoxSizer* bSizerVersioningStyle; + wxStaticText* m_staticText93; + wxChoice* m_choiceVersioningStyle; + wxPanel* m_panelVersioning; + FolderHistoryBox* m_versioningFolder; + wxButton* m_buttonSelectDirVersioning; + wxStaticLine* m_staticline31; + wxBoxSizer* bSizerConfig; + wxStaticText* m_staticText90; + wxStaticBitmap* m_bitmapDatabase; + wxBoxSizer* sbSizerSyncDirections; + wxStaticText* m_staticText21; + wxStaticText* m_staticText31; + wxBoxSizer* bSizerLeftOnly; + wxStaticBitmap* m_bitmapLeftOnly; + wxBitmapButton* m_bpButtonLeftOnly; + wxBoxSizer* bSizerRightOnly; + wxStaticBitmap* m_bitmapRightOnly; + wxBitmapButton* m_bpButtonRightOnly; + wxBoxSizer* bSizerLeftNewer; + wxStaticBitmap* m_bitmapLeftNewer; + wxBitmapButton* m_bpButtonLeftNewer; + wxBoxSizer* bSizerRightNewer; + wxStaticBitmap* m_bitmapRightNewer; + wxBitmapButton* m_bpButtonRightNewer; + wxBoxSizer* bSizerDifferent; + wxStaticBitmap* m_bitmapDifferent; + wxBitmapButton* m_bpButtonDifferent; + wxBoxSizer* bSizerConflict; + wxStaticBitmap* m_bitmapConflict; + wxBitmapButton* m_bpButtonConflict; + wxStaticLine* m_staticline15; + wxPanel* m_panel37; + wxButton* m_buttonOK; + wxButton* m_button16; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnSyncAutomaticDouble( wxMouseEvent& event ) { event.Skip(); } + virtual void OnSyncAutomatic( 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 OnErrorIgnore( wxCommandEvent& event ) { event.Skip(); } + virtual void OnErrorPopup( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDeletionPermanent( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDeletionRecycler( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDeletionVersioning( wxCommandEvent& event ) { event.Skip(); } + virtual void OnParameterChange( wxCommandEvent& event ) { event.Skip(); } + virtual void OnExLeftSideOnly( wxCommandEvent& event ) { event.Skip(); } + virtual void OnExRightSideOnly( wxCommandEvent& event ) { event.Skip(); } + virtual void OnLeftNewer( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRightNewer( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDifferent( wxCommandEvent& event ) { event.Skip(); } + virtual void OnConflict( wxCommandEvent& event ) { event.Skip(); } + virtual void OnApply( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Synchronization settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE ); + ~SyncCfgDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class SyncStatusDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class SyncStatusDlgGenerated : public wxFrame +class SyncStatusDlgGenerated : public wxFrame { - private: - - protected: - wxBoxSizer* bSizerTop; - wxPanel* m_panelHeader; - wxStaticBitmap* m_bitmapStatus; - wxStaticText* m_staticTextStatus; - wxAnimationCtrl* m_animationControl1; - wxStaticLine* m_staticlineHeader; - wxPanel* m_panelProgress; - wxTextCtrl* m_textCtrlStatus; - wxBoxSizer* bSizer171; - wxStaticText* m_staticTextLabelItemsProc; - wxBoxSizer* bSizerItemsProc; - wxStaticText* m_staticTextProcessedObj; - wxStaticText* m_staticTextDataProcessed; - wxStaticText* m_staticTextLabelItemsRem; - wxBoxSizer* bSizerItemsRem; - wxStaticText* m_staticTextRemainingObj; - wxStaticText* m_staticTextDataRemaining; - wxStaticText* m_staticText84; - wxStaticText* m_staticTextSpeed; - wxStaticText* m_staticTextLabelRemTime; - wxStaticText* m_staticTextRemTime; - wxStaticText* m_staticTextLabelElapsedTime; - wxStaticText* m_staticTextTimeElapsed; - zen::Graph2D* m_panelGraph; - wxBoxSizer* bSizerFinalStat; - wxListbook* m_listbookResult; - wxStaticLine* m_staticline12; - wxPanel* m_panelFooter; - wxBoxSizer* bSizerExecFinished; - wxStaticText* m_staticText87; - ExecFinishedBox* m_comboBoxExecFinished; - wxBoxSizer* bSizer28; - wxButton* m_buttonOK; - wxButton* m_buttonPause; - wxButton* m_buttonAbort; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnIconize( wxIconizeEvent& event ) { event.Skip(); } - virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnPause( wxCommandEvent& event ) { event.Skip(); } - virtual void OnAbort( wxCommandEvent& event ) { event.Skip(); } - - - public: - wxGauge* m_gauge1; - - SyncStatusDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL ); - - ~SyncStatusDlgGenerated(); - +private: + +protected: + wxBoxSizer* bSizerTop; + wxPanel* m_panelHeader; + wxStaticBitmap* m_bitmapStatus; + wxStaticText* m_staticTextStatus; + wxAnimationCtrl* m_animationControl1; + wxStaticLine* m_staticlineHeader; + wxPanel* m_panelProgress; + wxTextCtrl* m_textCtrlStatus; + wxBoxSizer* bSizer171; + wxStaticText* m_staticTextLabelItemsProc; + wxBoxSizer* bSizerItemsProc; + wxStaticText* m_staticTextProcessedObj; + wxStaticText* m_staticTextDataProcessed; + wxStaticText* m_staticTextLabelItemsRem; + wxBoxSizer* bSizerItemsRem; + wxStaticText* m_staticTextRemainingObj; + wxStaticText* m_staticTextDataRemaining; + wxStaticText* m_staticText84; + wxStaticText* m_staticTextSpeed; + wxStaticText* m_staticTextLabelRemTime; + wxStaticText* m_staticTextRemTime; + wxStaticText* m_staticTextLabelElapsedTime; + wxStaticText* m_staticTextTimeElapsed; + zen::Graph2D* m_panelGraph; + wxBoxSizer* bSizerFinalStat; + wxListbook* m_listbookResult; + wxStaticLine* m_staticline12; + wxPanel* m_panelFooter; + wxBoxSizer* bSizerExecFinished; + wxStaticText* m_staticText87; + ExecFinishedBox* m_comboBoxExecFinished; + wxBoxSizer* bSizer28; + wxButton* m_buttonOK; + wxButton* m_buttonPause; + wxButton* m_buttonAbort; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnIconize( wxIconizeEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnPause( wxCommandEvent& event ) { event.Skip(); } + virtual void OnAbort( wxCommandEvent& event ) { event.Skip(); } + + +public: + wxGauge* m_gauge1; + + SyncStatusDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL ); + + ~SyncStatusDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class LogControlGenerated /////////////////////////////////////////////////////////////////////////////// -class LogControlGenerated : public wxPanel +class LogControlGenerated : public wxPanel { - private: - - protected: - wxStaticLine* m_staticline12; - 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: - - LogControlGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL ); - ~LogControlGenerated(); - +private: + +protected: + wxStaticLine* m_staticline12; + 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: + + LogControlGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL ); + ~LogControlGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class AboutDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class AboutDlgGenerated : public wxDialog +class AboutDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panelLogo; - wxStaticBitmap* m_bitmap11; - wxStaticText* m_build; - wxPanel* m_panel33; - wxBoxSizer* bSizerCodeInfo; - wxStaticText* m_staticText72; - wxHyperlinkCtrl* m_hyperlink9; - wxHyperlinkCtrl* m_hyperlink11; - wxHyperlinkCtrl* m_hyperlink10; - wxHyperlinkCtrl* m_hyperlink13; - wxHyperlinkCtrl* m_hyperlink7; - wxHyperlinkCtrl* m_hyperlink16; - wxHyperlinkCtrl* m_hyperlink8; - wxHyperlinkCtrl* m_hyperlink15; - wxHyperlinkCtrl* m_hyperlink12; - wxHyperlinkCtrl* m_hyperlink18; - wxHyperlinkCtrl* m_hyperlink14; - wxHyperlinkCtrl* m_hyperlink21; - wxPanel* m_panel40; - wxPanel* m_panel39; - wxStaticText* m_staticText83; - wxHyperlinkCtrl* m_hyperlink3; - wxAnimationCtrl* m_animCtrlWink; - wxScrolledWindow* m_scrolledWindowTranslators; - wxBoxSizer* bSizerTranslators; - wxStaticText* m_staticText54; - wxFlexGridSizer* fgSizerTranslators; - wxHyperlinkCtrl* m_hyperlink1; - wxStaticBitmap* m_bitmap9; - wxHyperlinkCtrl* m_hyperlink2; - wxStaticBitmap* m_bitmap10; - wxStaticBitmap* m_bitmap13; - wxHyperlinkCtrl* m_hyperlink5; - wxButton* m_buttonOkay; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& 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 = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE ); - ~AboutDlgGenerated(); - +private: + +protected: + wxPanel* m_panelLogo; + wxStaticBitmap* m_bitmap11; + wxStaticLine* m_staticline341; + wxStaticText* m_build; + wxStaticLine* m_staticline3411; + wxPanel* m_panel33; + wxBoxSizer* bSizerCodeInfo; + wxStaticText* m_staticText72; + wxHyperlinkCtrl* m_hyperlink9; + wxHyperlinkCtrl* m_hyperlink11; + wxHyperlinkCtrl* m_hyperlink10; + wxHyperlinkCtrl* m_hyperlink13; + wxHyperlinkCtrl* m_hyperlink7; + wxHyperlinkCtrl* m_hyperlink16; + wxHyperlinkCtrl* m_hyperlink8; + wxHyperlinkCtrl* m_hyperlink15; + wxHyperlinkCtrl* m_hyperlink12; + wxHyperlinkCtrl* m_hyperlink18; + wxHyperlinkCtrl* m_hyperlink14; + wxHyperlinkCtrl* m_hyperlink21; + wxPanel* m_panel40; + wxPanel* m_panel39; + wxStaticText* m_staticText83; + wxHyperlinkCtrl* m_hyperlink3; + wxAnimationCtrl* m_animCtrlWink; + wxScrolledWindow* m_scrolledWindowTranslators; + wxBoxSizer* bSizerTranslators; + wxStaticText* m_staticText54; + wxFlexGridSizer* fgSizerTranslators; + wxStaticLine* m_staticline43; + wxStaticText* m_staticText94; + wxHyperlinkCtrl* m_hyperlink1; + wxStaticBitmap* m_bitmap9; + wxHyperlinkCtrl* m_hyperlink2; + wxStaticBitmap* m_bitmap10; + wxStaticLine* m_staticline34; + wxStaticText* m_staticText93; + wxStaticBitmap* m_bitmap13; + wxHyperlinkCtrl* m_hyperlink5; + wxStaticLine* m_staticline36; + wxPanel* m_panel41; + wxButton* m_buttonOkay; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& 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 = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE ); + ~AboutDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class MessageDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class MessageDlgGenerated : public wxDialog +class MessageDlgGenerated : public wxDialog { - private: - - protected: - wxStaticBitmap* m_bitmapMsgType; - wxTextCtrl* m_textCtrlMessage; - wxStaticLine* m_staticline6; - wxPanel* m_panel33; - wxCheckBox* m_checkBoxCustom; - wxButton* m_buttonCustom1; - wxButton* m_buttonCustom2; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnButton1( wxCommandEvent& event ) { event.Skip(); } - virtual void OnButton2( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - MessageDlgGenerated( 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|wxMINIMIZE_BOX|wxRESIZE_BORDER ); - ~MessageDlgGenerated(); - +private: + +protected: + wxStaticBitmap* m_bitmapMsgType; + wxTextCtrl* m_textCtrlMessage; + wxStaticLine* m_staticline6; + wxPanel* m_panel33; + wxCheckBox* m_checkBoxCustom; + wxButton* m_buttonCustom1; + wxButton* m_buttonCustom2; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnButton1( wxCommandEvent& event ) { event.Skip(); } + virtual void OnButton2( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + MessageDlgGenerated( 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|wxMINIMIZE_BOX|wxRESIZE_BORDER ); + ~MessageDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class DeleteDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class DeleteDlgGenerated : public wxDialog +class DeleteDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panelHeader; - wxStaticBitmap* m_bitmap12; - wxStaticText* m_staticTextHeader; - wxStaticLine* m_staticline91; - wxTextCtrl* m_textCtrlFileList; - wxStaticLine* m_staticline9; - wxPanel* m_panel36; - wxCheckBox* m_checkBoxUseRecycler; - wxCheckBox* m_checkBoxDeleteBothSides; - wxButton* m_buttonOK; - wxButton* m_buttonCancel; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnUseRecycler( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDelOnBothSides( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOK( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - DeleteDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Confirm"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER ); - ~DeleteDlgGenerated(); - +private: + +protected: + wxPanel* m_panelHeader; + wxStaticBitmap* m_bitmap12; + wxStaticText* m_staticTextHeader; + wxStaticLine* m_staticline91; + wxTextCtrl* m_textCtrlFileList; + wxStaticLine* m_staticline9; + wxPanel* m_panel36; + wxCheckBox* m_checkBoxUseRecycler; + wxCheckBox* m_checkBoxDeleteBothSides; + wxButton* m_buttonOK; + wxButton* m_buttonCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnUseRecycler( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDelOnBothSides( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOK( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + DeleteDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Confirm"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER ); + ~DeleteDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class FilterDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class FilterDlgGenerated : public wxDialog +class FilterDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panel8; - wxStaticBitmap* m_bitmap26; - wxStaticText* m_staticTexHeader; - wxStaticText* m_staticText44; - wxBitmapButton* m_bpButtonHelp; - wxStaticBitmap* m_bitmapInclude; - wxTextCtrl* m_textCtrlInclude; - wxStaticBitmap* m_bitmapExclude; - wxTextCtrl* m_textCtrlExclude; - wxStaticBitmap* m_bitmapFilterDate; - wxSpinCtrl* m_spinCtrlTimespan; - wxChoice* m_choiceUnitTimespan; - wxStaticBitmap* m_bitmapFilterSize; - wxStaticText* m_staticText101; - wxSpinCtrl* m_spinCtrlMinSize; - wxChoice* m_choiceUnitMinSize; - wxStaticText* m_staticText102; - wxSpinCtrl* m_spinCtrlMaxSize; - wxChoice* m_choiceUnitMaxSize; - wxButton* m_button9; - wxButton* m_buttonOk; - wxButton* m_button17; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnHelp( wxCommandEvent& event ) { event.Skip(); } - virtual void OnUpdateNameFilter( wxCommandEvent& event ) { event.Skip(); } - virtual void OnUpdateChoice( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); } - virtual void OnApply( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - FilterDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Configure filter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - ~FilterDlgGenerated(); - +private: + +protected: + wxPanel* m_panelHeader; + wxStaticBitmap* m_bitmap26; + wxStaticText* m_staticTexHeader; + wxStaticText* m_staticText44; + wxBitmapButton* m_bpButtonHelp; + wxStaticLine* m_staticline17; + wxStaticText* m_staticText78; + wxStaticBitmap* m_bitmapInclude; + wxTextCtrl* m_textCtrlInclude; + wxStaticLine* m_staticline22; + wxStaticText* m_staticText77; + wxStaticBitmap* m_bitmapExclude; + wxTextCtrl* m_textCtrlExclude; + wxStaticLine* m_staticline24; + wxStaticText* m_staticText79; + wxStaticBitmap* m_bitmapFilterDate; + wxSpinCtrl* m_spinCtrlTimespan; + wxChoice* m_choiceUnitTimespan; + wxStaticLine* m_staticline23; + wxStaticText* m_staticText80; + wxStaticBitmap* m_bitmapFilterSize; + wxStaticText* m_staticText101; + wxSpinCtrl* m_spinCtrlMinSize; + wxChoice* m_choiceUnitMinSize; + wxStaticText* m_staticText102; + wxSpinCtrl* m_spinCtrlMaxSize; + wxChoice* m_choiceUnitMaxSize; + wxStaticLine* m_staticline16; + wxPanel* m_panel38; + wxButton* m_button9; + wxButton* m_buttonOk; + wxButton* m_button17; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnHelp( wxCommandEvent& event ) { event.Skip(); } + virtual void OnUpdateNameFilter( wxCommandEvent& event ) { event.Skip(); } + virtual void OnUpdateChoice( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); } + virtual void OnApply( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + FilterDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Configure filter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~FilterDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class GlobalSettingsDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class GlobalSettingsDlgGenerated : public wxDialog +class GlobalSettingsDlgGenerated : public wxDialog { - private: - - protected: - wxPanel* m_panel8; - wxStaticBitmap* m_bitmapSettings; - wxStaticText* m_staticText56; - wxCheckBox* m_checkBoxTransCopy; - wxStaticText* m_staticText82; - wxCheckBox* m_checkBoxCopyLocked; - wxStaticText* m_staticTextCopyLocked; - wxCheckBox* m_checkBoxCopyPermissions; - wxStaticText* m_staticText8211; - zen::BitmapButton* m_buttonResetDialogs; - wxGrid* m_gridCustomCommand; - wxBitmapButton* m_bpButtonAddRow; - wxBitmapButton* m_bpButtonRemoveRow; - wxButton* m_button9; - wxButton* m_buttonOkay; - wxButton* m_button29; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnResetDialogs( wxCommandEvent& event ) { event.Skip(); } - virtual void OnAddRow( wxCommandEvent& event ) { event.Skip(); } - virtual void OnRemoveRow( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); } - virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - GlobalSettingsDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Global settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - ~GlobalSettingsDlgGenerated(); - +private: + +protected: + wxPanel* m_panelHeader; + wxStaticBitmap* m_bitmapSettings; + wxStaticText* m_staticText56; + wxStaticLine* m_staticline19; + wxCheckBox* m_checkBoxTransCopy; + wxStaticText* m_staticText82; + wxCheckBox* m_checkBoxCopyLocked; + wxStaticText* m_staticTextCopyLocked; + wxCheckBox* m_checkBoxCopyPermissions; + wxStaticText* m_staticText8211; + wxStaticLine* m_staticline191; + zen::BitmapButton* m_buttonResetDialogs; + wxStaticLine* m_staticline192; + wxStaticText* m_staticText85; + wxBitmapButton* m_bpButtonAddRow; + wxBitmapButton* m_bpButtonRemoveRow; + wxGrid* m_gridCustomCommand; + wxStaticLine* m_staticline20; + wxPanel* m_panel39; + wxButton* m_button9; + wxButton* m_buttonOkay; + wxButton* m_button29; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnResetDialogs( wxCommandEvent& event ) { event.Skip(); } + virtual void OnAddRow( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRemoveRow( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDefault( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOkay( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + GlobalSettingsDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Global settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~GlobalSettingsDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class SyncPreviewDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class SyncPreviewDlgGenerated : public wxDialog +class SyncPreviewDlgGenerated : public wxDialog { - private: - - protected: - zen::BitmapButton* m_buttonStartSync; - wxStaticLine* m_staticline16; - wxStaticText* m_staticTextVariant; - wxStaticLine* m_staticline14; - wxStaticBitmap* m_bitmapCreateLeft; - wxStaticBitmap* m_bitmapUpdateLeft; - wxStaticBitmap* m_bitmapDeleteLeft; - wxStaticBitmap* m_bitmapData; - wxStaticBitmap* m_bitmapDeleteRight; - wxStaticBitmap* m_bitmapUpdateRight; - wxStaticBitmap* m_bitmapCreateRight; - wxStaticText* m_staticTextCreateLeft; - wxStaticText* m_staticTextUpdateLeft; - wxStaticText* m_staticTextDeleteLeft; - wxStaticText* m_staticTextData; - wxStaticText* m_staticTextDeleteRight; - wxStaticText* m_staticTextUpdateRight; - wxStaticText* m_staticTextCreateRight; - wxStaticLine* m_staticline12; - wxCheckBox* m_checkBoxDontShowAgain; - wxButton* m_button16; - - // 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: - - SyncPreviewDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Summary"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~SyncPreviewDlgGenerated(); - +private: + +protected: + wxPanel* m_panelHeader; + zen::BitmapButton* m_buttonStartSync; + wxStaticLine* m_staticline16; + wxStaticText* m_staticText84; + wxStaticText* m_staticTextVariant; + wxStaticLine* m_staticline14; + wxStaticText* m_staticText83; + wxStaticBitmap* m_bitmapCreateLeft; + wxStaticBitmap* m_bitmapUpdateLeft; + wxStaticBitmap* m_bitmapDeleteLeft; + wxStaticBitmap* m_bitmapData; + wxStaticBitmap* m_bitmapDeleteRight; + wxStaticBitmap* m_bitmapUpdateRight; + wxStaticBitmap* m_bitmapCreateRight; + wxStaticText* m_staticTextCreateLeft; + wxStaticText* m_staticTextUpdateLeft; + wxStaticText* m_staticTextDeleteLeft; + wxStaticText* m_staticTextData; + wxStaticText* m_staticTextDeleteRight; + wxStaticText* m_staticTextUpdateRight; + wxStaticText* m_staticTextCreateRight; + wxStaticLine* m_staticline12; + wxPanel* m_panel42; + wxCheckBox* m_checkBoxDontShowAgain; + wxButton* m_button16; + + // 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: + + SyncPreviewDlgGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Confirm"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~SyncPreviewDlgGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class PopupFrameGenerated1 /////////////////////////////////////////////////////////////////////////////// -class PopupFrameGenerated1 : public wxFrame +class PopupFrameGenerated1 : public wxFrame { - private: - - protected: - - public: - wxStaticBitmap* m_bitmapLeft; - wxStaticText* m_staticTextMain; - - PopupFrameGenerated1( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxSTATIC_BORDER ); - - ~PopupFrameGenerated1(); - +private: + +protected: + +public: + wxStaticBitmap* m_bitmapLeft; + wxStaticText* m_staticTextMain; + + PopupFrameGenerated1( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxSTATIC_BORDER ); + + ~PopupFrameGenerated1(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class SearchDialogGenerated /////////////////////////////////////////////////////////////////////////////// -class SearchDialogGenerated : public wxDialog +class SearchDialogGenerated : public wxDialog { - private: - - protected: - wxStaticText* m_staticText101; - wxTextCtrl* m_textCtrlSearchTxt; - wxCheckBox* m_checkBoxMatchCase; - wxButton* m_buttonFindNext; - wxButton* m_button29; - - // Virtual event handlers, overide them in your derived class - virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } - virtual void OnText( wxCommandEvent& event ) { event.Skip(); } - virtual void OnFindNext( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } - - - public: - - SearchDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Find"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE ); - ~SearchDialogGenerated(); - +private: + +protected: + wxStaticText* m_staticText101; + wxTextCtrl* m_textCtrlSearchTxt; + wxCheckBox* m_checkBoxMatchCase; + wxButton* m_buttonFindNext; + wxButton* m_button29; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnText( wxCommandEvent& event ) { event.Skip(); } + virtual void OnFindNext( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } + + +public: + + SearchDialogGenerated( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Find"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE ); + ~SearchDialogGenerated(); + }; /////////////////////////////////////////////////////////////////////////////// /// Class SelectTimespanDlgGenerated /////////////////////////////////////////////////////////////////////////////// -class SelectTimespanDlgGenerated : public wxDialog +class SelectTimespanDlgGenerated : public wxDialog { - private: - - protected: - wxCalendarCtrl* m_calendarFrom; - wxCalendarCtrl* m_calendarTo; - wxButton* m_buttonOkay; - wxButton* m_button29; - - // 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: + wxCalendarCtrl* m_calendarFrom; + wxCalendarCtrl* m_calendarTo; + wxStaticLine* m_staticline21; + wxPanel* m_panel40; + wxButton* m_buttonOkay; + wxButton* m_button29; + + // 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(); + }; #endif //__GUI_GENERATED_H__ diff --git a/ui/gui_status_handler.cpp b/ui/gui_status_handler.cpp index c8311811..0f915ed9 100644 --- a/ui/gui_status_handler.cpp +++ b/ui/gui_status_handler.cpp @@ -200,7 +200,6 @@ SyncStatusHandler::~SyncStatusHandler() const int totalWarnings = errorLog.getItemCount(TYPE_WARNING); //finalize error log - //finalize error log std::wstring finalStatus; if (abortIsRequested()) { @@ -214,7 +213,7 @@ SyncStatusHandler::~SyncStatusHandler() } else if (totalWarnings > 0) { - finalStatus = _("Synchronization completed with warnings!"); + finalStatus = _("Synchronization completed with warnings."); errorLog.logMsg(finalStatus, TYPE_WARNING); //give status code same warning priority as display category! } else @@ -223,7 +222,7 @@ SyncStatusHandler::~SyncStatusHandler() getDataTotal (PHASE_SYNCHRONIZING) == 0) finalStatus = _("Nothing to synchronize!"); //even if "ignored conflicts" occurred! else - finalStatus = _("Synchronization completed successfully!"); + finalStatus = _("Synchronization completed successfully."); errorLog.logMsg(finalStatus, TYPE_INFO); } diff --git a/ui/main_dlg.cpp b/ui/main_dlg.cpp index 80c5e18f..c3f33db5 100644 --- a/ui/main_dlg.cpp +++ b/ui/main_dlg.cpp @@ -236,13 +236,13 @@ public: *mainDialog.m_gridMainL, *mainDialog.m_buttonSelectDirLeft, *mainDialog.m_directoryLeft, - *mainDialog.m_staticTextFinalPathLeft), + *mainDialog.m_staticTextResolvedPathL), dirNameRight(mainDialog, *mainDialog.m_panelTopRight, *mainDialog.m_gridMainR, *mainDialog.m_buttonSelectDirRight, *mainDialog.m_directoryRight, - *mainDialog.m_staticTextFinalPathRight) + *mainDialog.m_staticTextResolvedPathR) { dirNameLeft .Connect(EVENT_ON_DIR_SELECTED, wxCommandEventHandler(MainDialog::onDirSelected), nullptr, &mainDialog); dirNameRight.Connect(EVENT_ON_DIR_SELECTED, wxCommandEventHandler(MainDialog::onDirSelected), nullptr, &mainDialog); @@ -395,7 +395,7 @@ void MainDialog::create(const std::vector<wxString>& cfgFileNames) if (!filenames.empty()) try { - mergeConfigs(toZ(filenames), guiCfg); //throw FfsXmlError + readAnyConfig(toZ(filenames), guiCfg); //throw FfsXmlError loadCfgSuccess = true; } catch (const FfsXmlError& error) @@ -844,8 +844,8 @@ void MainDialog::setGlobalCfgOnInit(const xmlAccess::XmlGlobalSettings& globalSe auiMgr.LoadPerspective(globalSettings.gui.guiPerspectiveLast); //restore original captions - for (auto iter = captionNameMap.begin(); iter != captionNameMap.end(); ++iter) - auiMgr.GetPane(iter->second).Caption(iter->first); + for (auto it = captionNameMap.begin(); it != captionNameMap.end(); ++it) + auiMgr.GetPane(it->second).Caption(it->first); //if MainDialog::onQueryEndSession() is called while comparison is active, this panel is saved and restored as "visible" auiMgr.GetPane(compareStatus->getAsWindow()).Hide(); @@ -937,14 +937,14 @@ void MainDialog::setSyncDirManually(const std::vector<FileSystemObject*>& select void MainDialog::setFilterManually(const std::vector<FileSystemObject*>& selection, bool setIncluded) { //if hidefiltered is active, there should be no filtered elements on screen => current element was filtered out - assert(currentCfg.showFilteredElements || !setIncluded); + assert(!currentCfg.hideExcludedItems || !setIncluded); if (!selection.empty()) { std::for_each(selection.begin(), selection.end(), [&](FileSystemObject* fsObj) { zen::setActiveStatus(setIncluded, *fsObj); }); //works recursively for directories - updateGuiDelayedIf(!currentCfg.showFilteredElements); //show update GUI before removing rows + updateGuiDelayedIf(currentCfg.hideExcludedItems); //show update GUI before removing rows } } @@ -1476,9 +1476,9 @@ void MainDialog::OnResizeStatisticsPanel(wxEvent& event) //apply opposite orientation for child sizers const int childOrient = parentOrient == wxHORIZONTAL ? wxVERTICAL : wxHORIZONTAL; wxSizerItemList& sl = bSizerStatistics->GetChildren(); - for (auto iter = sl.begin(); iter != sl.end(); ++iter) //yet another wxWidgets bug keeps us from using std::for_each + for (auto it = sl.begin(); it != sl.end(); ++it) //yet another wxWidgets bug keeps us from using std::for_each { - wxSizerItem& szItem = **iter; + wxSizerItem& szItem = **it; if (auto sizerChild = dynamic_cast<wxBoxSizer*>(szItem.GetSizer())) if (sizerChild->GetOrientation() != childOrient) sizerChild->SetOrientation(childOrient); @@ -1867,7 +1867,7 @@ void MainDialog::onNaviGridContext(GridClickEvent& event) //---------------------------------------------------------------------------------------------------- //CONTEXT_DELETE_FILES menu.addSeparator(); - menu.addItem(_("Delete") + L"\tDel", [&] { deleteSelectedFiles(selection, selection); }, nullptr, !selection.empty(), wxID_DELETE); + menu.addItem(_("Delete") + L"\tDel", [&] { deleteSelectedFiles(selection, selection); }, nullptr, !selection.empty()); menu.popup(*this); } @@ -1886,7 +1886,7 @@ void MainDialog::onMainGridContextC(GridClickEvent& event) menu.addItem(_("Exclude all"), [&] { zen::setActiveStatus(false, folderCmp); - updateGuiDelayedIf(!currentCfg.showFilteredElements); //show update GUI before removing rows + updateGuiDelayedIf(currentCfg.hideExcludedItems); //show update GUI before removing rows }, nullptr, gridDataView->rowsTotal() > 0); menu.popup(*this); @@ -1983,20 +1983,20 @@ void MainDialog::onMainGridContextRim(bool leftSide) { menu.addSeparator(); - for (auto iter = globalCfg.gui.externelApplications.begin(); - iter != globalCfg.gui.externelApplications.end(); - ++iter) + for (auto it = globalCfg.gui.externelApplications.begin(); + it != globalCfg.gui.externelApplications.end(); + ++it) { //some trick to translate default external apps on the fly: 1. "open in explorer" 2. "start directly" - wxString description = zen::implementation::translate(iter->first); + wxString description = zen::implementation::translate(it->first); if (description.empty()) description = L" "; //wxWidgets doesn't like empty items - const wxString command = iter->second; + const wxString command = it->second; auto openApp = [this, &selection, leftSide, command] { openExternalApplication(command, selection.empty() ? nullptr : selection[0], leftSide); }; - if (iter == globalCfg.gui.externelApplications.begin()) + if (it == globalCfg.gui.externelApplications.begin()) menu.addItem(description + L"\tEnter", openApp); else menu.addItem(description, openApp, nullptr, !selection.empty()); @@ -2061,11 +2061,11 @@ void MainDialog::excludeItems(const std::vector<FileSystemObject*>& selection) if (!selection.empty()) //check needed to determine if filtering is needed { Zstring newExclude; - for (auto iter = selection.begin(); iter != selection.end(); ++iter) + for (auto it = selection.begin(); it != selection.end(); ++it) { - FileSystemObject* fsObj = *iter; + FileSystemObject* fsObj = *it; - if (iter != selection.begin()) + if (it != selection.begin()) newExclude += Zstr("\n"); //#pragma warning(suppress: 6011) -> fsObj bound in this context! @@ -2118,10 +2118,10 @@ void MainDialog::onGridLabelContext(Grid& grid, ColumnTypeRim type, const std::v { auto colAttr = grid.getColumnConfig(); - for (auto iter = colAttr.begin(); iter != colAttr.end(); ++iter) - if (iter->type_ == ca.type_) + for (auto it = colAttr.begin(); it != colAttr.end(); ++it) + if (it->type_ == ca.type_) { - iter->visible_ = !ca.visible_; + it->visible_ = !ca.visible_; grid.setColumnConfig(colAttr); return; } @@ -2130,9 +2130,9 @@ void MainDialog::onGridLabelContext(Grid& grid, ColumnTypeRim type, const std::v if (auto prov = grid.getDataProvider()) { const auto& colAttr = grid.getColumnConfig(); - for (auto iter = colAttr.begin(); iter != colAttr.end(); ++iter) + for (auto it = colAttr.begin(); it != colAttr.end(); ++it) { - const Grid::ColumnAttribute& ca = *iter; + const Grid::ColumnAttribute& ca = *it; menu.addCheckBox(prov->getColumnLabel(ca.type_), [ca, toggleColumn] { toggleColumn(ca); }, ca.visible_, ca.type_ != static_cast<ColumnType>(COL_TYPE_FILENAME)); //do not allow user to hide file name column! @@ -2178,7 +2178,7 @@ void MainDialog::onGridLabelContext(Grid& grid, ColumnTypeRim type, const std::v if (showSelectTimespanDlg(this, manualTimeSpanFrom, manualTimeSpanTo) == ReturnSmallDlg::BUTTON_OKAY) { applyTimeSpanFilter(folderCmp, manualTimeSpanFrom, manualTimeSpanTo); //overwrite current active/inactive settings - //updateGuiDelayedIf(!currentCfg.showFilteredElements); //show update GUI before removing rows + //updateGuiDelayedIf(currentCfg.hideExcludedItems); //show update GUI before removing rows updateGui(); } }; @@ -2216,10 +2216,10 @@ void MainDialog::OnContextSetLayout(wxMouseEvent& event) auiMgr.Update(); }; - for (auto iter = captionNameMap.begin(); iter != captionNameMap.end(); ++iter) + for (auto it = captionNameMap.begin(); it != captionNameMap.end(); ++it) { - const wxString label = replaceCpy(_("Show \"%x\""), L"%x", iter->first); - const wxString identifier = iter->second; + const wxString label = replaceCpy(_("Show \"%x\""), L"%x", it->first); + const wxString identifier = it->second; menu.addItem(label, [showPanel, identifier] { showPanel(identifier); }); } @@ -2259,7 +2259,7 @@ void MainDialog::OnSyncSettingsContext(wxMouseEvent& event) const auto currentVar = getConfig().mainCfg.syncCfg.directionCfg.var; - menu.addRadio(_("<Automatic>"), [&] { setVariant(DirectionConfig::AUTOMATIC); }, currentVar == DirectionConfig::AUTOMATIC); + menu.addRadio(_("<- Two way ->"), [&] { setVariant(DirectionConfig::AUTOMATIC); }, currentVar == DirectionConfig::AUTOMATIC); menu.addRadio(_("Mirror ->>") , [&] { setVariant(DirectionConfig::MIRROR); }, currentVar == DirectionConfig::MIRROR); menu.addRadio(_("Update ->") , [&] { setVariant(DirectionConfig::UPDATE); }, currentVar == DirectionConfig::UPDATE); menu.addRadio(_("Custom") , [&] { setVariant(DirectionConfig::CUSTOM); }, currentVar == DirectionConfig::CUSTOM); @@ -2325,13 +2325,13 @@ void MainDialog::addFileToCfgHistory(const std::vector<wxString>& filenames) std::deque<bool> selections(m_listBoxHistory->GetCount()); //items to select after update of history list auto futIter = fileEx.begin(); - for (auto iter = filenames.begin(); iter != filenames.end(); ++iter, ++futIter) + for (auto it = filenames.begin(); it != filenames.end(); ++it, ++futIter) { //only (still) existing files should be included in the list if (futIter->is_ready() && !futIter->get()) continue; - const wxString& filename = *iter; + const wxString& filename = *it; auto findItem = [&]() -> int { @@ -2375,8 +2375,10 @@ void MainDialog::addFileToCfgHistory(const std::vector<wxString>& filenames) void MainDialog::updateUnsavedCfgStatus() { + const wxString activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); + const bool haveUnsavedCfg = lastConfigurationSaved != getConfig(); - const bool singleCfgLoaded = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName(); + const bool singleCfgLoaded = !activeCfgFilename.empty(); //update save config button const bool allowSave = !singleCfgLoaded || haveUnsavedCfg; @@ -2400,7 +2402,7 @@ void MainDialog::updateUnsavedCfgStatus() title += L'*'; if (singleCfgLoaded) - title += activeConfigFiles[0]; + title += activeCfgFilename; else title += L"FreeFileSync - " + _("Folder Comparison and Synchronization"); @@ -2410,19 +2412,26 @@ void MainDialog::updateUnsavedCfgStatus() void MainDialog::OnConfigSave(wxCommandEvent& event) { + const wxString activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); + //if we work on a single named configuration document: save directly if changed //else: always show file dialog - if (activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName()) + if (!activeCfgFilename.empty()) { - const wxString filename = activeConfigFiles[0]; - - //don't overwrite .ffs_batch! using namespace xmlAccess; - if (getXmlType(utfCvrtTo<Zstring>(filename)) == XML_TYPE_GUI) //throw() + + switch (getXmlType(utfCvrtTo<Zstring>(activeCfgFilename))) //throw() { - if (lastConfigurationSaved != getConfig()) - trySaveConfig(&filename); - return; + case XML_TYPE_GUI: + trySaveConfig(&activeCfgFilename); + return; + case XML_TYPE_BATCH: + trySaveBatchConfig(&activeCfgFilename); + return; + case XML_TYPE_GLOBAL: + case XML_TYPE_OTHER: + assert(false); + return; } } @@ -2436,12 +2445,21 @@ void MainDialog::OnConfigSaveAs(wxCommandEvent& event) } -bool MainDialog::trySaveConfig(const wxString* fileName) //return true if saved successfully +void MainDialog::OnSaveAsBatchJob(wxCommandEvent& event) +{ + trySaveBatchConfig(nullptr); +} + + +bool MainDialog::trySaveConfig(const wxString* fileNameGui) //return true if saved successfully { wxString targetFilename; - if (fileName) - targetFilename = *fileName; + if (fileNameGui) + { + targetFilename = *fileNameGui; + assert(endsWith(targetFilename, L".ffs_gui")); + } else { wxString defaultFileName = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : L"SyncSettings.ffs_gui"; @@ -2478,33 +2496,100 @@ bool MainDialog::trySaveConfig(const wxString* fileName) //return true if saved } +bool MainDialog::trySaveBatchConfig(const wxString* fileNameBatch) +{ + //essentially behave like trySaveConfig(): the collateral damage of not saving GUI-only settings "hideExcludedItems, showSyncAction" is negliable + + const xmlAccess::XmlGuiConfig guiCfg = getConfig(); + + wxString targetFilename; + xmlAccess::XmlBatchConfig batchCfg; + + if (fileNameBatch) + { + targetFilename = *fileNameBatch; + batchCfg = convertGuiToBatchPreservingExistingBatch(guiCfg, toZ(*fileNameBatch)); + assert(endsWith(targetFilename, L".ffs_batch")); + } + else + { + const wxString activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); + batchCfg = convertGuiToBatchPreservingExistingBatch(guiCfg, toZ(activeCfgFilename)); + + //let user change batch config: this should change batch-exclusive settings only, else the "setLastUsedConfig" below would be somewhat of a lie + if (!customizeBatchConfig(this, + batchCfg, //in/out + globalCfg.gui.onCompletionHistory, + globalCfg.gui.onCompletionHistoryMax)) + return false; + + wxString defaultFileName = !activeCfgFilename.empty() ? activeCfgFilename : L"BatchRun.ffs_batch"; + //attention: activeConfigFiles may be a *.ffs_gui file! We don't want to overwrite it with a BATCH config! + if (endsWith(defaultFileName, L".ffs_gui")) + replace(defaultFileName, L".ffs_gui", L".ffs_batch"); + + wxFileDialog filePicker(this, //put modal dialog on stack: creating this on freestore leads to memleak! + wxEmptyString, + wxEmptyString, + defaultFileName, + _("FreeFileSync batch") + L" (*.ffs_batch)|*.ffs_batch" + L"|" +_("All files") + L" (*.*)|*", + wxFD_SAVE | wxFD_OVERWRITE_PROMPT); + if (filePicker.ShowModal() != wxID_OK) + return false; + targetFilename = filePicker.GetPath(); + } + + try + { + xmlAccess::writeConfig(batchCfg, toZ(targetFilename)); //throw FfsXmlError + + setLastUsedConfig(targetFilename, guiCfg); //[!] behave as if we had saved guiCfg + flashStatusInformation(_("Configuration saved!")); + return true; + } + catch (const xmlAccess::FfsXmlError& e) + { + wxMessageBox(e.toString().c_str(), _("Error"), wxOK | wxICON_ERROR, this); + return false; + } +} + + bool MainDialog::saveOldConfig() //return false on user abort { if (lastConfigurationSaved != getConfig()) { + const wxString activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); + //notify user about changed settings if (globalCfg.optDialogs.popupOnConfigChange) - if (activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName()) + if (!activeCfgFilename.empty()) //only if check is active and non-default config file loaded { - const wxString filename = activeConfigFiles[0]; - bool neverSave = !globalCfg.optDialogs.popupOnConfigChange; CheckBox cb(_("Never save changes"), neverSave); switch (showQuestionDlg(this, ReturnQuestionDlg::BUTTON_YES | ReturnQuestionDlg::BUTTON_NO | ReturnQuestionDlg::BUTTON_CANCEL, - replaceCpy(_("Do you want to save changes to %x?"), L"%x", fmtFileName(afterLast(utfCvrtTo<Zstring>(filename), FILE_NAME_SEPARATOR))), - filename, //caption + replaceCpy(_("Do you want to save changes to %x?"), L"%x", fmtFileName(afterLast(utfCvrtTo<Zstring>(activeCfgFilename), FILE_NAME_SEPARATOR))), + activeCfgFilename, //caption _("&Save"), _("Do&n't save"), &cb)) { case ReturnQuestionDlg::BUTTON_YES: using namespace xmlAccess; - return trySaveConfig(getXmlType(utfCvrtTo<Zstring>(filename)) == XML_TYPE_GUI ? //don't overwrite .ffs_batch! - &filename : - nullptr); + switch (getXmlType(utfCvrtTo<Zstring>(activeCfgFilename))) //throw() + { + case XML_TYPE_GUI: + return trySaveConfig(&activeCfgFilename); + case XML_TYPE_BATCH: + return trySaveBatchConfig(&activeCfgFilename); + case XML_TYPE_GLOBAL: + case XML_TYPE_OTHER: + assert(false); + return false; + } case ReturnQuestionDlg::BUTTON_NO: globalCfg.optDialogs.popupOnConfigChange = !neverSave; @@ -2526,9 +2611,11 @@ bool MainDialog::saveOldConfig() //return false on user abort void MainDialog::OnConfigLoad(wxCommandEvent& event) { + const wxString activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); + wxFileDialog filePicker(this, wxEmptyString, - beforeLast(activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(), utfCvrtTo<wxString>(FILE_NAME_SEPARATOR)), //set default dir: empty string if "activeConfigFiles" is empty or has no path separator + beforeLast(activeCfgFilename, utfCvrtTo<wxString>(FILE_NAME_SEPARATOR)), //set default dir: empty string if "activeConfigFiles" is empty or has no path separator wxEmptyString, wxString(L"FreeFileSync (*.ffs_gui;*.ffs_batch)|*.ffs_gui;*.ffs_batch") + L"|" +_("All files") + L" (*.*)|*", wxFD_OPEN | wxFD_MULTIPLE); @@ -2617,10 +2704,10 @@ bool MainDialog::loadConfiguration(const std::vector<wxString>& filenames) try { //allow reading batch configurations also - xmlAccess::mergeConfigs(toZ(filenames), newGuiCfg); //throw FfsXmlError + xmlAccess::readAnyConfig(toZ(filenames), newGuiCfg); //throw FfsXmlError setConfig(newGuiCfg, filenames); - //flashStatusInformation(_("Configuration loaded!")); -> irrelvant!? + //flashStatusInformation(_("Configuration loaded!")); -> irrelevant!? return true; } catch (const xmlAccess::FfsXmlError& error) @@ -2775,7 +2862,7 @@ void MainDialog::setConfig(const xmlAccess::XmlGuiConfig& newGuiCfg, const std:: //read GUI layout - m_checkBoxShowExcluded->SetValue(currentCfg.showFilteredElements); + m_checkBoxHideExcluded->SetValue(currentCfg.hideExcludedItems); showSyncAction(currentCfg.showSyncAction); @@ -2857,9 +2944,9 @@ void MainDialog::updateGuiDelayedIf(bool condition) void MainDialog::OnShowExcluded(wxCommandEvent& event) { //toggle showing filtered rows - currentCfg.showFilteredElements = !currentCfg.showFilteredElements; + currentCfg.hideExcludedItems = !currentCfg.hideExcludedItems; //make sure, checkbox and value are in sync - m_checkBoxShowExcluded->SetValue(currentCfg.showFilteredElements); + m_checkBoxHideExcluded->SetValue(currentCfg.hideExcludedItems); updateGui(); } @@ -3176,9 +3263,9 @@ void MainDialog::OnCompare(wxCommandEvent& event) wxBusyCursor dummy; //show hourglass cursor wxWindow* oldFocus = wxWindow::FindFocus(); - ZEN_ON_SCOPE_EXIT(if (oldFocus) oldFocus->SetFocus();) //e.g. keep focus on main grid after pressing F5 + ZEN_ON_SCOPE_EXIT(if (oldFocus) oldFocus->SetFocus();); //e.g. keep focus on main grid after pressing F5 - int scrollPosX = 0; + int scrollPosX = 0; int scrollPosY = 0; m_gridMainL->GetViewStart(&scrollPosX, &scrollPosY); //preserve current scroll position ZEN_ON_SCOPE_EXIT( @@ -3186,7 +3273,7 @@ void MainDialog::OnCompare(wxCommandEvent& event) m_gridMainR->Scroll(scrollPosX, scrollPosY); //restore m_gridMainC->Scroll(-1, scrollPosY); ) // - clearGrid(); //avoid memory peak by clearing old data + clearGrid(); //avoid memory peak by clearing old data first try { @@ -3409,10 +3496,7 @@ void MainDialog::OnStartSync(wxCommandEvent& event) try { //PERF_START; - - Zstring activeFileName; - if (activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName()) - activeFileName = utfCvrtTo<Zstring>(activeConfigFiles[0]); + const wxString activeCfgFilename = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); const auto& guiCfg = getConfig(); @@ -3420,7 +3504,7 @@ void MainDialog::OnStartSync(wxCommandEvent& event) SyncStatusHandler statusHandler(this, //throw GuiAbortProcess globalCfg.lastSyncsLogFileSizeMax, currentCfg.handleError, - xmlAccess::extractJobName(activeFileName), + xmlAccess::extractJobName(utfCvrtTo<Zstring>(activeCfgFilename)), guiCfg.mainCfg.onCompletion, globalCfg.gui.onCompletionHistory); @@ -3429,10 +3513,10 @@ void MainDialog::OnStartSync(wxCommandEvent& event) if (globalCfg.createLockFile) { std::vector<Zstring> dirnames; - for (auto iter = begin(folderCmp); iter != end(folderCmp); ++iter) + for (auto it = begin(folderCmp); it != end(folderCmp); ++it) { - dirnames.push_back(iter->getBaseDirPf<LEFT_SIDE >()); - dirnames.push_back(iter->getBaseDirPf<RIGHT_SIDE>()); + dirnames.push_back(it->getBaseDirPf<LEFT_SIDE >()); + dirnames.push_back(it->getBaseDirPf<RIGHT_SIDE>()); } dummy2 = make_unique<LockHolder>(dirnames, statusHandler, true); //allow pw prompt } @@ -3525,9 +3609,9 @@ void MainDialog::OnSwapSides(wxCommandEvent& event) firstFolderPair->getAltFilterConfig()); //additional pairs - for (auto iter = additionalFolderPairs.begin(); iter != additionalFolderPairs.end(); ++iter) + for (auto it = additionalFolderPairs.begin(); it != additionalFolderPairs.end(); ++it) { - DirectoryPair* dirPair = *iter; + DirectoryPair* dirPair = *it; dirPair->setValues(dirPair->getRightDir(), // swap directories dirPair->getLeftDir(), // dirPair->getAltCompConfig(), @@ -3591,10 +3675,9 @@ void MainDialog::updateGridViewData() m_bpButtonSyncDirOverwRight->Show(false); m_bpButtonSyncDirNone-> Show(false); - if (showSyncAction_) { - const GridView::StatusSyncPreview result = gridDataView->updateSyncPreview(!currentCfg.showFilteredElements, + const GridView::StatusSyncPreview result = gridDataView->updateSyncPreview(currentCfg.hideExcludedItems, m_bpButtonSyncCreateLeft-> isActive(), m_bpButtonSyncCreateRight-> isActive(), m_bpButtonSyncDeleteLeft-> isActive(), @@ -3642,7 +3725,7 @@ void MainDialog::updateGridViewData() } else { - const GridView::StatusCmpResult result = gridDataView->updateCmpResult(!currentCfg.showFilteredElements, + const GridView::StatusCmpResult result = gridDataView->updateCmpResult(currentCfg.hideExcludedItems, m_bpButtonLeftOnly-> isActive(), m_bpButtonRightOnly-> isActive(), m_bpButtonLeftNewer-> isActive(), @@ -3685,7 +3768,7 @@ void MainDialog::updateGridViewData() //navigation tree if (showSyncAction_) - treeDataView->updateSyncPreview(!currentCfg.showFilteredElements, + treeDataView->updateSyncPreview(currentCfg.hideExcludedItems, m_bpButtonSyncCreateLeft-> isActive(), m_bpButtonSyncCreateRight-> isActive(), m_bpButtonSyncDeleteLeft-> isActive(), @@ -3696,7 +3779,7 @@ void MainDialog::updateGridViewData() m_bpButtonEqual-> isActive(), m_bpButtonConflict-> isActive()); else - treeDataView->updateCmpResult(!currentCfg.showFilteredElements, + treeDataView->updateCmpResult(currentCfg.hideExcludedItems, m_bpButtonLeftOnly-> isActive(), m_bpButtonRightOnly-> isActive(), m_bpButtonLeftNewer-> isActive(), @@ -3746,7 +3829,7 @@ void MainDialog::applyFilterConfig() applyFiltering(folderCmp, getConfig().mainCfg); updateGui(); - //updateGuiDelayedIf(!currentCfg.showFilteredElements); //show update GUI before removing rows + //updateGuiDelayedIf(currentCfg.hideExcludedItems); //show update GUI before removing rows } @@ -3922,12 +4005,12 @@ void MainDialog::addFolderPair(const std::vector<FolderPairEnh>& newPairs, bool //so we have to update window sizes before setting configuration updateGuiForFolderPair(); - for (auto iter = newPairs.begin(); iter != newPairs.end(); ++iter)//set alternate configuration - newEntries[iter - newPairs.begin()]->setValues(toWx(iter->leftDirectory), - toWx(iter->rightDirectory), - iter->altCmpConfig, - iter->altSyncConfig, - iter->localFilter); + for (auto it = newPairs.begin(); it != newPairs.end(); ++it)//set alternate configuration + newEntries[it - newPairs.begin()]->setValues(toWx(it->leftDirectory), + toWx(it->rightDirectory), + it->altCmpConfig, + it->altSyncConfig, + it->localFilter); clearGrid(); //+ GUI update } @@ -3996,47 +4079,62 @@ void MainDialog::OnMenuExportFileList(wxCommandEvent& event) defaultFileName, _("Comma separated list") + L" (*.csv)|*.csv" + L"|" +_("All files") + L" (*.*)|*", wxFD_SAVE | wxFD_OVERWRITE_PROMPT); - if (filePicker.ShowModal() != wxID_OK) return; const Zstring filename = utfCvrtTo<Zstring>(filePicker.GetPath()); + //http://en.wikipedia.org/wiki/Comma-separated_values + const lconv* localInfo = ::localeconv(); //always bound according to doc + const bool haveCommaAsDecimalSep = strcmp(localInfo->decimal_point, ",") == 0; + + const char CSV_SEP = haveCommaAsDecimalSep ? ';' : ','; + + auto fmtValue = [&](const wxString& val) -> Utf8String + { + Utf8String&& tmp = utfCvrtTo<Utf8String>(val); + + if (contains(tmp, CSV_SEP)) + return '\"' + tmp + '\"'; + else + return tmp; + }; + Utf8String header; //perf: wxString doesn't model exponential growth and so is out, std::string doesn't give performance guarantee! header += BYTE_ORDER_MARK_UTF8; //write legend - header += utfCvrtTo<Utf8String>(_("Legend")) + '\n'; + header += fmtValue(_("Legend")) + '\n'; if (showSyncAction_) { - header += "\"" + utfCvrtTo<Utf8String>(getSyncOpDescription(SO_EQUAL)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(SO_EQUAL)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getSyncOpDescription(SO_CREATE_NEW_LEFT)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(SO_CREATE_NEW_LEFT)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getSyncOpDescription(SO_CREATE_NEW_RIGHT)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(SO_CREATE_NEW_RIGHT)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getSyncOpDescription(SO_OVERWRITE_LEFT)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(SO_OVERWRITE_LEFT)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getSyncOpDescription(SO_OVERWRITE_RIGHT)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(SO_OVERWRITE_RIGHT)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getSyncOpDescription(SO_DELETE_LEFT)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(SO_DELETE_LEFT)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getSyncOpDescription(SO_DELETE_RIGHT)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(SO_DELETE_RIGHT)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getSyncOpDescription(SO_DO_NOTHING)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(SO_DO_NOTHING)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getSyncOpDescription(SO_UNRESOLVED_CONFLICT)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(SO_UNRESOLVED_CONFLICT)) + '\n'; + header += fmtValue(getSyncOpDescription(SO_EQUAL)) + CSV_SEP + fmtValue(getSymbol(SO_EQUAL)) + '\n'; + header += fmtValue(getSyncOpDescription(SO_CREATE_NEW_LEFT)) + CSV_SEP + fmtValue(getSymbol(SO_CREATE_NEW_LEFT)) + '\n'; + header += fmtValue(getSyncOpDescription(SO_CREATE_NEW_RIGHT)) + CSV_SEP + fmtValue(getSymbol(SO_CREATE_NEW_RIGHT)) + '\n'; + header += fmtValue(getSyncOpDescription(SO_OVERWRITE_LEFT)) + CSV_SEP + fmtValue(getSymbol(SO_OVERWRITE_LEFT)) + '\n'; + header += fmtValue(getSyncOpDescription(SO_OVERWRITE_RIGHT)) + CSV_SEP + fmtValue(getSymbol(SO_OVERWRITE_RIGHT)) + '\n'; + header += fmtValue(getSyncOpDescription(SO_DELETE_LEFT)) + CSV_SEP + fmtValue(getSymbol(SO_DELETE_LEFT)) + '\n'; + header += fmtValue(getSyncOpDescription(SO_DELETE_RIGHT)) + CSV_SEP + fmtValue(getSymbol(SO_DELETE_RIGHT)) + '\n'; + header += fmtValue(getSyncOpDescription(SO_DO_NOTHING)) + CSV_SEP + fmtValue(getSymbol(SO_DO_NOTHING)) + '\n'; + header += fmtValue(getSyncOpDescription(SO_UNRESOLVED_CONFLICT)) + CSV_SEP + fmtValue(getSymbol(SO_UNRESOLVED_CONFLICT)) + '\n'; } else { - header += "\"" + utfCvrtTo<Utf8String>(getCategoryDescription(FILE_EQUAL)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(FILE_EQUAL)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getCategoryDescription(FILE_DIFFERENT)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(FILE_DIFFERENT)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getCategoryDescription(FILE_LEFT_SIDE_ONLY)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(FILE_LEFT_SIDE_ONLY)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getCategoryDescription(FILE_RIGHT_SIDE_ONLY)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(FILE_RIGHT_SIDE_ONLY)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getCategoryDescription(FILE_LEFT_NEWER)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(FILE_LEFT_NEWER)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getCategoryDescription(FILE_RIGHT_NEWER)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(FILE_RIGHT_NEWER)) + '\n'; - header += "\"" + utfCvrtTo<Utf8String>(getCategoryDescription(FILE_CONFLICT)) + "\";" + utfCvrtTo<Utf8String>(getSymbol(FILE_CONFLICT)) + '\n'; + header += fmtValue(getCategoryDescription(FILE_EQUAL)) + CSV_SEP + fmtValue(getSymbol(FILE_EQUAL)) + '\n'; + header += fmtValue(getCategoryDescription(FILE_DIFFERENT)) + CSV_SEP + fmtValue(getSymbol(FILE_DIFFERENT)) + '\n'; + header += fmtValue(getCategoryDescription(FILE_LEFT_SIDE_ONLY)) + CSV_SEP + fmtValue(getSymbol(FILE_LEFT_SIDE_ONLY)) + '\n'; + header += fmtValue(getCategoryDescription(FILE_RIGHT_SIDE_ONLY)) + CSV_SEP + fmtValue(getSymbol(FILE_RIGHT_SIDE_ONLY)) + '\n'; + header += fmtValue(getCategoryDescription(FILE_LEFT_NEWER)) + CSV_SEP + fmtValue(getSymbol(FILE_LEFT_NEWER)) + '\n'; + header += fmtValue(getCategoryDescription(FILE_RIGHT_NEWER)) + CSV_SEP + fmtValue(getSymbol(FILE_RIGHT_NEWER)) + '\n'; + header += fmtValue(getCategoryDescription(FILE_CONFLICT)) + CSV_SEP + fmtValue(getSymbol(FILE_CONFLICT)) + '\n'; } header += '\n'; //base folders - header += utfCvrtTo<Utf8String>(_("Folder pairs")) + '\n' ; + header += fmtValue(_("Folder pairs")) + '\n' ; std::for_each(begin(folderCmp), end(folderCmp), [&](BaseDirMapping& baseMap) { - header += utfCvrtTo<Utf8String>(baseMap.getBaseDirPf<LEFT_SIDE >()) + ';'; + header += utfCvrtTo<Utf8String>(baseMap.getBaseDirPf<LEFT_SIDE >()) + CSV_SEP; header += utfCvrtTo<Utf8String>(baseMap.getBaseDirPf<RIGHT_SIDE>()) + '\n'; }); header += '\n'; @@ -4054,37 +4152,29 @@ void MainDialog::OnMenuExportFileList(wxCommandEvent& event) vector_remove_if(colAttrMiddle, [](const Grid::ColumnAttribute& ca) { return !ca.visible_; }); vector_remove_if(colAttrRight , [](const Grid::ColumnAttribute& ca) { return !ca.visible_; }); - auto fmtCellValue = [](const wxString& val) -> Utf8String - { - if (val.find(L';') != wxString::npos) - return '\"' + utfCvrtTo<Utf8String>(val) + '\"'; - else - return utfCvrtTo<Utf8String>(val); - }; - if (provLeft && provMiddle && provRight) { std::for_each(colAttrLeft.begin(), colAttrLeft.end(), [&](const Grid::ColumnAttribute& ca) { - header += fmtCellValue(provLeft->getColumnLabel(ca.type_)); - header += ';'; + header += fmtValue(provLeft->getColumnLabel(ca.type_)); + header += CSV_SEP; }); std::for_each(colAttrMiddle.begin(), colAttrMiddle.end(), [&](const Grid::ColumnAttribute& ca) { - header += fmtCellValue(provMiddle->getColumnLabel(ca.type_)); - header += ';'; + header += fmtValue(provMiddle->getColumnLabel(ca.type_)); + header += CSV_SEP; }); if (!colAttrRight.empty()) { std::for_each(colAttrRight.begin(), colAttrRight.end() - 1, [&](const Grid::ColumnAttribute& ca) { - header += fmtCellValue(provRight->getColumnLabel(ca.type_)); - header += ';'; + header += fmtValue(provRight->getColumnLabel(ca.type_)); + header += CSV_SEP; }); - header += fmtCellValue(provRight->getColumnLabel(colAttrRight.back().type_)); + header += fmtValue(provRight->getColumnLabel(colAttrRight.back().type_)); } header += '\n'; @@ -4110,24 +4200,24 @@ void MainDialog::OnMenuExportFileList(wxCommandEvent& event) std::for_each(colAttrLeft.begin(), colAttrLeft.end(), [&](const Grid::ColumnAttribute& ca) { - tmp += fmtCellValue(provLeft->getValue(row, ca.type_)); - tmp += ';'; + tmp += fmtValue(provLeft->getValue(row, ca.type_)); + tmp += CSV_SEP; }); std::for_each(colAttrMiddle.begin(), colAttrMiddle.end(), [&](const Grid::ColumnAttribute& ca) { - tmp += fmtCellValue(provMiddle->getValue(row, ca.type_)); - tmp += ';'; + tmp += fmtValue(provMiddle->getValue(row, ca.type_)); + tmp += CSV_SEP; }); if (!colAttrRight.empty()) { std::for_each(colAttrRight.begin(), colAttrRight.end() - 1, [&](const Grid::ColumnAttribute& ca) { - tmp += fmtCellValue(provRight->getValue(row, ca.type_)); - tmp += ';'; + tmp += fmtValue(provRight->getValue(row, ca.type_)); + tmp += CSV_SEP; }); - tmp += fmtCellValue(provRight->getValue(row, colAttrRight.back().type_)); + tmp += fmtValue(provRight->getValue(row, colAttrRight.back().type_)); } tmp += '\n'; @@ -4145,24 +4235,6 @@ void MainDialog::OnMenuExportFileList(wxCommandEvent& event) } -void MainDialog::OnMenuBatchJob(wxCommandEvent& event) -{ - //fill batch config structure - const xmlAccess::XmlGuiConfig currCfg = getConfig(); //get UP TO DATE config, with updated values for main and additional folders! - - const wxString referenceFile = activeConfigFiles.size() == 1 && activeConfigFiles[0] != lastRunConfigName() ? activeConfigFiles[0] : wxString(); - - const xmlAccess::XmlBatchConfig batchCfg = convertGuiToBatch(currCfg, toZ(referenceFile)); - - showSyncBatchDlg(this, - referenceFile, batchCfg, - folderHistoryLeft, - folderHistoryRight, - globalCfg.gui.onCompletionHistory, - globalCfg.gui.onCompletionHistoryMax); -} - - void MainDialog::OnMenuCheckVersion(wxCommandEvent& event) { zen::checkForUpdateNow(this); diff --git a/ui/main_dlg.h b/ui/main_dlg.h index 07687f88..4f7a6bbd 100644 --- a/ui/main_dlg.h +++ b/ui/main_dlg.h @@ -80,7 +80,8 @@ private: bool loadConfiguration(const std::vector<wxString>& filenames); //return true if loaded successfully - bool trySaveConfig(const wxString* fileName); //return true if saved successfully + bool trySaveConfig (const wxString* fileNameGui); //return true if saved successfully + bool trySaveBatchConfig(const wxString* fileNameBatch); // bool saveOldConfig(); //return false on user abort static const wxString& lastRunConfigName(); @@ -194,6 +195,7 @@ private: void OnConfigNew (wxCommandEvent& event); void OnConfigSave (wxCommandEvent& event); void OnConfigSaveAs (wxCommandEvent& event); + void OnSaveAsBatchJob (wxCommandEvent& event); void OnConfigLoad (wxCommandEvent& event); void OnLoadFromHistory(wxCommandEvent& event); void OnLoadFromHistoryDoubleClick(wxCommandEvent& event); @@ -229,7 +231,6 @@ private: //menu events void OnMenuGlobalSettings(wxCommandEvent& event); void OnMenuExportFileList(wxCommandEvent& event); - void OnMenuBatchJob (wxCommandEvent& event); void OnMenuCheckVersion (wxCommandEvent& event); void OnMenuAbout (wxCommandEvent& event); void OnShowHelp (wxCommandEvent& event); diff --git a/ui/progress_indicator.cpp b/ui/progress_indicator.cpp index caf87428..7fb04f93 100644 --- a/ui/progress_indicator.cpp +++ b/ui/progress_indicator.cpp @@ -325,15 +325,15 @@ public: { viewRef.clear(); - for (auto iter = log_.begin(); iter != log_.end(); ++iter) - if (iter->type & includedTypes) + for (auto it = log_.begin(); it != log_.end(); ++it) + if (it->type & includedTypes) { assert_static((IsSameType<GetCharType<MsgString>::Type, wchar_t>::value)); - assert(!startsWith(iter->message, L'\n')); + assert(!startsWith(it->message, L'\n')); size_t rowNumber = 0; bool lastCharNewline = true; - std::for_each(iter->message.begin(), iter->message.end(), + std::for_each(it->message.begin(), it->message.end(), [&](wchar_t c) { typedef Line Line; //workaround MSVC compiler bug! @@ -341,7 +341,7 @@ public: if (c == L'\n') { if (!lastCharNewline) //do not reference empty lines! - viewRef.push_back(Line(&*iter, rowNumber)); + viewRef.push_back(Line(&*it, rowNumber)); ++rowNumber; lastCharNewline = true; } @@ -349,7 +349,7 @@ public: lastCharNewline = false; }); if (!lastCharNewline) - viewRef.push_back(Line(&*iter, rowNumber)); + viewRef.push_back(Line(&*it, rowNumber)); } } @@ -660,7 +660,7 @@ private: const std::vector<size_t> selection = m_gridMessages->getSelectedRows(); ContextMenu menu; - menu.addItem(_("Copy") + L"\tCtrl+C", [this] { copySelectionToClipboard(); }, nullptr, !selection.empty(), wxID_COPY); + menu.addItem(_("Copy") + L"\tCtrl+C", [this] { copySelectionToClipboard(); }, nullptr, !selection.empty()); menu.popup(*this); } @@ -740,10 +740,10 @@ private: virtual double getValue(double x) const //x: seconds since begin { - auto iter = data.lower_bound(x * 1000); - if (iter == data.end()) + auto it = data.lower_bound(x * 1000); + if (it == data.end()) return data.empty() ? 0 : (--data.end())->second; - return iter->second; + return it->second; } //example: two-element range is accessible within [0, 2) @@ -1001,15 +1001,18 @@ SyncStatus::SyncStatusImpl::SyncStatusImpl(AbortCallback& abortCb, graphDataBytes = std::make_shared<GraphDataBytes>(); graphDataBytesTotal = std::make_shared<GraphDataConstLine>(); - m_panelGraph->setAttributes(Graph2D::GraphAttributes(). + m_panelGraph->setAttributes(Graph2D::MainAttributes(). setLabelX(Graph2D::X_LABEL_BOTTOM, 20, std::make_shared<LabelFormatterTimeElapsed>()). - setLabelY(Graph2D::Y_LABEL_RIGHT, 60, std::make_shared<LabelFormatterBytes>())); + setLabelY(Graph2D::Y_LABEL_RIGHT, 70, std::make_shared<LabelFormatterBytes>())); - m_panelGraph->setData(graphDataBytesTotal, Graph2D::LineAttributes().setLineWidth(2).setColor(wxColor(0, 64, 0))); //green - m_panelGraph->addData(graphDataBytes, Graph2D::LineAttributes().setLineWidth(2).setColor(wxColor(0, 192, 0))); //medium green + m_panelGraph->setData(graphDataBytes, + Graph2D::CurveAttributes().setLineWidth(2) + .setColor (wxColor( 0, 192, 0)) //medium green + .fillCurveArea(wxColor(192, 255, 192))); //faint green - //allow changing on completion command + m_panelGraph->addData(graphDataBytesTotal, Graph2D::CurveAttributes().setLineWidth(2).setColor(wxColor(0, 64, 0))); //dark green + //allow changing on completion command m_comboBoxExecFinished->initHistory(execFinishedHistory, execFinishedHistory.size()); //-> we won't use addItemHistory() later m_comboBoxExecFinished->setValue(execWhenFinished); @@ -1242,6 +1245,7 @@ void SyncStatus::SyncStatusImpl::updateProgress(bool allowYield) //remaining objects and data setText(*m_staticTextRemainingObj, toGuiString(objectsTotal - objectsCurrent), &layoutChanged); setText(*m_staticTextDataRemaining, L"(" + filesizeToShortString(dataTotal - dataCurrent) + L")", &layoutChanged); + //it's possible data remaining becomes shortly negative if last file synced has ADS data and the dataTotal was not yet corrected! //remaining time and speed assert(perf); @@ -1382,12 +1386,12 @@ void SyncStatus::SyncStatusImpl::updateDialogStatus() //depends on "syncStat_, p case RESULT_FINISHED_WITH_WARNINGS: m_bitmapStatus->SetBitmap(GlobalResources::getImage(L"statusFinishedWarnings")); - m_bitmapStatus->SetToolTip(_("Synchronization completed with warnings!")); + m_bitmapStatus->SetToolTip(_("Synchronization completed with warnings.")); break; case RESULT_FINISHED_WITH_SUCCESS: m_bitmapStatus->SetBitmap(GlobalResources::getImage(L"statusFinishedSuccess")); - m_bitmapStatus->SetToolTip(_("Synchronization completed successfully!")); + m_bitmapStatus->SetToolTip(_("Synchronization completed successfully.")); break; } @@ -1484,6 +1488,7 @@ void SyncStatus::SyncStatusImpl::processHasFinished(SyncResult resultId, const E auto objectsTotal = syncStat_->getObjectsTotal (syncStat_->currentPhase()); auto dataCurrent = syncStat_->getDataCurrent (syncStat_->currentPhase()); auto dataTotal = syncStat_->getDataTotal (syncStat_->currentPhase()); + assert(dataCurrent <= dataTotal); //set overall speed (instead of current speed) assert(perf); diff --git a/ui/small_dlgs.cpp b/ui/small_dlgs.cpp index 2b6c9d4a..0193f1e9 100644 --- a/ui/small_dlgs.cpp +++ b/ui/small_dlgs.cpp @@ -4,25 +4,25 @@ // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * // ************************************************************************** -#include "gui_generated.h" #include "small_dlgs.h" -#include "msg_popup.h" +#include <wx/wupdlock.h> +//#include <wx/msgdlg.h> #include <zen/format_unit.h> -#include "../lib/resources.h" -#include "../algorithm.h" +#include <zen/build_info.h> +#include <zen/stl_tools.h> #include <wx+/choice_enum.h> -#include "../synchronization.h" -#include "custom_grid.h" #include <wx+/button.h> -#include <zen/build_info.h> -#include <wx/wupdlock.h> -#include <wx/msgdlg.h> +#include <wx+/rtl.h> #include <wx+/no_flicker.h> #include <wx+/mouse_move_dlg.h> -#include <wx+/rtl.h> -#include "../lib/help_provider.h" #include <wx+/image_tools.h> -#include <zen/stl_tools.h> +#include "gui_generated.h" +#include "msg_popup.h" +#include "custom_grid.h" +#include "../lib/resources.h" +#include "../algorithm.h" +#include "../synchronization.h" +#include "../lib/help_provider.h" #include "../lib/hard_filter.h" #include "../version/version.h" @@ -51,20 +51,20 @@ AboutDlg::AboutDlg(wxWindow* parent) : AboutDlgGenerated(parent) m_animCtrlWink->Play(); //create language credits - for (auto iter = ExistingTranslations::get().begin(); iter != ExistingTranslations::get().end(); ++iter) + for (auto it = ExistingTranslations::get().begin(); it != ExistingTranslations::get().end(); ++it) { //flag - wxStaticBitmap* staticBitmapFlag = new wxStaticBitmap(m_scrolledWindowTranslators, wxID_ANY, GlobalResources::getImage(iter->languageFlag), wxDefaultPosition, wxSize(-1, 11), 0 ); + wxStaticBitmap* staticBitmapFlag = new wxStaticBitmap(m_scrolledWindowTranslators, wxID_ANY, GlobalResources::getImage(it->languageFlag), wxDefaultPosition, wxSize(-1, 11), 0 ); fgSizerTranslators->Add(staticBitmapFlag, 0, wxALIGN_CENTER); //language name - wxStaticText* staticTextLanguage = new wxStaticText(m_scrolledWindowTranslators, wxID_ANY, iter->languageName, wxDefaultPosition, wxDefaultSize, 0 ); + wxStaticText* staticTextLanguage = new wxStaticText(m_scrolledWindowTranslators, wxID_ANY, it->languageName, wxDefaultPosition, wxDefaultSize, 0 ); staticTextLanguage->Wrap(-1); staticTextLanguage->SetForegroundColour(*wxBLACK); //accessibility: always set both foreground AND background colors! fgSizerTranslators->Add(staticTextLanguage, 0, wxALIGN_CENTER_VERTICAL); //translator name - wxStaticText* staticTextTranslator = new wxStaticText(m_scrolledWindowTranslators, wxID_ANY, iter->translatorName, wxDefaultPosition, wxDefaultSize, 0 ); + wxStaticText* staticTextTranslator = new wxStaticText(m_scrolledWindowTranslators, wxID_ANY, it->translatorName, wxDefaultPosition, wxDefaultSize, 0 ); staticTextTranslator->Wrap(-1); staticTextTranslator->SetForegroundColour(*wxBLACK); //accessibility: always set both foreground AND background colors! fgSizerTranslators->Add(staticTextTranslator, 0, wxALIGN_CENTER_VERTICAL); @@ -206,7 +206,8 @@ FilterDlg::FilterDlg(wxWindow* parent, // m_staticTexHeader->SetLabel(_("Filter")); - Fit(); + Fit(); //child-element widths have changed: image was set + m_panelHeader->Layout(); } @@ -375,6 +376,9 @@ DeleteDialog::DeleteDialog(wxWindow* parent, updateGui(); + Fit(); //child-element widths have changed: image was set: "fit" only *once* on construction! + m_panelHeader->Layout(); + m_buttonOK->SetFocus(); } @@ -406,7 +410,6 @@ void DeleteDialog::updateGui() const wxString& fileList = utfCvrtTo<wxString>(delInfo.first); m_textCtrlFileList->ChangeValue(fileList); - Fit(); //child-element widths have changed: image was set m_panelHeader->Layout(); Layout(); } @@ -504,6 +507,7 @@ SyncPreviewDlg::SyncPreviewDlg(wxWindow* parent, setValue(*m_staticTextDeleteRight, st.getDelete<RIGHT_SIDE>(), *m_bitmapDeleteRight, L"deleteRightSmall"); m_buttonStartSync->SetFocus(); + m_panelHeader->Layout(); //m_buttonStartSync changed => this *is* required! Fit(); } @@ -701,13 +705,15 @@ GlobalSettingsDlg::GlobalSettingsDlg(wxWindow* parent, xmlAccess::XmlGlobalSetti m_gridCustomCommand->GetGridColLabelWindow()->SetToolTip(toolTip); m_gridCustomCommand->SetMargins(0, 0); - m_buttonOkay->SetFocus(); - Fit(); + Fit(); //child-element widths have changed: image was set + m_panelHeader->Layout(); //automatically fit column width to match totl grid width Connect(wxEVT_SIZE, wxSizeEventHandler(GlobalSettingsDlg::OnResize), nullptr, this); wxSizeEvent dummy; OnResize(dummy); + + m_buttonOkay->SetFocus(); } @@ -744,7 +750,7 @@ void GlobalSettingsDlg::OnOkay(wxCommandEvent& event) void GlobalSettingsDlg::OnResetDialogs(wxCommandEvent& event) { if (showQuestionDlg(this, ReturnQuestionDlg::BUTTON_YES | ReturnQuestionDlg::BUTTON_CANCEL, - _("Make hidden dialogs and warning messages visible again?")) == ReturnQuestionDlg::BUTTON_YES) + _("Make hidden warnings and dialogs visible again?")) == ReturnQuestionDlg::BUTTON_YES) settings.optDialogs.resetDialogs(); } @@ -772,11 +778,11 @@ void GlobalSettingsDlg::set(const xmlAccess::ExternalApps& extApp) m_gridCustomCommand->DeleteRows(0, rowCount); m_gridCustomCommand->AppendRows(static_cast<int>(extAppTmp.size())); - for (auto iter = extAppTmp.begin(); iter != extAppTmp.end(); ++iter) + for (auto it = extAppTmp.begin(); it != extAppTmp.end(); ++it) { - const int row = iter - extAppTmp.begin(); - m_gridCustomCommand->SetCellValue(row, 0, iter->first); //description - m_gridCustomCommand->SetCellValue(row, 1, iter->second); //commandline + const int row = it - extAppTmp.begin(); + m_gridCustomCommand->SetCellValue(row, 0, it->first); //description + m_gridCustomCommand->SetCellValue(row, 1, it->second); //commandline } //Fit(); } diff --git a/ui/small_dlgs.h b/ui/small_dlgs.h index ed191bae..397a3e41 100644 --- a/ui/small_dlgs.h +++ b/ui/small_dlgs.h @@ -7,7 +7,8 @@ #ifndef SMALLDIALOGS_H_INCLUDED #define SMALLDIALOGS_H_INCLUDED -#include "../file_hierarchy.h" +#include <wx/window.h> +//#include "../file_hierarchy.h" #include "../lib/process_xml.h" #include "../synchronization.h" diff --git a/ui/sync_cfg.cpp b/ui/sync_cfg.cpp index ef9d2a68..dc82ffbb 100644 --- a/ui/sync_cfg.cpp +++ b/ui/sync_cfg.cpp @@ -6,9 +6,11 @@ #include "sync_cfg.h" #include <memory> +#include <zen/format_unit.h> #include <wx/wupdlock.h> #include <wx+/mouse_move_dlg.h> #include <wx+/rtl.h> +#include <wx+/no_flicker.h> #include <wx+/choice_enum.h> #include <wx+/image_tools.h> #include "gui_generated.h" @@ -52,29 +54,40 @@ private: virtual void OnCancel(wxCommandEvent& event) { EndModal(ReturnSyncConfig::BUTTON_CANCEL); } virtual void OnApply (wxCommandEvent& event); - void updateGui(); + virtual void OnParameterChange(wxCommandEvent& event) { updateGui(); } virtual void OnDeletionPermanent (wxCommandEvent& event) { handleDeletion = DELETE_PERMANENTLY; updateGui(); } virtual void OnDeletionRecycler (wxCommandEvent& event) { handleDeletion = DELETE_TO_RECYCLER; updateGui(); } virtual void OnDeletionVersioning (wxCommandEvent& event) { handleDeletion = DELETE_TO_VERSIONING; updateGui(); } - virtual void OnErrorPopup (wxCommandEvent& event) { handleGuiError = ON_GUIERROR_POPUP; updateGui(); } - virtual void OnErrorIgnore(wxCommandEvent& event) { handleGuiError = ON_GUIERROR_IGNORE; updateGui(); } + virtual void OnErrorPopup (wxCommandEvent& event) { onGuiError = ON_GUIERROR_POPUP; updateGui(); } + virtual void OnErrorIgnore(wxCommandEvent& event) { onGuiError = ON_GUIERROR_IGNORE; updateGui(); } + + struct Config + { + SyncConfig syncCfg; + xmlAccess::OnGuiError onGuiError; + std::wstring onCompletion; + }; + void setConfig(const Config& cfg); + Config getConfig() const; - virtual void OnToggleVersionsLimit(wxCommandEvent& event) { updateGui(); } + void updateGui(); //parameters with ownership NOT within GUI controls! DirectionConfig directionCfg; - const CompareVariant cmpVariant; DeletionPolicy handleDeletion; //use Recycler, delete permanently or move to user-defined location - OnGuiError handleGuiError; + OnGuiError onGuiError; - //changing data - SyncConfig& syncCfgOut; - xmlAccess::OnGuiError* refHandleError; - ExecWhenFinishedCfg* refExecWhenFinished; + //output data + SyncConfig& outSyncCfg; + xmlAccess::OnGuiError* outOptOnGuiError; + ExecWhenFinishedCfg* outOptExecWhenFinished; + CompareVariant compareVar_; DirectoryName<FolderHistoryBox> versioningFolder; + + EnumDescrList<VersioningStyle> enumVersioningStyle; }; @@ -195,69 +208,97 @@ SyncCfgDialog::SyncCfgDialog(wxWindow* parent, xmlAccess::OnGuiError* handleError, ExecWhenFinishedCfg* execWhenFinished) : SyncCfgDlgGenerated(parent), - directionCfg(syncCfg.directionCfg), //make working copy - cmpVariant(compareVar), - handleDeletion(syncCfg.handleDeletion), - handleGuiError(ON_GUIERROR_POPUP), //dummy init - syncCfgOut(syncCfg), - refHandleError(handleError), - refExecWhenFinished(execWhenFinished), - versioningFolder(*m_panelVersioning, *m_buttonSelectDirVersioning, *m_versioningFolder) + handleDeletion(DELETE_TO_RECYCLER), // + onGuiError(ON_GUIERROR_POPUP), //dummy init + outSyncCfg(syncCfg), + outOptOnGuiError(handleError), + outOptExecWhenFinished(execWhenFinished), + compareVar_(compareVar), + versioningFolder(*m_panelVersioning, *m_buttonSelectDirVersioning, *m_versioningFolder/*, m_staticTextResolvedPath*/) { #ifdef FFS_WIN new zen::MouseMoveWindow(*this); //allow moving main dialog by clicking (nearly) anywhere...; ownership passed to "this" #endif + //set icons for this dialog + m_bitmapLeftOnly ->SetBitmap(mirrorIfRtl(greyScale(GlobalResources::getImage(L"leftOnly" )))); + m_bitmapRightOnly ->SetBitmap(mirrorIfRtl(greyScale(GlobalResources::getImage(L"rightOnly" )))); + m_bitmapLeftNewer ->SetBitmap(mirrorIfRtl(greyScale(GlobalResources::getImage(L"leftNewer" )))); + m_bitmapRightNewer->SetBitmap(mirrorIfRtl(greyScale(GlobalResources::getImage(L"rightNewer")))); + m_bitmapDifferent ->SetBitmap(mirrorIfRtl(greyScale(GlobalResources::getImage(L"different" )))); + m_bitmapConflict ->SetBitmap(mirrorIfRtl(greyScale(GlobalResources::getImage(L"conflict" )))); + m_bitmapDatabase ->SetBitmap(GlobalResources::getImage(L"database")); - versioningFolder.setName(utfCvrtTo<wxString>(syncCfg.versioningDirectory)); - //map single parameter "version limit" to both checkbox and spin ctrl: - m_checkBoxVersionsLimit->SetValue(syncCfg.versionCountLimit >= 0); - m_spinCtrlVersionsLimit->SetValue(syncCfg.versionCountLimit >= 0 ? syncCfg.versionCountLimit : 10 /*SyncConfig().versionCountLimit*/); - updateGui(); + enumVersioningStyle. + add(VER_STYLE_REPLACE, _("Replace"), _("Move files and replace if existing")). + add(VER_STYLE_ADD_TIMESTAMP, _("Versioning"), _("Append a timestamp to each file name")); - //error handling - if (handleError) - handleGuiError = *handleError; - else + //hide controls for optional parameters + if (!handleError && !execWhenFinished) //currently either both or neither are bound! { - sbSizerErrorHandling->Show(false); + bSizerExtraConfig->Show(false); Layout(); } if (execWhenFinished) - { m_comboBoxExecFinished->initHistory(*execWhenFinished->history, execWhenFinished->historyMax); - m_comboBoxExecFinished->setValue(*execWhenFinished->command); - } - else - { - sbSizerExecFinished->Show(false); - Layout(); - } - //set sync config icons + Config newCfg = { syncCfg, + handleError ?* handleError : ON_GUIERROR_POPUP, + execWhenFinished ?* execWhenFinished->command : std::wstring() + }; + setConfig(newCfg); + + Fit(); + bSizerConfig->Layout(); //wxButtonWithImage size might have changed + + m_buttonOK->SetFocus(); +} + +//################################################################################################################# + +void SyncCfgDialog::setConfig(const Config& cfg) +{ + directionCfg = cfg.syncCfg.directionCfg; //make working copy; ownership *not* on GUI + handleDeletion = cfg.syncCfg.handleDeletion; + + versioningFolder.setName(utfCvrtTo<wxString>(cfg.syncCfg.versioningDirectory)); + setEnumVal(enumVersioningStyle, *m_choiceVersioningStyle, cfg.syncCfg.versioningStyle); + + ////map single parameter "version limit" to both checkbox and spin ctrl: + //m_checkBoxVersionsLimit->SetValue(cfg.syncCfg.versionCountLimit >= 0); + //m_spinCtrlVersionsLimit->SetValue(cfg.syncCfg.versionCountLimit >= 0 ? cfg.syncCfg.versionCountLimit : 10 /*SyncConfig().versionCountLimit*/); + + onGuiError = cfg.onGuiError; + + m_comboBoxExecFinished->setValue(cfg.onCompletion); + updateGui(); +} - //set icons for this dialog - m_bitmapLeftOnly ->SetBitmap(mirrorIfRtl(greyScale(GlobalResources::getImage(L"leftOnly" )))); - m_bitmapRightOnly ->SetBitmap(mirrorIfRtl(greyScale(GlobalResources::getImage(L"rightOnly" )))); - m_bitmapLeftNewer ->SetBitmap(mirrorIfRtl(greyScale(GlobalResources::getImage(L"leftNewer" )))); - m_bitmapRightNewer->SetBitmap(mirrorIfRtl(greyScale(GlobalResources::getImage(L"rightNewer")))); - m_bitmapDifferent ->SetBitmap(mirrorIfRtl(greyScale(GlobalResources::getImage(L"different" )))); - m_bitmapConflict ->SetBitmap(mirrorIfRtl(greyScale(GlobalResources::getImage(L"conflict" )))); - m_bitmapDatabase ->SetBitmap(GlobalResources::getImage(wxT("database"))); - bSizer201->Layout(); //wxButtonWithImage size might have changed +SyncCfgDialog::Config SyncCfgDialog::getConfig() const +{ + Config output; - m_buttonOK->SetFocus(); + //write configuration to main dialog + output.syncCfg.directionCfg = directionCfg; + output.syncCfg.handleDeletion = handleDeletion; + output.syncCfg.versioningDirectory = utfCvrtTo<Zstring>(versioningFolder.getName()); + output.syncCfg.versioningStyle = getEnumVal(enumVersioningStyle, *m_choiceVersioningStyle), - Fit(); + ////get single parameter "version limit" from both checkbox and spin ctrl: + // output.syncCfg.versionCountLimit = m_checkBoxVersionsLimit->GetValue() ? m_spinCtrlVersionsLimit->GetValue() : -1; + + output.onGuiError = onGuiError; + + output.onCompletion = m_comboBoxExecFinished->getValue(); + return output; } -//################################################################################################################# void SyncCfgDialog::updateGui() { - //wxWindowUpdateLocker dummy(this); //avoid display distortion + wxWindowUpdateLocker dummy(this); //avoid display distortion wxWindowUpdateLocker dummy2(m_panelVersioning); //avoid display distortion wxWindowUpdateLocker dummy3(m_bpButtonLeftOnly); wxWindowUpdateLocker dummy4(m_bpButtonRightOnly); @@ -266,7 +307,9 @@ void SyncCfgDialog::updateGui() wxWindowUpdateLocker dummy7(m_bpButtonDifferent); wxWindowUpdateLocker dummy8(m_bpButtonConflict); - updateConfigIcons(directionCfg, + const Config cfg = getConfig(); //resolve parameter ownership: some on GUI controls, others member variables + + updateConfigIcons(cfg.syncCfg.directionCfg, m_bpButtonLeftOnly, m_bpButtonRightOnly, m_bpButtonLeftNewer, @@ -275,10 +318,10 @@ void SyncCfgDialog::updateGui() m_bpButtonConflict); //display only relevant sync options - m_bitmapDatabase ->Show(directionCfg.var == DirectionConfig::AUTOMATIC); - sbSizerSyncDirections->Show(directionCfg.var != DirectionConfig::AUTOMATIC); + m_bitmapDatabase ->Show(cfg.syncCfg.directionCfg.var == DirectionConfig::AUTOMATIC); + sbSizerSyncDirections->Show(cfg.syncCfg.directionCfg.var != DirectionConfig::AUTOMATIC); - switch (cmpVariant) + switch (compareVar_) //sbSizerSyncDirections->Show resets child sizers! { case CMP_BY_TIME_SIZE: bSizerDifferent ->Show(false); @@ -301,7 +344,7 @@ void SyncCfgDialog::updateGui() m_toggleBtnUpdate ->SetValue(false); m_toggleBtnCustom ->SetValue(false); - switch (directionCfg.var) + switch (cfg.syncCfg.directionCfg.var) { case DirectionConfig::AUTOMATIC: m_toggleBtnAutomatic->SetValue(true); @@ -324,7 +367,7 @@ void SyncCfgDialog::updateGui() m_toggleBtnPermanent ->SetValue(false); m_toggleBtnRecycler ->SetValue(false); m_toggleBtnVersioning->SetValue(false); - switch (handleDeletion) + switch (cfg.syncCfg.handleDeletion) { case DELETE_PERMANENTLY: m_toggleBtnPermanent->SetValue(true); @@ -337,14 +380,37 @@ void SyncCfgDialog::updateGui() break; } - m_panelVersioning ->Show(handleDeletion == DELETE_TO_VERSIONING); - m_checkBoxVersionsLimit->Show(handleDeletion == DELETE_TO_VERSIONING); - m_spinCtrlVersionsLimit->Show(handleDeletion == DELETE_TO_VERSIONING); - m_spinCtrlVersionsLimit->Enable(m_checkBoxVersionsLimit->GetValue()); + const bool versioningSelected = cfg.syncCfg.handleDeletion == DELETE_TO_VERSIONING; + bSizerVersioningNamingConvention->Show(versioningSelected); + bSizerVersioningStyle ->Show(versioningSelected); + m_panelVersioning ->Show(versioningSelected); + + if (versioningSelected) + { + updateTooltipEnumVal(enumVersioningStyle, *m_choiceVersioningStyle); + + const std::wstring pathSep = utfCvrtTo<std::wstring>(FILE_NAME_SEPARATOR); + switch (cfg.syncCfg.versioningStyle) + { + case VER_STYLE_REPLACE: + setText(*m_staticTextNamingCvtPart1, pathSep + _("Folder") + pathSep + _("File") + L".doc"); + setText(*m_staticTextNamingCvtPart2Bold, L""); + setText(*m_staticTextNamingCvtPart3, L""); + break; + + case VER_STYLE_ADD_TIMESTAMP: + setText(*m_staticTextNamingCvtPart1, pathSep + _("Folder") + pathSep + _("File") + L".doc "); + setText(*m_staticTextNamingCvtPart2Bold, _("YYYY-MM-DD hhmmss")); + setText(*m_staticTextNamingCvtPart3, L".doc"); + break; + } + } + + //m_spinCtrlVersionsLimit->Enable(m_checkBoxVersionsLimit->GetValue()); //enabled status is *not* directly dependent from resolved config! (but transitively) m_toggleBtnErrorIgnore->SetValue(false); m_toggleBtnErrorPopup ->SetValue(false); - switch (handleGuiError) + switch (cfg.onGuiError) { case ON_GUIERROR_IGNORE: m_toggleBtnErrorIgnore->SetValue(true); @@ -362,19 +428,17 @@ void SyncCfgDialog::updateGui() void SyncCfgDialog::OnApply(wxCommandEvent& event) { + const Config cfg = getConfig(); + //write configuration to main dialog - syncCfgOut.directionCfg = directionCfg; - syncCfgOut.handleDeletion = handleDeletion; - syncCfgOut.versioningDirectory = utfCvrtTo<Zstring>(versioningFolder.getName()); - //get single parameter "version limit" from both checkbox and spin ctrl: - syncCfgOut.versionCountLimit = m_checkBoxVersionsLimit->GetValue() ? m_spinCtrlVersionsLimit->GetValue() : -1; + outSyncCfg = cfg.syncCfg; - if (refHandleError) - *refHandleError = handleGuiError; + if (outOptOnGuiError) + *outOptOnGuiError = cfg.onGuiError; - if (refExecWhenFinished) + if (outOptExecWhenFinished) { - *refExecWhenFinished->command = m_comboBoxExecFinished->getValue(); + *outOptExecWhenFinished->command = cfg.onCompletion; //a good place to commit current "on completion" history item m_comboBoxExecFinished->addItemHistory(); } diff --git a/ui/tree_view.cpp b/ui/tree_view.cpp index 119091a0..5a63e579 100644 --- a/ui/tree_view.cpp +++ b/ui/tree_view.cpp @@ -268,10 +268,10 @@ void TreeView::applySubView(std::vector<RootNodeImpl>&& newView) zen::hash_set<const HierarchyObject*> expandedNodes; if (!flatTree.empty()) { - auto iter = flatTree.begin(); - for (auto iterNext = flatTree.begin() + 1; iterNext != flatTree.end(); ++iterNext, ++iter) - if (iter->level_ < iterNext->level_) - if (auto hierObj = getHierAlias(*iter)) + auto it = flatTree.begin(); + for (auto iterNext = flatTree.begin() + 1; iterNext != flatTree.end(); ++iterNext, ++it) + if (it->level_ < iterNext->level_) + if (auto hierObj = getHierAlias(*it)) expandedNodes.insert(hierObj); } @@ -1048,19 +1048,19 @@ private: { auto colAttr = grid_.getColumnConfig(); - for (auto iter = colAttr.begin(); iter != colAttr.end(); ++iter) - if (iter->type_ == ca.type_) + for (auto it = colAttr.begin(); it != colAttr.end(); ++it) + if (it->type_ == ca.type_) { - iter->visible_ = !ca.visible_; + it->visible_ = !ca.visible_; grid_.setColumnConfig(colAttr); return; } }; const auto& colAttr = grid_.getColumnConfig(); - for (auto iter = colAttr.begin(); iter != colAttr.end(); ++iter) + for (auto it = colAttr.begin(); it != colAttr.end(); ++it) { - const Grid::ColumnAttribute& ca = *iter; + const Grid::ColumnAttribute& ca = *it; menu.addCheckBox(getColumnLabel(ca.type_), [ca, toggleColumn]() { toggleColumn(ca); }, ca.visible_, ca.type_ != static_cast<ColumnType>(COL_TYPE_NAVI_DIRECTORY)); //do not allow user to hide file name column! diff --git a/version/version.h b/version/version.h index fe73caec..12a2a584 100644 --- a/version/version.h +++ b/version/version.h @@ -3,7 +3,7 @@ namespace zen { -const wchar_t currentVersion[] = L"5.10"; //internal linkage! +const wchar_t currentVersion[] = L"5.11"; //internal linkage! } #endif diff --git a/version/version.rc b/version/version.rc index ea24eb33..edfff0a6 100644 --- a/version/version.rc +++ b/version/version.rc @@ -1,2 +1,2 @@ -#define FREEFILESYNC_VER 5,10,0,0 -#define FREEFILESYNC_VER_STR "5.10\0" +#define FREEFILESYNC_VER 5,11,0,0 +#define FREEFILESYNC_VER_STR "5.11\0" diff --git a/wx+/context_menu.h b/wx+/context_menu.h index cb6cb86d..2557737a 100644 --- a/wx+/context_menu.h +++ b/wx+/context_menu.h @@ -30,9 +30,9 @@ class ContextMenu : private wxEvtHandler public: ContextMenu() : menu(new wxMenu) {} - void addItem(const wxString& label, const std::function<void()>& command, const wxBitmap* bmp = nullptr, bool enabled = true, int id = wxID_ANY) + void addItem(const wxString& label, const std::function<void()>& command, const wxBitmap* bmp = nullptr, bool enabled = true) { - wxMenuItem* newItem = new wxMenuItem(menu.get(), id, label); //menu owns item! + wxMenuItem* newItem = new wxMenuItem(menu.get(), wxID_ANY, label); //menu owns item! if (bmp) newItem->SetBitmap(*bmp); //do not set AFTER appending item! wxWidgets screws up for yet another crappy reason menu->Append(newItem); if (!enabled) newItem->Enable(false); //do not enable BEFORE appending item! wxWidgets screws up for yet another crappy reason diff --git a/wx+/graph.cpp b/wx+/graph.cpp index 6fefeb93..30677c80 100644 --- a/wx+/graph.cpp +++ b/wx+/graph.cpp @@ -10,6 +10,7 @@ #include <numeric> #include <zen/basic_math.h> #include <wx/settings.h> +#include "rtl.h" using namespace zen; using namespace numeric; @@ -17,10 +18,11 @@ using namespace numeric; //todo: support zoom via mouse wheel +warn_static("reviewreviewreviewreviewreview") const wxEventType zen::wxEVT_GRAPH_SELECTION = wxNewEventType(); -const std::shared_ptr<LabelFormatter> Graph2D::GraphAttributes::defaultFormat = std::make_shared<DecimalNumberFormatter>(); //for some buggy reason MSVC isn't able to use a temporary as a default argument instead +const std::shared_ptr<LabelFormatter> Graph2D::MainAttributes::defaultFormat = std::make_shared<DecimalNumberFormatter>(); //for some buggy reason MSVC isn't able to use a temporary as a default argument namespace { @@ -61,8 +63,7 @@ namespace { wxColor getDefaultColor(size_t pos) { - pos %= 10; - switch (pos) + switch (pos % 10) { case 0: return wxColor(0, 69, 134); //blue @@ -90,137 +91,118 @@ wxColor getDefaultColor(size_t pos) } -void drawYLabel(wxDC& dc, double& yMin, double& yMax, const wxRect& clientArea, int labelWidth, bool drawLeft, const LabelFormatter& labelFmt) //clientArea := y-label + data window +class ConvertCoord //convert between screen and input data coordinates { - //note: DON'T use wxDC::GetSize()! DC may be larger than visible area! - if (clientArea.GetHeight() <= 0 || clientArea.GetWidth() <= 0) - return; - - int optimalBlockHeight = 3 * dc.GetMultiLineTextExtent(L"1").GetHeight(); - - double valRangePerBlock = (yMax - yMin) * optimalBlockHeight / clientArea.GetHeight(); //proposal - valRangePerBlock = labelFmt.getOptimalBlockSize(valRangePerBlock); - if (isNull(valRangePerBlock)) - return; - - double yMinNew = std::floor(yMin / valRangePerBlock) * valRangePerBlock; - double yMaxNew = std::ceil (yMax / valRangePerBlock) * valRangePerBlock; - int blockCount = numeric::round((yMaxNew - yMinNew) / valRangePerBlock); - if (blockCount == 0) return; +public: + ConvertCoord(double valMin, double valMax, size_t screenSize) : + min_(valMin), + scaleToReal(screenSize == 0 ? 0 : (valMax - valMin) / screenSize), + scaleToScr(isNull((valMax - valMin)) ? 0 : screenSize / (valMax - valMin)) {} - yMin = yMinNew; //inform about adjusted y value range - yMax = yMaxNew; + double screenToReal(double screenPos) const //input value: [0, screenSize - 1] + { + return screenPos * scaleToReal + min_; //come close to valMax, but NEVER reach it! + } + double realToScreen(double realPos) const //return screen position in pixel (but with double precision!) + { + return (realPos - min_) * scaleToScr; + } - //draw labels + int realToScreenRound(double realPos) const //useful to find "proper" y-pixel positions { - wxDCPenChanger dummy(dc, wxPen(wxColor(192, 192, 192))); //light grey - wxDCTextColourChanger dummy2(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); //use user setting for labels - dc.SetFont(wxFont(wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, L"Arial")); + return numeric::round(realToScreen(realPos)); + } - const int posLabel = drawLeft ? 0 : clientArea.GetWidth() - labelWidth; - const int posDataArea = drawLeft ? labelWidth : 0; - const int widthDataArea = clientArea.GetWidth() - labelWidth; +private: + double min_; + double scaleToReal; + double scaleToScr; +}; - const wxPoint origin = clientArea.GetTopLeft(); - for (int i = 1; i < blockCount; ++i) +//enlarge range to a multiple of a "useful" block size +void widenRange(double& valMin, double& valMax, //in/out + int& blockCount, //out + int graphAreaSize, //in pixel + int optimalBlockSize, // + const LabelFormatter& labelFmt) +{ + if (graphAreaSize > 0) + { + double valRangePerBlock = (valMax - valMin) * optimalBlockSize / graphAreaSize; //proposal + valRangePerBlock = labelFmt.getOptimalBlockSize(valRangePerBlock); + if (!isNull(valRangePerBlock)) { - //draw grey horizontal lines - const int y = i * static_cast<double>(clientArea.GetHeight()) / blockCount; - if (widthDataArea > 0) - dc.DrawLine(wxPoint(posDataArea, y) + origin, wxPoint(posDataArea + widthDataArea - 1, y) + origin); - - //draw y axis labels - const wxString label = labelFmt.formatText(yMaxNew - i * valRangePerBlock ,valRangePerBlock); - wxSize labelExtent = dc.GetMultiLineTextExtent(label); - - labelExtent.x = std::max(labelExtent.x, labelWidth); //enlarge if possible to center horizontally - - dc.DrawLabel(label, wxRect(wxPoint(posLabel, y - labelExtent.GetHeight() / 2) + origin, labelExtent), wxALIGN_CENTRE); + valMin = std::floor(valMin / valRangePerBlock) * valRangePerBlock; + valMax = std::ceil (valMax / valRangePerBlock) * valRangePerBlock; + blockCount = numeric::round((valMax - valMin) / valRangePerBlock); //"round" to avoid IEEE 754 surprises + return; } } + blockCount = 0; } -void drawXLabel(wxDC& dc, double& xMin, double& xMax, const wxRect& clientArea, int labelHeight, bool drawBottom, const LabelFormatter& labelFmt) //clientArea := x-label + data window +void drawXLabel(wxDC& dc, double xMin, double xMax, int blockCount, const ConvertCoord& cvrtX, const wxRect& graphArea, const wxRect& labelArea, const LabelFormatter& labelFmt) { - //note: DON'T use wxDC::GetSize()! DC may be larger than visible area! - if (clientArea.GetHeight() <= 0 || clientArea.GetWidth() <= 0) - return; - - const int optimalBlockWidth = dc.GetMultiLineTextExtent(L"100000000000000").GetWidth(); - - double valRangePerBlock = (xMax - xMin) * optimalBlockWidth / clientArea.GetWidth(); //proposal - valRangePerBlock = labelFmt.getOptimalBlockSize(valRangePerBlock); - if (isNull(valRangePerBlock)) + assert(graphArea.width == labelArea.width && graphArea.x == labelArea.x); + if (blockCount <= 0) return; - double xMinNew = std::floor(xMin / valRangePerBlock) * valRangePerBlock; - double xMaxNew = std::ceil (xMax / valRangePerBlock) * valRangePerBlock; - int blockCount = numeric::round((xMaxNew - xMinNew) / valRangePerBlock); - if (blockCount == 0) - return; + wxDCPenChanger dummy(dc, wxPen(wxColor(192, 192, 192))); //light grey + wxDCTextColourChanger dummy2(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); //use user setting for labels + dc.SetFont(wxFont(wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, L"Arial")); - xMin = xMinNew; //inform about adjusted x value range - xMax = xMaxNew; + const double valRangePerBlock = (xMax - xMin) / blockCount; - //draw labels + for (int i = 1; i < blockCount; ++i) { - wxDCPenChanger dummy(dc, wxPen(wxColor(192, 192, 192))); //light grey - wxDCTextColourChanger dummy2(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); //use user setting for labels - dc.SetFont(wxFont(wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, L"Arial")); + //draw grey vertical lines + const double valX = xMin + i * valRangePerBlock; //step over raw data, not graph area pixels, to not lose precision + const int x = graphArea.x + cvrtX.realToScreenRound(valX); - const int posLabel = drawBottom ? clientArea.GetHeight() - labelHeight : 0; - const int posDataArea = drawBottom ? 0 : labelHeight; - const int heightDataArea = clientArea.GetHeight() - labelHeight; + if (graphArea.height > 0) + dc.DrawLine(wxPoint(x, graphArea.y), wxPoint(x, graphArea.y + graphArea.height)); - const wxPoint origin = clientArea.GetTopLeft(); - - for (int i = 1; i < blockCount; ++i) - { - //draw grey vertical lines - const int x = i * static_cast<double>(clientArea.GetWidth()) / blockCount; - if (heightDataArea > 0) - dc.DrawLine(wxPoint(x, posDataArea) + origin, wxPoint(x, posDataArea + heightDataArea - 1) + origin); - - //draw x axis labels - const wxString label = labelFmt.formatText(xMin + i * valRangePerBlock ,valRangePerBlock); - wxSize labelExtent = dc.GetMultiLineTextExtent(label); - - labelExtent.y = std::max(labelExtent.y, labelHeight); //enlarge if possible to center vertically - - dc.DrawLabel(label, wxRect(wxPoint(x - labelExtent.GetWidth() / 2, posLabel) + origin, labelExtent), wxALIGN_CENTRE); - } + //draw x axis labels + const wxString label = labelFmt.formatText(xMin + i * valRangePerBlock, valRangePerBlock); + wxSize labelExtent = dc.GetMultiLineTextExtent(label); + dc.DrawText(label, wxPoint(x - labelExtent.GetWidth() / 2, labelArea.y + (labelArea.height - labelExtent.GetHeight()) / 2)); //center } } -class ConvertCoord //convert between screen and actual coordinates +void drawYLabel(wxDC& dc, double yMin, double yMax, int blockCount, const ConvertCoord& cvrtY, const wxRect& graphArea, const wxRect& labelArea, const LabelFormatter& labelFmt) { -public: - ConvertCoord(double valMin, double valMax, size_t screenSize) : - min_(valMin), - scaleToReal(screenSize == 0 ? 0 : (valMax - valMin) / screenSize), - scaleToScr(isNull(valMax - valMin) ? 0 : screenSize / (valMax - valMin)) {} + assert(graphArea.height == labelArea.height && graphArea.y == labelArea.y); + if (blockCount <= 0) + return; - double screenToReal(double screenPos) const //input value: [0, screenSize - 1] - { - return screenPos * scaleToReal + min_; //come close to valMax, but NEVER reach it! - } - double realToScreen(double realPos) const //return screen position in pixel (but with double precision!) + wxDCPenChanger dummy(dc, wxPen(wxColor(192, 192, 192))); //light grey + wxDCTextColourChanger dummy2(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); //use user setting for labels + dc.SetFont(wxFont(wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, L"Arial")); + + const double valRangePerBlock = (yMax - yMin) / blockCount; + + for (int i = 1; i < blockCount; ++i) { - return (realPos - min_) * scaleToScr; - } + //draw grey horizontal lines + const double valY = yMin + i * valRangePerBlock; //step over raw data, not graph area pixels, to not lose precision + const int y = graphArea.y + cvrtY.realToScreenRound(valY); -private: - const double min_; - const double scaleToReal; - const double scaleToScr; -}; + if (graphArea.width > 0) + dc.DrawLine(wxPoint(graphArea.x, y), wxPoint(graphArea.x + graphArea.width, y)); + + //draw y axis labels + const wxString label = labelFmt.formatText(valY, valRangePerBlock); + wxSize labelExtent = dc.GetMultiLineTextExtent(label); + dc.DrawText(label, wxPoint(labelArea.x + (labelArea.width - labelExtent.GetWidth()) / 2, y - labelExtent.GetHeight() / 2)); //center + } +} -template <class StdCont> -void subsample(StdCont& cont, size_t factor) +template <class StdContainter> +void subsample(StdContainter& cont, size_t factor) { if (factor <= 1) return; @@ -238,8 +220,7 @@ Graph2D::Graph2D(wxWindow* parent, const wxPoint& pos, const wxSize& size, long style, - const wxString& name) : - wxPanel(parent, winid, pos, size, style, name) + const wxString& name) : wxPanel(parent, winid, pos, size, style, name) { Connect(wxEVT_PAINT, wxPaintEventHandler(Graph2D::onPaintEvent), nullptr, this); Connect(wxEVT_SIZE, wxSizeEventHandler (Graph2D::onSizeEvent ), nullptr, this); @@ -261,6 +242,14 @@ Graph2D::Graph2D(wxWindow* parent, } +void Graph2D::onPaintEvent(wxPaintEvent& event) +{ + //wxAutoBufferedPaintDC dc(this); -> this one happily fucks up for RTL layout by not drawing the first column (x = 0)! + BufferedPaintDC dc(*this, doubleBuffer); + render(dc); +} + + void Graph2D::OnMouseLeftDown(wxMouseEvent& event) { activeSel.reset(new MouseSelection(*this, event.GetPosition())); @@ -309,16 +298,16 @@ void Graph2D::OnMouseCaptureLost(wxMouseCaptureLostEvent& event) } -void Graph2D::setData(const std::shared_ptr<GraphData>& data, const LineAttributes& la) +void Graph2D::setData(const std::shared_ptr<GraphData>& data, const CurveAttributes& la) { curves_.clear(); addData(data, la); } -void Graph2D::addData(const std::shared_ptr<GraphData>& data, const LineAttributes& la) +void Graph2D::addData(const std::shared_ptr<GraphData>& data, const CurveAttributes& la) { - LineAttributes newAttr = la; + CurveAttributes newAttr = la; if (newAttr.autoColor) newAttr.setColor(getDefaultColor(curves_.size())); curves_.push_back(std::make_pair(data, newAttr)); @@ -348,34 +337,32 @@ void Graph2D::render(wxDC& dc) const // wxPanel::GetClassDefaultAttributes().colBg : // wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE); const wxColor backColor = GetBackgroundColour(); //user-configurable! - - //wxDCBrushChanger dummy(dc, *wxTRANSPARENT_BRUSH); //sigh, who *invents* this stuff??? -> workaround for issue with wxBufferedPaintDC - DcBackgroundChanger dummy(dc, backColor); + DcBackgroundChanger dummy(dc, backColor); //use wxDC::SetBackground instead of wxDC::SetBrush dc.Clear(); } //note: DON'T use wxDC::GetSize()! DC may be larger than visible area! /* ----------------------- - |y-label |data window | - |---------------------- | | x-label | ----------------------- + |y-label | graph area | + |---------------------- */ - wxRect dataArea = GetClientSize(); //data window only - wxRect yLabelArea = GetClientSize(); //y-label + data window - wxRect xLabelArea = GetClientSize(); //x-label + data window + const wxRect clientRect = GetClientSize(); //data window only + wxRect graphArea = clientRect; //data window only + int xLabelPosY = clientRect.y; + int yLabelPosX = clientRect.x; switch (attr.labelposX) { case X_LABEL_TOP: - dataArea.y += attr.labelHeightX; - dataArea.height -= attr.labelHeightX; - yLabelArea = dataArea; + graphArea.y += attr.xLabelHeight; + graphArea.height -= attr.xLabelHeight; break; case X_LABEL_BOTTOM: - dataArea.height -= attr.labelHeightX; - yLabelArea = dataArea; + xLabelPosY += clientRect.height - attr.xLabelHeight; + graphArea.height -= attr.xLabelHeight; break; case X_LABEL_NONE: break; @@ -384,14 +371,12 @@ void Graph2D::render(wxDC& dc) const switch (attr.labelposY) { case Y_LABEL_LEFT: - dataArea .x += attr.labelWidthY; - xLabelArea.x += attr.labelWidthY; - dataArea .width -= attr.labelWidthY; - xLabelArea.width -= attr.labelWidthY; + graphArea.x += attr.yLabelWidth; + graphArea.width -= attr.yLabelWidth; break; case Y_LABEL_RIGHT: - dataArea .width -= attr.labelWidthY; - xLabelArea.width -= attr.labelWidthY; + yLabelPosX += clientRect.width - attr.yLabelWidth; + graphArea.width -= attr.yLabelWidth; break; case Y_LABEL_NONE: break; @@ -401,123 +386,189 @@ void Graph2D::render(wxDC& dc) const //paint actual graph background (without labels) DcBackgroundChanger dummy(dc, *wxWHITE); //accessibility: we have to set both back- and foreground colors or none at all! wxDCPenChanger dummy2(dc, wxColour(130, 135, 144)); //medium grey, the same Win7 uses for other frame borders - //dc.DrawRectangle(static_cast<const wxRect&>(dataArea).Inflate(1, 1)); //correct wxWidgets design mistakes - dc.DrawRectangle(dataArea); - dataArea.Deflate(1, 1); //do not draw on border + //dc.DrawRectangle(static_cast<const wxRect&>(graphArea).Inflate(1, 1)); //correct wxWidgets design mistakes + dc.DrawRectangle(graphArea); + graphArea.Deflate(1, 1); //do not draw on border } + //set label areas respecting graph area border! + wxRect xLabelArea(graphArea.x, xLabelPosY, graphArea.width, attr.xLabelHeight); + wxRect yLabelArea(yLabelPosX, graphArea.y, attr.yLabelWidth, graphArea.height); + + const wxPoint graphAreaOrigin = graphArea.GetTopLeft(); + //detect x value range - double minWndX = attr.minXauto ? std::numeric_limits<double>::infinity() : attr.minX; //automatic: ensure values are initialized by first curve - double maxWndX = attr.maxXauto ? -std::numeric_limits<double>::infinity() : attr.maxX; // + double minX = attr.minXauto ? std::numeric_limits<double>::infinity() : attr.minX; //automatic: ensure values are initialized by first curve + double maxX = attr.maxXauto ? -std::numeric_limits<double>::infinity() : attr.maxX; // if (!curves_.empty()) - for (auto iter = curves_.begin(); iter != curves_.end(); ++iter) - if (iter->first.get()) + for (auto it = curves_.begin(); it != curves_.end(); ++it) + if (it->first.get()) { - const GraphData& graph = *iter->first; + const GraphData& graph = *it->first; assert(graph.getXBegin() <= graph.getXEnd() + 1.0e-9); - //GCC fucks up bad when comparing two *binary identical* doubles and finds "begin > end" with diff of 1e-18 + //GCC fucks up badly when comparing two *binary identical* doubles and finds "begin > end" with diff of 1e-18 if (attr.minXauto) - minWndX = std::min(minWndX, graph.getXBegin()); + minX = std::min(minX, graph.getXBegin()); if (attr.maxXauto) - maxWndX = std::max(maxWndX, graph.getXEnd()); + maxX = std::max(maxX, graph.getXEnd()); } - if (minWndX < maxWndX && maxWndX - minWndX < std::numeric_limits<double>::infinity()) //valid x-range + if (minX < maxX && maxX - minX < std::numeric_limits<double>::infinity()) //valid x-range { - if (attr.labelposX != X_LABEL_NONE && //minWndX, maxWndX are just a suggestion, drawXLabel may enlarge them! - attr.labelFmtX.get()) - drawXLabel(dc, minWndX, maxWndX, xLabelArea, attr.labelHeightX, attr.labelposX == X_LABEL_BOTTOM, *attr.labelFmtX); - + int blockCountX = 0; + //enlarge minX, maxX to a multiple of a "useful" block size + if (attr.labelposX != X_LABEL_NONE && attr.labelFmtX.get()) + widenRange(minX, maxX, //in/out + blockCountX, //out + graphArea.width, + dc.GetTextExtent(L"100000000000000").GetWidth(), + *attr.labelFmtX); //detect y value range std::vector<std::pair<std::vector<double>, int>> yValuesList(curves_.size()); - double minWndY = attr.minYauto ? std::numeric_limits<double>::infinity() : attr.minY; //automatic: ensure values are initialized by first curve - double maxWndY = attr.maxYauto ? -std::numeric_limits<double>::infinity() : attr.maxY; // - if (!curves_.empty()) + double minY = attr.minYauto ? std::numeric_limits<double>::infinity() : attr.minY; //automatic: ensure values are initialized by first curve + double maxY = attr.maxYauto ? -std::numeric_limits<double>::infinity() : attr.maxY; // { const int AVG_FACTOR = 2; //some averaging of edgy input data to smoothen behavior on window resize - const ConvertCoord cvrtX(minWndX, maxWndX, dataArea.width * AVG_FACTOR); - - for (GraphList::const_iterator j = curves_.begin(); j != curves_.end(); ++j) - { - if (!j->first) continue; - const GraphData& graph = *j->first; + const ConvertCoord cvrtX(minX, maxX, graphArea.width * AVG_FACTOR); - std::vector<double>& yValues = yValuesList[j - curves_.begin()].first; //actual y-values - int& offset = yValuesList[j - curves_.begin()].second; //x-value offset in pixel + for (auto it = curves_.begin(); it != curves_.end(); ++it) + if (it->first.get()) { - const double xBegin = graph.getXBegin(); - const double xEnd = graph.getXEnd(); + const size_t index = it - curves_.begin(); + const GraphData& graph = *it->first; - const int posFirst = std::ceil (cvrtX.realToScreen(std::max(xBegin, minWndX))); //evaluate visible area only and make sure to not step one pixel before xbegin()! - const int postLast = std::floor(cvrtX.realToScreen(std::min(xEnd, maxWndX))); //apply min/max *before* calling realToScreen()! + std::vector<double>& yValues = yValuesList[index].first; //actual y-values + int& offsetX = yValuesList[index].second; //x-value offset in pixel + { + const double xBegin = graph.getXBegin(); + const double xEnd = graph.getXEnd(); - for (int i = posFirst; i < postLast; ++i) - yValues.push_back(graph.getValue(cvrtX.screenToReal(i))); + const int posFirst = std::ceil(cvrtX.realToScreen(std::max(xBegin, minX))); //apply min/max *before* calling realToScreen()! + const int posLast = std::ceil(cvrtX.realToScreen(std::min(xEnd, maxX))); //do not step outside [xBegin, xEnd) range => 2 x ceil! + //conversion from std::ceil double to int is loss-free for full value range of int! tested successfully on MSVC - subsample(yValues, AVG_FACTOR); - offset = posFirst / AVG_FACTOR; - } + for (int i = posFirst; i < posLast; ++i) + yValues.push_back(graph.getValue(cvrtX.screenToReal(i))); - if (!yValues.empty()) - { - if (attr.minYauto) - minWndY = std::min(minWndY, *std::min_element(yValues.begin(), yValues.end())); - if (attr.maxYauto) - maxWndY = std::max(maxWndY, *std::max_element(yValues.begin(), yValues.end())); + subsample(yValues, AVG_FACTOR); + offsetX = posFirst / AVG_FACTOR; + } + + if (!yValues.empty()) + { + if (attr.minYauto) + minY = std::min(minY, *std::min_element(yValues.begin(), yValues.end())); + if (attr.maxYauto) + maxY = std::max(maxY, *std::max_element(yValues.begin(), yValues.end())); + } } - } } - if (minWndY < maxWndY) //valid y-range + if (minY < maxY) //valid y-range { - if (attr.labelposY != Y_LABEL_NONE && //minWnd, maxWndY are just a suggestion, drawYLabel may enlarge them! - attr.labelFmtY.get()) - drawYLabel(dc, minWndY, maxWndY, yLabelArea, attr.labelWidthY, attr.labelposY == Y_LABEL_LEFT, *attr.labelFmtY); - - const ConvertCoord cvrtY(minWndY, maxWndY, dataArea.height <= 0 ? 0 : dataArea.height - 1); //both minY/maxY values will be actually evaluated in contrast to maxX => - 1 - const ConvertCoord cvrtX(minWndX, maxWndX, dataArea.width); + int blockCountY = 0; + //enlarge minY, maxY to a multiple of a "useful" block size + if (attr.labelposY != Y_LABEL_NONE && attr.labelFmtY.get()) + widenRange(minY, maxY, //in/out + blockCountY, //out + graphArea.height, + 3 * dc.GetTextExtent(L"1").GetHeight(), + *attr.labelFmtY); + + const ConvertCoord cvrtX(minX, maxX, graphArea.width); //map [minX, maxX) to [0, graphWidth) + const ConvertCoord cvrtY(maxY, minY, graphArea.height <= 0 ? 0 : graphArea.height - 1); //map [minY, maxY] to [graphHeight - 1, 0] + + //calculate curve coordinates on graph area + auto getCurvePoints = [&](size_t index, std::vector<wxPoint>& points) + { + if (index < yValuesList.size()) + { + const std::vector<double>& yValues = yValuesList[index].first; //actual y-values + const int offsetX = yValuesList[index].second; //x-value offset in pixel - const wxPoint dataOrigin = dataArea.GetTopLeft(); + for (auto i = yValues.begin(); i != yValues.end(); ++i) + points.push_back(wxPoint(offsetX + (i - yValues.begin()), + cvrtY.realToScreenRound(*i)) + graphAreaOrigin); + } + }; //update active mouse selection if (activeSel.get() && - dataArea.width > 0 && - dataArea.height > 0) + graphArea.width > 0 && graphArea.height > 0) { - wxPoint startPos = activeSel->getStartPos() - dataOrigin; //pos relative to dataArea - wxPoint currentPos = activeSel->refCurrentPos() - dataOrigin; + wxPoint startPos = activeSel->getStartPos() - graphAreaOrigin; //pos relative to graphArea + wxPoint currentPos = activeSel->refCurrentPos() - graphAreaOrigin; - //normalize positions - confine(startPos .x, 0, dataArea.width); //allow for one past the end(!) to enable "full range selections" - confine(currentPos.x, 0, dataArea.width); // + //normalize positions: a mouse selection is symmetric and *not* an half-open range! + confine(startPos .x, 0, graphArea.width - 1); + confine(currentPos.x, 0, graphArea.width - 1); + confine(startPos .y, 0, graphArea.height - 1); + confine(currentPos.y, 0, graphArea.height - 1); - confine(startPos .y, 0, dataArea.height); // - confine(currentPos.y, 0, dataArea.height); // + auto& from = activeSel->refSelection().from; + auto& to = activeSel->refSelection().to; //save current selection as double coordinates - activeSel->refSelection().from = SelectionBlock::Point(cvrtX.screenToReal(startPos.x + 0.5), //+0.5 start selection in the middle of a pixel - cvrtY.screenToReal(startPos.y + 0.5)); - activeSel->refSelection().to = SelectionBlock::Point(cvrtX.screenToReal(currentPos.x + 0.5), - cvrtY.screenToReal(currentPos.y + 0.5)); + from.x = cvrtX.screenToReal(startPos .x + (startPos.x <= currentPos.x ? 0 : 1)); // use full pixel range for selection! + to .x = cvrtX.screenToReal(currentPos.x + (startPos.x <= currentPos.x ? 1 : 0)); + + from.y = cvrtY.screenToReal(startPos .y + (startPos.y <= currentPos.y ? 0 : 1)); + to .y = cvrtY.screenToReal(currentPos.y + (startPos.y <= currentPos.y ? 1 : 0)); } - //draw all currently set mouse selections (including active selection) + + //#################### begin drawing #################### + //1. draw colored area under curves + for (auto it = curves_.begin(); it != curves_.end(); ++it) + if (it->second.drawCurveArea) + { + std::vector<wxPoint> points; + getCurvePoints(it - curves_.begin(), points); + if (!points.empty()) + { + points.push_back(wxPoint(points.back ().x, graphArea.GetBottom())); //add lower right and left corners + points.push_back(wxPoint(points.front().x, graphArea.GetBottom())); // + + wxDCBrushChanger dummy(dc, it->second.fillColor); + wxDCPenChanger dummy2(dc, it->second.fillColor); + dc.DrawPolygon(static_cast<int>(points.size()), &points[0]); + } + } + + //2. draw all currently set mouse selections (including active selection) std::vector<SelectionBlock> allSelections = oldSel; if (activeSel) allSelections.push_back(activeSel->refSelection()); { - wxColor colSelect(168, 202, 236); //light blue - //wxDCBrushChanger dummy(dc, *wxTRANSPARENT_BRUSH); - wxDCBrushChanger dummy(dc, colSelect); //alpha channel (not yet) supported on wxMSW, so draw selection before graphs - - wxDCPenChanger dummy2(dc, colSelect); + //alpha channel (not yet) supported on wxMSW, so draw selection before curves + wxDCBrushChanger dummy(dc, wxColor(168, 202, 236)); //light blue + wxDCPenChanger dummy2(dc, wxColor(51, 153, 255)); //dark blue for (auto i = allSelections.begin(); i != allSelections.end(); ++i) { - const wxPoint pixelFrom = wxPoint(cvrtX.realToScreen(i->from.x), - cvrtY.realToScreen(i->from.y)) + dataOrigin; - const wxPoint pixelTo = wxPoint(cvrtX.realToScreen(i->to.x), - cvrtY.realToScreen(i->to.y)) + dataOrigin; + //harmonize with active mouse selection above! + wxPoint pixelFrom(cvrtX.realToScreenRound(i->from.x), + cvrtY.realToScreenRound(i->from.y)); + wxPoint pixelTo(cvrtX.realToScreenRound(i->to.x), + cvrtY.realToScreenRound(i->to.y)); + //convert half-open to inclusive ranges for use with wxDC::DrawRectangle + if (pixelFrom.x != pixelTo.x) //no matter how small the selection, always draw at least one pixel! + { + pixelFrom.x -= pixelFrom.x < pixelTo.x ? 0 : 1; + pixelTo .x -= pixelFrom.x < pixelTo.x ? 1 : 0; + } + if (pixelFrom.y != pixelTo.y) + { + pixelFrom.y -= pixelFrom.y < pixelTo.y ? 0 : 1; + pixelTo .y -= pixelFrom.y < pixelTo.y ? 1 : 0; + } + confine(pixelFrom.x, 0, graphArea.width - 1); + confine(pixelTo .x, 0, graphArea.width - 1); + confine(pixelFrom.y, 0, graphArea.height - 1); + confine(pixelTo .y, 0, graphArea.height - 1); + + pixelFrom += graphAreaOrigin; + pixelTo += graphAreaOrigin; switch (attr.mouseSelMode) { @@ -527,30 +578,29 @@ void Graph2D::render(wxDC& dc) const dc.DrawRectangle(wxRect(pixelFrom, pixelTo)); break; case SELECT_X_AXIS: - dc.DrawRectangle(wxRect(wxPoint(pixelFrom.x, dataArea.y), wxPoint(pixelTo.x, dataArea.y + dataArea.height - 1))); + dc.DrawRectangle(wxRect(wxPoint(pixelFrom.x, graphArea.y), wxPoint(pixelTo.x, graphArea.y + graphArea.height - 1))); break; case SELECT_Y_AXIS: - dc.DrawRectangle(wxRect(wxPoint(dataArea.x, pixelFrom.y), wxPoint(dataArea.x + dataArea.width - 1, pixelTo.y))); + dc.DrawRectangle(wxRect(wxPoint(graphArea.x, pixelFrom.y), wxPoint(graphArea.x + graphArea.width - 1, pixelTo.y))); break; } } } - //finally draw curves - for (GraphList::const_iterator j = curves_.begin(); j != curves_.end(); ++j) - { - std::vector<double>& yValues = yValuesList[j - curves_.begin()].first; //actual y-values - int offsetX = yValuesList[j - curves_.begin()].second; //x-value offset in pixel - - std::vector<wxPoint> curve; - for (std::vector<double>::const_iterator i = yValues.begin(); i != yValues.end(); ++i) - curve.push_back(wxPoint(i - yValues.begin() + offsetX, - dataArea.height - 1 - cvrtY.realToScreen(*i)) + dataOrigin); //screen y axis starts upper left + //3. draw labels and background grid + drawXLabel(dc, minX, maxX, blockCountX, cvrtX, graphArea, xLabelArea, *attr.labelFmtX); + drawYLabel(dc, minY, maxY, blockCountY, cvrtY, graphArea, yLabelArea, *attr.labelFmtY); - if (!curve.empty()) + //4. finally draw curves + for (auto it = curves_.begin(); it != curves_.end(); ++it) + { + std::vector<wxPoint> points; + getCurvePoints(it - curves_.begin(), points); + if (!points.empty()) { - dc.SetPen(wxPen(j->second.color, j->second.lineWidth)); - dc.DrawLines(static_cast<int>(curve.size()), &curve[0]); + wxDCPenChanger dummy(dc, wxPen(it->second.color, it->second.lineWidth)); + dc.DrawLines(static_cast<int>(points.size()), &points[0]); + dc.DrawPoint(points.back()); //last pixel omitted by DrawLines } } } diff --git a/wx+/graph.h b/wx+/graph.h index ddcc1e33..f5e38851 100644 --- a/wx+/graph.h +++ b/wx+/graph.h @@ -20,12 +20,12 @@ namespace zen /* Example: //init graph (optional) - m_panelGraph->setAttributes(Graph2D::GraphAttributes(). + m_panelGraph->setAttributes(Graph2D::MainAttributes(). setLabelX(Graph2D::POSLX_BOTTOM, 20, std::make_shared<LabelFormatterTimeElapsed>()). setLabelY(Graph2D::POSLY_RIGHT, 60, std::make_shared<LabelFormatterBytes>())); //set graph data std::shared_ptr<GraphData> graphDataBytes = ... - m_panelGraph->setData(graphDataBytes, Graph2D::LineAttributes().setLineWidth(2).setColor(wxColor(0, 192, 0))); + m_panelGraph->setData(graphDataBytes, Graph2D::CurveAttributes().setLineWidth(2).setColor(wxColor(0, 192, 0))); */ //------------------------------------------------------------------------------------------------------------ @@ -148,24 +148,29 @@ public: long style = wxTAB_TRAVERSAL | wxNO_BORDER, const wxString& name = wxPanelNameStr); - class LineAttributes + class CurveAttributes { public: - LineAttributes() : autoColor(true), lineWidth(2) {} + CurveAttributes() : autoColor(true), drawCurveArea(false), lineWidth(2) {} - LineAttributes& setColor(const wxColour& col) { color = col; autoColor = false; return *this; } - LineAttributes& setLineWidth(size_t width) { lineWidth = static_cast<int>(width); return *this; } + CurveAttributes& setColor (const wxColour& col) { color = col; autoColor = false; return *this; } + CurveAttributes& fillCurveArea(const wxColour& col) { fillColor = col; drawCurveArea = true; return *this; } + CurveAttributes& setLineWidth(size_t width) { lineWidth = static_cast<int>(width); return *this; } private: friend class Graph2D; - bool autoColor; + bool autoColor; wxColour color; - int lineWidth; + + bool drawCurveArea; + wxColour fillColor; + + int lineWidth; }; - void setData(const std::shared_ptr<GraphData>& data, const LineAttributes& attr = LineAttributes()); - void addData(const std::shared_ptr<GraphData>& data, const LineAttributes& attr = LineAttributes()); + void setData(const std::shared_ptr<GraphData>& data, const CurveAttributes& attr = CurveAttributes()); + void addData(const std::shared_ptr<GraphData>& data, const CurveAttributes& attr = CurveAttributes()); enum PosLabelY { @@ -189,10 +194,10 @@ public: SELECT_Y_AXIS, }; - class GraphAttributes + class MainAttributes { public: - GraphAttributes() : + MainAttributes() : minXauto(true), maxXauto(true), minX(0), @@ -202,40 +207,40 @@ public: minY(0), maxY(0), labelposX(X_LABEL_BOTTOM), - labelHeightX(25), - labelFmtX(new DecimalNumberFormatter()), + xLabelHeight(25), + labelFmtX(std::make_shared<DecimalNumberFormatter>()), labelposY(Y_LABEL_LEFT), - labelWidthY(60), - labelFmtY(new DecimalNumberFormatter()), + yLabelWidth(60), + labelFmtY(std::make_shared<DecimalNumberFormatter>()), mouseSelMode(SELECT_RECTANGLE) {} - GraphAttributes& setMinX(double newMinX) { minX = newMinX; minXauto = false; return *this; } - GraphAttributes& setMaxX(double newMaxX) { maxX = newMaxX; maxXauto = false; return *this; } + MainAttributes& setMinX(double newMinX) { minX = newMinX; minXauto = false; return *this; } + MainAttributes& setMaxX(double newMaxX) { maxX = newMaxX; maxXauto = false; return *this; } - GraphAttributes& setMinY(double newMinY) { minY = newMinY; minYauto = false; return *this; } - GraphAttributes& setMaxY(double newMaxY) { maxY = newMaxY; maxYauto = false; return *this; } + MainAttributes& setMinY(double newMinY) { minY = newMinY; minYauto = false; return *this; } + MainAttributes& setMaxY(double newMaxY) { maxY = newMaxY; maxYauto = false; return *this; } - GraphAttributes& setAutoSize() { minXauto = true; maxXauto = true; minYauto = true; maxYauto = true; return *this; } + MainAttributes& setAutoSize() { minXauto = true; maxXauto = true; minYauto = true; maxYauto = true; return *this; } static const std::shared_ptr<LabelFormatter> defaultFormat; - GraphAttributes& setLabelX(PosLabelX posX, size_t height = 25, const std::shared_ptr<LabelFormatter>& newLabelFmt = defaultFormat) + MainAttributes& setLabelX(PosLabelX posX, size_t height = 25, const std::shared_ptr<LabelFormatter>& newLabelFmt = defaultFormat) { labelposX = posX; - labelHeightX = static_cast<int>(height); + xLabelHeight = static_cast<int>(height); labelFmtX = newLabelFmt; return *this; } - GraphAttributes& setLabelY(PosLabelY posY, size_t width = 60, const std::shared_ptr<LabelFormatter>& newLabelFmt = defaultFormat) + MainAttributes& setLabelY(PosLabelY posY, size_t width = 60, const std::shared_ptr<LabelFormatter>& newLabelFmt = defaultFormat) { labelposY = posY; - labelWidthY = static_cast<int>(width); + yLabelWidth = static_cast<int>(width); labelFmtY = newLabelFmt; return *this; } - GraphAttributes& setSelectionMode(SelMode mode) { mouseSelMode = mode; return *this; } + MainAttributes& setSelectionMode(SelMode mode) { mouseSelMode = mode; return *this; } private: friend class Graph2D; @@ -251,17 +256,17 @@ public: double maxY; PosLabelX labelposX; - int labelHeightX; + int xLabelHeight; std::shared_ptr<LabelFormatter> labelFmtX; PosLabelY labelposY; - int labelWidthY; + int yLabelWidth; std::shared_ptr<LabelFormatter> labelFmtY; SelMode mouseSelMode; }; - void setAttributes(const GraphAttributes& newAttr) { attr = newAttr; Refresh(); } - GraphAttributes getAttributes() const { return attr; } + void setAttributes(const MainAttributes& newAttr) { attr = newAttr; Refresh(); } + MainAttributes getAttributes() const { return attr; } std::vector<SelectionBlock> getSelections() const { return oldSel; } @@ -279,13 +284,7 @@ private: void OnMouseLeftUp (wxMouseEvent& event); void OnMouseCaptureLost(wxMouseCaptureLostEvent& event); - void onPaintEvent(wxPaintEvent& event) - { - wxAutoBufferedPaintDC dc(this); //this one happily fucks up for RTL layout by not drawing the first column (x = 0)! - //wxPaintDC dc(this); - render(dc); - } - + void onPaintEvent(wxPaintEvent& event); void onSizeEvent(wxSizeEvent& event) { Refresh(); event.Skip(); } void onEraseBackGround(wxEraseEvent& event) {} @@ -311,9 +310,11 @@ private: std::vector<SelectionBlock> oldSel; //applied selections std::shared_ptr<MouseSelection> activeSel; //set during mouse selection - GraphAttributes attr; //global attributes + MainAttributes attr; //global attributes + + std::unique_ptr<wxBitmap> doubleBuffer; - typedef std::vector<std::pair<std::shared_ptr<GraphData>, LineAttributes>> GraphList; + typedef std::vector<std::pair<std::shared_ptr<GraphData>, CurveAttributes>> GraphList; GraphList curves_; }; } diff --git a/wx+/grid.cpp b/wx+/grid.cpp index ff45224d..5c9d3dc8 100644 --- a/wx+/grid.cpp +++ b/wx+/grid.cpp @@ -7,7 +7,6 @@ #include "grid.h" #include <cassert> #include <set> -#include <wx/dcbuffer.h> //for macro: wxALWAYS_NATIVE_DOUBLE_BUFFER #include <wx/settings.h> #include <wx/listbox.h> #include <wx/tooltip.h> @@ -19,6 +18,7 @@ #include <zen/utf.h> #include <zen/format_unit.h> #include "image_tools.h" +#include "rtl.h" #ifdef FFS_LINUX #include <gtk/gtk.h> @@ -63,48 +63,8 @@ const wxColor COLOR_LABEL_GRADIENT_TO_FOCUS = COLOR_LABEL_GRADIENT_TO; wxColor getColorMainWinBackground() { return wxListBox::GetClassDefaultAttributes().colBg; } //cannot be initialized statically on wxGTK! const wxColor colorGridLine = wxColour(192, 192, 192); //light grey -//------------------------------------------------------------ - - -//a fix for a poor wxWidgets implementation (wxAutoBufferedPaintDC skips one pixel on left side when RTL layout is active) -#ifndef wxALWAYS_NATIVE_DOUBLE_BUFFER -#error we need this one! -#endif - -#if wxALWAYS_NATIVE_DOUBLE_BUFFER -struct BufferedPaintDC : public wxPaintDC { BufferedPaintDC(wxWindow& wnd, std::unique_ptr<wxBitmap>& buffer) : wxPaintDC(&wnd) {} }; - -#else -class BufferedPaintDC : public wxMemoryDC -{ -public: - BufferedPaintDC(wxWindow& wnd, std::unique_ptr<wxBitmap>& buffer) : buffer_(buffer), paintDc(&wnd) - { - const wxSize clientSize = wnd.GetClientSize(); - if (!buffer_ || clientSize != wxSize(buffer->GetWidth(), buffer->GetHeight())) - buffer.reset(new wxBitmap(clientSize.GetWidth(), clientSize.GetHeight())); - - SelectObject(*buffer); - - if (paintDc.IsOk()) - SetLayoutDirection(paintDc.GetLayoutDirection()); - } - - ~BufferedPaintDC() - { - paintDc.SetLayoutDirection(wxLayout_LeftToRight); //workaround bug in wxDC::Blit() - SetLayoutDirection(wxLayout_LeftToRight); // - - const wxPoint origin = GetDeviceOrigin(); - paintDc.Blit(0, 0, buffer_->GetWidth(), buffer_->GetHeight(), this, -origin.x, -origin.y); - } - -private: - std::unique_ptr<wxBitmap>& buffer_; - wxPaintDC paintDc; -}; -#endif +//------------------------------------------------------------ //another fix for yet another poor wxWidgets implementation (wxDCClipper does *not* stack) hash_map<wxDC*, wxRect> clippingAreas; //associate "active" clipping area with each DC @@ -114,15 +74,15 @@ class DcClipper public: DcClipper(wxDC& dc, const wxRect& r) : dc_(dc) { - auto iter = clippingAreas.find(&dc); - if (iter != clippingAreas.end()) + auto it = clippingAreas.find(&dc); + if (it != clippingAreas.end()) { - oldRect.reset(new wxRect(iter->second)); + oldRect.reset(new wxRect(it->second)); wxRect tmp = r; tmp.Intersect(*oldRect); //better safe than sorry dc_.SetClippingRegion(tmp); // - iter->second = tmp; + it->second = tmp; } else { @@ -426,13 +386,13 @@ private: void onPaintEvent(wxPaintEvent& event) { //wxAutoBufferedPaintDC dc(this); -> this one happily fucks up for RTL layout by not drawing the first column (x = 0)! - BufferedPaintDC dc(*this, buffer); + BufferedPaintDC dc(*this, doubleBuffer); assert(GetSize() == GetClientSize()); const wxRegion& updateReg = GetUpdateRegion(); - for (wxRegionIterator iter = updateReg; iter; ++iter) - render(dc, iter.GetRect()); + for (wxRegionIterator it = updateReg; it; ++it) + render(dc, it.GetRect()); } void onSizeEvent(wxSizeEvent& event) @@ -444,7 +404,7 @@ private: void onEraseBackGround(wxEraseEvent& event) {} Grid& parent_; - std::unique_ptr<wxBitmap> buffer; + std::unique_ptr<wxBitmap> doubleBuffer; }; //---------------------------------------------------------------------------------------------------------------- @@ -2206,9 +2166,9 @@ void Grid::autoSizeColumns(size_t compPos) if (compPos < comp.size() && comp[compPos].allowColumnResize) { auto& visibleCols = comp[compPos].visibleCols; - for (auto iter = visibleCols.begin(); iter != visibleCols.end(); ++iter) + for (auto it = visibleCols.begin(); it != visibleCols.end(); ++it) { - const size_t col = iter - visibleCols.begin(); + const size_t col = it - visibleCols.begin(); const ptrdiff_t bestWidth = getBestColumnSize(col, compPos); //return -1 on error if (bestWidth >= 0) setColWidthAndNotify(bestWidth, col, compPos, true); diff --git a/wx+/mouse_move_dlg.cpp b/wx+/mouse_move_dlg.cpp index e64e5da1..5c2a0a97 100644 --- a/wx+/mouse_move_dlg.cpp +++ b/wx+/mouse_move_dlg.cpp @@ -26,9 +26,9 @@ template <class Fun> inline void forEachChild(wxWindow& parent, Fun f) { wxWindowList& wl = parent.GetChildren(); - for (auto iter = wl.begin(); iter != wl.end(); ++iter) //yet another wxWidgets bug keeps us from using std::for_each + for (auto it = wl.begin(); it != wl.end(); ++it) //yet another wxWidgets bug keeps us from using std::for_each { - wxWindow& wnd = **iter; + wxWindow& wnd = **it; f(wnd); forEachChild(wnd, f); } diff --git a/wx+/no_flicker.h b/wx+/no_flicker.h index fb315de0..ea9efb4d 100644 --- a/wx+/no_flicker.h +++ b/wx+/no_flicker.h @@ -7,7 +7,8 @@ #ifndef NO_FLICKER_HEADER_893421590321532 #define NO_FLICKER_HEADER_893421590321532 -#include <wx/window.h> +#include <wx/textctrl.h> +#include <wx/stattext.h> namespace zen { @@ -13,6 +13,7 @@ #include <wx/image.h> #include <wx/icon.h> #include <wx/app.h> +#include <wx/dcbuffer.h> //for macro: wxALWAYS_NATIVE_DOUBLE_BUFFER namespace zen { @@ -30,15 +31,25 @@ void drawBitmapRtlNoMirror(wxDC& dc, //wxDC::DrawLabel does already NOT mirror int alignment, std::unique_ptr<wxBitmap>& buffer); -void drawIconRtlNoMirror(wxDC& dc, - const wxIcon& icon, //wxDC::DrawIcon DOES mirror by default +void drawIconRtlNoMirror(wxDC& dc, //wxDC::DrawIcon DOES mirror by default + const wxIcon& icon, const wxPoint& pt, std::unique_ptr<wxBitmap>& buffer); wxBitmap mirrorIfRtl(const wxBitmap& bmp); +/* +class BufferedPaintDC +{ +public: + BufferedPaintDC(wxWindow& wnd, std::unique_ptr<wxBitmap>& buffer); +}; +*/ +//a fix for a poor wxWidgets implementation (wxAutoBufferedPaintDC skips one pixel on left side when RTL layout is active) + +//manual text flow correction: http://www.w3.org/International/articles/inline-bidi-markup/ @@ -116,6 +127,48 @@ wxBitmap mirrorIfRtl(const wxBitmap& bmp) else return bmp; } + + +#ifndef wxALWAYS_NATIVE_DOUBLE_BUFFER +#error we need this one! +#endif + +#if wxALWAYS_NATIVE_DOUBLE_BUFFER +struct BufferedPaintDC : public wxPaintDC { BufferedPaintDC(wxWindow& wnd, std::unique_ptr<wxBitmap>& buffer) : wxPaintDC(&wnd) {} }; + +#else +class BufferedPaintDC : public wxMemoryDC +{ +public: + BufferedPaintDC(wxWindow& wnd, std::unique_ptr<wxBitmap>& buffer) : buffer_(buffer), paintDc(&wnd) + { + const wxSize clientSize = wnd.GetClientSize(); + if (!buffer_ || clientSize != wxSize(buffer->GetWidth(), buffer->GetHeight())) + buffer.reset(new wxBitmap(clientSize.GetWidth(), clientSize.GetHeight())); + + SelectObject(*buffer); + + if (paintDc.IsOk() && paintDc.GetLayoutDirection() == wxLayout_RightToLeft) + SetLayoutDirection(wxLayout_RightToLeft); + } + + ~BufferedPaintDC() + { + if (GetLayoutDirection() == wxLayout_RightToLeft) + { + paintDc.SetLayoutDirection(wxLayout_LeftToRight); //workaround bug in wxDC::Blit() + SetLayoutDirection(wxLayout_LeftToRight); // + } + + const wxPoint origin = GetDeviceOrigin(); + paintDc.Blit(0, 0, buffer_->GetWidth(), buffer_->GetHeight(), this, -origin.x, -origin.y); + } + +private: + std::unique_ptr<wxBitmap>& buffer_; + wxPaintDC paintDc; +}; +#endif } #endif //RTL_H_0183487180058718273432148 diff --git a/zen/FindFilePlus/dll_main.cpp b/zen/FindFilePlus/dll_main.cpp index ab3b25a3..caa5930d 100644 --- a/zen/FindFilePlus/dll_main.cpp +++ b/zen/FindFilePlus/dll_main.cpp @@ -4,12 +4,48 @@ // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * // ************************************************************************** - #define WIN32_LEAN_AND_MEAN #include <zen/win.h> #include "init_dll_binding.h" +/* +http://www.microsoft.com/whdc/driver/kernel/DLL_bestprac.mspx +"DllMain is called while the loader-lock is held. [...] You cannot call any function in +DllMain that directly or indirectly tries to acquire the loader lock. Otherwise, you will +introduce the possibility that your application deadlocks or crashes." + +it's even worse: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx +"If your DLL is linked with the C run-time library (CRT), the entry point provided by the CRT calls the constructors +and destructors for global and static C++ objects. Therefore, these restrictions for DllMain also apply to constructors +and destructors and any code that is called from them." + +Example: http://blog.barthe.ph/2009/07/30/no-stdlib-in-dllmai/ + +Empirical study on DLL initialization order +------------------------------------------- +I. statically linked DLL: + DLL, static object constructors + DLL, DllMain(): DLL_PROCESS_ATTACH + main thread, static object constructors + main thread, enter main() + DLL, DllMain(): DLL_THREAD_ATTACH + DLL, DllMain(): DLL_THREAD_DETACH + main thread, exit main() + main thread, static object destructors + DLL, DllMain(): DLL_PROCESS_DETACH + DLL, static object destructors + +II. dynamically linked DLL (living in main()): + main thread, static object constructors + main thread, main(): LoadLibrary + DLL, static object constructors + DLL, DllMain(): DLL_PROCESS_ATTACH + main thread, main(): FreeLibrary + DLL, DllMain(): DLL_PROCESS_DETACH + DLL, static object destructors + main thread, static object destructors +*/ //optional: add init/teardown logic here BOOL APIENTRY DllMain(HINSTANCE hinstDLL, diff --git a/zen/IFileOperation/dll_main.cpp b/zen/IFileOperation/dll_main.cpp deleted file mode 100644 index 4665154a..00000000 --- a/zen/IFileOperation/dll_main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - - -#define WIN32_LEAN_AND_MEAN -#include <windows.h> - -//optional: add init/teardown logic here -BOOL APIENTRY DllMain(HINSTANCE hinstDLL, - DWORD fdwReason, - LPVOID lpvReserved) -{ - switch (fdwReason) - { - case DLL_PROCESS_ATTACH: - case DLL_PROCESS_DETACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - break; - } - return TRUE; -} diff --git a/zen/basic_math.h b/zen/basic_math.h index bd416d19..f8a7affd 100644 --- a/zen/basic_math.h +++ b/zen/basic_math.h @@ -142,7 +142,7 @@ T confineCpy(const T& val, const T& minVal, const T& maxVal) return minVal; else if (val > maxVal) return maxVal; - return val; + return val; } template <class T> inline diff --git a/zen/debug_memory_leaks.cpp b/zen/debug_memory_leaks.cpp index 8774d16f..990f2ec7 100644 --- a/zen/debug_memory_leaks.cpp +++ b/zen/debug_memory_leaks.cpp @@ -5,7 +5,7 @@ // ************************************************************************** //-----------Memory Leak Detection-------------------------- -//Usage: just include this file into a Visual Studio project +//Usage: just include this file into a Visual Studio project #ifndef NDEBUG @@ -20,10 +20,9 @@ struct OnStartup { OnStartup() { - //note: wxWidgets also "activates" leak detection in the usual buggy way: it sets incomplete flags and incorrectly overwrites them rather than appending -> luckily it still seems to work! + //note: wxWidgets also activates leak detection in "src/common/init.cpp" using a macro that is equivalent to: int flags = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); - flags |= _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF; - _CrtSetDbgFlag(flags); + _CrtSetDbgFlag(flags | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); } } dummy; diff --git a/zen/debug_minidump.cpp b/zen/debug_minidump.cpp index 9429819f..011e1bf2 100644 --- a/zen/debug_minidump.cpp +++ b/zen/debug_minidump.cpp @@ -39,7 +39,7 @@ LONG WINAPI writeDumpOnException(EXCEPTION_POINTERS* pExceptionInfo) ::CloseHandle(hFile); } - assert(false); + assert(false); return EXCEPTION_EXECUTE_HANDLER; } diff --git a/zen/debug_minidump.h b/zen/debug_minidump.h index 4ef0106e..2ef43039 100644 --- a/zen/debug_minidump.h +++ b/zen/debug_minidump.h @@ -14,13 +14,12 @@ /* Better std::bad_alloc --------------------- -overwrite "operator new" to automatically write mini dump and get info about bytes requested - -1. Compile "debug_new.cpp" +overwrite "operator new" to automatically write mini dump and get info about bytes requested: +1. Compile "debug_minidump.cpp" Minidumps http://msdn.microsoft.com/en-us/library/windows/desktop/ee416349(v=vs.85).aspx ---------------------------------------------------------------------------------------- -1. Compile "debug_new.cpp" +1. Compile "debug_minidump.cpp" 2. Compile "release" build with: - C/C++ -> General: Debug Information Format: "Program Database" (/Zi). - C/C++ -> Optimization: Omit Frame Pointers: No (/Oy-) - avoid call stack mess up! diff --git a/zen/dir_watcher.cpp b/zen/dir_watcher.cpp index 2d249af8..7d5e4697 100644 --- a/zen/dir_watcher.cpp +++ b/zen/dir_watcher.cpp @@ -490,12 +490,12 @@ std::vector<DirWatcher::Entry> DirWatcher::getChanges(const std::function<void() if (evt.len != 0) //exclude case: deletion of "self", already reported by parent directory watch { - auto iter = pimpl_->watchDescrs.find(evt.wd); - if (iter != pimpl_->watchDescrs.end()) + auto it = pimpl_->watchDescrs.find(evt.wd); + if (it != pimpl_->watchDescrs.end()) { //Note: evt.len is NOT the size of the evt.name c-string, but the array size including all padding 0 characters! //It may be even 0 in which case evt.name must not be used! - const Zstring fullname = iter->second + evt.name; + const Zstring fullname = it->second + evt.name; if ((evt.mask & IN_CREATE) || (evt.mask & IN_MOVED_TO)) diff --git a/zen/file_handling.cpp b/zen/file_handling.cpp index fce85bcd..c052435a 100644 --- a/zen/file_handling.cpp +++ b/zen/file_handling.cpp @@ -217,7 +217,7 @@ UInt64 zen::getFreeDiskSpace(const Zstring& path) //throw FileError namespace { #ifdef FFS_WIN -//(try to) enhance error messages by showing which processed lock the file +//(try to) enhance error messages by showing which processes lock the file Zstring getLockingProcessNames(const Zstring& filename) //throw(), empty string if none found or error occurred { if (vistaOrLater()) @@ -316,8 +316,6 @@ bool zen::removeFile(const Zstring& filename) //throw FileError if (errorCodeForNotExisting(lastError)) //no error situation if file is not existing! manual deletion relies on it! return false; - const std::wstring shortMsg = replaceCpy(_("Cannot delete file %x."), L"%x", fmtFileName(filename)); - #ifdef FFS_WIN if (lastError == ERROR_ACCESS_DENIED) //function fails if file is read-only { @@ -327,7 +325,15 @@ bool zen::removeFile(const Zstring& filename) //throw FileError return true; lastError = ::GetLastError(); } +#endif + //after "lastError" evaluation it *may* be redundant to check existence again, but better be safe than sorry: + if (!somethingExists(filename)) //warning: changes global error code!! + return false; //neither file nor any other object (e.g. broken symlink) with that name existing + //begin of "regular" error reporting + const std::wstring shortMsg = replaceCpy(_("Cannot delete file %x."), L"%x", fmtFileName(filename)); + +#ifdef FFS_WIN if (lastError == ERROR_SHARING_VIOLATION || //-> enhance error message! lastError == ERROR_LOCK_VIOLATION) { @@ -336,10 +342,6 @@ bool zen::removeFile(const Zstring& filename) //throw FileError throw FileError(shortMsg + L"\n\n" + _("The file is locked by another process:") + L"\n" + procList); } #endif - //after "lastError" evaluation it *may* be redundant to check existence again, but better be safe than sorry: - if (!somethingExists(filename)) //warning: changes global error code!! - return false; //neither file nor any other object (e.g. broken symlink) with that name existing - throw FileError(shortMsg + L"\n\n" + getLastErrorFormatted(lastError)); } return true; @@ -636,15 +638,15 @@ void zen::removeDirectory(const Zstring& directory, CallbackRemoveDir* callback) } //delete directories recursively - for (auto iter = dirList.begin(); iter != dirList.end(); ++iter) - removeDirectory(*iter, callback); //call recursively to correctly handle symbolic links + for (auto it = dirList.begin(); it != dirList.end(); ++it) + removeDirectory(*it, callback); //call recursively to correctly handle symbolic links //delete files - for (auto iter = fileList.begin(); iter != fileList.end(); ++iter) + for (auto it = fileList.begin(); it != fileList.end(); ++it) { - const bool workDone = removeFile(*iter); + const bool workDone = removeFile(*it); if (callback && workDone) - callback->notifyFileDeletion(*iter); //call once per file + callback->notifyFileDeletion(*it); //call once per file } //parent directory is deleted last @@ -1923,6 +1925,7 @@ DWORD CALLBACK copyCallbackInternal(LARGE_INTEGER totalFileSize, CopyFileEx() processes multiple streams one after another, stream 1 is the file data stream and always available! Each stream is initialized with CALLBACK_STREAM_SWITCH and provides *new* hSourceFile, hDestinationFile. Calling GetFileInformationByHandle() on hDestinationFile for stream > 1 results in ERROR_ACCESS_DENIED! + totalBytesTransferred contains size of *all* streams and so can be larger than the "file size" file attribute */ CallbackData& cbd = *static_cast<CallbackData*>(lpData); diff --git a/zen/file_io.cpp b/zen/file_io.cpp index 4880f6cc..788288ce 100644 --- a/zen/file_io.cpp +++ b/zen/file_io.cpp @@ -8,6 +8,10 @@ #ifdef FFS_WIN #include "long_path_prefix.h" +#include "IFileOperation/file_op.h" +#include "win_ver.h" +#include "dll.h" + #elif defined FFS_LINUX #include <fcntl.h> //open, close #include <unistd.h> //read, write @@ -16,9 +20,32 @@ using namespace zen; -FileInput::FileInput(FileHandle handle, const Zstring& filename) : FileInputBase(filename), fileHandle(handle) {} +namespace +{ +#ifdef FFS_WIN +//(try to) enhance error messages by showing which processes lock the file +Zstring getLockingProcessNames(const Zstring& filename) //throw(), empty string if none found or error occurred +{ + if (vistaOrLater()) + { + using namespace fileop; + const DllFun<FunType_getLockingProcesses> getLockingProcesses(getDllName(), funName_getLockingProcesses); + const DllFun<FunType_freeString> freeString (getDllName(), funName_freeString); -#ifdef FFS_LINUX + if (getLockingProcesses && freeString) + { + const wchar_t* procList = nullptr; + if (getLockingProcesses(filename.c_str(), procList)) + { + ZEN_ON_SCOPE_EXIT(freeString(procList)); + return procList; + } + } + } + return Zstring(); +} + +#elif defined FFS_LINUX //"filename" could be a named pipe which *blocks* forever during "open()"! https://sourceforge.net/p/freefilesync/bugs/221/ void checkForUnsupportedType(const Zstring& filename) //throw FileError { @@ -44,6 +71,10 @@ void checkForUnsupportedType(const Zstring& filename) //throw FileError } } #endif +} + + +FileInput::FileInput(FileHandle handle, const Zstring& filename) : FileInputBase(filename), fileHandle(handle) {} FileInput::FileInput(const Zstring& filename) : //throw FileError, ErrorNotExisting @@ -89,11 +120,25 @@ FileInput::FileInput(const Zstring& filename) : //throw FileError, ErrorNotExis #endif { const ErrorCode lastError = getLastError(); + const std::wstring shortMsg = errorCodeForNotExisting(lastError) ? + replaceCpy(_("Cannot find file %x."), L"%x", fmtFileName(filename)) : + replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(filename)); + std::wstring errorMsg = shortMsg + L"\n\n" + zen::getLastErrorFormatted(lastError); + +#ifdef FFS_WIN + if (lastError == ERROR_SHARING_VIOLATION || //-> enhance error message! + lastError == ERROR_LOCK_VIOLATION) + { + const Zstring procList = getLockingProcessNames(filename); //throw() + if (!procList.empty()) + errorMsg = shortMsg + L"\n\n" + _("The file is locked by another process:") + L"\n" + procList; + } +#endif if (errorCodeForNotExisting(lastError)) - throw ErrorNotExisting(replaceCpy(_("Cannot find file %x."), L"%x", fmtFileName(getFilename())) + L"\n\n" + getLastErrorFormatted(lastError)); + throw ErrorNotExisting(errorMsg); - throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtFileName(getFilename())) + L"\n\n" + getLastErrorFormatted(lastError) + L" (open)"); + throw FileError(errorMsg + L" (open)"); } } @@ -186,19 +231,29 @@ FileOutput::FileOutput(const Zstring& filename, AccessFlag access) : //throw Fil lastError = ::GetLastError(); } } - //"regular" error handling + + //begin of "regular" error reporting if (fileHandle == INVALID_HANDLE_VALUE) { - const std::wstring errorMessage = replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(getFilename())) + L"\n\n" + zen::getLastErrorFormatted(lastError); + const std::wstring shortMsg = replaceCpy(_("Cannot write file %x."), L"%x", fmtFileName(filename)); + std::wstring errorMsg = shortMsg + L"\n\n" + zen::getLastErrorFormatted(lastError); + + if (lastError == ERROR_SHARING_VIOLATION || //-> enhance error message! + lastError == ERROR_LOCK_VIOLATION) + { + const Zstring procList = getLockingProcessNames(filename); //throw() + if (!procList.empty()) + errorMsg = shortMsg + L"\n\n" + _("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 - throw ErrorTargetExisting(errorMessage); + throw ErrorTargetExisting(errorMsg); if (lastError == ERROR_PATH_NOT_FOUND) - throw ErrorTargetPathMissing(errorMessage); + throw ErrorTargetPathMissing(errorMsg); - throw FileError(errorMessage); + throw FileError(errorMsg); } } diff --git a/zen/file_traverser.cpp b/zen/file_traverser.cpp index 2cea74d8..9a02eb1e 100644 --- a/zen/file_traverser.cpp +++ b/zen/file_traverser.cpp @@ -195,12 +195,17 @@ struct Win32Traverser hnd.searchHandle = ::FindFirstFile(applyLongPathPrefix(directoryPf + L'*').c_str(), &hnd.data); //no noticable performance difference compared to FindFirstFileEx with FindExInfoBasic, FIND_FIRST_EX_CASE_SENSITIVE and/or FIND_FIRST_EX_LARGE_FETCH if (hnd.searchHandle == INVALID_HANDLE_VALUE) + { + hnd.haveData = false; + if (::GetLastError() == ERROR_FILE_NOT_FOUND) + { + //1. directory may not exist *or* 2. it is completely empty: not all directories contain "., .." entries, e.g. a drive's root directory; NetDrive + // -> FindFirstFile() is a nice example of violation of API design principle of single responsibility + if (dirExists(directory)) //yes, a race-condition, still the best we can do + return; + } throw FileError(replaceCpy(_("Cannot open directory %x."), L"%x", fmtFileName(directory)) + L"\n\n" + getLastErrorFormatted()); - - //::GetLastError() == ERROR_FILE_NOT_FOUND -> *usually* NOT okay: - //directory may not exist *or* it is completely empty: not all directories contain "., .." entries, e.g. a drive's root directory - //usually a directory is never completely empty due to "sync.ffs_lock", so we assume it's not existing and let the error propagate - // -> FindFirstFile() is a nice example of violation of API design principle of single responsibility + } } static void destroy(const DirHandle& hnd) { ::FindClose(hnd.searchHandle); } //throw() @@ -208,6 +213,9 @@ struct Win32Traverser template <class FallbackFun> static bool getEntry(DirHandle& hnd, const Zstring& directory, FindData& fileInfo, FallbackFun) //throw FileError { + if (hnd.searchHandle == INVALID_HANDLE_VALUE) //handle special case of "truly empty directories" + return false; + if (hnd.haveData) { hnd.haveData = false; @@ -441,17 +449,17 @@ private: int failedAttempts = 0; int filesToValidate = 50; //don't let data verification become a performance issue - for (auto iter = markForDstHack.begin(); iter != markForDstHack.end(); ++iter) + for (auto it = markForDstHack.begin(); it != markForDstHack.end(); ++it) { if (failedAttempts >= 10) //some cloud storages don't support changing creation/modification times => don't waste (a lot of) time trying to return; - dstCallback.requestUiRefresh(iter->first); + dstCallback.requestUiRefresh(it->first); try { //set modification time including DST hack: this function is too clever to not introduce this dependency - setFileTime(iter->first, iter->second, SYMLINK_FOLLOW); //throw FileError + setFileTime(it->first, it->second, SYMLINK_FOLLOW); //throw FileError } catch (FileError&) { @@ -463,11 +471,11 @@ private: //even at this point it's not sure whether data was written correctly, again cloud storages tend to lie about success status if (filesToValidate-- > 0) { - const dst::RawTime encodedTime = dst::fatEncodeUtcTime(tofiletime(iter->second)); //throw std::runtime_error + const dst::RawTime encodedTime = dst::fatEncodeUtcTime(tofiletime(it->second)); //throw std::runtime_error //dst hack: verify data written; attention: this check may fail for "sync.ffs_lock" WIN32_FILE_ATTRIBUTE_DATA debugeAttr = {}; - ::GetFileAttributesEx(zen::applyLongPathPrefix(iter->first).c_str(), //__in LPCTSTR lpFileName, + ::GetFileAttributesEx(zen::applyLongPathPrefix(it->first).c_str(), //__in LPCTSTR lpFileName, GetFileExInfoStandard, //__in GET_FILEEX_INFO_LEVELS fInfoLevelId, &debugeAttr); //__out LPVOID lpFileInformation diff --git a/zen/privilege.cpp b/zen/privilege.cpp index 9d8f12a0..288a1480 100644 --- a/zen/privilege.cpp +++ b/zen/privilege.cpp @@ -103,11 +103,11 @@ private: ~Privileges() //clean up: deactivate all privileges that have been activated by this application { - for (auto iter = activePrivileges.begin(); iter != activePrivileges.end(); ++iter) - if (iter->second) + for (auto it = activePrivileges.begin(); it != activePrivileges.end(); ++it) + if (it->second) try { - setPrivilege(iter->first.c_str(), false); //throw FileError + setPrivilege(it->first.c_str(), false); //throw FileError } catch (...) {} } diff --git a/zen/recycler.cpp b/zen/recycler.cpp index c35dca56..07803e50 100644 --- a/zen/recycler.cpp +++ b/zen/recycler.cpp @@ -94,8 +94,8 @@ void zen::recycleOrDelete(const std::vector<Zstring>& filenames, CallbackRecycli replaceCpy(_("Cannot load file %x."), L"%x", fmtFileName(getDllName()))); std::vector<const wchar_t*> cNames; - for (auto iter = filenames.begin(); iter != filenames.end(); ++iter) //caution to not create temporary strings here!! - cNames.push_back(iter->c_str()); + for (auto it = filenames.begin(); it != filenames.end(); ++it) //caution to not create temporary strings here!! + cNames.push_back(it->c_str()); CallbackData cbd(callback); if (!moveToRecycler(&cNames[0], cNames.size(), recyclerCallback, &cbd)) @@ -114,9 +114,9 @@ void zen::recycleOrDelete(const std::vector<Zstring>& filenames, CallbackRecycli else //regular recycle bin usage: available since XP { Zstring filenamesDoubleNull; - for (auto iter = filenames.begin(); iter != filenames.end(); ++iter) + for (auto it = filenames.begin(); it != filenames.end(); ++it) { - filenamesDoubleNull += *iter; + filenamesDoubleNull += *it; filenamesDoubleNull += L'\0'; } diff --git a/zen/scope_guard.h b/zen/scope_guard.h index 7d79e115..81f47f87 100644 --- a/zen/scope_guard.h +++ b/zen/scope_guard.h @@ -28,19 +28,20 @@ namespace zen class ScopeGuardBase { public: - void dismiss() const { dismissed_ = true; } + void dismiss() { dismissed_ = true; } protected: ScopeGuardBase() : dismissed_(false) {} - ScopeGuardBase(const ScopeGuardBase& other) : dismissed_(other.dismissed_) { other.dismissed_ = true; } //take over responsibility + ScopeGuardBase(ScopeGuardBase&& other) : dismissed_(other.dismissed_) { other.dismiss(); } //take over responsibility ~ScopeGuardBase() {} bool isDismissed() const { return dismissed_; } private: + ScopeGuardBase(const ScopeGuardBase&); //delete ScopeGuardBase& operator=(const ScopeGuardBase&); // = delete; - mutable bool dismissed_; + bool dismissed_; }; @@ -48,7 +49,9 @@ template <typename F> class ScopeGuardImpl : public ScopeGuardBase { public: - ScopeGuardImpl(F fun) : fun_(fun) {} + explicit ScopeGuardImpl(const F& fun) : fun_(fun) {} + explicit ScopeGuardImpl(F&& fun) : fun_(std::move(fun)) {} + ScopeGuardImpl(ScopeGuardImpl&& other) : ScopeGuardBase(std::move(other)), fun_(std::move(other.fun_)) {} ~ScopeGuardImpl() { @@ -64,10 +67,10 @@ private: F fun_; }; -typedef const ScopeGuardBase& ScopeGuard; +typedef ScopeGuardBase&& ScopeGuard; template <class F> inline -ScopeGuardImpl<F> makeGuard(F fun) { return ScopeGuardImpl<F>(fun); } +ScopeGuardImpl<typename std::decay<F>::type> makeGuard(F&& fun) { return ScopeGuardImpl<typename std::decay<F>::type>(std::forward<F>(fun)); } } #define ZEN_CONCAT_SUB(X, Y) X ## Y diff --git a/zen/string_base.h b/zen/string_base.h index 05e5935e..bfe573e9 100644 --- a/zen/string_base.h +++ b/zen/string_base.h @@ -385,9 +385,9 @@ size_t Zbase<Char, SP, AP>::find(const Zbase& str, size_t pos) const { assert(pos <= length()); const Char* thisEnd = end(); //respect embedded 0 - const Char* iter = std::search(begin() + pos, thisEnd, + const Char* it = std::search(begin() + pos, thisEnd, str.begin(), str.end()); - return iter == thisEnd ? npos : iter - begin(); + return it == thisEnd ? npos : it - begin(); } @@ -396,9 +396,9 @@ size_t Zbase<Char, SP, AP>::find(const Char* str, size_t pos) const { assert(pos <= length()); const Char* thisEnd = end(); //respect embedded 0 - const Char* iter = std::search(begin() + pos, thisEnd, + const Char* it = std::search(begin() + pos, thisEnd, str, str + strLength(str)); - return iter == thisEnd ? npos : iter - begin(); + return it == thisEnd ? npos : it - begin(); } @@ -407,8 +407,8 @@ size_t Zbase<Char, SP, AP>::find(Char ch, size_t pos) const { assert(pos <= length()); const Char* thisEnd = end(); - const Char* iter = std::find(begin() + pos, thisEnd, ch); //respect embedded 0 - return iter == thisEnd ? npos : iter - begin(); + const Char* it = std::find(begin() + pos, thisEnd, ch); //respect embedded 0 + return it == thisEnd ? npos : it - begin(); } @@ -419,8 +419,8 @@ size_t Zbase<Char, SP, AP>::rfind(Char ch, size_t pos) const const Char* currEnd = pos == npos ? end() : begin() + std::min(pos + 1, length()); - const Char* iter = find_last(begin(), currEnd, ch); - return iter == currEnd ? npos : iter - begin(); + const Char* it = find_last(begin(), currEnd, ch); + return it == currEnd ? npos : it - begin(); } @@ -432,9 +432,9 @@ size_t Zbase<Char, SP, AP>::rfind(const Char* str, size_t pos) const const size_t strLen = strLength(str); const Char* currEnd = pos == npos ? end() : begin() + std::min(pos + strLen, length()); - const Char* iter = search_last(begin(), currEnd, + const Char* it = search_last(begin(), currEnd, str, str + strLen); - return iter == currEnd ? npos : iter - begin(); + return it == currEnd ? npos : it - begin(); } diff --git a/zen/string_tools.h b/zen/string_tools.h index c0bb1039..990c823a 100644 --- a/zen/string_tools.h +++ b/zen/string_tools.h @@ -468,8 +468,8 @@ S formatInteger(Num n, bool hasMinus) { assert(n >= 0); typedef typename GetCharType<S>::Type CharType; - CharType buffer[2 + 5 * sizeof(Num) / 2]; //it's generally faster to use a buffer than to rely on String::operator+=() (in)efficiency - //minimum required chars (+ sign char): 1 + ceil(ln_10 (256^sizeof(n))) =~ 1 + ceil(sizeof(n) * 2.4082) < 2 + floor(sizeof(n) * 2.5) + CharType buffer[2 + sizeof(Num) * 5 / 2]; //it's generally faster to use a buffer than to rely on String::operator+=() (in)efficiency + //required chars (+ sign char): 1 + ceil(ln_10 (256^sizeof(n))) =~ 1 + ceil(sizeof(n) * 2.4082) < 2 + floor(sizeof(n) * 2.5) auto iter = std::end(buffer); do @@ -556,7 +556,7 @@ Num extractInteger(const S& str, bool& hasMinusSign) //very fast conversion to i } else { - //rest of string should contain whitespace only + //rest of string should contain whitespace only, it's NOT a bug if there is some! //assert(std::all_of(iter, last, &isWhiteSpace<CharType>)); -> this is NO assert situation break; } diff --git a/zen/thread.h b/zen/thread.h index f00c0298..31d762c7 100644 --- a/zen/thread.h +++ b/zen/thread.h @@ -18,8 +18,8 @@ #pragma GCC diagnostic ignored "-Wshadow" #endif #ifdef _MSC_VER -#pragma warning(disable : 4702) //unreachable code -#pragma warning(disable : 4913) //user defined binary operator ',' exists but no overload could convert all operands, default built-in binary operator ',' used +#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 #endif #include <boost/thread.hpp> @@ -28,8 +28,7 @@ #pragma GCC diagnostic pop #endif #ifdef _MSC_VER -#pragma warning(default : 4702) -#pragma warning(default : 4913) +#pragma warning(pop) #endif namespace zen @@ -94,7 +93,7 @@ private: template <class T, class Function> inline auto async2(Function fun) -> boost::unique_future<T> //support for workaround of VS2010 bug: bool (*fun)(); decltype(fun()) == int! { - boost::packaged_task<T> pt(fun); + boost::packaged_task<T> pt(std::move(fun)); //packaged task seems to even require r-value reference: https://sourceforge.net/p/freefilesync/bugs/234/ auto fut = pt.get_future(); boost::thread t(std::move(pt)); t.detach(); //we have to be explicit since C++11: [thread.thread.destr] ~thread() calls std::terminate() if joinable()!!! @@ -110,12 +109,9 @@ template<class InputIterator, class Duration> inline bool wait_for_all_timed(InputIterator first, InputIterator last, const Duration& wait_duration) { const boost::system_time endTime = boost::get_system_time() + wait_duration; - while (first != last) - { + for (; first != last; ++first) if (!first->timed_wait_until(endTime)) return false; //time elapsed - ++first; - } return true; } @@ -139,7 +135,7 @@ public: if (!result_) result_ = std::move(result); } - conditionJobDone.notify_one(); + conditionJobDone.notify_all(); //instead of notify_one(); workaround bug: https://svn.boost.org/trac/boost/ticket/7796 //condition handling, see: http://www.boost.org/doc/libs/1_43_0/doc/html/thread/synchronization.html#thread.synchronization.condvar_ref } diff --git a/zen/tick_count.h b/zen/tick_count.h index 98e59ae5..04ac0902 100644 --- a/zen/tick_count.h +++ b/zen/tick_count.h @@ -8,10 +8,17 @@ #define ZEN_TICK_COUNT_HEADER_3807326 #include <cstdint> -#include <algorithm> +//#include <algorithm> #include "type_traits.h" -#include "assert_static.h" -#include <cmath> +#include "basic_math.h" +//#include "assert_static.h" +//#include <cmath> +//template <class T> inline +//T dist(T a, T b) +//{ +// return a > b ? a - b : b - a; +//} + #ifdef FFS_WIN #include "win.h" //includes "windows.h" @@ -59,12 +66,15 @@ public: std::int64_t dist(const TickVal& lhs, const TickVal& rhs) { #ifdef FFS_WIN - assert_static(IsSignedInt<decltype(lhs.val_.QuadPart)>::value); - return std::abs(lhs.val_.QuadPart - rhs.val_.QuadPart); + return numeric::dist(lhs.val_.QuadPart, rhs.val_.QuadPart); //std::abs(a - b) can lead to overflow! + #elif defined FFS_LINUX - assert_static(IsSignedInt<decltype(lhs.val_.tv_sec)>::value); - assert_static(IsSignedInt<decltype(lhs.val_.tv_nsec)>::value); - return std::abs(static_cast<std::int64_t>(lhs.val_.tv_sec - rhs.val_.tv_sec) * 1000000000.0 + (lhs.val_.tv_nsec - rhs.val_.tv_nsec)); + const auto distSec = numeric::dist(lhs.val_.tv_sec, rhs.val_.tv_sec); + const auto distNsec = numeric::dist(lhs.val_.tv_nsec, rhs.val_.tv_nsec); + + if (distSec > (std::numeric_limits<std::int64_t>::max() - distNsec) / 1000000000) //truncate instead of overflow! + return std::numeric_limits<std::int64_t>::max(); + return distSec * 1000000000 + distNsec; #endif } @@ -94,7 +104,7 @@ std::int64_t ticksPerSec() //return 0 on error LARGE_INTEGER frequency = {}; if (!::QueryPerformanceFrequency(&frequency)) //MSDN promises: "The frequency cannot change while the system is running." return 0; - assert_static(sizeof(std::int64_t) >= sizeof(frequency.QuadPart)); + static_assert(sizeof(std::int64_t) >= sizeof(frequency.QuadPart), ""); return frequency.QuadPart; #elif defined FFS_LINUX diff --git a/zen/zstring.cpp b/zen/zstring.cpp index a1913755..7f4e79db 100644 --- a/zen/zstring.cpp +++ b/zen/zstring.cpp @@ -29,8 +29,8 @@ LeakChecker::~LeakChecker() std::string leakingStrings; int items = 0; - for (auto iter = activeStrings.begin(); iter != activeStrings.end() && items < 20; ++iter, ++items) - leakingStrings += "\"" + rawMemToString(iter->first, iter->second) + "\"\n"; + for (auto it = activeStrings.begin(); it != activeStrings.end() && items < 20; ++it, ++items) + leakingStrings += "\"" + rawMemToString(it->first, it->second) + "\"\n"; const std::string message = std::string("Memory leak detected!") + "\n\n" + "Candidates:\n" + leakingStrings; @@ -114,7 +114,7 @@ int z_impl::compareFilenamesWin(const wchar_t* lhs, const wchar_t* rhs, size_t s rhs, //__in LPCWSTR lpString2, static_cast<int>(sizeRhs), //__in int cchCount2, true); //__in BOOL bIgnoreCase - if (rv == 0) + if (rv <= 0) throw std::runtime_error("Error comparing strings (ordinal)!"); else return rv - 2; //convert to C-style string compare result @@ -126,7 +126,6 @@ int z_impl::compareFilenamesWin(const wchar_t* lhs, const wchar_t* rhs, size_t s const auto minSize = static_cast<unsigned int>(std::min(sizeLhs, sizeRhs)); - int rv = 0; if (minSize > 0) //LCMapString does not allow input sizes of 0! { if (minSize <= MAX_PATH) //performance optimization: stack @@ -146,7 +145,9 @@ int z_impl::compareFilenamesWin(const wchar_t* lhs, const wchar_t* rhs, size_t s if (::LCMapString(ZSTRING_INVARIANT_LOCALE, LCMAP_UPPERCASE, rhs, minSize, bufferB, MAX_PATH) == 0) throw std::runtime_error("Error comparing strings! (LCMapString)"); - rv = ::wmemcmp(bufferA, bufferB, minSize); + const int rv = ::wmemcmp(bufferA, bufferB, minSize); + if (rv != 0) + return rv; } else //use freestore { @@ -159,13 +160,13 @@ int z_impl::compareFilenamesWin(const wchar_t* lhs, const wchar_t* rhs, size_t s if (::LCMapString(ZSTRING_INVARIANT_LOCALE, LCMAP_UPPERCASE, rhs, minSize, &bufferB[0], minSize) == 0) throw std::runtime_error("Error comparing strings! (LCMapString: FS)"); - rv = ::wmemcmp(&bufferA[0], &bufferB[0], minSize); + const int rv = ::wmemcmp(&bufferA[0], &bufferB[0], minSize); + if (rv != 0) + return rv; } } - return rv == 0 ? - static_cast<int>(sizeLhs) - static_cast<int>(sizeRhs) : - rv; + return static_cast<int>(sizeLhs) - static_cast<int>(sizeRhs); } // const int rv = CompareString( |