diff options
author | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 16:52:08 +0200 |
---|---|---|
committer | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 16:52:08 +0200 |
commit | a81ead8928b6e0b880a7d889d8312e140f42dd39 (patch) | |
tree | ed43bbb7bda24efded7545ed0f7b7447e2683414 | |
parent | 1.8 (diff) | |
download | FreeFileSync-a81ead8928b6e0b880a7d889d8312e140f42dd39.tar.gz FreeFileSync-a81ead8928b6e0b880a7d889d8312e140f42dd39.tar.bz2 FreeFileSync-a81ead8928b6e0b880a7d889d8312e140f42dd39.zip |
1.9
-rw-r--r-- | Application.cpp | 54 | ||||
-rw-r--r-- | Changelog.txt | 11 | ||||
-rw-r--r-- | FreeFileSync - Unicode.cbp | 4 | ||||
-rw-r--r-- | FreeFileSync.cpp | 50 | ||||
-rw-r--r-- | Makefile_Win_ANSI.cmd | 31 | ||||
-rw-r--r-- | Makefile_Win_Unicode.cmd | 30 | ||||
-rw-r--r-- | Readme.txt | 43 | ||||
-rw-r--r-- | Resources.dat | bin | 113685 -> 113612 bytes | |||
-rw-r--r-- | french.lng | 316 | ||||
-rw-r--r-- | german.lng | 176 | ||||
-rw-r--r-- | lang.dat | bin | 4 -> 0 bytes | |||
-rw-r--r-- | library/misc.cpp | 18 | ||||
-rw-r--r-- | library/misc.h | 4 | ||||
-rw-r--r-- | library/multithreading.cpp | 14 | ||||
-rw-r--r-- | library/multithreading.h | 1 | ||||
-rw-r--r-- | ui/MainDialog.cpp | 22 | ||||
-rw-r--r-- | ui/guiGenerated.cpp | 37 | ||||
-rw-r--r-- | ui/guiGenerated.h | 4 |
18 files changed, 439 insertions, 376 deletions
diff --git a/Application.cpp b/Application.cpp index 7a4f2831..260a5943 100644 --- a/Application.cpp +++ b/Application.cpp @@ -57,29 +57,28 @@ void Application::initialize() //test if ffs is to be started on UI with config file passed as commandline parameter wxString configFileForUI = FreeFileSync::FfsLastConfigFile; - if (argc > 1 && wxFileExists(argv[1]) && FreeFileSync::isFFS_ConfigFile(argv[1])) - configFileForUI = argv[1]; - - //should it start in commandline mode? - else if (argc > 1) + if (argc > 1) { - parseCommandline(); - - if (applicationRunsOnCommandLineWithoutWindows) + if (FreeFileSync::isFFS_ConfigFile(argv[1])) + configFileForUI = argv[1]; + else //start in commandline mode? { - ExitMainLoop(); //exit programm on next main loop iteration - return; + parseCommandline(); + + if (applicationRunsOnCommandLineWithoutWindows) + { + ExitMainLoop(); //exit programm on next main loop iteration + return; + } + else + return; //wait for the user to close the status window } - else - return; //wait for the user to close the status window - } - else //no parameters passed: continue with UI - { - //show UI dialog - MainDialog* frame = new MainDialog(NULL, configFileForUI, &programLanguage); - frame->SetIcon(*GlobalResources::programIcon); //set application icon - frame->Show(); } + + //start om GUI mode + MainDialog* frame = new MainDialog(NULL, configFileForUI, &programLanguage); + frame->SetIcon(*GlobalResources::programIcon); //set application icon + frame->Show(); } @@ -142,7 +141,7 @@ void Application::logInit() logWrite(_("Start")); logFile.Write(wxChar('\n')); -totalTime.Start(); //measure total time + totalTime.Start(); //measure total time } @@ -194,7 +193,13 @@ void Application::parseCommandline() wxCMD_LINE_OPTION, GlobalResources::paramCfg, NULL, - _("Specify the sync-direction used for each type of file by a string of five chars:\n\n\t\tChar 1: Folders/files that exist on left side only\n\t\tChar 2: Folders/files that exist on right side only\n\t\tChar 3: Files that exist on both sides, left one is newer\n\t\tChar 4: Files that exist on both sides, right one is newer\n\t\tChar 5: Files that exist on both sides and are different\n\n\t\tSync-direction: L: left, R: right, N: none\n"), + wxString(_("Specify the sync-direction used for each type of file by a string of five chars:\n\n")) + + _("\t\tChar 1: Folders/files that exist on left side only\n") + + _("\t\tChar 2: Folders/files that exist on right side only\n") + + _("\t\tChar 3: Files that exist on both sides, left one is newer\n") + + _("\t\tChar 4: Files that exist on both sides, right one is newer\n") + + _("\t\tChar 5: Files that exist on both sides and are different\n") + + _("\n\t\tSync-direction: L: left, R: right, N: none\n"), wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY }, @@ -235,7 +240,7 @@ void Application::parseCommandline() wxCMD_LINE_SWITCH, GlobalResources::paramContinueError, NULL, - _("If errors occur during folder comparison or synchronization they are ignored and the process continues\n") + _("If errors occur during folder comparison or synchronization they are ignored and the process continues.\n") }, { @@ -249,7 +254,10 @@ void Application::parseCommandline() wxCMD_LINE_SWITCH, GlobalResources::paramSilent, NULL, - wxString(_("Do not show graphical status and error messages but write to a logfile instead")) + _(".\n\nExamples:\n\n1.) FreeFileSync -cmp SIZEDATE -cfg RRRRR C:\\Source C:\\Target\n2.) FreeFileSync -cmp sizedate -cfg rlrln c:\\dir1 c:\\dir2 -incl *.doc\n\n1: Creates a mirror backup of the left directory\n2: Synchronizes all *.doc files from both directories simultaneously\n\n") + wxString(_("Do not show graphical status and error messages but write to a logfile instead.\n\n")) + + _("\tExamples:\n\n\t1.) FreeFileSync -cmp SIZEDATE -cfg RRRRR C:\\Source C:\\Target\n\t2.) FreeFileSync -cmp sizedate -cfg rlrln c:\\dir1 c:\\dir2 -incl *.doc\n\n") + + _("\t1: Creates a mirror backup of the left directory\n\t2: Synchronizes all *.doc files from both directories simultaneously\n\n") + + _("\tHint: You can easily generate a batch file by chosing \"Create batch job\" from the GUI menubar.\n") }, { diff --git a/Changelog.txt b/Changelog.txt index 967a1dd4..ec93a2e6 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,6 +1,17 @@ FreeFileSync ------------ +Changelog v1.9 +-------------- +Fixed wxWidgets multithreading issue that could cause synchronization to hang occasionally +Fixed issue with %1 parameter +Fixed issue with recycle bin usage in unicode mode +Added uninstaller +New installer option to associate *.ffs files with FreeFileSync +Transformed language files to Unicode (UTF-8) +Delete elements in configuration history list via DELETE key + + Changelog v1.8 -------------- Enhanced statusbar information diff --git a/FreeFileSync - Unicode.cbp b/FreeFileSync - Unicode.cbp index bc01b6bb..95254fa4 100644 --- a/FreeFileSync - Unicode.cbp +++ b/FreeFileSync - Unicode.cbp @@ -15,10 +15,10 @@ <Compiler> <Add option="-g" /> <Add option="-D__WXDEBUG__" /> - <Add directory="C:\Programme\CodeBlocks\wxWidgets\lib\gcc_lib\mswd" /> + <Add directory="C:\Programme\CodeBlocks\wxWidgets\lib\gcc_lib\mswud" /> </Compiler> <ResourceCompiler> - <Add directory="C:\Programme\CodeBlocks\wxWidgets\lib\gcc_lib\mswd" /> + <Add directory="C:\Programme\CodeBlocks\wxWidgets\lib\gcc_lib\mswud" /> </ResourceCompiler> <Linker> <Add library="libwxmsw28ud_adv.a" /> diff --git a/FreeFileSync.cpp b/FreeFileSync.cpp index 6ab38e68..c7c07667 100644 --- a/FreeFileSync.cpp +++ b/FreeFileSync.cpp @@ -621,11 +621,6 @@ private: }; -#ifdef FFS_WIN -typedef WINSHELLAPI int (*DllFileOP)(LPSHFILEOPSTRUCT lpFileOp); -#endif // FFS_WIN - - class RecycleBin { public: @@ -633,29 +628,11 @@ public: recycleBinAvailable(false) { #ifdef FFS_WIN - // Get a handle to the DLL module containing Recycle Bin functionality - hinstShell = LoadLibrary(wxT("shell32.dll")); - if (hinstShell != NULL) - { - fileOperation = (DllFileOP)GetProcAddress(hinstShell, "SHFileOperation"); - if (fileOperation == NULL ) - { - FreeLibrary(hinstShell); - recycleBinAvailable = false; - } - else recycleBinAvailable = true; - } #endif // FFS_WIN } - ~RecycleBin() - { -#ifdef FFS_WIN - if (recycleBinAvailable) - FreeLibrary(hinstShell); -#endif // FFS_WIN - } + ~RecycleBin() {} bool recycleBinExists() { @@ -668,10 +645,9 @@ public: throw RuntimeException(_("Initialization of Recycle Bin failed! It cannot be used!")); #ifdef FFS_WIN - SHFILEOPSTRUCT fileOp; - wxString filenameDoubleNull = filename + wxChar(0); + SHFILEOPSTRUCT fileOp; fileOp.hwnd = NULL; fileOp.wFunc = FO_DELETE; fileOp.pFrom = filenameDoubleNull.c_str(); @@ -681,18 +657,13 @@ public: fileOp.hNameMappings = NULL; fileOp.lpszProgressTitle = NULL; - if (fileOperation(&fileOp //pointer to an SHFILEOPSTRUCT structure that contains information the function needs to carry out + if (SHFileOperation(&fileOp //pointer to an SHFILEOPSTRUCT structure that contains information the function needs to carry out ) != 0 || fileOp.fAnyOperationsAborted) throw FileError(wxString(_("Error moving file ")) + wxT("\"") + filename + wxT("\"") + _(" to recycle bin!")); #endif // FFS_WIN } private: bool recycleBinAvailable; - -#ifdef FFS_WIN - HINSTANCE hinstShell; - DllFileOP fileOperation; -#endif // FFS_WIN }; @@ -1559,19 +1530,22 @@ void FreeFileSync::startSynchronizationProcess(FileCompareResult& grid, const Sy bool FreeFileSync::isFFS_ConfigFile(const wxString& filename) { - wxFFile configFile(filename.c_str(), wxT("rb")); + if (!wxFileExists(filename)) + return false; + + wxFFile configFile(filename, wxT("rb")); if (!configFile.IsOpened()) return false; - char bigBuffer[10000]; + char buffer[FreeFileSync::FfsConfigFileID.size() + 1]; //read FFS identifier - size_t bytesRead = configFile.Read(bigBuffer, FreeFileSync::FfsConfigFileID.size()); + size_t bytesRead = configFile.Read(buffer, FreeFileSync::FfsConfigFileID.size()); - if (!configFile.Error() && bytesRead < 10000) + if (!configFile.Error() && bytesRead < 1000) { - bigBuffer[bytesRead] = 0; - return (FfsConfigFileID == string(bigBuffer)); + buffer[bytesRead] = 0; + return (FfsConfigFileID == string(buffer)); } else return false; diff --git a/Makefile_Win_ANSI.cmd b/Makefile_Win_ANSI.cmd index cbe1aebe..5b9a84be 100644 --- a/Makefile_Win_ANSI.cmd +++ b/Makefile_Win_ANSI.cmd @@ -1,20 +1,27 @@ +::set these variables to the appropriate directories set widgets=C:\Programme\CodeBlocks\wxWidgets set widgetslib=C:\Programme\CodeBlocks\wxWidgets\lib\gcc_lib\msw set sources=C:\Programme\CodeBlocks\Projects\FreeFileSync +set mingw=C:\Programme\CodeBlocks\MinGW\bin -md obj +path=%path%;%mingw% +::convert file from UTF-8 to standard ANSI encoding; ICONV is part of MinGW - MSYS Supplementary Tools +iconv -f UTF-8 -t ISO-8859-1 %sources%\ui\guiGenerated.cpp > %sources%\ui\guiGenerated_ansi.cpp -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\application.cpp -o obj\Application.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\FreeFileSync.cpp -o obj\FreeFileSync.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\globalFunctions.cpp -o obj\globalFunctions.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\multithreading.cpp -o obj\multithreading.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\guiGenerated.cpp -o obj\GUI_Generated.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\mainDialog.cpp -o obj\MainDialog.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\syncDialog.cpp -o obj\SyncDialog.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\customGrid.cpp -o obj\CustomGrid.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\resources.cpp -o obj\Resources.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\misc.cpp -o obj\misc.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\smallDialogs.cpp -o obj\SmallDialogs.o +set parameters=-Wall -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG +if not exist obj md obj +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\application.cpp -o obj\Application.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\FreeFileSync.cpp -o obj\FreeFileSync.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\globalFunctions.cpp -o obj\globalFunctions.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\multithreading.cpp -o obj\multithreading.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\guiGenerated_ansi.cpp -o obj\GUI_Generated.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\mainDialog.cpp -o obj\MainDialog.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\syncDialog.cpp -o obj\SyncDialog.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\customGrid.cpp -o obj\CustomGrid.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\resources.cpp -o obj\Resources.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\misc.cpp -o obj\misc.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\smallDialogs.cpp -o obj\SmallDialogs.o windres.exe -i %sources%\resource.rc -J rc -o obj\resource.res -O coff -I%widgets%\include -I%widgetslib% mingw32-g++.exe -L%widgets%\lib\gcc_lib -o FreeFileSync.exe obj\Application.o obj\FreeFileSync.o obj\globalFunctions.o obj\multithreading.o obj\misc.o obj\GUI_Generated.o obj\MainDialog.o obj\SyncDialog.o obj\CustomGrid.o obj\Resources.o obj\SmallDialogs.o obj\resource.res -s -mthreads -lwxmsw28_adv -lwxmsw28_core -lwxbase28 -lwxpng -lwxzlib -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lcomctl32 -lwsock32 -lodbc32 -mwindows +del %sources%\ui\guiGenerated_ansi.cpp pause
\ No newline at end of file diff --git a/Makefile_Win_Unicode.cmd b/Makefile_Win_Unicode.cmd index ab4541bb..e1f54f67 100644 --- a/Makefile_Win_Unicode.cmd +++ b/Makefile_Win_Unicode.cmd @@ -1,21 +1,23 @@ +::set these variables to the appropriate directories set widgets=C:\Programme\CodeBlocks\wxWidgets set widgetslib=C:\Programme\CodeBlocks\wxWidgets\lib\gcc_lib\mswu set sources=C:\Programme\CodeBlocks\Projects\FreeFileSync +set mingw=C:\Programme\CodeBlocks\MinGW\bin -md obj - -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -DwxUSE_UNICODE -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\application.cpp -o obj\Application.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -DwxUSE_UNICODE -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\FreeFileSync.cpp -o obj\FreeFileSync.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -DwxUSE_UNICODE -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\globalFunctions.cpp -o obj\globalFunctions.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -DwxUSE_UNICODE -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\multithreading.cpp -o obj\multithreading.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -DwxUSE_UNICODE -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\guiGenerated.cpp -o obj\GUI_Generated.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -DwxUSE_UNICODE -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\mainDialog.cpp -o obj\MainDialog.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -DwxUSE_UNICODE -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\syncDialog.cpp -o obj\SyncDialog.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -DwxUSE_UNICODE -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\customGrid.cpp -o obj\CustomGrid.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -DwxUSE_UNICODE -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\resources.cpp -o obj\Resources.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -DwxUSE_UNICODE -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\misc.cpp -o obj\misc.o -mingw32-g++.exe -Wall -pipe -mthreads -D__GNUWIN32__ -DwxUSE_UNICODE -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\smallDialogs.cpp -o obj\SmallDialogs.o +set parameters=-Wall -pipe -mthreads -D__GNUWIN32__ -DwxUSE_UNICODE -D__WXMSW__ -DFFS_WIN -O2 -DNDEBUG +path=%path%;%mingw% +if not exist obj md obj +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\application.cpp -o obj\Application.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\FreeFileSync.cpp -o obj\FreeFileSync.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\globalFunctions.cpp -o obj\globalFunctions.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\multithreading.cpp -o obj\multithreading.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\guiGenerated.cpp -o obj\GUI_Generated.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\mainDialog.cpp -o obj\MainDialog.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\syncDialog.cpp -o obj\SyncDialog.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\customGrid.cpp -o obj\CustomGrid.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\resources.cpp -o obj\Resources.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\library\misc.cpp -o obj\misc.o +mingw32-g++.exe %parameters% -I%widgets%\include -I%widgets%\contrib\include -I%widgetslib% -c %sources%\ui\smallDialogs.cpp -o obj\SmallDialogs.o windres.exe -i %sources%\resource.rc -J rc -o obj\resource.res -O coff -I%widgets%\include -I%widgetslib% mingw32-g++.exe -L%widgets%\lib\gcc_lib -o FreeFileSync.exe obj\Application.o obj\FreeFileSync.o obj\globalFunctions.o obj\multithreading.o obj\misc.o obj\GUI_Generated.o obj\MainDialog.o obj\SyncDialog.o obj\CustomGrid.o obj\Resources.o obj\SmallDialogs.o obj\resource.res -s -mthreads -lwxmsw28u_adv -lwxmsw28u_core -lwxbase28u -lwxpng -lwxzlib -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lcomctl32 -lwsock32 -lodbc32 -mwindows - pause
\ No newline at end of file @@ -1,4 +1,4 @@ -FreeFileSync v1.8 +FreeFileSync v1.9 ----------------- Usage @@ -7,37 +7,38 @@ Usage 2. Select "Synchronize..." to specify settings and begin synchronization. -Features --------- +Key Features +------------ 1. Compare files (bytewise or by date) and synchronize them. 2. No limitations: An arbitrary number of files can be synchronized. -3. Subfolders are also synchronized, including empty folders. -4. Unicode support. -5. Network support. -6. Lean & easy accessible UI: Highly optimized for speed and huge sets of data. -7. Algorithms coded in C++ completely. -8. Focus on usability: +3. Unicode support. +4. Network support. +5. Lean & easy accessible UI: Highly optimized for speed and huge sets of data. +6. Algorithms coded in C++ completely. +7. Progress indicators are updated only every 100ms for optimal performance! +8. Subfolders are also synchronized, including empty folders. +9. Focus on usability: - Only necessary functionality on UI: no overloaded menus or icon jungle. - Select folders via drag & drop. - Last configuration and screen settings are saved automatically. - Maintain and load different configurations by drag&drop, load-button or commandline. - - Double-click to show file in explorer. + - Double-click to show file in explorer. (Windows only) - Copy & paste support to export file-lists. - Delete superfluous/temporary files directly on main grid. - Right-click context menu. - - Progress indicators, status information and error reporting. + - Status information and error reporting - Sort file-lists by name, size or date. - Display statistical data: total filesizes, amount of bytes that will be transfered with the current settings. -9. Easy configurable commandline mode for automated synchronization. -10. Support for filesizes > 4 GB. -11. Option to move files to Recycle Bin instead of deleting/overwriting them. -12. Automatically ignore directories "\RECYCLER" and "\System Volume Information" when comparing and syncing. (Windows only) -13. Localized German version available. -14. Delete before copy: Avoid disc space shortages with large sync-operations. -15. Based on wxWidgets framework => Portable to many operating systems. -16. Filter functionality to include/exclude files from synchronization (without re-compare!). -17. Include/exclude specific files from synchronization manually. -18. Create sync jobs via GUI to synchronize automatically (can be scheduled or executed directly). +10. Easy configurable commandline mode for automated synchronization. +11. Support for filesizes > 4 GB. +12. Option to move files to Recycle Bin instead of deleting/overwriting them. +13. Automatically ignore directories "\RECYCLER" and "\System Volume Information" when comparing and sync'ing. (Windows only) +14. Localized English, French and German versions available. +15. Delete before copy: Avoid disc space shortages with large sync-operations. +16. Based on wxWidgets framework => Portable to many operating systems. +17. Filter functionality to include/exclude files from synchronization (without re-compare!). +18. Include/exclude specific files from synchronization manually. +19. Create sync jobs via GUI to synchronize automatically (can be scheduled or executed directly). Links diff --git a/Resources.dat b/Resources.dat Binary files differindex 7d27b27e..c607e687 100644 --- a/Resources.dat +++ b/Resources.dat @@ -11,13 +11,13 @@ TB To You may try to synchronize remaining items again (WITHOUT having to re-compare)! - Vous pouvez essayer de synchroniser à nouveau les éléments restants (SANS avoir à les re-comparer) ! + Vous pouvez essayer de synchroniser à nouveau les éléments restants (SANS avoir à les re-comparer) ! already exists. Overwrite? - existe déjà. Voulez-vous le remplacer ? + existe déjà . Voulez-vous le remplacer ? directories - répertoires + répertoires directory - répertoire + répertoire does not exist. n'existe pas. file, @@ -25,7 +25,7 @@ files, fichiers, item(s):\n\n - Elément(s):\n\n + Elément(s):\n\n kB ko of @@ -39,15 +39,15 @@ to vers to recycle bin! - à la corbeille ! + à la corbeille ! != files are different\n -!= les fichiers sont différents\n +!= les fichiers sont différents\n &Abort &Abandon &About... &A propos de... &Advanced -&Avancé +&Avancé &Back &Retour &Cancel @@ -57,11 +57,11 @@ &Continue &Continuer &Create -&Créer +&Créer &Create batch job -&Créer un fichier de commandes +&Créer un fichier de commandes &Default -&Défaut +&Défaut &Export file list &Exportation de la liste des fichiers &File @@ -77,13 +77,13 @@ &Quit &Quitter &Retry -&Réessayer +&Réessayer &Start -&Démarrage +&Démarrage &Synchronize &Synchronisation (-) filtered out from sync-process\n -(-) non synchronisés\n +(-) non synchronisés\n , . ------------------------------------------------- @@ -96,60 +96,58 @@ -Synchronisation de fichiers Open-Source- . , -.\n\nExamples:\n\n1.) FreeFileSync -cmp SIZEDATE -cfg RRRRR C:\\Source C:\\Target\n2.) FreeFileSync -cmp sizedate -cfg rlrln c:\\dir1 c:\\dir2 -incl *.doc\n\n1: Creates a mirror backup of the left directory\n2: Synchronizes all *.doc files from both directories simultaneously\n\n -.\n\nExemples :\n\n1.) FreeFileSync -cmp SIZEDATE -cfg RRRRR C:\\Source C:\\Target\n2.) FreeFileSync -cmp sizedate -cfg rlrln c:\\dir1 c:\\dir2 -incl *.doc\n\n1: Crée une sauvegarde miroir du répertoire de gauche\n2: Synchronise tous les fichiers *.doc sur les deux répertoires\n\n 1. Enter full file or directory names separated by ';'.\n2. Wildcard characters '*' and '?' are supported.\n3. Case sensitive expressions!\n\nExample: *.tmp;*\\filename.dat;*\\directory\\* -1. Entrer les noms complets des fichiers ou répertoires séparés par des ';'.\n2. Les caractères génériques '*' et '?' sont supportés.\n3. La distinction est faite entre majuscules et minuscules!\n\nExemple: *.tmp;*\\fichier.dat;*\\repert\\* +1. Entrer les noms complets des fichiers ou répertoires séparés par des ';'.\n2. Les caractères génériques '*' et '?' sont supportés.\n3. La distinction est faite entre majuscules et minuscules!\n\nExemple: *.tmp;*\\fichier.dat;*\\repert\\* : check file content\n -: Contrôle le contenu du fichier\n +: Contrôle le contenu du fichier\n : check filesize and date\n\t\t -: Contrôle la taille et la date\n\t\t +: Contrôle la taille et la date\n\t\t << left file is newer\n -<< le fichier de gauche est plus récent\n +<< le fichier de gauche est plus récent\n <Directory> -<Répertoire> +<Répertoire> <left directory> -<répertoire de gauche> +<répertoire de gauche> <right directory> -<répertoire de droite> +<répertoire de droite> <| file on left side only\n -<| Le fichier existe seulement à gauche\n +<| Le fichier existe seulement à gauche\n == files are equal\n\n == Les fichiers sont identiques\n\n >> right file is newer\n ->> le fichier de droite est plus récent\n +>> le fichier de droite est plus récent\n Abort Abandon Abort requested: Waiting for current operation to finish... -Abandon demandé: En attente de la fin de l'opération en cours... +Abandon demandé: En attente de la fin de l'opération en cours... Aborted -Abandonné +Abandonné About A propos de Action Action All items have been synchronized! -Tous les éléments ont été synchronisés! +Tous les éléments ont été synchronisés! An error occured Une erreur s'est produite An exception occured! Une violation s'est produite! Assemble a batch file with the following settings. To start synchronization in batch mode simply execute this file or schedule it in your operating system's task planner. -Créer un fichier de commandes avec les paramètres suivants. Pour lancer la synchronisation en mode batch, exécutez ce fichier ou paramétrez-le dans le planificateur de tâches. +Créer un fichier de commandes avec les paramètres suivants. Pour lancer la synchronisation en mode batch, exécutez ce fichier ou paramétrez-le dans le planificateur de tâches. Batch file created successfully! -Fichier de commandes créé avec succès! +Fichier de commandes créé avec succès! Build: -Créé: +Créé: Choose to hide filtered files/directories from list -Masquer les fichiers/répertoires filtrés +Masquer les fichiers/répertoires filtrés Comma separated list -Liste d'éléments séparés par une virgule +Liste d'éléments séparés par une virgule Command file Fichier de commandes Compare both sides Comparer les deux listes Compare by \"File size and date\"\n----------------------------------------\nThis variant evaluates two equally named files as being equal when they have the same file size AND the same last write date and time. Notice that the file time is allowed to deviate by up to 2 seconds. This ensures synchronization with the lower-precision file system FAT32 works correctly.\n\nWhen \"Compare\" is triggered with this option set the following decision tree is processed:\n\n -----------------\n |Decision tree|\n -----------------\n ________|___________\n | |\n file exists on both sides on one side only\n _____|______ __|___\n | | | |\nequal different left right\n _________|__________\n | | |\n left newer right newer same date\n\nAs a result 6 different status can be returned to categorize all files:\n\n- exists left only\n- exists right only\n- left newer\n- right newer\n- different filesize (but same date)\n- equal\n\n\nCompare by \"File content\"\n----------------------------------------\nAs the name suggests, two files which share the same name are marked as equal if and only if they have the same content. This option is useful for consistency checks rather than backup operations. Therefore the file times are not taken into account at all.\n\nWith this option enabled the decision tree is smaller:\n\n -----------------\n |Decision tree|\n -----------------\n ________|___________\n | |\n file exists on both sides on one side only\n _____|______ __|___\n | | | |\nequal different left right\n\nAs a result the files are separated into the following categories:\n\n- exists left only\n- exists right only\n- different\n- equal -Comparaison par \"taille et date\"\n---------------------------------------------------\nCette variante identifie deux fichiers identiques lorsqu'ils ont la même taille ET la même date de création. (Note : l'heure est calculée à plus ou moins 2 secondes.)\n\nLorsque \"Compare\" est lancé avec cette option, l'arbre de décision est évalué comme suit :\n\n -------------------------\n | Arbre de décision |\n -------------------------\n _______________________|___________________\n | |\n le fichier existe des 2 cotés Sur un seul côté\n __________|_____________ ____|___\n | | | |\n identique différent gauche droite\n __________________|__________________\n | | |\n plus récent à gauche plus récent à droite différents (mais même date)\n\nRésultat : 6 états permettent de différencier tous les fichiers:\n\n- existe seulement à gauche\n- existe seulement à droite\n- plus récent à gauche\n- plus récent à droite\n- différents (mais même date)\n- identiques\n\n\nComparaison du \"contenu\"\n------------------------------------\nComme indiqué, deux fichiers de même nom sont considérés comme identiques si, et seulement si, leur contenu est identique. Cette option sert plus aux contrôles de cohérence qu'aux opérations de sauvegarde. Pour cette raison, la date de la dernière modification des fichiers n'est pas pris en compte.\n\nAvec cette option, l'arbre de décision est plus simple:\n\n -------------------------\n | Arbre de décision |\n -------------------------\n __________|_____________\n | |\n le fichier existe des deux côtés seulement d'un côté\n ______|______ __|___\n | | | |\n identiques différents à gauche à droite\n\nRésultat : une répartition dans les catégories suivantes:\n\n- existe à gauche seulement\n- existe à droite seulement\n- différents\n- identiques +Comparaison par \"taille et date\"\n---------------------------------------------------\nCette variante identifie deux fichiers identiques lorsqu'ils ont la même taille ET la même date de création. (Note : l'heure est calculée à plus ou moins 2 secondes.)\n\nLorsque \"Compare\" est lancé avec cette option, l'arbre de décision est évalué comme suit :\n\n -------------------------\n | Arbre de décision |\n -------------------------\n _______________________|___________________\n | |\n le fichier existe des 2 cotés Sur un seul côté\n __________|_____________ ____|___\n | | | |\n identique différent gauche droite\n __________________|__________________\n | | |\n plus récent à gauche plus récent à droite différents (mais même date)\n\nRésultat : 6 états permettent de différencier tous les fichiers:\n\n- existe seulement à gauche\n- existe seulement à droite\n- plus récent à gauche\n- plus récent à droite\n- différents (mais même date)\n- identiques\n\n\nComparaison du \"contenu\"\n------------------------------------\nComme indiqué, deux fichiers de même nom sont considérés comme identiques si, et seulement si, leur contenu est identique. Cette option sert plus aux contrôles de cohérence qu'aux opérations de sauvegarde. Pour cette raison, la date de la dernière modification des fichiers n'est pas pris en compte.\n\nAvec cette option, l'arbre de décision est plus simple:\n\n -------------------------\n | Arbre de décision |\n -------------------------\n __________|_____________\n | |\n le fichier existe des deux côtés seulement d'un côté\n ______|______ __|___\n | | | |\n identiques différents à gauche à droite\n\nRésultat : une répartition dans les catégories suivantes:\n\n- existe à gauche seulement\n- existe à droite seulement\n- différents\n- identiques Compare by... Comparaison par... Comparing content of files @@ -157,21 +155,21 @@ Comparaison du contenu des fichiers en cours Comparing... Comparaison en cours... Completed -Terminé +Terminé Configuration Configuration Configuration loaded! -Configuration chargée! +Configuration chargée! Configuration overview: -Contrôle des paramètres: +Contrôle des paramètres: Configuration saved! -Configuration enregistrée! +Configuration enregistrée! Configure filter Configuration des filtres Configure filter... Configuration des filtres... Configure your own synchronization rules. -Paramétrage de vos règles de synchronisation. +Paramétrage de vos règles de synchronisation. Confirm Confirmation Continue @@ -181,13 +179,13 @@ Continuer en cas d'erreur Continue on next errors Continuer sur les erreurs suivantes Copy from left to right -Copie de gauche à droite +Copie de gauche à droite Copy from left to right overwriting -Copie de gauche à droite avec remplacement +Copie de gauche à droite avec remplacement Copy from right to left -Copie de droite à gauche +Copie de droite à gauche Copy from right to left overwriting -Copie de droite à gauche avec remplacement +Copie de droite à gauche avec remplacement Copy to clipboard\tCTRL+C Copier dans le presse-papiers\tCTRL+C Copying file @@ -201,31 +199,31 @@ Impossible de lire le fichier de langue Could not retrieve file info for: Erreur lors de la lecture des attributs de fichier de : Could not set working directory to directory containing executable file! -Impossible de définir le répertoire de travail à partir du répertoire contenant le fichier exécutable! +Impossible de définir le répertoire de travail à partir du répertoire contenant le fichier exécutable! Could not write to -Erreur en écriture sur +Erreur en écriture sur Create a batch job -Création du fichier de commandes +Création du fichier de commandes Create: -Créations: +Créations: Creating folder -Création d'un répertoire +Création d'un répertoire Current operation: -Opération en cours: +Opération en cours: Custom Personnaliser Data remaining: -Données restantes: +Données restantes: Data to compare: -Données à comparer: +Données à comparer: Data: -Données: +Données: Date Date Delete files/folders existing on left side only -Suppression des fichiers/répertoires n'existant que sur le côté gauche +Suppression des fichiers/répertoires n'existant que sur le côté gauche Delete files/folders existing on right side only -Suppression des fichiers/répertoires n'existant que sur le côté droit +Suppression des fichiers/répertoires n'existant que sur le côté droit Delete files\tDEL Suppression des fichiers\tDEL Delete: @@ -233,19 +231,21 @@ Suppressions: Deleting file Suppression du fichier Deleting folder -Suppression du répertoire +Suppression du répertoire Deutsch Deutsch Directory -Répertoire +Répertoire Directory on the left does not exist. Please select a new one! -Le répertoire de gauche n'existe pas. Veuillez en choisir un autre! +Le répertoire de gauche n'existe pas. Veuillez en choisir un autre! Directory on the right does not exist. Please select a new one! -Le répertoire de droite n'existe pas. Veuillez en choisir un autre +Le répertoire de droite n'existe pas. Veuillez en choisir un autre Displays help on the command line parameters\n -Aide sur les paramètres de la ligne de commandes\n +Aide sur les paramètres de la ligne de commandes\n Do not show graphical status and error messages but write to a logfile instead -Ne pas afficher l'état graphique ni les messages mais les écrire sur un fichier log +Ne pas afficher l'état graphique ni les messages mais les écrire sur un fichier log +Do not show graphical status and error messages but write to a logfile instead.\n\n +Ne pas afficher l'état graphique ni les messages mais les écrire sur un fichier log.\n\n Do nothing Ne rien faire Do you really want to delete the following objects(s)? @@ -255,7 +255,7 @@ Voulez-vous vraiment envoyer les objets suivants dans la corbeille ? Donate with Paypal Don avec Paypal Drag && drop -Glisser && Déposer +Glisser && Déposer Email: Email: English @@ -271,17 +271,17 @@ Erreur lors de la conversion de FILETIME en FILETIME local Error copying file Erreur lors de la copie du fichier Error creating directory -Erreur lors de la création du répertoire +Erreur lors de la création du répertoire Error deleting directory -Erreur lors de la suppression du répertoire +Erreur lors de la suppression du répertoire Error deleting file Erreur lors de la suppression du fichier Error moving file -Erreur lors du déplacement du fichier +Erreur lors du déplacement du fichier Error reading file: Erreur lors de la lecture du fichier: Error traversing directory -Erreur lors du parcours du répertoire +Erreur lors du parcours du répertoire Error when converting int to wxString Erreur de conversion (int en wxString) Error when converting wxString to double @@ -289,57 +289,55 @@ Erreur de conversion (wxString en double) Error when converting wxString to long Erreur de conversion (wxString en long) Error: Source directory does not exist anymore: -Erreur: le répertoire source n'existe plus: +Erreur: le répertoire source n'existe plus: Exclude Exclure Feedback and suggestions are welcome at: -Commentaires et suggestions sont les bienvenus à: +Commentaires et suggestions sont les bienvenus à : File content Contenu du fichier File list exported! -Liste des fichiers exportée! +Liste des fichiers exportée! File size and date Taille et date du fichier Filename Nom du fichier Files are found equal if\n - file content\nis the same. -Les fichiers sont considérés comme identiques, si\n - leur contenu est identique. +Les fichiers sont considérés comme identiques, si\n - leur contenu est identique. Files are found equal if\n - filesize\n - last write time (UTC) and date\nare the same. -Les fichiers sont considérés comme identiques, si\n - leur taille\n - leur date et heure(UTC) sont identiques. +Les fichiers sont considérés comme identiques, si\n - leur taille\n - leur date et heure(UTC) sont identiques. Files that exist on both sides and have different content -Les fichiers existent des deux côtés et ont des contenus différents +Les fichiers existent des deux côtés et ont des contenus différents Files that exist on both sides, have same date but different filesizes -Les fichiers existent des deux côtés, ont la même date mais des tailles différentes +Les fichiers existent des deux côtés, ont la même date mais des tailles différentes Files that exist on both sides, left one is newer -Fichiers existants des deux côtés, celui de gauche est plus récent +Fichiers existants des deux côtés, celui de gauche est plus récent Files that exist on both sides, right one is newer -Fichiers existants des deux côtés, celui de droite est plus récent +Fichiers existants des deux côtés, celui de droite est plus récent Files to compare: -Fichiers à comparer: -Files/folders scanned: -Fichiers/dossiers analysés +Fichiers à comparer: Files/folders remaining: Fichiers/dossiers restants: +Files/folders scanned: +Fichiers/dossiers analysés Files/folders that exist on left side only -Fichiers/répertoires existants seulement à gauche +Fichiers/répertoires existants seulement à gauche Files/folders that exist on right side only -Fichiers/répertoires existants seulement à droite +Fichiers/répertoires existants seulement à droite Filter Filtrage Filter active: Press again to deactivate -Filtrage actif: Cliquez de nouveau pour le désactiver +Filtrage actif: Cliquez de nouveau pour le désactiver Filter files Filtrage des fichiers Filter manually Filtrage manuel Filter view Filtrage de la vue -Français -Français FreeFileSync (Date: FreeFileSync (Date: FreeFileSync - Folder Comparison and Synchronization -FreeFileSync - Comparaison et synchronisation de répertoires +FreeFileSync - Comparaison et synchronisation de répertoires FreeFileSync at Sourceforge FreeFileSync par Sourceforge FreeFileSync configuration @@ -347,17 +345,17 @@ FreeFileSync configuration Help Aide Hide filtered items -Masquer les éléments filtrés +Masquer les éléments filtrés Hide further error messages during the current process and continue -Masquer les messages d'erreur suivants de l'opération en cours et continuer +Masquer les messages d'erreur suivants de l'opération en cours et continuer Hides error messages during synchronization:\nThey are collected and shown as a list at the end of the process -Masquer les messages d'erreur pendant la synchronisation:\nIls sont collationnés et listés à la fin de l'opération +Masquer les messages d'erreur pendant la synchronisation:\nIls sont collationnés et listés à la fin de l'opération Hints: Conseils: Homepage: Page d'accueil: -If errors occur during folder comparison or synchronization they are ignored and the process continues\n -Si des erreurs se produisent pendant la comparaison ou la synchronisation des répertoires, elles seront ignorées et l'opération se poursuivra\n +If errors occur during folder comparison or synchronization they are ignored and the process continues.\n +Si des erreurs se produisent pendant la comparaison ou la synchronisation des répertoires, elles seront ignorées et l'opération se poursuivra.\n If you like FFS: Si vous aimez FFS: Include @@ -367,59 +365,59 @@ Info Information Information Initialization of Recycle Bin failed! It cannot be used! -Erreur lors de l'initialisation de la corbeille ! La corbeille ne peut être utilisée! +Erreur lors de l'initialisation de la corbeille ! La corbeille ne peut être utilisée! It was not possible to gain access to Recycle Bin!\n\nIt's likely that you are not using Windows XP. (Probably Vista)\nIf you want this feature included, please contact the author. :) -Impossible d'accéder à la corbeille!\n\nIl est probable que vous n'utilisez pas Windows XP. (Peut-être Vista?)\nSi vous désirez utilisee cette fonctionnalité, veuillez contacter l'auteur. :) +Impossible d'accéder à la corbeille!\n\nIl est probable que vous n'utilisez pas Windows XP. (Peut-être Vista?)\nSi vous désirez utilisee cette fonctionnalité, veuillez contacter l'auteur. :) Left directory does not exist. Please select a new one! -Le répertoire de gauche n'existe pas. Veuillez en choisir un autre! +Le répertoire de gauche n'existe pas. Veuillez en choisir un autre! Left folder: -Répertoire de gauche: +Répertoire de gauche: Legend\n Legende\n -Load configuration from file:\n - use this choice box\n - drag & drop config file to this window\n - specify config file as first commandline parameter -Chargement de la configuration à partir du fichier:\n - utiliser cette liste de choix\n - Déplacer et déposer le fichier de configuration dans cette fenêtre\n - Définir le nom du fichier de commandes comme premier paramètre de la ligne de commande -Load configuration... -Charger la configuration... +Load configuration via...\n - this list (press DEL to delete items)\n - drag & drop to this window\n - startup parameter + +Load from file... + Log-messages:\n------------- Messages log:\n--------------- Mirror backup of left folder: Right folder will be overwritten and exactly match left folder after synchronization. -Sauvegarde miroir du répertoire de gauche : Le répertoire de droite sera écrasé et exactement identique au répertoire de gauche après la synchronisation. +Sauvegarde miroir du répertoire de gauche : Le répertoire de droite sera écrasé et exactement identique au répertoire de gauche après la synchronisation. Move files to Recycle Bin instead of deleting or overwriting them directly.\n -Déplacer les fichiers dans la corbeille au lieu de les supprimer ou de remplacer.\n +Déplacer les fichiers dans la corbeille au lieu de les supprimer ou de remplacer.\n Not all items were synchronized! Have a look at the list. -Tous les éléments n'ont pas été synchronisés! Veuillez vérifier la liste. +Tous les éléments n'ont pas été synchronisés! Veuillez vérifier la liste. Nothing to synchronize. Both directories adhere to the sync-configuration! -Rien à synchroniser. Les deux répertoires sont conformes aux paramètres de synchronisation! +Rien à synchroniser. Les deux répertoires sont conformes aux paramètres de synchronisation! Number of files and directories that will be created -Nombre de fichiers et de répertoires qui seront créés +Nombre de fichiers et de répertoires qui seront créés Number of files and directories that will be deleted -Nombre de fichiers et de répertoires qui seront supprimés +Nombre de fichiers et de répertoires qui seront supprimés Number of files that will be overwritten -Nombre de fichiers qui seront remplacés +Nombre de fichiers qui seront remplacés One way -> Vers la droite -> Only files/directories that pass filtering will be selected for synchronization. -Seuls les fichiers/répertoires correspondant au filtrage sont retenus pour la synchronisation. +Seuls les fichiers/répertoires correspondant au filtrage sont retenus pour la synchronisation. Open synchronization dialog -Ouvrir la boîte de dialogue de la synchronisation +Ouvrir la boîte de dialogue de la synchronisation Open with Explorer\tD-Click Ouvrir dans l'explorateur\tD-Click Operation aborted! -Opération abandonnée! +Opération abandonnée! Operation: -Opération: +Opération: Pause Pause Please select both left and right directories! -Veuillez, s'il vous plaît, choisir les répertoires de droite et de gauche! +Veuillez, s'il vous plaît, choisir les répertoires de droite et de gauche! Please select directories for both sides! -Veuillez, s'il vous plaît, choisir les répertoires de droite et de gauche! +Veuillez, s'il vous plaît, choisir les répertoires de droite et de gauche! Press button to activate filter Cliquez pour activer le filtrage Preview -Prévoir +Prévoir Published under the GNU General Public License: -Publié sous la licence GNU General Public: +Publié sous la licence GNU General Public: Quit Quitter Relative path @@ -427,97 +425,97 @@ Chemin Remaining time: Temps restant: Result -Résultat +Résultat Right directory does not exist. Please select a new one! -Le répertoire de droite n'existe pas. Veuillez en choisir un autre! +Le répertoire de droite n'existe pas. Veuillez en choisir un autre! Right folder: -Répertoire de droite: +Répertoire de droite: Save current configuration to file Enregistrer la configuration courante Saved aborted! -Enregistrement annulé! +Enregistrement annulé! Scanning Lecture en cours Scanning... Lecture en cours... Select a folder -Choisissez un répertoire +Choisissez un répertoire Select variant: Choisissez une variante: Set filter for synchronization -Définir le filtrage +Définir le filtrage Shell script Shell Script Show files that are different -Afficher les fichiers différents +Afficher les fichiers différents Show files that are equal Afficher les fichiers identiques Show files that are newer on left -Afficher les fichiers de gauche plus récents que ceux de droite +Afficher les fichiers de gauche plus récents que ceux de droite Show files that are newer on right -Afficher les fichiers de droite plus récents que ceux de gauche +Afficher les fichiers de droite plus récents que ceux de gauche Show files that exist on left side only -Afficher les fichiers existants seulement à gauche +Afficher les fichiers existants seulement à gauche Show files that exist on right side only -Afficher les fichiers existants seulement à droite +Afficher les fichiers existants seulement à droite Silent mode Mode silence Size Taille Source code written completely in C++ utilizing:\n\n MinGW \t\t- Windows port of GNU Compiler Collection\n wxWidgets \t- Open-Source GUI framework\n wxFormBuilder\t- wxWidgets GUI-builder\n CodeBlocks \t- Open-Source IDE\n\n by ZenJu -Code source entièrement écrit en C++ utilisant:\n\n MinGW \t\t- Windows-Port de GNU Compiler Collection\n wxWidgets \t- Open-Source GUI-Framework\n wxFormBuilder\t- wxWidgets GUI-Builder\n CodeBlocks \t- Open-Source IDE\n\n ZenJu +Code source entièrement écrit en C++ utilisant:\n\n MinGW \t\t- Windows-Port de GNU Compiler Collection\n wxWidgets \t- Open-Source GUI-Framework\n wxFormBuilder\t- wxWidgets GUI-Builder\n CodeBlocks \t- Open-Source IDE\n\n ZenJu Specify algorithm to test if files are equal:\n\n\t\t -Spécification de l'algorithme de contrôle de l'identité de deux fichiers:\n\n\t\t +Spécification de l'algorithme de contrôle de l'identité de deux fichiers:\n\n\t\t Specify names to be excluded separated by ';'. Wildcards '*' and '?' are supported. Default: \"\"\n -Noms à exclure, séparés par des ';'. Les caractères génériques '*' et '?' sont supportés. Par défaut: \"\"\n +Noms à exclure, séparés par des ';'. Les caractères génériques '*' et '?' sont supportés. Par défaut: \"\"\n Specify names to be included separated by ';'. Wildcards '*' and '?' are supported. Default: \"*\"\n -Noms à inclure, séparés par des ';'.Les caractères génériques '*' et '?' sont supportés. Par défaut: \"*\"\n -Specify the sync-direction used for each type of file by a string of five chars:\n\n\t\tChar 1: Folders/files that exist on left side only\n\t\tChar 2: Folders/files that exist on right side only\n\t\tChar 3: Files that exist on both sides, left one is newer\n\t\tChar 4: Files that exist on both sides, right one is newer\n\t\tChar 5: Files that exist on both sides and are different\n\n\t\tSync-direction: L: left, R: right, N: none\n -Paramétrage de la synchronisation avec une chaîne de 5 caractères:\n\n\t\tCar 1: Dossiers/fichiers n'existant que dans le répertoire de gauche\n\t\tCar 2: Dossiers/fichiers n'existant que dans le répertoire de droite\n\t\tCar 3: Fichiers de gauche plus récents\n\t\tCar 4: Fichiers de droite plus récents\n\t\tCar 5: Fichiers existants des deux côtés et différents\n\n\t\tDirection de la synchronisation: L: vers la gauche, R: vers la droite, N: ne rien faire\n +Noms à inclure, séparés par des ';'.Les caractères génériques '*' et '?' sont supportés. Par défaut: \"*\"\n +Specify the sync-direction used for each type of file by a string of five chars:\n\n +Paramétrage de la synchronisation avec une chaîne de 5 caractères:\n\n Start -Démarrer +Démarrer Start synchronization -Démarrer la synchronisation +Démarrer la synchronisation Stop Stop Swap sides -Permuter les côtés +Permuter les côtés Synchronization aborted! -Synchronisation abandonnée! +Synchronisation abandonnée! Synchronization completed successfully. -Synchronisation terminée avec succès. +Synchronisation terminée avec succès. Synchronization completed with errors! -Synchronisation terminée avec des erreurs! +Synchronisation terminée avec des erreurs! Synchronization settings -Paramétrage de la synchronisation +Paramétrage de la synchronisation Synchronization status Etat de la synchronisation Synchronize both sides simultaneously: Copy new or updated files in both directions. -Synchronisation simultanée des deux côtés. Copie des fichiers nouveaux ou mis à jour. +Synchronisation simultanée des deux côtés. Copie des fichiers nouveaux ou mis à jour. Synchronizing... Synchronisation en cours... -Thanks to Jean-François Hartmann for doing the French translation! -Merci à Jean-François Hartmann pour la traduction en Français! +Thanks to Jean-François Hartmann for doing the French translation! +Merci à Jean-François Hartmann pour la traduction en Français! The selected file does not contain a valid configuration! -Le fichier sélectionné ne contient pas de configuration valide! +Le fichier sélectionné ne contient pas de configuration valide! The selected file does not exist anymore! -Le fichier sélectionné n'existe plus! +Le fichier sélectionné n'existe plus! Time elapsed: -Temps écoulé: +Temps écoulé: Total amount of data that will be transferred -Volume de données à transférer +Volume de données à transférer Total time: Temps total: Two way <-> -Des 2 côtés <-> +Des 2 côtés <-> Unable to create logfile! -Impossible de créer un fichier log! +Impossible de créer un fichier log! Unable to initialize Recycle Bin! Impossible d'initialiser la corbeille! Unable to load Resources.dat! Impossible de charger Resources.dat! Update: -Mises à jour: +Mises à jour: Use Recycle Bin Utilisation de la corbeille Use Recycle Bin when deleting or overwriting files during synchronization @@ -525,12 +523,30 @@ Utilisation de la corbeille lors de la suppression ou du remplacement des fichie Warning Attention Warning: Synchronization failed for -Attention : la synchronisation a échoué à cause de +Attention : la synchronisation a échoué à cause de \n\nContinue with next object, retry or abort comparison? -\n\nVoulez-vous continuer avec l'objet suivant, réessayer ou annuler la comparaison? +\n\nVoulez-vous continuer avec l'objet suivant, réessayer ou annuler la comparaison? \n\nContinue with next object, retry or abort synchronization? -\n\nVoulez-vous continuer avec l'objet suivant, réessayer ou annuler la synchronisation? +\n\nVoulez-vous continuer avec l'objet suivant, réessayer ou annuler la synchronisation? \n\nInformation: If you skip the error and continue or abort a re-compare will be necessary! -\n\nInformation: Si vous sautez cette erreur et continuer ou si vous annulez, il sera nécessaire d'effectuer une re-comparaison! +\n\nInformation: Si vous sautez cette erreur et continuer ou si vous annulez, il sera nécessaire d'effectuer une re-comparaison! +\n\t\tSync-direction: L: left, R: right, N: none\n +\n\t\tDirection de la synchronisation: L: vers la gauche, R: vers la droite, N: ne rien faire\n +\t1: Creates a mirror backup of the left directory\n\t2: Synchronizes all *.doc files from both directories simultaneously\n\n +\t1: Crée une sauvegarde miroir du répertoire de gauche\n\t2: Synchronise tous les fichiers *.doc sur les deux répertoires\n\n +\tExamples:\n\n\t1.) FreeFileSync -cmp SIZEDATE -cfg RRRRR C:\\Source C:\\Target\n\t2.) FreeFileSync -cmp sizedate -cfg rlrln c:\\dir1 c:\\dir2 -incl *.doc\n\n +\tExemples :\n\n\t1.) FreeFileSync -cmp SIZEDATE -cfg RRRRR C:\\Source C:\\Target\n\t2.) FreeFileSync -cmp sizedate -cfg rlrln c:\\dir1 c:\\dir2 -incl *.doc\n\n +\tHint: You can easily generate a batch file by chosing \"Create batch job\" from the GUI menubar.\n + +\t\tChar 1: Folders/files that exist on left side only\n +\t\tCar 1: Dossiers/fichiers n'existant que dans le répertoire de gauche\n +\t\tChar 2: Folders/files that exist on right side only\n +\t\tCar 2: Dossiers/fichiers n'existant que dans le répertoire de droite\n +\t\tChar 3: Files that exist on both sides, left one is newer\n +\t\tCar 3: Fichiers de gauche plus récents\n +\t\tChar 4: Files that exist on both sides, right one is newer\n +\t\tCar 4: Fichiers de droite plus récents\n +\t\tChar 5: Files that exist on both sides and are different\n +\t\tCar 5: Fichiers existants des deux côtés et différents\n |> file on right side only\n -|> Le fichier existe seulement à droite\n +|> Le fichier existe seulement à droite\n @@ -11,9 +11,9 @@ TB TB You may try to synchronize remaining items again (WITHOUT having to re-compare)! - Verbliebene Elemente können nochmals synchronisiert werden (OHNE dass ein erneuter Vergleich notwendig ist)! + Verbliebene Elemente können nochmals synchronisiert werden (OHNE dass ein erneuter Vergleich notwendig ist)! already exists. Overwrite? - existiert bereits. Überschreiben? + existiert bereits. Ãœberschreiben? directories Verzeichnisse directory @@ -31,7 +31,7 @@ of von overwriting - und überschreibe + und überschreibe row in view Zeile zur Ansicht rows in view @@ -45,11 +45,11 @@ &Abort &Abbruch &About... -&Über... +&Ãœber... &Advanced &Erweitert &Back -&Zurück +&Zurück &Cancel &Abbruch &Compare @@ -96,14 +96,12 @@ -Open-Source Datei-Synchronisation- . , -.\n\nExamples:\n\n1.) FreeFileSync -cmp SIZEDATE -cfg RRRRR C:\\Source C:\\Target\n2.) FreeFileSync -cmp sizedate -cfg rlrln c:\\dir1 c:\\dir2 -incl *.doc\n\n1: Creates a mirror backup of the left directory\n2: Synchronizes all *.doc files from both directories simultaneously\n\n -.\n\nBeispiele:\n\n1.) FreeFileSync -cmp SIZEDATE -cfg RRRRR C:\\Source C:\\Target\n2.) FreeFileSync -cmp sizedate -cfg rlrln c:\\dir1 c:\\dir2 -incl *.doc\n\n1: Erzeugt ein Spiegel-Backup des linken Verzeichnisses\n2: Synchronisiert alle *.doc Dateien aus beiden Verzeichnissen\n\n 1. Enter full file or directory names separated by ';'.\n2. Wildcard characters '*' and '?' are supported.\n3. Case sensitive expressions!\n\nExample: *.tmp;*\\filename.dat;*\\directory\\* -1. Komplette Datei- oder Verzeichnisnamen getrennt durch ';' eingeben.\n2. Die Platzhalter '*' und '?' werden unterstützt.\n3. Groß-/Kleinschreibung wird unterschieden!\n\nBeispiel: *.tmp;*\\filename.dat;*\\directory\\* +1. Komplette Datei- oder Verzeichnisnamen getrennt durch ';' eingeben.\n2. Die Platzhalter '*' und '?' werden unterstützt.\n3. Groß-/Kleinschreibung wird unterschieden!\n\nBeispiel: *.tmp;*\\filename.dat;*\\directory\\* : check file content\n -: Prüfung auf Dateiinhalt\n +: Prüfung auf Dateiinhalt\n : check filesize and date\n\t\t -: Prüfung auf Dateigröße und -datum\n\t\t +: Prüfung auf Dateigröße und -datum\n\t\t << left file is newer\n << linke Datei ist neuer\n <Directory> @@ -125,7 +123,7 @@ Abbruch initiiert: Warte, bis aktuelle Operation beendet ist... Aborted Abgebrochen About -Über +Ãœber Action Aktion All items have been synchronized! @@ -149,7 +147,7 @@ Command Datei Compare both sides Beide Seiten vergleichen Compare by \"File size and date\"\n----------------------------------------\nThis variant evaluates two equally named files as being equal when they have the same file size AND the same last write date and time. Notice that the file time is allowed to deviate by up to 2 seconds. This ensures synchronization with the lower-precision file system FAT32 works correctly.\n\nWhen \"Compare\" is triggered with this option set the following decision tree is processed:\n\n -----------------\n |Decision tree|\n -----------------\n ________|___________\n | |\n file exists on both sides on one side only\n _____|______ __|___\n | | | |\nequal different left right\n _________|__________\n | | |\n left newer right newer same date\n\nAs a result 6 different status can be returned to categorize all files:\n\n- exists left only\n- exists right only\n- left newer\n- right newer\n- different filesize (but same date)\n- equal\n\n\nCompare by \"File content\"\n----------------------------------------\nAs the name suggests, two files which share the same name are marked as equal if and only if they have the same content. This option is useful for consistency checks rather than backup operations. Therefore the file times are not taken into account at all.\n\nWith this option enabled the decision tree is smaller:\n\n -----------------\n |Decision tree|\n -----------------\n ________|___________\n | |\n file exists on both sides on one side only\n _____|______ __|___\n | | | |\nequal different left right\n\nAs a result the files are separated into the following categories:\n\n- exists left only\n- exists right only\n- different\n- equal -Vergleichen nach \"Dateigröße und -datum\"\n---------------------------------------------------\nDiese Variante identifiziert zwei gleichnamige Dateien als gleich, wenn sie die gleiche Dateigröße haben UND der Zeitpunkt der letzten Änderung derselbe ist. Dabei wird eine Abweichung von bis zu zwei Sekunden toleriert. So ist sichergestellt, dass eine Synchronisation gegen ein FAT32 Dateisystem korrekt funktioniert.\n\nNachdem \"Compare\" mit dieser Einstellung gestartet wurde, wird der folgende Entscheidungsbaum abgearbeitet:\n\n -------------------------\n |Entscheidungsbaum|\n -------------------------\n __________|___________\n | |\n Datei ex. auf beiden Seiten nur auf einer Seite\n ________|____ __|___\n | | | |\n gleich verschieden links rechts\n __________|___________\n | | |\n links neuer rechts neuer gleiches Datum\n\nAls Ergebnis werden 6 verschiedene Status zurückgegeben, um Dateien zu kategorisieren:\n\n- existiert nur links\n- existiert nur rechts\n- links neuer\n- rechts neuer\n- verschiedene Dateigrößen (bei gleichem Datum)\n- gleich\n\n\nVergleichen nach \"Dateiinhalt\"\n------------------------------------\nWie der Name bereits sagt, werden zwei Dateien mit gleichem Namen genau dann als gleich angesehen, wenn sie den gleichen Dateiinhalt haben. Diese Einstellung ist eher für Konsistenzprüfungen geeignet als für Backup-Operationen. Aus diesem Grund wird der Zeitpunkt der letzten Änderung der Dateien nicht berücksichtigt.\n\nDer Entscheidungsbaum ist in diesem Fall kleiner:\n\n -------------------------\n |Entscheidungsbaum|\n -------------------------\n __________|___________\n | |\n Datei ex. auf beiden Seiten nur auf einer Seite\n ________|____ __|___\n | | | |\n gleich verschieden links rechts\n\nDas Ergebnis ist eine Aufteilung in folgende Kategorien:\n\n- existiert nur links\n- existiert nur rechts\n- verschieden\n- gleich +Vergleichen nach \"Dateigröße und -datum\"\n---------------------------------------------------\nDiese Variante identifiziert zwei gleichnamige Dateien als gleich, wenn sie die gleiche Dateigröße haben UND der Zeitpunkt der letzten Änderung derselbe ist. Dabei wird eine Abweichung von bis zu zwei Sekunden toleriert. So ist sichergestellt, dass eine Synchronisation gegen ein FAT32 Dateisystem korrekt funktioniert.\n\nNachdem \"Compare\" mit dieser Einstellung gestartet wurde, wird der folgende Entscheidungsbaum abgearbeitet:\n\n -------------------------\n |Entscheidungsbaum|\n -------------------------\n __________|___________\n | |\n Datei ex. auf beiden Seiten nur auf einer Seite\n ________|____ __|___\n | | | |\n gleich verschieden links rechts\n __________|___________\n | | |\n links neuer rechts neuer gleiches Datum\n\nAls Ergebnis werden 6 verschiedene Status zurückgegeben, um Dateien zu kategorisieren:\n\n- existiert nur links\n- existiert nur rechts\n- links neuer\n- rechts neuer\n- verschiedene Dateigrößen (bei gleichem Datum)\n- gleich\n\n\nVergleichen nach \"Dateiinhalt\"\n------------------------------------\nWie der Name bereits sagt, werden zwei Dateien mit gleichem Namen genau dann als gleich angesehen, wenn sie den gleichen Dateiinhalt haben. Diese Einstellung ist eher für Konsistenzprüfungen geeignet als für Backup-Operationen. Aus diesem Grund wird der Zeitpunkt der letzten Änderung der Dateien nicht berücksichtigt.\n\nDer Entscheidungsbaum ist in diesem Fall kleiner:\n\n -------------------------\n |Entscheidungsbaum|\n -------------------------\n __________|___________\n | |\n Datei ex. auf beiden Seiten nur auf einer Seite\n ________|____ __|___\n | | | |\n gleich verschieden links rechts\n\nDas Ergebnis ist eine Aufteilung in folgende Kategorien:\n\n- existiert nur links\n- existiert nur rechts\n- verschieden\n- gleich Compare by... Vergleichen nach... Comparing content of files @@ -163,7 +161,7 @@ Konfiguration Configuration loaded! Konfiguration geladen! Configuration overview: -Übersicht der Parameter: +Ãœbersicht der Parameter: Configuration saved! Konfiguration gespeichert! Configure filter @@ -173,27 +171,27 @@ Konfiguriere Filter... Configure your own synchronization rules. Eigene Synchronisationsregeln definieren. Confirm -Bestätigen +Bestätigen Continue Fortfahren Continue on error Fortfahren bei Fehler Continue on next errors -Fortfahren bei nächsten Fehlern +Fortfahren bei nächsten Fehlern Copy from left to right Von links nach rechts kopieren Copy from left to right overwriting -Von links nach rechts kopieren und überschreiben +Von links nach rechts kopieren und überschreiben Copy from right to left Von rechts nach links kopieren Copy from right to left overwriting -Von rechts nach links kopieren und überschreiben +Von rechts nach links kopieren und überschreiben Copy to clipboard\tCTRL+C Kopiere in Zwischenablage\tCTRL+C Copying file Kopiere Datei Could not open file: -Fehler beim Öffnen der Datei: +Fehler beim Öffnen der Datei: Could not read configuration file Fehler beim Lesen der Konfigurationsdatei Could not read language file @@ -223,33 +221,35 @@ Daten: Date Datum Delete files/folders existing on left side only -Lösche Dateien/Ordner, die nur links existieren +Lösche Dateien/Ordner, die nur links existieren Delete files/folders existing on right side only -Lösche Dateien/Ordner, die nur rechts existieren +Lösche Dateien/Ordner, die nur rechts existieren Delete files\tDEL -Lösche Dateien\tDEL +Lösche Dateien\tDEL Delete: -Löschen: +Löschen: Deleting file -Lösche Datei +Lösche Datei Deleting folder -Lösche Verzeichnis +Lösche Verzeichnis Deutsch Deutsch Directory Verzeichnis Directory on the left does not exist. Please select a new one! -Verzeichnis auf der linken Seite existiert nicht. Bitte ein anderes auswählen! +Verzeichnis auf der linken Seite existiert nicht. Bitte ein anderes auswählen! Directory on the right does not exist. Please select a new one! -Verzeichnis auf der rechten Seite existiert nicht. Bitte ein anderes auswählen! +Verzeichnis auf der rechten Seite existiert nicht. Bitte ein anderes auswählen! Displays help on the command line parameters\n Hilfe zu den Kommandozeilenparametern\n Do not show graphical status and error messages but write to a logfile instead Keine graphischen Status- und Fehlermeldungen anzeigen, sondern eine Logdatei erstellen +Do not show graphical status and error messages but write to a logfile instead.\n\n +Keine graphischen Status- und Fehlermeldungen anzeigen, sondern eine Logdatei erstellen.\n\n Do nothing Nichts tun Do you really want to delete the following objects(s)? -Sollen die folgenden Elemente wirklich gelöscht werden? +Sollen die folgenden Elemente wirklich gelöscht werden? Do you really want to move the following objects(s) to the recycle bin? Sollen die folgenden Elemente wirklich in den Papierkorb verschoben werden? Donate with Paypal @@ -263,7 +263,7 @@ English Error Fehler Error adapting modification time of file -Fehler beim Anpassen des Datums der letzten Änderung der Datei +Fehler beim Anpassen des Datums der letzten Änderung der Datei Error converting FILETIME to SYSTEMTIME Fehler beim Konvertieren der FILETIME nach SYSTEMTIME Error converting FILETIME to local FILETIME @@ -273,9 +273,9 @@ Fehler beim Kopieren der Datei Error creating directory Fehler beim Erstellen des Verzeichnisses Error deleting directory -Fehler beim Löschen des Verzeichnisses +Fehler beim Löschen des Verzeichnisses Error deleting file -Fehler beim Löschen der Datei +Fehler beim Löschen der Datei Error moving file Fehler beim Verschieben der Datei Error reading file: @@ -291,25 +291,25 @@ Fehler bei Konvertierung (wxString nach long) Error: Source directory does not exist anymore: Fehler: Quellverzeichnis existiert nicht mehr: Exclude -Ausschließen +Ausschließen Feedback and suggestions are welcome at: -Feedback und Vorschläge sind willkommen unter: +Feedback und Vorschläge sind willkommen unter: File content Dateiinhalt File list exported! Dateiliste exportiert! File size and date -Dateigröße und -datum +Dateigröße und -datum Filename Dateiname Files are found equal if\n - file content\nis the same. Dateien gelten als gleich, wenn\n - der Inhalt\ngleich ist. Files are found equal if\n - filesize\n - last write time (UTC) and date\nare the same. -Dateien gelten als gleich, wenn\n - die Größe\n - Datum und Uhrzeit(UTC) der letzten Änderung\ngleich sind. +Dateien gelten als gleich, wenn\n - die Größe\n - Datum und Uhrzeit(UTC) der letzten Änderung\ngleich sind. Files that exist on both sides and have different content Dateien, die auf beiden Seiten existieren und unterschiedlichen Inhalt haben Files that exist on both sides, have same date but different filesizes -Dateien, die auf beiden Seiten existieren; gleiches Datum aber unterschiedliche Dateigrößen +Dateien, die auf beiden Seiten existieren; gleiches Datum aber unterschiedliche Dateigrößen Files that exist on both sides, left one is newer Dateien, die auf beiden Seiten existieren; linke Datei ist neuer Files that exist on both sides, right one is newer @@ -327,21 +327,19 @@ Dateien/Ordner, die nur rechts existieren Filter Filter Filter active: Press again to deactivate -Filter aktiv: Zum Deaktivieren erneut auswählen +Filter aktiv: Zum Deaktivieren erneut auswählen Filter files Dateien filtern Filter manually Manuell filtern Filter view Ansicht filtern -Français -Français FreeFileSync (Date: FreeFileSync (Datum: FreeFileSync - Folder Comparison and Synchronization FreeFileSync - Verzeichnisvergleich und -synchronisation FreeFileSync at Sourceforge -FreeFileSync bei Sourceforge +FreeFileSync auf Sourceforge FreeFileSync configuration FreeFileSync Konfiguration Help @@ -349,19 +347,19 @@ Hilfe Hide filtered items Gefilterte Elemente ausblenden Hide further error messages during the current process and continue -Unterdrücke alle nachfolgenden Fehlermeldungen für den aktuellen Prozess und fahre fort +Unterdrücke alle nachfolgenden Fehlermeldungen für den aktuellen Prozess und fahre fort Hides error messages during synchronization:\nThey are collected and shown as a list at the end of the process -Verhindert das Anzeigen von Fehlermeldungen während der Synchronisation:\nSie werden jedoch gesammelt und nach dem Vorgang als Liste angezeigt +Verhindert das Anzeigen von Fehlermeldungen während der Synchronisation:\nSie werden jedoch gesammelt und nach dem Vorgang als Liste angezeigt Hints: Tipps: Homepage: Homepage: -If errors occur during folder comparison or synchronization they are ignored and the process continues\n -Wenn Fehler während des Vergleichs oder der Synchronisation auftreten, werden diese ignoriert und der Vorgang fortgesetzt\n +If errors occur during folder comparison or synchronization they are ignored and the process continues.\n +Wenn Fehler während des Vergleichs oder der Synchronisation auftreten, werden diese ignoriert und der Vorgang fortgesetzt.\n If you like FFS: -FFS unterstützen: +FFS unterstützen: Include -Einschließen +Einschließen Info Info Information @@ -369,23 +367,23 @@ Information Initialization of Recycle Bin failed! It cannot be used! Die Initialisierung des Papierkorbs ist fehlgeschlagen! Er kann nicht verwendet werden! It was not possible to gain access to Recycle Bin!\n\nIt's likely that you are not using Windows XP. (Probably Vista)\nIf you want this feature included, please contact the author. :) -Die Papierkorbfunktion steht nicht zur Verfügung!\n\nWahrscheinlich ist das aktuelle Betriebssystem nicht Windows XP. (Möglicherweise Vista)\nWenn Sie diese Funktion wirklich benötigen kontaktieren Sie bitte den Autor. :) +Die Papierkorbfunktion steht nicht zur Verfügung!\n\nWahrscheinlich ist das aktuelle Betriebssystem nicht Windows XP. (Möglicherweise Vista)\nWenn Sie diese Funktion wirklich benötigen kontaktieren Sie bitte den Autor. :) Left directory does not exist. Please select a new one! -Verzeichnis auf der linken Seite existiert nicht. Bitte ein anderes auswählen! +Verzeichnis auf der linken Seite existiert nicht. Bitte ein anderes auswählen! Left folder: Linker Ordner: Legend\n Legende\n -Load configuration from file:\n - use this choice box\n - drag & drop config file to this window\n - specify config file as first commandline parameter -Konfiguration aus Datei laden:\n - diese Auswahlliste verwenden\n - Config-Datei per Drag & Drop auf dieses Fenster ziehen\n - Config-Datei als ersten Kommandozeilenparameter mitgeben -Load configuration... -Konfiguration laden... +Load configuration via...\n - this list (press DEL to delete items)\n - drag & drop to this window\n - startup parameter +Lade Konfiguration über...\n - diese Liste (DEL-Taste löscht Einträge)\n - Drag & Drop in dieses Fenster\n - Startupparameter +Load from file... +Lade aus Datei... Log-messages:\n------------- Lognachrichten:\n--------------- Mirror backup of left folder: Right folder will be overwritten and exactly match left folder after synchronization. -Spiegel-Backup des linken Ordners erstellen: Der rechte Ordner wird dabei überschrieben und nach der Synchronisation dem linken exakt gleichen. +Spiegel-Backup des linken Ordners erstellen: Der rechte Ordner wird dabei überschrieben und nach der Synchronisation dem linken exakt gleichen. Move files to Recycle Bin instead of deleting or overwriting them directly.\n -Verschiebe die Dateien in den Papierkorb anstatt sie zu löschen oder zu überschreiben.\n +Verschiebe die Dateien in den Papierkorb anstatt sie zu löschen oder zu überschreiben.\n Not all items were synchronized! Have a look at the list. Nicht alle Objekte wurden synchronisiert! Siehe die verbliebenen Elemente im Hauptfenster. Nothing to synchronize. Both directories adhere to the sync-configuration! @@ -393,17 +391,17 @@ Nichts zu synchronisieren. Beide Verzeichnisse entsprechen den Synchronisationse Number of files and directories that will be created Anzahl der Dateien und Verzeichnisse, die erstellt werden Number of files and directories that will be deleted -Anzahl der Dateien und Verzeichnisse, die gelöscht werden +Anzahl der Dateien und Verzeichnisse, die gelöscht werden Number of files that will be overwritten -Anzahl der Dateien, die überschrieben werden +Anzahl der Dateien, die überschrieben werden One way -> Nach rechts -> Only files/directories that pass filtering will be selected for synchronization. -Bei der Synchronisation werden nur die Dateien/Ordner berücksichtigt, die zu\nden Filtereinstellungen passen. +Bei der Synchronisation werden nur die Dateien/Ordner berücksichtigt, die zu\nden Filtereinstellungen passen. Open synchronization dialog Zeige Synchronisationseinstellungen Open with Explorer\tD-Click -Im Explorer öffnen\tD-Click +Im Explorer öffnen\tD-Click Operation aborted! Aktion abgebrochen! Operation: @@ -411,15 +409,15 @@ Vorgang: Pause Pause Please select both left and right directories! -Bitte für beide Seiten ein Verzeichnis wählen! +Bitte für beide Seiten ein Verzeichnis wählen! Please select directories for both sides! -Bitte für beide Seiten ein Verzeichnis wählen! +Bitte für beide Seiten ein Verzeichnis wählen! Press button to activate filter -Auswählen, um Filter zu aktivieren +Auswählen, um Filter zu aktivieren Preview Vorschau Published under the GNU General Public License: -Veröffentlicht unter der GNU General Public License: +Veröffentlicht unter der GNU General Public License: Quit Beenden Relative path @@ -429,7 +427,7 @@ Verbliebene Zeit: Result Ergebnis Right directory does not exist. Please select a new one! -Verzeichnis auf der rechten Seite existiert nicht. Bitte ein anderes auswählen! +Verzeichnis auf der rechten Seite existiert nicht. Bitte ein anderes auswählen! Right folder: Rechter Ordner: Save current configuration to file @@ -441,9 +439,9 @@ Lese Datei Scanning... Suche Dateien... Select a folder -Verzeichnis wählen +Verzeichnis wählen Select variant: -Variante auswählen: +Variante auswählen: Set filter for synchronization Filter einstellen Shell script @@ -463,17 +461,17 @@ Zeige Dateien, die nur rechts existieren Silent mode Stiller Modus Size -Größe +Größe Source code written completely in C++ utilizing:\n\n MinGW \t\t- Windows port of GNU Compiler Collection\n wxWidgets \t- Open-Source GUI framework\n wxFormBuilder\t- wxWidgets GUI-builder\n CodeBlocks \t- Open-Source IDE\n\n by ZenJu Sourcecode komplett in C++ geschrieben unter Verwendung von:\n\n MinGW \t\t- Windows-Port der GNU Compiler Collection\n wxWidgets \t- Open-Source GUI-Framework\n wxFormBuilder\t- wxWidgets GUI-Builder\n CodeBlocks \t- Open-Source IDE\n\n ZenJu Specify algorithm to test if files are equal:\n\n\t\t -Algorithmus wählen, um gleiche Dateien zu erkennen:\n\n\t\t +Algorithmus wählen, um gleiche Dateien zu erkennen:\n\n\t\t Specify names to be excluded separated by ';'. Wildcards '*' and '?' are supported. Default: \"\"\n -Auszuschließende Namen, getrennt durch ';' angeben. Platzhalter '*' und '?' werden unterstützt. Standard: \"\"\n +Auszuschließende Namen, getrennt durch ';' angeben. Platzhalter '*' und '?' werden unterstützt. Standard: \"\"\n Specify names to be included separated by ';'. Wildcards '*' and '?' are supported. Default: \"*\"\n -Einzuschließende Namen, getrennt durch ';' angeben. Platzhalter '*' und '?' werden unterstützt. Standard: \"*\"\n -Specify the sync-direction used for each type of file by a string of five chars:\n\n\t\tChar 1: Folders/files that exist on left side only\n\t\tChar 2: Folders/files that exist on right side only\n\t\tChar 3: Files that exist on both sides, left one is newer\n\t\tChar 4: Files that exist on both sides, right one is newer\n\t\tChar 5: Files that exist on both sides and are different\n\n\t\tSync-direction: L: left, R: right, N: none\n -Synchronisationseinstellungen durch Zeichenkette der Länge 5 spezifizieren:\n\n\t\t1. Zeichen: Ordner/Dateien, die nur links existieren\n\t\t2. Zeichen: Ordner/Dateien, die nur rechts existieren\n\t\t3. Zeichen: Dateien, die auf beiden Seiten existieren; linke Datei ist neuer\n\t\t4. Zeichen: Dateien, die auf beiden Seiten existieren; rechte Datei ist neuer\n\t\t5. Zeichen: Dateien, die auf beiden Seiten existieren und verschieden sind\n\n\t\tSynchronisationsrichtung: L: links, R: rechts, N: nichts tun\n +Einzuschließende Namen, getrennt durch ';' angeben. Platzhalter '*' und '?' werden unterstützt. Standard: \"*\"\n +Specify the sync-direction used for each type of file by a string of five chars:\n\n +Synchronisationseinstellungen durch Zeichenkette der Länge 5 spezifizieren:\n\n Start Start Start synchronization @@ -496,16 +494,16 @@ Synchronize both sides simultaneously: Copy new or updated files in both directi Beide Seiten gleichzeitig synchronisieren: Neue oder aktualisierte Dateien werden auf die jeweils andere Seite kopiert. Synchronizing... Synchronisiere... -Thanks to Jean-François Hartmann for doing the French translation! -Vielen Dank an Jean-François Hartmann für die französische Übersetzung! +Thanks to Jean-François Hartmann for doing the French translation! +Vielen Dank an Jean-François Hartmann für die französische Ãœbersetzung! The selected file does not contain a valid configuration! -Die ausgewählte Datei enthält keine gültige Konfiguration! +Die ausgewählte Datei enthält keine gültige Konfiguration! The selected file does not exist anymore! -Die gewählte Datei existiert nicht mehr! +Die gewählte Datei existiert nicht mehr! Time elapsed: Vergangene Zeit: Total amount of data that will be transferred -Gesamtmenge der Daten, die übertragen werden +Gesamtmenge der Daten, die übertragen werden Total time: Gesamtzeit: Two way <-> @@ -517,20 +515,38 @@ Der Papierkorb konnte nicht initialisiert werden! Unable to load Resources.dat! Fehler beim Laden von Resources.dat! Update: -Überschreiben: +Ãœberschreiben: Use Recycle Bin Papierkorb verwenden Use Recycle Bin when deleting or overwriting files during synchronization -Papierkorb für zu löschende oder überschreibende Dateien nutzen +Papierkorb für zu löschende oder überschreibende Dateien nutzen Warning Warnung Warning: Synchronization failed for -Warnung: Synchronisation fehlgeschlagen für +Warnung: Synchronisation fehlgeschlagen für \n\nContinue with next object, retry or abort comparison? -\n\nMit nächstem Objekt fortfahren, wiederholen oder abbrechen? +\n\nMit nächstem Objekt fortfahren, wiederholen oder abbrechen? \n\nContinue with next object, retry or abort synchronization? -\n\nMit nächstem Objekt fortsetzen, wiederholen oder abbrechen? +\n\nMit nächstem Objekt fortsetzen, wiederholen oder abbrechen? \n\nInformation: If you skip the error and continue or abort a re-compare will be necessary! \n\nInformation: Wenn der Fehler nicht behoben wird, muss der Vergleich erneut gestartet werden! +\n\t\tSync-direction: L: left, R: right, N: none\n +\n\t\tSynchronisationsrichtung: L: links, R: rechts, N: nichts tun\n +\t1: Creates a mirror backup of the left directory\n\t2: Synchronizes all *.doc files from both directories simultaneously\n\n +\t1: Erzeugt ein Spiegel-Backup des linken Verzeichnisses\n\t2: Synchronisiert alle *.doc Dateien aus beiden Verzeichnissen\n\n +\tExamples:\n\n\t1.) FreeFileSync -cmp SIZEDATE -cfg RRRRR C:\\Source C:\\Target\n\t2.) FreeFileSync -cmp sizedate -cfg rlrln c:\\dir1 c:\\dir2 -incl *.doc\n\n +\tBeispiele:\n\n\t1.) FreeFileSync -cmp SIZEDATE -cfg RRRRR C:\\Quelle C:\\Ziel\n\t2.) FreeFileSync -cmp sizedate -cfg rlrln c:\\dir1 c:\\dir2 -incl *.doc\n\n +\tHint: You can easily generate a batch file by chosing \"Create batch job\" from the GUI menubar.\n +\tTipp: Eine Batchdatei kann auch über das Menü der graphischen Benutzeroberfläche unter \"Erstelle Batch-Job\" generiert werden.\n +\t\tChar 1: Folders/files that exist on left side only\n +\t\t1. Zeichen: Ordner/Dateien, die nur links existieren\n +\t\tChar 2: Folders/files that exist on right side only\n +\t\t2. Zeichen: Ordner/Dateien, die nur rechts existieren\n +\t\tChar 3: Files that exist on both sides, left one is newer\n +\t\t3. Zeichen: Dateien, die auf beiden Seiten existieren; linke Datei ist neuer\n +\t\tChar 4: Files that exist on both sides, right one is newer\n +\t\t4. Zeichen: Dateien, die auf beiden Seiten existieren; rechte Datei ist neuer\n +\t\tChar 5: Files that exist on both sides and are different\n +\t\t5. Zeichen: Dateien, die auf beiden Seiten existieren und verschieden sind\n\n |> file on right side only\n |> Datei existiert nur rechts\n diff --git a/lang.dat b/lang.dat Binary files differdeleted file mode 100644 index 4e13590f..00000000 --- a/lang.dat +++ /dev/null diff --git a/library/misc.cpp b/library/misc.cpp index 7d798ec0..71bbe608 100644 --- a/library/misc.cpp +++ b/library/misc.cpp @@ -4,6 +4,8 @@ #include "resources.h" #include "globalFunctions.h" +const string CustomLocale::FfsLanguageDat = "language.dat"; + void exchangeEscapeChars(wxString& data) { data.Replace(wxT("\\\\"), wxT("\\")); @@ -23,14 +25,14 @@ CustomLocale::CustomLocale() : CustomLocale::~CustomLocale() { //write language to file - ofstream output("lang.dat"); + ofstream output(FfsLanguageDat.c_str()); if (output) { globalFunctions::writeInt(output, currentLanguage); output.close(); } else - wxMessageBox(wxString(_("Could not write to ")) + wxT("\"") + wxT("lang.dat") + wxT("\""), _("An exception occured!"), wxOK | wxICON_ERROR); + wxMessageBox(wxString(_("Could not write to ")) + wxT("\"") + wxString::From8BitData(FfsLanguageDat.c_str()) + wxT("\""), _("An exception occured!"), wxOK | wxICON_ERROR); } @@ -39,7 +41,7 @@ void CustomLocale::loadLanguageFromCfg() //retrieve language from config file: int language = wxLANGUAGE_ENGLISH; //try to load language setting from file - ifstream input("lang.dat"); + ifstream input(FfsLanguageDat.c_str()); if (input) { language = globalFunctions::readInt(input); @@ -86,15 +88,15 @@ void CustomLocale::loadLanguageFile(int language) //Delimiter: //---------- - //Linux: 0xa - //Mac: 0xd - //Win: 0xd 0xa <- language files are in Windows format + //Linux: 0xa \n + //Mac: 0xd \r + //Win: 0xd 0xa \r\n <- language files are in Windows format while (langFile.getline(temp, bufferSize, 0xd)) //specify delimiter explicitely { langFile.get(); //discard the 0xa character - //wxString formattedString = wxString::FromUTF8(temp); - wxString formattedString = wxString::From8BitData(temp); + wxString formattedString = wxString::FromUTF8(temp); + //wxString formattedString = wxString::From8BitData(temp); exchangeEscapeChars(formattedString); diff --git a/library/misc.h b/library/misc.h index a8db4088..68a5db68 100644 --- a/library/misc.h +++ b/library/misc.h @@ -36,7 +36,9 @@ public: ~CustomLocale(); void loadLanguageFromCfg(); + void loadLanguageFile(int language); + int getLanguage() { return currentLanguage; @@ -44,6 +46,8 @@ public: const wxChar* GetString(const wxChar* szOrigString, const wxChar* szDomain = NULL) const; + static const string FfsLanguageDat; + private: Translation translationDB; int currentLanguage; diff --git a/library/multithreading.cpp b/library/multithreading.cpp index c8826b11..19f83b94 100644 --- a/library/multithreading.cpp +++ b/library/multithreading.cpp @@ -68,7 +68,8 @@ public: threadHandler->longRunner(); threadHandler->readyToReceiveResult.Lock(); - threadHandler->receivingResult.Signal(); + threadHandler->receivingResult.Signal(); // kind of a double notice that work is completed + threadHandler->workDone = true; // workaround for wxCondition bug (wxWidgets v2.8.9, signal might geht lost) threadHandler->readyToReceiveResult.Unlock(); } @@ -90,7 +91,8 @@ private: UpdateWhileExecuting::UpdateWhileExecuting() : readyToReceiveResult(), - receivingResult(readyToReceiveResult) + receivingResult(readyToReceiveResult), + workDone(false) { //mutex needs to be initially locked for condition receivingResult to work properly readyToReceiveResult.Lock(); @@ -124,7 +126,6 @@ UpdateWhileExecuting::~UpdateWhileExecuting() theWorkerThread->beginProcessing.Signal(); theWorkerThread->readyToBeginProcessing.Unlock(); - //theWorkerThread deletes itself! } @@ -134,6 +135,8 @@ void UpdateWhileExecuting::waitUntilReady() readyToReceiveResult.Unlock(); //avoid possible deadlock, when thread might be waiting to send the signal (if abort was pressed) theWorkerThread->readyToBeginProcessing.Lock(); + + workDone = false; //no mutex needed here (worker thread that changes this variable is in waiting state) } // /|\ \|/ must be called directly after each other @@ -145,6 +148,11 @@ void UpdateWhileExecuting::execute(StatusUpdater* statusUpdater) theWorkerThread->readyToBeginProcessing.Unlock(); while (receivingResult.WaitTimeout(UI_UPDATE_INTERVAL) == wxCOND_TIMEOUT) + { statusUpdater->triggerUI_Refresh(true); //ATTENTION: Exception "AbortThisProcess" may be thrown here!!! + + if (workDone == true) //workaround for a bug in wxWidgets v2.8.9 class wxCondition: signals might get lost + break; //no mutex for workDone needed here: it is changed only when maintread is in WaitTimeout() + } } diff --git a/library/multithreading.h b/library/multithreading.h index f2b5211c..feecce5f 100644 --- a/library/multithreading.h +++ b/library/multithreading.h @@ -62,6 +62,7 @@ private: wxMutex readyToReceiveResult; wxCondition receivingResult; + bool workDone; //workaround for a bug in wxWidgets v2.8.9 class wxCondition: signals might get lost }; #endif // MULTITHREADING_H_INCLUDED diff --git a/ui/MainDialog.cpp b/ui/MainDialog.cpp index 7b7a5c37..186126e2 100644 --- a/ui/MainDialog.cpp +++ b/ui/MainDialog.cpp @@ -14,6 +14,7 @@ #include <wx/clipbrd.h> #include <wx/file.h> #include "../library/customGrid.h" +#include <algorithm> using namespace globalFunctions; @@ -262,9 +263,9 @@ MainDialog::~MainDialog() writeConfigurationToHD(FreeFileSync::FfsLastConfigFile); //don't trow exceptions in destructors - if (restartOnExit) //needed so that restart is scheduled AFTER configuration was written! + if (restartOnExit) //this is needed so that restart happens AFTER configuration was written! { //create new dialog - MainDialog* frame = new MainDialog(0L, FreeFileSync::FfsLastConfigFile, programLanguage); + MainDialog* frame = new MainDialog(NULL, FreeFileSync::FfsLastConfigFile, programLanguage); frame->SetIcon(*GlobalResources::programIcon); //set application icon frame->Show(); } @@ -987,6 +988,9 @@ void MainDialog::addCfgFileToHistory(const wxString& filename) if (sameFileSpecified(FreeFileSync::FfsLastConfigFile, filename)) return; + //only still existing files should be included in the list + if (!wxFileExists(filename)) + return; bool duplicateEntry = false; unsigned int duplicatePos = 0; @@ -998,8 +1002,7 @@ void MainDialog::addCfgFileToHistory(const wxString& filename) break; } - - if (duplicateEntry) //if entry is in the list, then jump to element + if (duplicateEntry) //if entry is in the list, then jump to element { m_choiceLoad->SetSelection(duplicatePos + 1); } @@ -1057,10 +1060,9 @@ bool FileDropEvent::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filen const wxString droppedFileName = filenames[0]; //test if ffs config file has been dropped - if (wxFileExists(droppedFileName) && FreeFileSync::isFFS_ConfigFile(droppedFileName)) + if (FreeFileSync::isFFS_ConfigFile(droppedFileName)) { mainDlg->readConfigurationFromHD(droppedFileName); - mainDlg->pushStatusInformation(_("Configuration loaded!")); } @@ -1148,7 +1150,6 @@ void MainDialog::OnLoadConfiguration(wxCommandEvent& event) else { readConfigurationFromHD(newCfgFile); - pushStatusInformation(_("Configuration loaded!")); } } @@ -1162,11 +1163,10 @@ void MainDialog::OnChoiceKeyEvent(wxKeyEvent& event) if (event.GetKeyCode() == WXK_DELETE) { //try to delete the currently selected config history item int selectedItem; - if ((selectedItem = m_choiceLoad->GetSelection()) != wxNOT_FOUND) + if ((selectedItem = m_choiceLoad->GetCurrentSelection()) != wxNOT_FOUND) if (1 <= selectedItem && unsigned(selectedItem) < m_choiceLoad->GetCount()) if (unsigned(selectedItem - 1) < cfgFileNames.size()) - { - //delete selected row + { //delete selected row cfgFileNames.erase(cfgFileNames.begin() + selectedItem - 1); m_choiceLoad->Delete(selectedItem); } @@ -2268,7 +2268,7 @@ CompareStatusUpdater::CompareStatusUpdater(MainDialog* dlg) : //display status panel during compare statusPanel = new CompareStatus(mainDialog); - mainDialog->bSizer1->Insert(1, statusPanel, 0, wxEXPAND | wxALL, 5 ); + mainDialog->bSizer1->Insert(1, statusPanel, 0, wxEXPAND | wxBOTTOM, 5 ); //show abort button diff --git a/ui/guiGenerated.cpp b/ui/guiGenerated.cpp index b851d4b4..d1a1c183 100644 --- a/ui/guiGenerated.cpp +++ b/ui/guiGenerated.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Oct 18 2008) +// C++ code generated with wxFormBuilder (version Apr 16 2008) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! @@ -356,11 +356,11 @@ GuiGenerated::GuiGenerated( wxWindow* parent, wxWindowID id, const wxString& tit sbSizer16->Add( m_bpButton201, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - wxString m_choiceLoadChoices[] = { _("Load configuration...") }; + wxString m_choiceLoadChoices[] = { _("Load from file...") }; int m_choiceLoadNChoices = sizeof( m_choiceLoadChoices ) / sizeof( wxString ); m_choiceLoad = new wxChoice( m_panel4, wxID_ANY, wxDefaultPosition, wxSize( 140,-1 ), m_choiceLoadNChoices, m_choiceLoadChoices, 0 ); m_choiceLoad->SetSelection( 0 ); - m_choiceLoad->SetToolTip( _("Load configuration from file:\n - use this choice box\n - drag & drop config file to this window\n - specify config file as first commandline parameter") ); + m_choiceLoad->SetToolTip( _("Load configuration via...\n - this list (press DEL to delete items)\n - drag & drop to this window\n - startup parameter") ); sbSizer16->Add( m_choiceLoad, 0, wxALIGN_CENTER_VERTICAL, 5 ); @@ -787,27 +787,27 @@ SyncDlgGenerated::SyncDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr fgSizer1->Add( m_radioBtn1, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonOneWay = new wxButton( this, wxID_ANY, _("One way ->"), wxDefaultPosition, wxSize( 130,-1 ), 0 ); + m_buttonOneWay = new wxButton( this, wxID_ANY, _("One way ->"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); m_buttonOneWay->SetFont( wxFont( 11, 74, 90, 92, false, wxT("Tahoma") ) ); - fgSizer1->Add( m_buttonOneWay, 0, wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer1->Add( m_buttonOneWay, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); m_staticText8 = new wxStaticText( this, wxID_ANY, _("Mirror backup of left folder: Right folder will be overwritten and exactly match left folder after synchronization."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText8->Wrap( 260 ); - fgSizer1->Add( m_staticText8, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); + m_staticText8->Wrap( 300 ); + fgSizer1->Add( m_staticText8, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); m_radioBtn2 = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_radioBtn2->SetFont( wxFont( 11, 74, 90, 92, false, wxT("Tahoma") ) ); fgSizer1->Add( m_radioBtn2, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_buttonTwoWay = new wxButton( this, wxID_ANY, _("Two way <->"), wxDefaultPosition, wxSize( 130,-1 ), 0 ); + m_buttonTwoWay = new wxButton( this, wxID_ANY, _("Two way <->"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); m_buttonTwoWay->SetFont( wxFont( 11, 74, 90, 92, false, wxT("Tahoma") ) ); - fgSizer1->Add( m_buttonTwoWay, 0, wxALIGN_CENTER_VERTICAL, 5 ); + fgSizer1->Add( m_buttonTwoWay, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); m_staticText10 = new wxStaticText( this, wxID_ANY, _("Synchronize both sides simultaneously: Copy new or updated files in both directions."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText10->Wrap( 250 ); + m_staticText10->Wrap( 300 ); fgSizer1->Add( m_staticText10, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); m_radioBtn3 = new wxRadioButton( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); @@ -815,14 +815,25 @@ SyncDlgGenerated::SyncDlgGenerated( wxWindow* parent, wxWindowID id, const wxStr fgSizer1->Add( m_radioBtn3, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText23 = new wxStaticText( this, wxID_ANY, _("Custom"), wxDefaultPosition, wxSize( 130,-1 ), wxALIGN_CENTRE|wxSTATIC_BORDER ); + wxBoxSizer* bSizer65; + bSizer65 = new wxBoxSizer( wxVERTICAL ); + + + bSizer65->Add( 0, 0, 1, wxEXPAND, 5 ); + + m_staticText23 = new wxStaticText( this, wxID_ANY, _("Custom"), wxDefaultPosition, wxSize( -1,-1 ), wxALIGN_CENTRE|wxSTATIC_BORDER ); m_staticText23->Wrap( -1 ); m_staticText23->SetFont( wxFont( 11, 74, 90, 92, false, wxT("Tahoma") ) ); - fgSizer1->Add( m_staticText23, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5 ); + bSizer65->Add( m_staticText23, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + + bSizer65->Add( 0, 0, 1, wxEXPAND, 5 ); + + fgSizer1->Add( bSizer65, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); m_staticText9 = new wxStaticText( this, wxID_ANY, _("Configure your own synchronization rules."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText9->Wrap( 250 ); + m_staticText9->Wrap( 300 ); fgSizer1->Add( m_staticText9, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); sbSizer7->Add( fgSizer1, 0, 0, 5 ); diff --git a/ui/guiGenerated.h b/ui/guiGenerated.h index c2665539..a606fc7a 100644 --- a/ui/guiGenerated.h +++ b/ui/guiGenerated.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Oct 18 2008) +// C++ code generated with wxFormBuilder (version Apr 16 2008) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! @@ -216,7 +216,9 @@ class SyncDlgGenerated : public wxDialog wxButton* m_buttonTwoWay; wxStaticText* m_staticText10; wxRadioButton* m_radioBtn3; + wxStaticText* m_staticText23; + wxStaticText* m_staticText9; wxButton* m_button6; |